retro workflow (v3 NEW standalone)
Overview
2-phase standalone workflow mapping CLAUDE.md "项目 / 里程碑结束: 可选跑 /retro 总结" onto harnessed runtime (Phase v3.0-3.4 W1.2 — D-04 NEW v3 standalone workflow + Pattern A E.2 retro-gstack alias suffix LOCK)。
| phase | id | upstream | model | capability / invokes | artifacts |
|---|---|---|---|---|---|
| 1 | 01-retro |
gstack | opus | {{ capabilities.retro-gstack.cmd }} |
gstack /retro 经验教训系统总结 |
| 2 | 02-persist |
planning-with-files | haiku | {{ capabilities.planning-with-files.cmd }} + invokes: /plan |
artifacts_expected: [RETROSPECTIVE.md] |
Per-phase config loads from workflows/retro/workflow.yaml; engine spawns phase 01 gstack
/retro (alias resolve to retro-gstack carrier per capabilities.yaml entry), phase 02
planning-with-files /plan invoke 持久化 RETROSPECTIVE.md sink。
Capability refs (Pattern A E.2 LOCK)
Sister workflows/capabilities.yaml entries:
retro-gstack— Bucket 7 gstack optional alias suffix per Pattern A E.2 LOCK (impl: gstack, cmd: /retro, aliases to harnessed-bundled /retro, fires_when: is_milestone_close) — 解决 namespace 冲突 (NOT bareretrocapability 因 standalone workflow 已占 retro 名)planning-with-files— Bucket 4 核心 capability (impl: claude-code-plugin, cmd: /plan)
Routing rules (sister CLAUDE.md "项目 / 里程碑结束")
- ✅ 触发: 项目结束 / 里程碑结束 / 用户明示 "复盘 / retro / lessons learned"
- ❌ 跳过: 日常 PR / 单 phase 完成 (常规 verify-progress 已够用)
How to invoke
!harnessed checkpoint intent retro
The banner above (when present) means this invocation is REGISTERED with the engine (an intent marker) — not yet compliant: the steps below (prompt → spawn → checkpoint complete) resolve it, and a per-turn
<workflow-intent>reminder persists until they run.
The numbered sequence below is the state machine — execute it with Bash. Do NOT improvise an equivalent flow from the Overview above: freelancing bypasses the engine (no ledger, no evidence guard). harnessed gives you the spawn-ready prompt; YOU spawn the subagent with a CC-native Task / Agent tool (keeps the session responsive + lets clarification round-trips reach the user).
Do NOT pipe to harnessed run retro — that is the CI/headless path (in-process SDK spawn
that blocks the session inside Claude Code).
- Bash:
harnessed prompt retro --task "$ARGUMENTS" --json→ parse{prompt, max_iterations, model}. - Spawn a CC-native subagent (Task / Agent tool) with that
promptandmodel, then drive delivery with harnessed's own completion gate:- on return, write the subagent's final output to a file and run
harnessed checkpoint complete retro --result-file <path>— it is fail-closed on the declared artifacts, the TDD boundary, and the verbatim<promise>COMPLETE</promise>. - if it blocks, run
harnessed checkpoint fail retro --failing-tests <n>to record the attempt; it prints BUDGET-EXHAUSTED / NO-PROGRESS / BREAK-LOOP when a stop condition is reached. - respawn ONLY while none of those three has fired. Any one of them means stop: re-scope the subtask, fix the blocker, or escalate to the user. Never respawn past a stop directive.
- on return, write the subagent's final output to a file and run
- If the output contains
STATUS: NEEDS_CLARIFICATION+ a question list: STOP, relay them verbatim via AskUserQuestion, append the answers to the spec, then re-spawn the same sub. - On
<promise>COMPLETE</promise>: write the subagent’s final output to a file, then Bashharnessed checkpoint complete retro --result-file <path> --summary "<one-line>". Fail-CLOSED — it blocks unless every declaredartifacts_expectedfile exists, the TDD boundary passes (non-empty evidence / both the red and green sides present / the test file was not deleted), and the result carries a verbatim<promise>COMPLETE</promise>(or a structured COMPLETE status).--result <text>is the inline variant;--result-filewins and is quoting-safe on Windows.--forcerecords an audited override (evidence_status=overridden) — it does not silently pass. - If the complete gate blocked: Bash
harnessed checkpoint fail retro --failing-tests <n>to record the attempt. It printsBUDGET-EXHAUSTED/NO-PROGRESS/BREAK-LOOPonce a stop condition is reached. Respawn ONLY while none of those three has fired; any one of them means STOP — re-scope the subtask, fix the blocker, or escalate to the user.
References
- D-04 NEW v3 standalone workflow (research v3 bump + retro NEW)
- Pattern A E.2 LOCK — 2 alias suffix
-gstack解决 namespace 冲突 (retro-gstack + investigate-gstack) - Pattern A reconcile D.2 — gstack 30 optional naming bare 例外
- workflows/capabilities.yaml — retro-gstack (alias suffix) + planning-with-files
- workflows/defaults.yaml — ralph_max_iterations.retro.* values (W2.2 backfill)
- sister Phase v2.0-2.5 RETROSPECTIVE.md sink pattern