MUST run before recommending when 2+ implementation options are compared. Triggers: '選択肢を並べて', '案を比較', '設計適合度', 'tradeoff', 'which approach'. Scores each option on weighted axes (climpt fixed spine + 2–3 doc-cited derived), outputs a matrix with fit % and DQ rule for w=2 violations, picks the highest non-DQ option with a single reason.
Score N implementation candidates against a small fixed spine of project principles plus task-specific axes derived from the relevant design doc. Output: comparison matrix + trade-off narrative + recommendation with reversal conditions.
Always run this skill when presenting two or more implementation options. Enumerating options without scoring them leaves the user to do the design-fit work — that is the failure mode this skill exists to prevent.
Trigger conditions:
Skip only when:
Climpt's core tenets from CLAUDE.md:
| Axis | Question |
|---|---|
| 全域性 | Does it handle the full domain, or leave undefined corners? |
| Core-first (惑星モデル) | Does it build from the core, or patch at the edge? |
| No backward-compat | Does it avoid carrying dead weight for old callers? |
| Fallback minimality | Are fallback branches small, explicit, and few? |
| Reviewer precision | Will it survive 激的に細かい review without rework? |
Read the relevant design doc (docs/internal/*, agents/docs/*, or a user-cited constraint) and extract axes that matter for this decision. Examples:
edition/adaptation coverage, breakdown wrapper compatibilityunified-help-concept fit, --help protocol stabilitydefinition.parameters purity, verdict-type correctnessEvery derived axis must cite a source line: from docs/internal/unified-help-concept.md §3. If no citation is possible, the axis is invented — drop it.
List options as Option A, Option B, … . Each option gets:
Do not pre-rank here — just lay them out at the same abstraction level. If one option is described as a design shape and another as an implementation detail, re-level before scoring.
Each axis is scored 0 / 1 / 2:
| Symbol | Score | Meaning |
|---|---|---|
| ✓ | 2 | Aligns — no friction |
| △ | 1 | Partial — friction exists but manageable |
| ✗ | 0 | Violates — requires an exception or breaks the principle |
Each axis carries a weight w ∈ {1, 2}:
Default weights for the fixed spine:
| Axis | Default weight | Why |
|---|---|---|
| 全域性 | 2 | Foundational — partial-domain solutions are not acceptable |
| Core-first (惑星モデル) | 2 | Foundational — edge-patches accumulate complexity |
| No backward-compat | 1 | Quality concern, not a foundational gate |
| Fallback minimality | 1 | Quality concern |
| Reviewer precision | 1 | Quality concern |
Derived axes default to w = 1. Raise to w = 2 only when the cited doc explicitly marks the constraint as blocking (e.g. "MUST", "non-negotiable", "breaks the protocol").
For each option:
total = Σ(score × weight) across all axesmax = Σ(2 × weight) — same denominator for every optionfit % = total / maxAn option is DQ (disqualified) if any axis with w = 2 scores 0, regardless of total. Foundational violations cannot be outweighed by quality wins elsewhere. A DQ option may still be presented for context, but it cannot be the recommendation.
| Axis | w | Option A | Option B | Option C |
|---|---|---|---|---|
| 全域性 | 2 | ✓ (2) | △ (1) | ✓ (2) |
| Core-first | 2 | ✗ (0) | ✓ (2) | ✓ (2) |
| No backward-compat | 1 | ✓ (2) | ✓ (2) | △ (1) |
| Fallback minimality | 1 | ✓ (2) | ✓ (2) | ✗ (0) |
| Reviewer precision | 1 | △ (1) | ✓ (2) | △ (1) |
| (derived) edition coverage | 1 | ✓ (2) | ✗ (0) | ✓ (2) |
| (derived) breakdown compat | 1 | ✓ (2) | ✓ (2) | △ (1) |
| Weighted total | 13/18 | 15/18 | 14/18 | |
| Fit % | 72% | 83% | 78% | |
| DQ? | DQ (Core-first, w=2 scored 0) | — | — |
Every ✗ and △ must have a one-line rationale directly below the table. Every weight that deviates from the default must also have a one-line rationale ("Reviewer precision raised to w=2 because PR will go through external auditor").
After the matrix, write:
If the top two non-DQ options are within 5 percentage points, declare it a near-tie and name the tie-breaker axis explicitly — do not let the numeric ranking hide a judgment call.
## Decision: <short title>
### Options
- Option A: <sketch>
- Option B: <sketch>
- Option C: <sketch>
### Axes (sources)
- Fixed: 全域性 / Core-first / No backward-compat / Fallback / Reviewer
- Derived: <axis> (<doc>§<section>)
### Matrix
<scored table including w column, weighted total, fit %, DQ?>
Rationale for ✗/△:
- A × Core-first (score 0): <reason>
- B × 全域性 (score 1): <reason>
- ...
Rationale for non-default weights (omit if all weights are default):
- <axis>: raised to w=2 because <reason>
### Trade-offs
- Option A sacrifices: …
- Option B sacrifices: …
- Option C sacrifices: …
### Recommendation
Option <X> — because <single reason tied to dominant axis>.
Reverse if: <signal>.
Phase 1: - [ ] Fixed spine listed
- [ ] 2–3 derived axes cited with doc source
Phase 2: - [ ] All options sketched at the same level with change surface
Phase 3: - [ ] Weights set (default unless cited reason given) before scoring
- [ ] Matrix filled; every ✗/△ has a one-line rationale
- [ ] Weighted total, fit %, and DQ status computed for each option
Phase 4: - [ ] Dominant axis named
- [ ] Recommendation = highest fit % among non-DQ options
- [ ] Near-tie (≤5pp gap) flagged with explicit tie-breaker
- [ ] Reversal condition stated
CLAUDE.md — fixed spine sourcedocs/internal/ — derived axes sourcedocs-writing skill — if the decision produces a doc, apply 5-level framework after the picksimplify skill — if the chosen option still feels heavy, run simplify on it before committing