Diamond Progress Skill
Progress a diamond through phases with full theory gate validation. At delivery completion, runs an executable checklist that GATES progression.
Preflight: Read target canvas file(s) before any Write/Edit
Hard rule. Before issuing Write or Edit against any .claude/canvas/*.yml, use the Read tool on that file in this session. Claude Code's Read-before-Write check requires the Read tool specifically — cat/head/grep via Bash do NOT satisfy it.
Edit vs Write — different cost profiles (verified 2026-05-14):
Edit(exact-string replacement):Readwithlimit: 1satisfies the check at ~50 tokens. State-tracking is per-file, not per-byte — subsequentEditcalls work anywhere in the file. Use this for partial updates against large canvas files (e.g.,purpose.ymlat 800+ lines).Write(full replacement): do a full Read first. Write obliterates the file; you should see what you're about to replace. Thelimit:1shortcut is not appropriate here.
ID-bearing entries — scan the ID space before assigning (added 2026-05-15, v0.23.19): When adding a new component, opportunity, solution, or any other ID-bearing entry to a canvas file, run a Bash grep first to confirm the next ID in your prefix sequence is actually free:
grep "^ - id: <prefix>-" .claude/canvas/<file>.yml | sort -u
Replace <prefix> with the canvas's ID prefix (comp for landscape, opp for opportunities, sol for solutions, ht for human-tasks, etc.). Then pick the next free integer. validate_canvas.py has a duplicate-ID check (lines 230-239) that catches the failure on CI, but a duplicate can persist in the working tree for days if CI isn't run between edit and discovery — see roadmap-repo corrections.md 2026-05-15 "Duplicate canvas ID created in landscape.yml" for the worked example.
Original failure mode: anti-pattern #7 instance #5, 2026-05-09 — agent conflated Bash head with the Read tool, lost ~14k tokens to a Write-fail → remedial-full-Read → re-Write loop. The limit:1 discipline (graduated 2026-05-14, v0.23.18) prevents the second-order cost where the agent correctly follows the rule but full-Reads every time. The ID-scan discipline (graduated 2026-05-15, v0.23.19) prevents the related class where the agent reads enough of the file to satisfy the Edit check but not enough to see existing ID assignments — kin to anti-pattern #8 (Stale State Read).
If this skill writes to multiple canvas files, register each one first (limit:1 for Edit-only paths; full Read for Write paths) AND ID-scan any prefix you intend to assign.
See CLAUDE.md Canvas writes — Read before Write for the canonical rule.
Workflow
- Identify transition: From [current phase] to [next phase] at [scale].
1b. Cognitive Forcing (before gate evaluation):
Before running gates, ask the human for their unprimed judgment:
"Before I check the gates — do you think we're ready to move from [current] to [next]? What's your gut say?"
Wait for the response. Record it. Then run the gates. After presenting results, compare:
"You said [X]. The gates say [Y]. Where do we differ?"
The human's instinct often catches risks the gates miss. If the human says "not ready" but gates pass, investigate — the human may be sensing something the evidence hasn't captured yet.
Source: Buçinca, Malaya & Gajos (Cognitive Forcing Functions, Harvard CHI/CSCW 2021). Applied after Hoskins transcript analysis — Drew's product judgment consistently outperformed the agent's gate-based assessment.
-
Run all required theory gates (per ${CLAUDE_PLUGIN_ROOT}/engine/theory-gates.md transition matrix):
- For each gate:
a. State the gate name and source theory.
b. Surface the suggested skill: "Run
/skill-nameto satisfy this gate." c. Evaluate pass criteria against available evidence. d. Record Pass / Fail / Insufficient Evidence. e. If Fail: document what is missing, recommend the skill to run, and do NOT proceed.
CRITICAL — Perspective conflict check (do this BEFORE evaluating any other gate): Before checking any gate status, read
.claude/canvas/opportunities.ymland inspect the Four Risks risk LEVELS for the active solution. Do NOT rely ontheory_gates_status.four_risksin active.yml — that only records whether risks are documented, not whether they conflict. You must read the actualvalue.level,usability.level,feasibility.level,viability.levelvalues.If TWO OR MORE risk dimensions are rated HIGH, or if perspectives directly contradict each other (e.g., value says "build it" but usability/feasibility say "don't"), this is a perspective conflict — not a simple gate failure. STOP evaluating other gates and jump to step 2b immediately. This takes priority over all other gate checks.
- For each gate:
a. State the gate name and source theory.
b. Surface the suggested skill: "Run
2b. Resolve perspective conflict (if detected in step 2): Do NOT continue to steps 3-6. A perspective conflict must be resolved before any other gate evaluation matters. Follow this procedure:
- Name the conflict explicitly in the decision log: "Perspective conflict: [type]" — use the vocabulary from
${CLAUDE_PLUGIN_ROOT}/engine/perspective-resolution.md(value-vs-feasibility, usability-vs-feasibility, value-vs-viability, usability-vs-viability, three-way). - Classify the conflict type per the resolution framework.
- State each perspective's position:
- Product perspective: what does the value evidence say?
- Design perspective: what does the usability evidence say?
- Engineering perspective: what does the feasibility evidence say?
- Apply the resolution methods in order of preference:
- Constraint-based: Can all three perspectives be satisfied within acceptable thresholds?
- Phased: Can we deliver in stages? (Phase 1 = MVP addressing highest risk, Phase 2 = polish)
- Evidence-based: Can we test the disputed dimension? (Run
/mycelium:assumption-teston the riskiest assumption) - Scope reduction: Can we remove features until all perspectives align?
- Log the resolution in .claude/harness/decision-log.md with: the conflict type, each perspective's position, the resolution method chosen, and why.
- Block progression: Report "Progression blocked: perspective conflict ([type]). Recommended resolution: [method]."
- Do NOT proceed to step 3 or beyond. The conflict must be resolved first.
The perspective resolution framework (${CLAUDE_PLUGIN_ROOT}/engine/perspective-resolution.md) is the authoritative reference. The anti-pattern to avoid is Perspective Suppression — resolving a conflict by ignoring one perspective.
2c. Build-to-learn awareness NUDGE (Define → Develop transitions only): At the point of entering Develop, surface this prompt to the human:
"Are you building to learn or building to earn right now? Discovery work (prototypes, spikes, experiments) can use lighter gates. Delivery work (shipping to users) must meet full DoD." This is awareness only — it does not change gate requirements or routing. The human's answer is informational context, not a gate input. Source: Cagan (SVPG), Patton (build to learn vs build to earn). Added as NUDGE per risk analysis — conceptual awareness, not process gate.
- Calculate confidence:
- Apply scoring rules from
${CLAUDE_PLUGIN_ROOT}/engine/confidence-thresholds.yml. - Look up
project_typeanddogfoodfrom.claude/diamonds/active.yml. - Apply
project_type_adaptationsfrom ${CLAUDE_PLUGIN_ROOT}/engine/confidence-thresholds.yml:effective_threshold = base_threshold * threshold_multiplier- If
dogfood: true:effective_threshold *= dogfood_modifier.additional_threshold_multiplier effective_min_sources = ceil(base_min_sources * min_sources_multiplier)
- Compare confidence to the effective threshold (not the base).
- Report both: "Confiden
- Apply scoring rules from