cc-devflow 4.5.3 → 4.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +12 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +28 -5
  3. package/.claude/skills/cc-act/SKILL.md +45 -12
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +39 -0
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +16 -0
  6. package/.claude/skills/cc-act/references/closure-contract.md +3 -0
  7. package/.claude/skills/cc-act/scripts/cc-act-common.sh +48 -0
  8. package/.claude/skills/cc-act/scripts/generate-status-report.sh +3 -0
  9. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +6 -0
  10. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +13 -0
  11. package/.claude/skills/cc-check/CHANGELOG.md +6 -0
  12. package/.claude/skills/cc-check/PLAYBOOK.md +4 -0
  13. package/.claude/skills/cc-check/SKILL.md +15 -2
  14. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +18 -0
  15. package/.claude/skills/cc-do/CHANGELOG.md +12 -0
  16. package/.claude/skills/cc-do/PLAYBOOK.md +13 -10
  17. package/.claude/skills/cc-do/SKILL.md +40 -16
  18. package/.claude/skills/cc-do/references/execution-recovery.md +12 -0
  19. package/.claude/skills/cc-do/references/parallel-dispatch.md +6 -4
  20. package/.claude/skills/cc-do/scripts/detect-file-conflicts.sh +49 -3
  21. package/.claude/skills/cc-investigate/CHANGELOG.md +12 -0
  22. package/.claude/skills/cc-investigate/PLAYBOOK.md +12 -1
  23. package/.claude/skills/cc-investigate/SKILL.md +31 -5
  24. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +44 -0
  25. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +1 -0
  26. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +9 -1
  27. package/.claude/skills/cc-investigate/references/investigation-contract.md +2 -0
  28. package/.claude/skills/cc-plan/CHANGELOG.md +29 -0
  29. package/.claude/skills/cc-plan/PLAYBOOK.md +43 -17
  30. package/.claude/skills/cc-plan/SKILL.md +85 -44
  31. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +109 -3
  32. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +32 -5
  33. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +85 -4
  34. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +78 -0
  35. package/.claude/skills/cc-plan/references/planning-contract.md +29 -7
  36. package/.claude/skills/cc-roadmap/CHANGELOG.md +12 -0
  37. package/.claude/skills/cc-roadmap/PLAYBOOK.md +15 -9
  38. package/.claude/skills/cc-roadmap/SKILL.md +22 -16
  39. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +3 -1
  40. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +11 -1
  41. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +57 -10
  42. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +68 -3
  43. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +120 -0
  44. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +25 -1
  45. package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +13 -5
  46. package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +3 -3
  47. package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +3 -3
  48. package/CHANGELOG.md +15 -0
  49. package/README.md +5 -5
  50. package/README.zh-CN.md +5 -5
  51. package/bin/cc-devflow-cli.js +93 -2
  52. package/docs/CLAUDE.md +1 -1
  53. package/docs/examples/START-HERE.md +3 -3
  54. package/docs/examples/example-bindings.json +27 -10
  55. package/docs/examples/full-design-blocked/BACKLOG.md +4 -2
  56. package/docs/examples/full-design-blocked/README.md +4 -4
  57. package/docs/examples/full-design-blocked/ROADMAP.md +16 -2
  58. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +39 -1
  59. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +41 -0
  60. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +8 -1
  61. package/docs/examples/full-design-blocked/roadmap.json +123 -0
  62. package/docs/examples/local-handoff/BACKLOG.md +4 -2
  63. package/docs/examples/local-handoff/README.md +4 -4
  64. package/docs/examples/local-handoff/ROADMAP.md +16 -2
  65. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +19 -1
  66. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +26 -0
  67. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +8 -1
  68. package/docs/examples/local-handoff/roadmap.json +121 -0
  69. package/docs/examples/pdca-loop/BACKLOG.md +4 -2
  70. package/docs/examples/pdca-loop/README.md +4 -4
  71. package/docs/examples/pdca-loop/ROADMAP.md +16 -2
  72. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +19 -1
  73. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +22 -3
  74. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +8 -1
  75. package/docs/examples/pdca-loop/roadmap.json +191 -0
  76. package/docs/examples/scripts/check-example-bindings.sh +7 -4
  77. package/docs/get-shit-done-strategy-audit.md +518 -0
  78. package/docs/guides/getting-started.md +2 -2
  79. package/docs/guides/getting-started.zh-CN.md +2 -2
  80. package/lib/compiler/__tests__/inventory.test.js +51 -0
  81. package/lib/compiler/__tests__/skills-registry.test.js +17 -3
  82. package/lib/compiler/inventory.js +78 -0
  83. package/lib/skill-runtime/__tests__/approve.test.js +92 -0
  84. package/lib/skill-runtime/__tests__/autopilot.test.js +4 -0
  85. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +9 -1
  86. package/lib/skill-runtime/__tests__/planner.tdd.test.js +20 -0
  87. package/lib/skill-runtime/__tests__/query.test.js +147 -1
  88. package/lib/skill-runtime/__tests__/readiness.test.js +53 -0
  89. package/lib/skill-runtime/__tests__/release.test.js +85 -0
  90. package/lib/skill-runtime/__tests__/runtime.integration.test.js +11 -0
  91. package/lib/skill-runtime/__tests__/schemas.test.js +56 -0
  92. package/lib/skill-runtime/__tests__/worker-run.test.js +29 -0
  93. package/lib/skill-runtime/errors.js +39 -0
  94. package/lib/skill-runtime/index.js +8 -0
  95. package/lib/skill-runtime/operations/approve.js +17 -2
  96. package/lib/skill-runtime/operations/release.js +6 -3
  97. package/lib/skill-runtime/operations/worker-run.js +30 -0
  98. package/lib/skill-runtime/planner.js +10 -2
  99. package/lib/skill-runtime/query-registry.js +101 -0
  100. package/lib/skill-runtime/query.js +159 -91
  101. package/lib/skill-runtime/readiness.js +84 -0
  102. package/lib/skill-runtime/schemas.js +28 -3
  103. package/lib/skill-runtime/trace.js +22 -0
  104. package/package.json +1 -1
@@ -1,5 +1,17 @@
1
1
  # CC-Act Skill Changelog
2
2
 
3
+ ## v1.8.2 - 2026-05-06
4
+
5
+ - add an execution-time Roadmap Progress Check so act verifies source RM state before ship work continues
6
+ - align all roadmap writeback guidance on `devflow/roadmap.json` with generated `ROADMAP.md` / `BACKLOG.md` projections
7
+ - update delivery templates and act render scripts to surface roadmap sync state in PR briefs, release notes, resume indexes, and doc sync reports
8
+
9
+ ## v1.8.1 - 2026-04-29
10
+
11
+ - add structured ship preflight fields with `ShipPreflightError` rescue actions
12
+ - require rollback guards before publish, merge, PR update, or release note handoff
13
+ - add PR branch hygiene and learning extraction targets to delivery templates
14
+
3
15
  ## v1.8.0 - 2026-04-28
4
16
 
5
17
  - add remote state consistency rules for issue, PR, tracker, `needs-info`, and `ready-for-agent` closeout handoffs
@@ -6,7 +6,7 @@
6
6
 
7
7
  - Enter from: `cc-check` with a passing report card.
8
8
  - Stay in: `cc-act` while ship mode, simplify/test evidence, docs, and handoff are being aligned to proven facts.
9
- - Exit to: the next roadmap/backlog loop once delivery artifacts and follow-up writeback are complete.
9
+ - Exit to: the next roadmap/backlog loop once delivery artifacts, source RM progress, and follow-up writeback are complete.
10
10
  - Reroute to: `cc-check` if verification changes, or `cc-do` if act uncovers unfinished implementation.
11
11
 
12
12
  ## Core Thesis
@@ -27,9 +27,19 @@
27
27
  3. 确认 `planning/tasks.md` 不再有未完成项
28
28
  4. 确认 `review.freshness` 新鲜、`runtime.failureOwnership` 无未解释失败、`qa.coverageAudit` / `qa.browserEvidence` 有证据或明确 skip
29
29
  5. 确认 `qa.feedbackLoop` / `qa.behaviorEvidence` 能支撑行为结论;不可复现时必须写清缺什么 artifact / 权限 / 输入
30
+ 6. 定位 source RM,并确认 `devflow/roadmap.json`、`devflow/ROADMAP.md`、optional `devflow/BACKLOG.md` 没有和 verified reality 冲突
30
31
 
31
32
  如果 gate 没闭合,直接回 `cc-check` 或 `cc-do`,不要在 `cc-act` 自我安慰。
32
33
 
34
+ ## Phase 0.5: Check Roadmap Progress
35
+
36
+ Roadmap 是执行链路的长期记忆,不是收尾时才想起的备忘录。
37
+
38
+ 1. 从 `change-meta.json` / `planning/task-manifest.json` 读取 `sourceRoadmap.itemId`、REQ/FIX、primary capability、expected spec delta。
39
+ 2. 用 `../cc-roadmap/scripts/locate-roadmap-item.sh <RM-ID>` 对照 `devflow/roadmap.json`、`devflow/ROADMAP.md`、optional `devflow/BACKLOG.md`。
40
+ 3. 如果 RM 已经指向另一个 change、被标成 blocked/deferred/done,或 progress 与 `review/report-card.json` 现实冲突,先同步或 reroute,不继续 ship。
41
+ 4. 如果没有 source RM,不编造;在 handoff 写 `roadmapSync.noOpReason: no-source-rm`。
42
+
33
43
  ## Phase 1: Freeze Ship Facts
34
44
 
35
45
  运行 `scripts/detect-ship-target.sh`,锁定这些事实:
@@ -84,6 +94,9 @@ Ship 必须属于这 4 种模式之一:
84
94
  4. 如果有 WIP commit,只能用非破坏性 rebase / fixup 处理,不允许盲目 soft reset。
85
95
  5. push 前比较 local / remote HEAD;PR 前检查是否已有打开 PR / MR。
86
96
  6. 生成 readiness dashboard:review freshness、review quality、QA coverage、browser QA、feedback loop、behavior evidence、failure ownership、documentation release、PR body accuracy。
97
+ 7. 生成 ship preflight:branch/base/remote/auth/clean tree/review freshness/ship mode。
98
+ 8. preflight 失败必须命名为 `ShipPreflightError`,并写明 rescue action 或切到 `local-handoff`。
99
+ 9. 发布、合并、PR 更新或 release note 前必须写 rollback guard。
87
100
 
88
101
  ## Phase 3: Build Delivery Pack
89
102
 
@@ -115,6 +128,8 @@ Ship 必须属于这 4 种模式之一:
115
128
  - review packet path / summary
116
129
  - finding triage summary
117
130
  - QA / claim evidence summary
131
+ - ship preflight and `ShipPreflightError` rescue if any
132
+ - rollback guard
118
133
  - QA behavior evidence and feedback-loop quality
119
134
  - readiness dashboard
120
135
  - PR body accuracy check
@@ -175,19 +190,22 @@ Ship 必须属于这 4 种模式之一:
175
190
 
176
191
  ## Phase 6: Write Back The Learning
177
192
 
178
- 以下情况必须回写 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`:
193
+ 以下情况必须回写 `devflow/roadmap.json`,再重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`:
179
194
 
180
195
  1. 本次工作暴露了新的 follow-up
181
196
  2. 原有优先级被改变
182
197
  3. 有明确 deferred item 不能靠口头记忆保存
198
+ 4. source RM 的 ship 现实从 planned / repair planned 推进到了 in review / ready for handoff / done
183
199
 
184
200
  原则:
185
201
 
186
- - 长期方向写 `devflow/roadmap/roadmap.md`
187
- - 下一轮待排队动作写 `devflow/roadmap/backlog.md`
202
+ - 长期方向写进 `devflow/roadmap.json` 的 stage / item / backlog 字段
203
+ - 下一轮待排队动作写进对应 RM 的 backlog 字段,或交给 `cc-roadmap` 新增 RM
188
204
  - 不要把噪音和碎念回写成系统真相
189
205
  - follow-up 必须是 durable brief:用领域语言写 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope
190
206
  - 独立行为拆独立条目;有依赖关系时写明顺序,方便下一轮并行或排队
207
+ - 常规进度用 `../cc-roadmap/scripts/sync-roadmap-progress.sh --rm <RM-ID> --status <state> --req <REQ/FIX> --progress <percent>`
208
+ - follow-up 改变阶段顺序或项目优先级时,不在 `cc-act` 临场重排,reroute 到 `cc-roadmap`
191
209
 
192
210
  ## Phase 7: Declare The Next Entry
193
211
 
@@ -207,6 +225,9 @@ Ship 必须属于这 4 种模式之一:
207
225
  5. PR body / release note / handoff / changelog 说的是不是同一套现实?
208
226
  6. readiness dashboard 有没有 blocker 或 stale warning?
209
227
  7. follow-up 是不是行为契约,而不是“改某文件某行”的易腐烂 TODO?
228
+ 8. ship preflight failure 是否有 `ShipPreflightError`、artifact ref 和 rescue action?
229
+ 9. rollback guard 是否足够让下一位维护者不靠聊天记录回退?
230
+ 10. source RM 的 status、REQ/FIX、progress 是否已经和 ship 现实一致?
210
231
 
211
232
  如果第 1 或第 3 题答案不是“能”,说明 `cc-act` 仍然太重或太糊。
212
233
 
@@ -216,7 +237,7 @@ Ship 必须属于这 4 种模式之一:
216
237
  - `handoff/release-note.md`(需要发布时)
217
238
  - 更新后的 `handoff/resume-index.md`
218
239
  - 更新后的 `CLAUDE.md` / README / 架构文档(如果结构或行为变了)
219
- - 必要时更新后的 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`
240
+ - 必要时更新后的 `devflow/roadmap.json` / `devflow/ROADMAP.md` / `devflow/BACKLOG.md`
220
241
 
221
242
  ## Local Kit
222
243
 
@@ -228,6 +249,8 @@ Ship 必须属于这 4 种模式之一:
228
249
  - `scripts/render-pr-brief.sh` 负责从 requirement 真相源渲染 `pr-brief.md`
229
250
  - `scripts/generate-status-report.sh` 负责汇总 requirement 与 ship 现状
230
251
  - `scripts/archive-requirement.sh` 负责 requirement 生命周期收尾
252
+ - `../cc-roadmap/scripts/locate-roadmap-item.sh` 负责定位 source RM
253
+ - `../cc-roadmap/scripts/sync-roadmap-progress.sh` 负责回写 roadmap progress 并渲染投影
231
254
  - `cc-simplify` 负责在 ship 前压掉重复、坏味道、低效实现
232
255
  - `references/git-commit-guidelines.md` 负责提交规范真相源
233
256
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cc-act
3
- version: 1.8.0
3
+ version: 1.8.2
4
4
  description: 'Use when verified work must be shipped or handed off with a clear landing path: run simplify and required tests, create or update a PR, prepare a local handoff, close out merged work, sync docs, write release notes, and fold follow-ups back into backlog or roadmap.'
5
5
  triggers:
6
6
  - 准备提 PR
@@ -17,6 +17,8 @@ reads:
17
17
  - references/git-commit-guidelines.md
18
18
  - assets/PR_BRIEF_TEMPLATE.md
19
19
  - assets/RELEASE_NOTE_TEMPLATE.md
20
+ - ../cc-roadmap/scripts/locate-roadmap-item.sh
21
+ - ../cc-roadmap/scripts/sync-roadmap-progress.sh
20
22
  writes:
21
23
  - path: devflow/changes/<change-key>/handoff/pr-brief.md
22
24
  durability: durable
@@ -34,15 +36,17 @@ writes:
34
36
  when: handoff mode is release
35
37
  exclusive_group: handoff
36
38
  effects:
37
- - roadmap or backlog follow-up updates when needed
39
+ - roadmap progress and backlog follow-up updates when needed
38
40
  entry_gate:
39
41
  - Accept only a passing review/report-card.json with reroute=none and specSyncReady=true.
40
- - Freeze current branch, PR, and ship-mode facts before writing delivery materials.
42
+ - Freeze current branch, PR, ship-mode, auth, clean-tree, and rollback facts before writing delivery materials.
41
43
  - If simplify, tests, or act changes code or verification scope, return to cc-check immediately.
44
+ - Read source roadmap progress from `devflow/roadmap.json`, `devflow/ROADMAP.md`, optional `devflow/BACKLOG.md`, or legacy `devflow/roadmap-tracking.json`; act must not ship against stale RM state.
42
45
  exit_criteria:
43
46
  - The ship mode is explicit, delivery materials match that mode, and the next maintainer has one clear entry point.
44
47
  - Docs, PR text, release notes, handoff artifacts, review range, readiness dashboard, PR body accuracy check, and test evidence reflect the same proven facts.
45
48
  - Follow-up items are written back to roadmap/backlog instead of lingering in chat memory.
49
+ - The source roadmap item reflects the latest verified state, ship mode, and follow-up decision, or the handoff records a no-op reason.
46
50
  reroutes:
47
51
  - when: Verification is stale, incomplete, or changed during act.
48
52
  target: cc-check
@@ -58,7 +62,7 @@ recovery_modes:
58
62
  tool_budget:
59
63
  read_files: 8
60
64
  search_steps: 5
61
- shell_commands: 10
65
+ shell_commands: 11
62
66
  ---
63
67
 
64
68
  # CC-Act
@@ -94,7 +98,7 @@ tool_budget:
94
98
  - 需要决定这次是 `create-pr`、`update-pr`、`local-handoff`,还是 `post-merge-closeout`
95
99
  - 需要在 ship 前再做一次 `cc-simplify`、单测、以及按协调器要求执行的 e2e
96
100
  - 需要同步最终文档、handoff、release note
97
- - 需要把遗留 follow-up / 优先级变化回写 `devflow/roadmap/backlog.md` `devflow/roadmap/roadmap.md`
101
+ - 需要把遗留 follow-up / 优先级变化回写 `devflow/roadmap.json`,并重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`
98
102
  - 需要把已验证的 spec delta 正式回写 capability spec 与 `devflow/specs/INDEX.md`
99
103
  - 需要让下一轮入口比现在更清楚
100
104
 
@@ -128,7 +132,8 @@ tool_budget:
128
132
  4. 运行 `scripts/detect-ship-target.sh`,识别当前分支、base branch、PR 状态与推荐 ship 路径。
129
133
  5. 检查 `review.freshness`、`runtime.failureOwnership`、`qa.coverageAudit`、`qa.browserEvidence`,确认 readiness dashboard 没有 blocker。
130
134
  6. 检查 `qa.feedbackLoop`、`qa.behaviorEvidence`、`qa.architectureFollowUps` 和 follow-up brief,确认交付材料继承的是行为证据,不是聊天记忆或易腐烂 TODO。
131
- 7. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship。
135
+ 7. 定位 source RM:优先读 `change-meta.json` / `task-manifest.json` `sourceRoadmap.itemId`,再用 `locate-roadmap-item.sh` 对照 `devflow/roadmap.json`、`devflow/ROADMAP.md` 和 optional `devflow/BACKLOG.md`;如果 roadmap 状态和 verified reality 冲突,先同步或 reroute,不能继续 ship。
136
+ 8. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship。
132
137
 
133
138
  ## Ship Modes
134
139
 
@@ -173,7 +178,7 @@ tool_budget:
173
178
  4. `post-merge-closeout`
174
179
  - 必须完成 doc sync
175
180
  - 需要对外说明时生成 `handoff/release-note.md`
176
- - 必须把 follow-up 回写到 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`
181
+ - 必须把 follow-up 回写到 `devflow/roadmap.json`,并重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`
177
182
 
178
183
  不是每次都要把所有文件生成一遍。材料必须服务于当前 ship 模式,而不是为了流程好看。
179
184
 
@@ -218,6 +223,29 @@ tool_budget:
218
223
  11. Remote state consistency:如果本次 closeout 触碰 GitHub issue / PR / tracker,必须记录当前 state、目标 state、允许转换、已保留事实和下一位 owner;`needs-info` 必须保留已确认事实和具体问题,`ready-for-agent` 必须有可执行 brief。
219
224
  12. Tooling smoke:如果本次改动影响 hook、pre-commit、lint、publish、adapt 或验证脚本,必须跑真实入口或最接近真实入口的 smoke;只读配置文件不等于工具链可用。
220
225
 
226
+ ## Ship Preflight And Rescue
227
+
228
+ ship preflight 必须结构化记录:
229
+
230
+ - `branch`: 当前分支、base、remote、local/remote HEAD 关系
231
+ - `auth`: `gh` / registry / deploy / package publish 等权限是否可用
232
+ - `workspace`: clean tree、staged files、未跟踪文件和相关 stash
233
+ - `reviewFreshness`: `cc-check` 审查范围是否仍绑定当前 HEAD
234
+ - `shipMode`: `create-pr` / `update-pr` / `local-handoff` / `post-merge-closeout`
235
+
236
+ 任何 preflight failure 都必须命名为 `ShipPreflightError`,并写清 rescue action。
237
+ 不能用“工具不可用”当作模糊失败;要明确切 `local-handoff`、补 auth、刷新 review,
238
+ 还是返回 `cc-check`。
239
+
240
+ rollback guard 必须在 publish、merge、PR 更新或 release note 前写清:
241
+
242
+ - safe state
243
+ - rollback command 或人工回退步骤
244
+ - data / migration / package / remote side effect
245
+ - owner
246
+
247
+ 没有 rollback guard 的 release 只能停在 handoff,不准发布。
248
+
221
249
  ## Readiness Dashboard
222
250
 
223
251
  PR / handoff 之前必须把 readiness 压成一屏事实:
@@ -289,11 +317,12 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
289
317
  - `post-merge-closeout`:跳过 PR,完成发布与闭环回写
290
318
  11. 处理 PR / MR body:从当前 `pr-brief.md`、最新验证、review、doc sync、TODO/backlog 结果重新渲染,不复用旧 body。
291
319
  12. 在 `handoff/pr-brief.md` 写入 readiness dashboard 与 PR body accuracy check;已有 PR body 与当前事实不一致时先刷新再继续。
292
- 13. 回写 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`:
320
+ 13. 回写 `devflow/roadmap.json` 并重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`:
293
321
  - 新发现的 follow-up
294
322
  - 被推迟但必须保留的事项
295
323
  - 因本次结果而改变优先级的事项
296
- 14. 如果 requirement 真正闭环,更新状态摘要并归档;否则把下一位接手者的入口写清楚。
324
+ 14. `sync-roadmap-progress.sh` 更新 source RM 的 status、REQ/FIX 绑定和 progress:`create-pr` / `update-pr` 通常写 `In review` + `100%`,`local-handoff` 写 `Ready for handoff`,`post-merge-closeout` 写 `Done`;如果无 source RM,必须在 handoff 写 no-op reason。
325
+ 15. 如果 requirement 真正闭环,更新状态摘要并归档;否则把下一位接手者的入口写清楚。
297
326
 
298
327
  ## Output
299
328
 
@@ -301,7 +330,7 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
301
330
  - `handoff/release-note.md`(需要对外发布时)
302
331
  - 更新后的 `handoff/resume-index.md`
303
332
  - 同步后的 `CLAUDE.md` / README / 架构文档
304
- - 必要时更新后的 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`
333
+ - 必要时更新后的 `devflow/roadmap.json` / `devflow/ROADMAP.md` / `devflow/BACKLOG.md`
305
334
  - 单测 / e2e 的通过证据,或明确记录的 skip / blocker
306
335
  - 必要时创建或更新的 PR / MR
307
336
  - PR / MR body 中的 Summary、Test Coverage、Pre-Landing Review、Scope Drift、Plan Completion、Verification Results、Documentation、Test plan
@@ -316,6 +345,7 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
316
345
  - 现在谁都可以顺着 `handoff/pr-brief.md` 或 `handoff/resume-index.md` 继续往前走
317
346
  - 文档、PR 描述、release note 说的是同一套现实
318
347
  - `cc-simplify`、单测、e2e、commit/push 的结果都能被接手者追溯
348
+ - source RM 的 status、REQ/FIX 绑定、progress 和 follow-up 已经和 ship 现实一致
319
349
 
320
350
  ## Bundled Resources
321
351
 
@@ -330,6 +360,8 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
330
360
  - 文档同步:`scripts/sync-act-docs.sh`
331
361
  - PR 简报生成:`scripts/render-pr-brief.sh`
332
362
  - requirement 归档:`scripts/archive-requirement.sh`
363
+ - Roadmap 定位:`../cc-roadmap/scripts/locate-roadmap-item.sh`
364
+ - Roadmap 回写:`../cc-roadmap/scripts/sync-roadmap-progress.sh`
333
365
 
334
366
  ## Working Rules
335
367
 
@@ -340,12 +372,13 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
340
372
  5. 分支决策必须明确属于 4 种模式之一,不要含糊。
341
373
  6. 已存在 PR / MR 时,优先更新,不重复创建。
342
374
  7. `cc-simplify`、单测、e2e 任何一步只要导致代码变化或验证口径变化,必须回 `cc-check`。
343
- 8. `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md` 只回写真正改变优先级或产生 follow-up 的事项,不写噪音。
375
+ 8. `devflow/roadmap.json` 只回写真正改变优先级或产生 follow-up 的事项,并用 `sync-roadmap-progress.sh` 重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`,不写噪音。
344
376
  9. `local-handoff` 不是偷懒模式,它仍然必须让下一位接手者知道做什么、怎么验证、卡在哪。
345
377
  10. `create-pr` / `update-pr` 模式默认要求提交历史符合 `references/git-commit-guidelines.md`,并完成正确的 push、PR 创建或更新动作。
346
378
  11. CHANGELOG 只能基于当前 diff / commit history / release truth 更新,不允许覆盖既有历史条目。
347
379
  12. PR / MR body 每次都从当前事实重建,不沿用旧 body 或旧测试输出。
348
380
  13. Verification 每次执行 `cc-act` 都必须重新运行;只有已完成且可证明幂等的动作可以跳过。
381
+ 14. source RM 找不到时不能编造新 RM;写 no-op reason。如果 follow-up 改变阶段顺序或优先级,reroute 到 `cc-roadmap`。
349
382
 
350
383
  ## Exit Criteria
351
384
 
@@ -354,7 +387,7 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
354
387
  - reviewer / maintainer 能直接接手
355
388
  - 需要同步的文档已经同步
356
389
  - `cc-simplify`、单测、e2e 已执行完毕,或 skip / blocker 已被明确记录
357
- - follow-up 已回写到正确的 backlog / roadmap 位置
390
+ - source RM 已回写最新进度,follow-up 已回写到正确的 backlog / roadmap 位置
358
391
  - 下一轮该怎么继续已经写清楚
359
392
  - requirement 不是“看起来结束”,而是真正闭环
360
393
 
@@ -24,6 +24,27 @@
24
24
  - Base branch:
25
25
  - PR / MR:
26
26
 
27
+ ## Ship Preflight
28
+
29
+ - Branch:
30
+ - Base:
31
+ - Remote:
32
+ - Local / remote HEAD:
33
+ - Auth:
34
+ - Clean tree:
35
+ - Review freshness:
36
+ - Ship mode:
37
+ - `ShipPreflightError`:
38
+ - Rescue action:
39
+
40
+ ## PR Branch Hygiene
41
+
42
+ - Existing PR / MR:
43
+ - Duplicate PR risk:
44
+ - Commit split:
45
+ - Push idempotency:
46
+ - Body source:
47
+
27
48
  ## Review Range
28
49
 
29
50
  - Reviewed base SHA:
@@ -59,6 +80,13 @@
59
80
  - Fresh evidence:
60
81
  - Merged-result verification:
61
82
 
83
+ ## Rollback Guard
84
+
85
+ - Safe state:
86
+ - Rollback command / manual steps:
87
+ - Side effects:
88
+ - Owner:
89
+
62
90
  ## QA Behavior Evidence
63
91
 
64
92
  - Feedback loop:
@@ -74,6 +102,16 @@
74
102
  - `release-note.md`:
75
103
  - `resume-index.md`:
76
104
 
105
+ ## Roadmap Progress Sync
106
+
107
+ - Source RM:
108
+ - Roadmap files: `devflow/roadmap.json`, `devflow/ROADMAP.md`, optional `devflow/BACKLOG.md`
109
+ - Sync command:
110
+ - Status after sync:
111
+ - Progress after sync:
112
+ - Follow-up writeback:
113
+ - No-op reason:
114
+
77
115
  ## Consolidated Memory
78
116
 
79
117
  - `handoff path`:
@@ -96,6 +134,7 @@
96
134
  - Key interfaces:
97
135
  - Acceptance criteria:
98
136
  - Out of scope:
137
+ - Learning extraction target:
99
138
 
100
139
  ## Risks
101
140
 
@@ -20,6 +20,13 @@
20
20
 
21
21
  -
22
22
 
23
+ ## Rollback Guard
24
+
25
+ - Safe state:
26
+ - Rollback command / manual steps:
27
+ - Side effects:
28
+ - Owner:
29
+
23
30
  ## QA Behavior Evidence
24
31
 
25
32
  - Feedback loop:
@@ -30,9 +37,18 @@
30
37
 
31
38
  -
32
39
 
40
+ ## Roadmap Progress
41
+
42
+ - Source RM:
43
+ - Status after sync:
44
+ - Progress after sync:
45
+ - Follow-up writeback:
46
+ - No-op reason:
47
+
33
48
  ## Follow-Ups
34
49
 
35
50
  - Current behavior:
36
51
  - Desired behavior:
37
52
  - Acceptance criteria:
38
53
  - Out of scope:
54
+ - Learning extraction target:
@@ -11,6 +11,7 @@
11
11
  7. PR / handoff 必须记录 `cc-check` 审过的 base/head SHA、review packet、finding triage 摘要
12
12
  8. readiness dashboard 必须说明 review freshness、QA coverage、browser evidence、failure ownership、documentation release、PR body accuracy
13
13
  9. behavior handoff 必须带上 QA feedback loop、expected / actual / reproduction steps,以及 durable follow-up brief
14
+ 10. source RM 必须已从 `devflow/roadmap.json` 定位,且 roadmap progress 与 verified reality 一致;没有 source RM 时记录 no-op reason
14
15
 
15
16
  ## Ship Decision Contract
16
17
 
@@ -37,6 +38,7 @@
37
38
  10. verification 每次进入 `cc-act` 都必须重新跑;只有 push、PR 更新、文档生成等动作可以因为幂等状态跳过
38
39
  11. PR body accuracy 必须对照当前 report-card、当前 diff、当前 commits;旧 body 不能作为证据源
39
40
  12. follow-up 回写必须用行为契约表达,包含 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope;不能只写文件路径或聊天 TODO
41
+ 13. roadmap 回写只更新 `devflow/roadmap.json`,并通过 `sync-roadmap-progress.sh` 重新生成 `devflow/ROADMAP.md` / `devflow/BACKLOG.md`
40
42
 
41
43
  ## Memory Consolidation
42
44
 
@@ -56,5 +58,6 @@
56
58
  - readiness dashboard 没有 blocker,PR body accuracy 已检查或明确阻塞
57
59
  - QA behavior evidence 和 feedback loop 已进入 PR / handoff / release 材料
58
60
  - post-merge closeout 反映 merged result 的验证事实,而不是只反映合并前事实
61
+ - source RM 的 status、REQ/FIX 绑定、progress 和 follow-up 已经落入 roadmap truth
59
62
  - 下一轮计划入口更清楚
60
63
  - 文档入口可发现,changelog 不丢历史,TODO / backlog 只记录有证据的事项
@@ -253,6 +253,54 @@ req_act_collect_spec_files() {
253
253
  req_act_dedup_file "$out_file"
254
254
  }
255
255
 
256
+ req_act_roadmap_sync_summary() {
257
+ local manifest="$1"
258
+ local repo_root="${2:-$(req_act_repo_root)}"
259
+ local item_id=""
260
+ local sync_status=""
261
+ local sync_command=""
262
+ local no_op_reason=""
263
+ local updated_files=""
264
+ local existing_files=""
265
+
266
+ if [[ -f "$manifest" ]]; then
267
+ item_id="$(jq -r '.sourceRoadmap.itemId // empty' "$manifest" 2>/dev/null || true)"
268
+ sync_status="$(jq -r '.sourceRoadmap.syncStatus // .roadmapSync.status // "not recorded"' "$manifest" 2>/dev/null || true)"
269
+ sync_command="$(jq -r '.sourceRoadmap.syncCommand // .roadmapSync.command // empty' "$manifest" 2>/dev/null || true)"
270
+ no_op_reason="$(jq -r '.sourceRoadmap.noOpReason // .roadmapSync.noOpReason // empty' "$manifest" 2>/dev/null || true)"
271
+ updated_files="$(jq -r '(.sourceRoadmap.updatedFiles // .roadmapSync.updatedFiles // []) | join(", ")' "$manifest" 2>/dev/null || true)"
272
+ fi
273
+
274
+ for candidate in devflow/roadmap.json devflow/ROADMAP.md devflow/BACKLOG.md devflow/roadmap-tracking.json; do
275
+ if [[ -f "$repo_root/$candidate" ]]; then
276
+ if [[ -n "$existing_files" ]]; then
277
+ existing_files+=", "
278
+ fi
279
+ existing_files+="$candidate"
280
+ fi
281
+ done
282
+
283
+ [[ -n "$existing_files" ]] || existing_files="no roadmap files found"
284
+ [[ -n "$updated_files" ]] || updated_files="not recorded"
285
+ [[ -n "$sync_command" ]] || sync_command="not recorded"
286
+ [[ -n "$sync_status" ]] || sync_status="not recorded"
287
+
288
+ if [[ -z "$item_id" ]]; then
289
+ [[ -n "$no_op_reason" ]] || no_op_reason="no-source-rm"
290
+ printf 'source=none; status=no-op; files=%s; no-op=%s\n' "$existing_files" "$no_op_reason"
291
+ return 0
292
+ fi
293
+
294
+ printf 'source=%s; status=%s; files=%s; updated=%s; command=%s' \
295
+ "$item_id" "$sync_status" "$existing_files" "$updated_files" "$sync_command"
296
+
297
+ if [[ -n "$no_op_reason" ]]; then
298
+ printf '; no-op=%s' "$no_op_reason"
299
+ fi
300
+
301
+ printf '\n'
302
+ }
303
+
256
304
  req_act_collect_evidence() {
257
305
  local report_card="$1"
258
306
  local out_file="$2"
@@ -31,6 +31,7 @@ source "$script_dir/cc-act-common.sh"
31
31
  CHANGE_DIR="$(req_act_change_dir "$REQ_DIR")"
32
32
  report_card="$(req_act_report_path "$CHANGE_DIR")"
33
33
  tasks_file="$(req_act_tasks_path "$CHANGE_DIR")"
34
+ manifest="$(req_act_manifest_path "$CHANGE_DIR")"
34
35
  handoff_dir="$(req_act_handoff_dir "$CHANGE_DIR")"
35
36
 
36
37
  verdict="unknown"
@@ -59,6 +60,7 @@ platform="$(printf '%s\n' "$ship_context" | awk -F= '/^PLATFORM=/{print $2}')"
59
60
  decision_hint="$(printf '%s\n' "$ship_context" | awk -F= '/^DECISION_HINT=/{print $2}')"
60
61
  pr_status="$(printf '%s\n' "$ship_context" | awk -F= '/^PR_STATUS=/{print $2}')"
61
62
  pr_url="$(printf '%s\n' "$ship_context" | awk -F= '/^PR_URL=/{print $2}')"
63
+ roadmap_sync_summary="$(req_act_roadmap_sync_summary "$manifest")"
62
64
 
63
65
  {
64
66
  echo "# Status Report"
@@ -76,6 +78,7 @@ pr_url="$(printf '%s\n' "$ship_context" | awk -F= '/^PR_URL=/{print $2}')"
76
78
  [[ -n "$decision_hint" ]] && echo "- Ship mode hint: $decision_hint"
77
79
  [[ -n "$pr_status" ]] && echo "- PR status: $pr_status"
78
80
  [[ -n "$pr_url" ]] && echo "- PR url: $pr_url"
81
+ echo "- Roadmap progress: $roadmap_sync_summary"
79
82
  [[ -f "$handoff_dir/pr-brief.md" ]] && echo "- PR brief: ready"
80
83
  [[ -f "$handoff_dir/release-note.md" ]] && echo "- Release note: ready"
81
84
  [[ -f "$handoff_dir/resume-index.md" ]] && echo "- Resume index: ready"
@@ -186,6 +186,7 @@ failure_ownership_summary="$(jq -r '
186
186
  ' "$report_card")"
187
187
  documentation_release_summary="CLAUDE=${claude_status}; README=${readme_status}"
188
188
  pr_body_accuracy_summary="body must be regenerated from this pr-brief, current report-card, and current diff before PR create/update"
189
+ roadmap_sync_summary="$(req_act_roadmap_sync_summary "$manifest" "$REPO_ROOT")"
189
190
 
190
191
  {
191
192
  echo "# PR Brief"
@@ -231,6 +232,7 @@ pr_body_accuracy_summary="body must be regenerated from this pr-brief, current r
231
232
  echo "- Behavior evidence: $behavior_evidence_summary"
232
233
  echo "- Failure ownership: $failure_ownership_summary"
233
234
  echo "- Documentation release: $documentation_release_summary"
235
+ echo "- Roadmap progress: $roadmap_sync_summary"
234
236
  echo "- PR body accuracy: $pr_body_accuracy_summary"
235
237
  echo
236
238
  echo "## Summary"
@@ -298,6 +300,10 @@ pr_body_accuracy_summary="body must be regenerated from this pr-brief, current r
298
300
  echo "- \`resume-index.md\`: missing"
299
301
  fi
300
302
  echo
303
+ echo "## Roadmap Progress Sync"
304
+ echo
305
+ echo "- $roadmap_sync_summary"
306
+ echo
301
307
  echo "## How To Verify"
302
308
  echo
303
309
  if [[ -s "$tmp_verify" ]]; then
@@ -62,6 +62,7 @@ spec_sync_ready="$(req_act_spec_sync_ready "$report_card")"
62
62
  output_language="$(req_act_output_language "$report_card")"
63
63
  design_goal="$(req_act_design_goal "$design_file")"
64
64
  main_risk="$(req_act_main_risk "$design_file")"
65
+ roadmap_sync_summary="$(req_act_roadmap_sync_summary "$manifest" "$REPO_ROOT")"
65
66
 
66
67
  tmp_changed="$(mktemp)"
67
68
  tmp_verify="$(mktemp)"
@@ -176,6 +177,11 @@ find "$REPO_ROOT" -maxdepth 2 -type f \( -iname 'README.md' -o -iname 'README*.m
176
177
  echo "- Base branch: ${base_branch:-unknown}"
177
178
  [[ -n "$pr_status" ]] && echo "- PR status: $pr_status"
178
179
  [[ -n "$pr_url" ]] && echo "- PR url: $pr_url"
180
+ echo "- Roadmap progress: $roadmap_sync_summary"
181
+ echo
182
+ echo "## Roadmap Progress"
183
+ echo
184
+ echo "- $roadmap_sync_summary"
179
185
  echo
180
186
  echo "## Follow-Ups"
181
187
  if [[ -s "$tmp_followups" ]]; then
@@ -225,6 +231,7 @@ esac
225
231
  echo "- Req-Check passed; see review/report-card.json for evidence."
226
232
  fi
227
233
  echo "- Ship mode decided as \`$ship_mode\`."
234
+ echo "- Roadmap progress: $roadmap_sync_summary"
228
235
  [[ -n "$pr_url" ]] && echo "- Active PR / MR: $pr_url"
229
236
  echo
230
237
  echo "## Follow-Ups"
@@ -241,6 +248,7 @@ esac
241
248
  echo
242
249
  echo "- $next_action"
243
250
  echo "- Formal spec sync belongs in cc-act before final ship closeout."
251
+ echo "- Roadmap progress must be synced through cc-roadmap before final closeout when a source RM exists."
244
252
  echo
245
253
  echo "## Parallel Notes"
246
254
  echo
@@ -289,6 +297,10 @@ esac
289
297
  echo "- No capability spec files recorded in task-manifest.json."
290
298
  fi
291
299
  echo
300
+ echo "## Roadmap Targets"
301
+ echo
302
+ echo "- $roadmap_sync_summary"
303
+ echo
292
304
  echo "## Project Doc Targets"
293
305
  echo
294
306
  echo "### CLAUDE Targets"
@@ -317,6 +329,7 @@ esac
317
329
  echo
318
330
  echo "- Update the listed \`CLAUDE.md\` files if structure, workflow, or operational truth changed."
319
331
  echo "- Update README candidates if user-visible behavior or setup flow changed."
332
+ echo "- Update \`devflow/roadmap.json\` via \`sync-roadmap-progress.sh\` when source RM status, progress, or follow-up truth changed."
320
333
  echo "- Re-render \`pr-brief.md\` after any manual doc edits so the PR body stays in sync."
321
334
  if [[ -n "$main_risk" ]]; then
322
335
  echo "- Main risk to reflect in docs: $main_risk"
@@ -1,5 +1,11 @@
1
1
  # CC-Check Skill Changelog
2
2
 
3
+ ## v1.10.1 - 2026-04-29
4
+
5
+ - add named runtime failure fields with artifact references, owners, and rescue actions
6
+ - add human UAT evidence to the report card so manual acceptance can block or reroute honestly
7
+ - require review findings to carry explicit rescue actions instead of vague follow-up text
8
+
3
9
  ## v1.10.0 - 2026-04-28
4
10
 
5
11
  - add test fixture honesty review for partial fixtures, generated stubs, casts, and missing mock payload fields
@@ -63,6 +63,8 @@ NO PASS WITHOUT FRESH EVIDENCE
63
63
  6. 把每个成功声明映射到 `claimEvidence[]`
64
64
  7. 行为变更必须补 `qa` 证据或例外理由
65
65
  8. 失败输出必须写入 `runtime.failureOwnership[]`
66
+ 9. failure ownership 必须包含 named error、artifact refs 和 rescue action
67
+ 10. human UAT 必须 pass、fail、blocked 或带 skip reason;失败不能被测试绿灯覆盖
66
68
 
67
69
  ## Verification Layers
68
70
 
@@ -76,6 +78,8 @@ NO PASS WITHOUT FRESH EVIDENCE
76
78
  8. Review freshness and confidence calibration
77
79
  9. Failure ownership
78
80
  10. Spec alignment and sync readiness
81
+ 11. Human UAT
82
+ 12. Named runtime errors and rescue actions
79
83
 
80
84
  ## Claim Evidence Matrix
81
85
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cc-check
3
- version: 1.10.0
3
+ version: 1.10.1
4
4
  description: Use when a planned or investigated change needs fresh verification evidence, layered gate proof, review truth, and an honest pass fail blocked verdict before entering cc-act.
5
5
  triggers:
6
6
  - 验收这个需求
@@ -25,7 +25,7 @@ entry_gate:
25
25
  - Re-run fresh commands instead of inheriting cc-do narration.
26
26
  - If evidence is stale or missing, reset context and rebuild the verdict from canonical artifacts.
27
27
  exit_criteria:
28
- - review/report-card.json records pass, fail, or blocked using fresh evidence, review freshness, claim evidence, QA coverage and browser evidence, failure ownership, plus spec alignment and sync readiness.
28
+ - review/report-card.json records pass, fail, or blocked using fresh evidence, review freshness, claim evidence, QA coverage and browser evidence, human UAT when applicable, named failure ownership, plus spec alignment and sync readiness.
29
29
  - Task-level review and requirement-level diff review are separated clearly.
30
30
  - 'The next step is unambiguous: cc-act, cc-do, cc-investigate, or cc-plan.'
31
31
  reroutes:
@@ -169,6 +169,12 @@ NO PASS WITHOUT FRESH EVIDENCE
169
169
  10. **Behavior Contract Layer**
170
170
  - expected / actual / reproduction steps 是否用用户和领域语言写清
171
171
  - follow-up 是否是行为契约,而不是易腐烂的文件行号 TODO
172
+ 11. **Human UAT Layer**
173
+ - 人工验收是否 required、skipped with reason、pass、fail 或 blocked
174
+ - failed UAT 必须 reroute 到 `cc-do`、`cc-investigate` 或 `cc-plan`
175
+ 12. **Named Error Layer**
176
+ - runtime failure 必须有 `errorName`、artifact refs、failure owner 和 rescue action
177
+ - invalid JSON、stale artifact、missing report 不能变成静默 `blocked`
172
178
 
173
179
  任何一层失真,都不能写 `pass`。
174
180
 
@@ -284,6 +290,13 @@ NO PASS WITHOUT FRESH EVIDENCE
284
290
  4. `environment` 必须记录缺失依赖、权限、服务、密钥或平台约束。
285
291
  5. `pass` 不能带未解释的 `in-branch` 或 `ambiguous` 失败。
286
292
 
293
+ 每条 failure ownership 还必须命名:
294
+
295
+ - `errorName`:可搜索的错误名,例如 `MissingSpecReviewProof`
296
+ - `artifactRefs`:指向 report、manifest、checkpoint、日志或命令输出
297
+ - `rescueAction`:下一步救援动作,不写空泛“检查一下”
298
+ - `owner`:`branch` / `baseline` / `environment` / `external` / `unknown`
299
+
287
300
  ## Entry Gate
288
301
 
289
302
  1. 先读 `planning/design.md` 或 `planning/analysis.md`,再读 `planning/tasks.md`、`planning/task-manifest.json`。