원클릭으로
retrospective
Structured retrospective after completing a delivery increment or diamond. Captures learning for continuous improvement.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Structured retrospective after completing a delivery increment or diamond. Captures learning for continuous improvement.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use to evaluate the current state of a diamond. Checks theory gates, confidence levels, and recommends next action.
Use when building anything USER-FACING (or with persuasion/retention/cancellation/consent/pricing flows, or that touches vulnerable people) to surface design-level harm the security/privacy/compliance gates miss: dark/deceptive patterns and foreseeable misuse. Assumes the product works as designed and asks who it could harm and whether it is Happier-negative. NUDGE, not a block.
Lint canvas files for staleness, missing fields, inconsistent evidence types, and orphaned references. Run periodically or before major transitions.
Accessibility audit against WCAG 2.1 AA. Checks semantic HTML, ARIA, keyboard navigation, color contrast, screen reader compatibility.
Design the smallest viable test to validate or invalidate a critical assumption. Based on Torres's assumption testing framework, organized by Gilad's AFTER model (Assessment → Fact-Finding → Tests → Experiments → Release Results).
Use before any research activity or significant decision. Reviews cognitive biases relevant to the current stage.
| name | retrospective |
| description | Structured retrospective after completing a delivery increment or diamond. Captures learning for continuous improvement. |
| metadata | {"instruction_budget":"58","framework_dependency":"mycelium","framework_dependency_note":"This skill is designed to run within the Mycelium framework (https://github.com/haabe/mycelium). Standalone use will skip the canvas state, theory gates, and harness behavior the skill assumes. Install: /plugin install mycelium@haabe-mycelium."} |
Run after every completed delivery diamond or significant milestone. Source: Forsgren (learning culture).
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): Read with limit: 1 satisfies the check at ~50 tokens. State-tracking is per-file, not per-byte — subsequent Edit calls work anywhere in the file. Use this for partial updates against large canvas files (e.g., purpose.yml at 800+ lines).Write (full replacement): do a full Read first. Write obliterates the file; you should see what you're about to replace. The limit:1 shortcut 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.
Run these steps IN ORDER. Do not skip any step. Step 1 (cycle recording) MUST be completed FIRST — before any reflective analysis.
.claude/canvas/cycle-history.yml AND Decision Log (MANDATORY — DO THIS FIRST)This step is critical. Without it, the learning metabolism has no data. You MUST do BOTH parts (5a and 5b).
.claude/canvas/cycle-history.ymlFind the leaf_id and opportunity_id for the delivered solution (from .claude/canvas/opportunities.yml or .claude/canvas/gist.yml). Then write a cycle record:
- cycle_id: cycle-NNN
leaf_id: "opp-XXX-sol-X" # From opportunities.yml
opportunity_id: "opp-XXX" # Parent opportunity
diamond_id: "d-XXX" # From .claude/diamonds/active.yml
completed_at: "YYYY-MM-DDTHH:MM:SSZ"
outcome: shipped | partial | failed | discarded
cycle_class: product-leaf | meta-dogfood | observation # REQUIRED — see engine/cycle-learning.md#cycle-class
predicted:
ice_score: {i: X, c: X, e: X, total: XXX} # REQUIRED non-zero when cycle_class=product-leaf; permitted zero for meta-dogfood/observation (state why in notes)
feasibility_risk: low | medium | high # From four_risks
effort_estimate: "X days/weeks" # Original estimate
actual:
effort: "X days/weeks" # How long it actually took
dora: # From /mycelium:dora-check or known metrics
deploy_frequency: "..."
lead_time: "..."
change_failure_rate: "..."
mttr: "..."
calibration:
ice_accuracy: "predicted XXX vs actual [outcome description]"
effort_accuracy: "predicted X days vs actual X days (delta: +/-X)"
risk_accuracy: "feasibility was [predicted] — actual was [description]"
gates_fired: # which theory gates fired; result pass|fail (fail = caught a real gap)
- {gate: "<gate name>", result: pass, caught: ""}
regressions: # in-cycle phase regressions (NOT post-delivery rework)
in_cycle_count: 0
from_phase: null
to_phase: null
trigger: ""
learnings: "Key learning from this cycle"
Populate gates_fired and regressions from the analysis you already do below (Step "Where did the theory gates catch a real problem?" → gates_fired; "How many regressions occurred?" → split: mid-cycle phase regressions go to regressions.in_cycle_count/from_phase/to_phase/trigger, post-launch defects stay in rework.post_delivery_regressions). If no gate fired and no regression occurred, write the empty/zero forms explicitly — absence recorded is a measurement; a missing field is not (anti-pattern #9, Fail-Open on Absent Input).
Update calibration_summary.total_cycles count. If total_cycles reaches a multiple of 5, prompt: "5 cycles since last review. Run /mycelium:framework-health to check calibration?"
Hard gate on cycle_class: product-leaf: if the cycle being closed shipped an OST solution leaf, predicted.ice_score.total must be non-zero. If it is zero, do NOT write the record yet — stop and ask: "This cycle shipped a product leaf but has no recorded ICE prediction. Was /mycelium:ice-score run before the cycle opened? If yes, copy the score from opportunities.yml. If no, this is a Check 38 violation — class the cycle as meta-dogfood if no design tradeoff was actually scored, or backfill the ICE score with an honest reconstruction noted as reconstructed_post_hoc: true." Reconstructed scores are excluded from calibration aggregates but preserved for the audit trail.
Write a decision log entry titled "Cycle calibration record" that includes ALL of the following (use these exact words):
This decision log entry ensures the calibration data is auditable alongside other decisions, not just buried in cycle-history.yml.
docs/adr/ exists): did implementation follow the decided approach? Any consequences that turned out differently than expected? Mark superseded ADRs.If this retrospective is for a cycle completed more than 14 days ago, check:
rework.post_delivery_correctionsrework.post_delivery_regressionsrework.days_to_first_regressionUpdate the cycle record in .claude/canvas/cycle-history.yml with the rework fields. This is the denominator — the hidden cost of delivery that velocity metrics miss.
If this retrospective is for a just-completed cycle, prompt: "Set a reminder to check rework in 14 days. Run /mycelium:retrospective rework-check [cycle-id] after that."
Source: Paddo (the denominator problem — 43% of AI-assisted code requires post-delivery debugging). Forsgren (change failure rate as a trailing indicator).
Use these two complementary techniques. Fishbone gives breadth (all possible causes). 5 Whys gives depth (one cause traced to its root).
Map all potential causes before investigating any. Structure:
┌─ People (skills, handoffs, communication)
├─ Process (gates, cadence, workflow)
Problem ◄───────────────├─ Product (canvas, evidence, assumptions)
(effect) ├─ Platform (tools, infra, dependencies)
├─ Principles (which theory/guardrail failed?)
└─ Pressures (deadlines, scope, external)
Ishikawa's original 6M manufacturing categories: Man (Manpower), Machine, Method, Material, Measurement, Mother Nature (Environment). Adapted for product development as: Man→People, Machine→Platform, Method→Process, Material→Product (inputs to the work), Measurement→Principles (what we measure against), Mother Nature→Pressures (external forces).
For the top-ranked cause from the fishbone, ask "why?" five times:
Stop rule: Stop when ANY of these conditions are met:
Anti-pattern: Stopping at "human error" — that's never the root cause. Ask why the system allowed the error.
Source: Ishikawa (cause-and-effect diagrams), Toyoda/Ohno (5 Whys), adapted for agentic product development.
"Eliminating waste is the foundation of lean." (Ohno)
Before root cause analysis, identify which waste category the problem falls into:
| Waste | Product Development Form | Detection |
|---|---|---|
| Transportation | Handoffs between people/teams, between discovery and delivery | Count handoffs in the value stream |
| Inventory | WIP, unshipped code, unfinished features, unmerged branches, open PRs | Check WIP limits, branch age |
| Motion | Context switching between tasks, tools, codebases | Track focus time vs fragmented time |
| Waiting | Blocked tasks, review queues, approval bottlenecks, blocked dependencies | Measure wait-to-work ratio |
| Overproduction | Building features nobody uses, YAGNI violations | Compare shipped features to validated needs |
| Overprocessing | Gold-plating, unnecessary abstraction, premature optimization | "Would removing this step reduce value?" |
| Defects | Bugs, rework, corrections, failed deployments | Track defect escape rate |
Also watch for: Muri (overburden → BVSSH Happier / sustainable pace) and Mura (unevenness → delivery cadence variation).
Source: Taiichi Ohno, Sakichi Toyoda (Toyota Production System). Mapped to product development via Poppendieck (Lean Software Development).
For incidents or significant failures, use the SRE blameless post-mortem:
Rule: No blame. Focus on the system, not the person. Source: Beyer et al. (SRE)
After delivery retrospective, always ask:
.claude/memory/corrections.md with new corrections.claude/memory/patterns.md with new patterns.claude/memory/delivery-journal.md with retrospective entry.claude/canvas/cycle-history.yml (see Cycle History Recording above)Before finalizing the retrospective, draft a one-line counter-argument for each major claim: "What's the strongest case that this 'went well' was actually luck? That this 'went wrong' was actually unavoidable? That this 'pattern' is actually noise?" If you can't articulate counter-cases, run /mycelium:devils-advocate before locking in the corrections/patterns.
This addresses the bias cluster documented in corrections.md (L5 sycophancy 2026-04-20, eval overfitting 2026-04-30, sharper-framing-isn't-righter 2026-05-03). Retrospectives are particularly bias-prone — narrative coherence is rewarded, the agent is incentivized to find tidy patterns, and post-hoc rationalization is the natural mode. Counter-arguments break that gravity.
Retrospectives are the natural home of hindsight bias — the "I knew it all along" effect that rewrites uncertainty as foreknowledge. For every claim of the form "we should have seen X coming," ask: would I have predicted X with the evidence available BEFORE the outcome? If the honest answer is "no, that evidence only became diagnostic in retrospect," log it as a learning about evidence interpretation, not as a missed signal. This protects future retrospectives from manufacturing false should-have-knowns that distort confidence calibration.
Source: Fischhoff, "Hindsight ≠ Foresight: The Effect of Outcome Knowledge on Judgment Under Uncertainty" (1975).
Especially important when proposing graduation candidates (recurring corrections → guardrails) — make sure the recurrence is real, not 3 instances of pattern-matching by the agent itself.
Hard rule (per CLAUDE.md Communication Rules, anti-pattern #7 write-narration-verification — mechanism Check 42, graduated v0.39.18; enforced surface expanded to this skill v0.44.0). This skill mandates multi-field canvas updates. Before narrating "updated / wrote / refreshed [canvas]" in any user-facing summary, RE-READ the value fields this skill's MANDATORY says to update and confirm they actually changed — not just _meta.last_validated or a freshness stamp. Each field you claim to have updated must reflect its new value. The symmetric half of the Read-before-Write Preflight: that one protects what gets read before a write; this one protects that the write matches the claim. Worked failures: 2026-06-05 #18 (/dora-check narrated "updated" with value fields unchanged) + #19 (/retrospective left a cycle-history aggregate un-propagated).