cc-devflow 4.5.2 → 4.5.4

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 (100) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +19 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +14 -1
  3. package/.claude/skills/cc-act/SKILL.md +46 -6
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +44 -1
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +18 -1
  6. package/.claude/skills/cc-act/references/closure-contract.md +3 -0
  7. package/.claude/skills/cc-act/scripts/cc-act-common.sh +27 -1
  8. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +31 -0
  9. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +6 -0
  10. package/.claude/skills/cc-check/CHANGELOG.md +18 -0
  11. package/.claude/skills/cc-check/PLAYBOOK.md +38 -7
  12. package/.claude/skills/cc-check/SKILL.md +39 -7
  13. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +61 -0
  14. package/.claude/skills/cc-check/references/gate-contract.md +11 -0
  15. package/.claude/skills/cc-check/references/review-contract.md +17 -1
  16. package/.claude/skills/cc-check/scripts/render-report-card.js +37 -0
  17. package/.claude/skills/cc-check/scripts/verify-gate.sh +7 -0
  18. package/.claude/skills/cc-do/CHANGELOG.md +18 -0
  19. package/.claude/skills/cc-do/PLAYBOOK.md +20 -13
  20. package/.claude/skills/cc-do/SKILL.md +37 -17
  21. package/.claude/skills/cc-do/references/execution-recovery.md +19 -5
  22. package/.claude/skills/cc-do/references/parallel-dispatch.md +6 -4
  23. package/.claude/skills/cc-do/scripts/detect-file-conflicts.sh +49 -3
  24. package/.claude/skills/cc-do/scripts/verify-task-gates.sh +19 -6
  25. package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +14 -2
  26. package/.claude/skills/cc-investigate/CHANGELOG.md +24 -0
  27. package/.claude/skills/cc-investigate/PLAYBOOK.md +35 -13
  28. package/.claude/skills/cc-investigate/SKILL.md +87 -20
  29. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +68 -3
  30. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +9 -4
  31. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +41 -2
  32. package/.claude/skills/cc-investigate/references/investigation-contract.md +46 -0
  33. package/.claude/skills/cc-plan/CHANGELOG.md +32 -0
  34. package/.claude/skills/cc-plan/PLAYBOOK.md +26 -8
  35. package/.claude/skills/cc-plan/SKILL.md +79 -34
  36. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +71 -3
  37. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +32 -0
  38. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +76 -2
  39. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +58 -0
  40. package/.claude/skills/cc-plan/references/planning-contract.md +26 -4
  41. package/.claude/skills/cc-roadmap/CHANGELOG.md +14 -0
  42. package/.claude/skills/cc-roadmap/PLAYBOOK.md +10 -7
  43. package/.claude/skills/cc-roadmap/SKILL.md +43 -23
  44. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +10 -0
  45. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +15 -0
  46. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +1 -1
  47. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +11 -7
  48. package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
  49. package/.claude/skills/cc-simplify/SKILL.md +10 -1
  50. package/.claude/skills/cc-spec-init/CHANGELOG.md +6 -0
  51. package/.claude/skills/cc-spec-init/SKILL.md +14 -1
  52. package/CHANGELOG.md +29 -0
  53. package/README.md +10 -2
  54. package/README.zh-CN.md +10 -2
  55. package/bin/cc-devflow-cli.js +93 -2
  56. package/docs/examples/example-bindings.json +7 -7
  57. package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
  58. package/docs/examples/full-design-blocked/README.md +1 -1
  59. package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
  60. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
  61. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +1 -1
  62. package/docs/examples/full-design-blocked/roadmap-tracking.json +1 -1
  63. package/docs/examples/local-handoff/BACKLOG.md +1 -1
  64. package/docs/examples/local-handoff/README.md +1 -1
  65. package/docs/examples/local-handoff/ROADMAP.md +1 -1
  66. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
  67. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +1 -1
  68. package/docs/examples/local-handoff/roadmap-tracking.json +1 -1
  69. package/docs/examples/pdca-loop/BACKLOG.md +1 -1
  70. package/docs/examples/pdca-loop/README.md +1 -1
  71. package/docs/examples/pdca-loop/ROADMAP.md +1 -1
  72. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
  73. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +2 -2
  74. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +1 -1
  75. package/docs/examples/pdca-loop/roadmap-tracking.json +1 -1
  76. package/docs/get-shit-done-strategy-audit.md +518 -0
  77. package/docs/skill-strategy-audit.md +48 -0
  78. package/lib/compiler/__tests__/inventory.test.js +51 -0
  79. package/lib/compiler/inventory.js +78 -0
  80. package/lib/skill-runtime/__tests__/approve.test.js +92 -0
  81. package/lib/skill-runtime/__tests__/autopilot.test.js +4 -0
  82. package/lib/skill-runtime/__tests__/planner.tdd.test.js +20 -0
  83. package/lib/skill-runtime/__tests__/query.test.js +147 -1
  84. package/lib/skill-runtime/__tests__/readiness.test.js +53 -0
  85. package/lib/skill-runtime/__tests__/release.test.js +85 -0
  86. package/lib/skill-runtime/__tests__/runtime.integration.test.js +30 -1
  87. package/lib/skill-runtime/__tests__/schemas.test.js +56 -0
  88. package/lib/skill-runtime/__tests__/worker-run.test.js +29 -0
  89. package/lib/skill-runtime/errors.js +39 -0
  90. package/lib/skill-runtime/index.js +8 -0
  91. package/lib/skill-runtime/operations/approve.js +17 -2
  92. package/lib/skill-runtime/operations/release.js +6 -3
  93. package/lib/skill-runtime/operations/worker-run.js +30 -0
  94. package/lib/skill-runtime/planner.js +10 -2
  95. package/lib/skill-runtime/query-registry.js +101 -0
  96. package/lib/skill-runtime/query.js +159 -91
  97. package/lib/skill-runtime/readiness.js +84 -0
  98. package/lib/skill-runtime/schemas.js +39 -4
  99. package/lib/skill-runtime/trace.js +22 -0
  100. package/package.json +1 -1
@@ -1,5 +1,24 @@
1
1
  # CC-Act Skill Changelog
2
2
 
3
+ ## v1.8.1 - 2026-04-29
4
+
5
+ - add structured ship preflight fields with `ShipPreflightError` rescue actions
6
+ - require rollback guards before publish, merge, PR update, or release note handoff
7
+ - add PR branch hygiene and learning extraction targets to delivery templates
8
+
9
+ ## v1.8.0 - 2026-04-28
10
+
11
+ - add remote state consistency rules for issue, PR, tracker, `needs-info`, and `ready-for-agent` closeout handoffs
12
+ - require dangerous git actions to have explicit ship semantics and user confirmation before reset, clean, branch deletion, or whole-tree restore
13
+ - require tooling changes to prove the real hook, adapt, publish, lint, or verification entrypoint still works
14
+
15
+ ## v1.7.0 - 2026-04-28
16
+
17
+ - carry cc-check QA feedback-loop and behavior evidence into PR briefs, handoffs, and release notes so ship materials preserve expected/actual/reproduction truth
18
+ - add durable follow-up brief rules for current behavior, desired behavior, key interfaces, acceptance criteria, and out-of-scope boundaries
19
+ - teach shared follow-up and evidence extraction to include report-card followup briefs and QA architecture follow-ups
20
+ - extend readiness dashboard guidance with feedback-loop quality and behavior evidence checks
21
+
3
22
  ## v1.6.4 - 2026-04-28
4
23
 
5
24
  - add a readiness dashboard covering review freshness, review quality, specialist facets, QA coverage, browser QA, failure ownership, documentation release, and PR body accuracy
@@ -26,6 +26,7 @@
26
26
  2. 确认 `review/report-card.json` 是 `pass`,且没有未解释的 gaps / reroute
27
27
  3. 确认 `planning/tasks.md` 不再有未完成项
28
28
  4. 确认 `review.freshness` 新鲜、`runtime.failureOwnership` 无未解释失败、`qa.coverageAudit` / `qa.browserEvidence` 有证据或明确 skip
29
+ 5. 确认 `qa.feedbackLoop` / `qa.behaviorEvidence` 能支撑行为结论;不可复现时必须写清缺什么 artifact / 权限 / 输入
29
30
 
30
31
  如果 gate 没闭合,直接回 `cc-check` 或 `cc-do`,不要在 `cc-act` 自我安慰。
31
32
 
@@ -82,7 +83,10 @@ Ship 必须属于这 4 种模式之一:
82
83
  3. 检查提交边界,按逻辑单元拆分,保证提交顺序不引用未来代码。
83
84
  4. 如果有 WIP commit,只能用非破坏性 rebase / fixup 处理,不允许盲目 soft reset。
84
85
  5. push 前比较 local / remote HEAD;PR 前检查是否已有打开 PR / MR。
85
- 6. 生成 readiness dashboard:review freshness、review quality、QA coverage、browser QA、failure ownership、documentation release、PR body accuracy。
86
+ 6. 生成 readiness dashboard:review freshness、review quality、QA coverage、browser QA、feedback loop、behavior evidence、failure ownership、documentation release、PR body accuracy。
87
+ 7. 生成 ship preflight:branch/base/remote/auth/clean tree/review freshness/ship mode。
88
+ 8. preflight 失败必须命名为 `ShipPreflightError`,并写明 rescue action 或切到 `local-handoff`。
89
+ 9. 发布、合并、PR 更新或 release note 前必须写 rollback guard。
86
90
 
87
91
  ## Phase 3: Build Delivery Pack
88
92
 
@@ -114,8 +118,12 @@ Ship 必须属于这 4 种模式之一:
114
118
  - review packet path / summary
115
119
  - finding triage summary
116
120
  - QA / claim evidence summary
121
+ - ship preflight and `ShipPreflightError` rescue if any
122
+ - rollback guard
123
+ - QA behavior evidence and feedback-loop quality
117
124
  - readiness dashboard
118
125
  - PR body accuracy check
126
+ - Durable follow-up briefs: current behavior、desired behavior、key interfaces、acceptance criteria、out of scope
119
127
 
120
128
  缺这些字段时,可以生成 local handoff,但不能声称 PR body 已经可 review。
121
129
 
@@ -183,6 +191,8 @@ Ship 必须属于这 4 种模式之一:
183
191
  - 长期方向写 `devflow/roadmap/roadmap.md`
184
192
  - 下一轮待排队动作写 `devflow/roadmap/backlog.md`
185
193
  - 不要把噪音和碎念回写成系统真相
194
+ - follow-up 必须是 durable brief:用领域语言写 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope
195
+ - 独立行为拆独立条目;有依赖关系时写明顺序,方便下一轮并行或排队
186
196
 
187
197
  ## Phase 7: Declare The Next Entry
188
198
 
@@ -201,6 +211,9 @@ Ship 必须属于这 4 种模式之一:
201
211
  4. `cc-simplify`、单测、e2e、commit/push 的结果是不是都能追溯?
202
212
  5. PR body / release note / handoff / changelog 说的是不是同一套现实?
203
213
  6. readiness dashboard 有没有 blocker 或 stale warning?
214
+ 7. follow-up 是不是行为契约,而不是“改某文件某行”的易腐烂 TODO?
215
+ 8. ship preflight failure 是否有 `ShipPreflightError`、artifact ref 和 rescue action?
216
+ 9. rollback guard 是否足够让下一位维护者不靠聊天记录回退?
204
217
 
205
218
  如果第 1 或第 3 题答案不是“能”,说明 `cc-act` 仍然太重或太糊。
206
219
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cc-act
3
- version: 1.6.4
3
+ version: 1.8.1
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
@@ -37,7 +37,7 @@ effects:
37
37
  - roadmap or backlog follow-up updates when needed
38
38
  entry_gate:
39
39
  - 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.
40
+ - Freeze current branch, PR, ship-mode, auth, clean-tree, and rollback facts before writing delivery materials.
41
41
  - If simplify, tests, or act changes code or verification scope, return to cc-check immediately.
42
42
  exit_criteria:
43
43
  - The ship mode is explicit, delivery materials match that mode, and the next maintainer has one clear entry point.
@@ -127,7 +127,8 @@ tool_budget:
127
127
  3. 运行 `scripts/verify-act-gate.sh --dir <requirement-dir>`,确认 gate 真的闭合。
128
128
  4. 运行 `scripts/detect-ship-target.sh`,识别当前分支、base branch、PR 状态与推荐 ship 路径。
129
129
  5. 检查 `review.freshness`、`runtime.failureOwnership`、`qa.coverageAudit`、`qa.browserEvidence`,确认 readiness dashboard 没有 blocker。
130
- 6. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship
130
+ 6. 检查 `qa.feedbackLoop`、`qa.behaviorEvidence`、`qa.architectureFollowUps` follow-up brief,确认交付材料继承的是行为证据,不是聊天记忆或易腐烂 TODO
131
+ 7. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship。
131
132
 
132
133
  ## Ship Modes
133
134
 
@@ -213,6 +214,32 @@ tool_budget:
213
214
  7. PR idempotency:已有打开的 PR / MR 只更新 body,不重复创建。
214
215
  8. Review range:PR brief / PR body 必须写清 `cc-check` 审过的 base/head SHA、review packet、finding triage 摘要。
215
216
  9. Post-integration verification:本地合并或 post-merge closeout 后,必须在 merged result 上跑必要 gate;不能只继承合并前绿色。
217
+ 10. Follow-up durability:PR brief / release note / backlog writeback 里的 follow-up 必须写成行为契约,包含 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope;不要把当前文件路径或行号当成长期计划。
218
+ 11. Remote state consistency:如果本次 closeout 触碰 GitHub issue / PR / tracker,必须记录当前 state、目标 state、允许转换、已保留事实和下一位 owner;`needs-info` 必须保留已确认事实和具体问题,`ready-for-agent` 必须有可执行 brief。
219
+ 12. Tooling smoke:如果本次改动影响 hook、pre-commit、lint、publish、adapt 或验证脚本,必须跑真实入口或最接近真实入口的 smoke;只读配置文件不等于工具链可用。
220
+
221
+ ## Ship Preflight And Rescue
222
+
223
+ ship preflight 必须结构化记录:
224
+
225
+ - `branch`: 当前分支、base、remote、local/remote HEAD 关系
226
+ - `auth`: `gh` / registry / deploy / package publish 等权限是否可用
227
+ - `workspace`: clean tree、staged files、未跟踪文件和相关 stash
228
+ - `reviewFreshness`: `cc-check` 审查范围是否仍绑定当前 HEAD
229
+ - `shipMode`: `create-pr` / `update-pr` / `local-handoff` / `post-merge-closeout`
230
+
231
+ 任何 preflight failure 都必须命名为 `ShipPreflightError`,并写清 rescue action。
232
+ 不能用“工具不可用”当作模糊失败;要明确切 `local-handoff`、补 auth、刷新 review,
233
+ 还是返回 `cc-check`。
234
+
235
+ rollback guard 必须在 publish、merge、PR 更新或 release note 前写清:
236
+
237
+ - safe state
238
+ - rollback command 或人工回退步骤
239
+ - data / migration / package / remote side effect
240
+ - owner
241
+
242
+ 没有 rollback guard 的 release 只能停在 handoff,不准发布。
216
243
 
217
244
  ## Readiness Dashboard
218
245
 
@@ -222,9 +249,11 @@ PR / handoff 之前必须把 readiness 压成一屏事实:
222
249
  2. Review quality:记录 `review.qualityScore`、specialist facet 覆盖、finding triage 摘要。
223
250
  3. QA coverage:记录 `qa.coverageAudit` 的 coverage、gaps、e2e/eval requirement。
224
251
  4. Browser QA:UI / 用户路径变更必须有 `qa.browserEvidence`,否则要有 skip reason。
225
- 5. Failure ownership:`runtime.failureOwnership` 不能有未解释的 `in-branch` `ambiguous` failure。
226
- 6. Documentation releaseREADME / CLAUDE / architecture / handoff / changelog 的同步状态必须可审计。
227
- 7. PR body accuracy:PR body 必须从当前 `pr-brief.md`、当前 diff、当前 report-card 重建;已有 PR body 只能被刷新,不能被继承。
252
+ 5. Feedback loop:bugfix / 行为变更必须有 `qa.feedbackLoop`,否则要有不可复现或不适用原因。
253
+ 6. Behavior evidenceexpected / actual / reproduction steps 必须能被 reviewer 独立理解。
254
+ 7. Failure ownership:`runtime.failureOwnership` 不能有未解释的 `in-branch` `ambiguous` failure。
255
+ 8. Documentation release:README / CLAUDE / architecture / handoff / changelog 的同步状态必须可审计。
256
+ 9. PR body accuracy:PR body 必须从当前 `pr-brief.md`、当前 diff、当前 report-card 重建;已有 PR body 只能被刷新,不能被继承。
228
257
 
229
258
  readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute 到 `cc-check` / `cc-do` 或生成 local handoff。
230
259
 
@@ -236,6 +265,7 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
236
265
  2. 丢弃未合并工作必须要求用户显式确认;没有确认时只能转 `local-handoff`。
237
266
  3. branch cleanup 只发生在 merge / PR / discard 语义已经清楚之后。
238
267
  4. `post-merge-closeout` 必须记录 merged-result verification:命令、exit status、关键观察、失败时 reroute。
268
+ 5. 危险 Git 动作必须有明确 ship 语义:`git push` 只在 `create-pr` / `update-pr` / release lane 执行,`git reset --hard`、`git clean -f`、`git branch -D`、整树 restore/checkout 必须先列出对象并取得用户确认;没有确认时写 handoff,不执行。
239
269
 
240
270
  ## Documentation Release
241
271
 
@@ -249,6 +279,16 @@ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute
249
279
  6. Discoverability:新增文档必须能从 README、CLAUDE 或 handoff 入口找到。
250
280
  7. TODO/backlog cleanup:只把有 diff 证据完成的事项移到 completed;新 follow-up 写回 backlog/roadmap。
251
281
 
282
+ ## Issue And Follow-Up Handoff
283
+
284
+ 当本次交付产生或更新 issue / PR / backlog follow-up 时,文案必须耐 refactor:
285
+
286
+ - 先写用户可观察行为:what happened / expected / reproduction 或 desired behavior。
287
+ - 再写 agent 可执行 contract:acceptance criteria、allowed scope、blocked by、verification command。
288
+ - 不把短期文件路径、行号、函数名写成长期事实;只有当前 reviewer 需要定位时才放进 PR brief 的实现备注。
289
+ - 多个 follow-up 必须按独立可验证切片拆开,并标明 `AFK` / `HITL`、blocked-by 和 owner。
290
+ - 已经问过或确认过的信息不能在 `needs-info` 里丢失;问题必须具体到 reporter 能直接补证据。
291
+
252
292
  ## Loop
253
293
 
254
294
  1. 先锁定 ship 事实:当前分支、base branch、PR 状态、requirement 状态。
@@ -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:
@@ -39,6 +60,8 @@
39
60
  - Specialist review facets:
40
61
  - QA coverage:
41
62
  - Browser QA:
63
+ - Feedback loop:
64
+ - Behavior evidence:
42
65
  - Failure ownership:
43
66
  - Documentation release:
44
67
  - PR body accuracy:
@@ -57,6 +80,21 @@
57
80
  - Fresh evidence:
58
81
  - Merged-result verification:
59
82
 
83
+ ## Rollback Guard
84
+
85
+ - Safe state:
86
+ - Rollback command / manual steps:
87
+ - Side effects:
88
+ - Owner:
89
+
90
+ ## QA Behavior Evidence
91
+
92
+ - Feedback loop:
93
+ - Expected behavior:
94
+ - Actual behavior:
95
+ - Reproduction steps:
96
+ - Consistency:
97
+
60
98
  ## Documentation Sync
61
99
 
62
100
  - `CLAUDE.md`:
@@ -81,7 +119,12 @@
81
119
 
82
120
  ## Follow-Ups
83
121
 
84
- -
122
+ - Current behavior:
123
+ - Desired behavior:
124
+ - Key interfaces:
125
+ - Acceptance criteria:
126
+ - Out of scope:
127
+ - Learning extraction target:
85
128
 
86
129
  ## Risks
87
130
 
@@ -20,10 +20,27 @@
20
20
 
21
21
  -
22
22
 
23
+ ## Rollback Guard
24
+
25
+ - Safe state:
26
+ - Rollback command / manual steps:
27
+ - Side effects:
28
+ - Owner:
29
+
30
+ ## QA Behavior Evidence
31
+
32
+ - Feedback loop:
33
+ - User-visible behavior:
34
+ - Reproduction / verification path:
35
+
23
36
  ## Ops Notes
24
37
 
25
38
  -
26
39
 
27
40
  ## Follow-Ups
28
41
 
29
- -
42
+ - Current behavior:
43
+ - Desired behavior:
44
+ - Acceptance criteria:
45
+ - Out of scope:
46
+ - Learning extraction target:
@@ -10,6 +10,7 @@
10
10
  6. 如果文件结构变了,就同步对应目录的 `CLAUDE.md`
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
+ 9. behavior handoff 必须带上 QA feedback loop、expected / actual / reproduction steps,以及 durable follow-up brief
13
14
 
14
15
  ## Ship Decision Contract
15
16
 
@@ -35,6 +36,7 @@
35
36
  9. 删除 branch、worktree、未合并提交、归档 requirement 前必须列出对象;丢弃未合并工作需要显式确认
36
37
  10. verification 每次进入 `cc-act` 都必须重新跑;只有 push、PR 更新、文档生成等动作可以因为幂等状态跳过
37
38
  11. PR body accuracy 必须对照当前 report-card、当前 diff、当前 commits;旧 body 不能作为证据源
39
+ 12. follow-up 回写必须用行为契约表达,包含 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope;不能只写文件路径或聊天 TODO
38
40
 
39
41
  ## Memory Consolidation
40
42
 
@@ -52,6 +54,7 @@
52
54
  - maintainer 知道怎么验证
53
55
  - PR / handoff / release 材料反映同一套事实
54
56
  - readiness dashboard 没有 blocker,PR body accuracy 已检查或明确阻塞
57
+ - QA behavior evidence 和 feedback loop 已进入 PR / handoff / release 材料
55
58
  - post-merge closeout 反映 merged result 的验证事实,而不是只反映合并前事实
56
59
  - 下一轮计划入口更清楚
57
60
  - 文档入口可发现,changelog 不丢历史,TODO / backlog 只记录有证据的事项
@@ -189,6 +189,30 @@ req_act_collect_followups() {
189
189
 
190
190
  if [[ -f "$report_card" ]]; then
191
191
  jq -r '(.gaps // [])[]?' "$report_card" 2>/dev/null | sed '/^$/d' > "$out_file" || true
192
+ jq -r '
193
+ (.followupBriefs // .review.followupBriefs // [])[]?
194
+ | [
195
+ ("summary: " + (.summary // .title // "follow-up")),
196
+ ("current: " + (.currentBehavior // "not recorded")),
197
+ ("desired: " + (.desiredBehavior // "not recorded")),
198
+ ("interfaces: " + ((.keyInterfaces // []) | join(", "))),
199
+ ("acceptance: " + ((.acceptanceCriteria // []) | join("; "))),
200
+ ("out-of-scope: " + ((.outOfScope // []) | join(", ")))
201
+ ]
202
+ | join(" | ")
203
+ ' "$report_card" 2>/dev/null | sed '/^$/d' >> "$out_file" || true
204
+ jq -r '
205
+ (.qa.architectureFollowUps // [])[]?
206
+ | [
207
+ ("summary: " + (.summary // .title // "architecture follow-up")),
208
+ ("current: " + (.currentBehavior // "not recorded")),
209
+ ("desired: " + (.desiredBehavior // "not recorded")),
210
+ ("interfaces: " + ((.keyInterfaces // []) | join(", "))),
211
+ ("acceptance: " + ((.acceptanceCriteria // []) | join("; "))),
212
+ ("out-of-scope: " + ((.outOfScope // []) | join(", ")))
213
+ ]
214
+ | join(" | ")
215
+ ' "$report_card" 2>/dev/null | sed '/^$/d' >> "$out_file" || true
192
216
  fi
193
217
 
194
218
  if [[ -f "$manifest" ]]; then
@@ -238,7 +262,9 @@ req_act_collect_evidence() {
238
262
  (.evidence // [])[]?,
239
263
  ((.claimEvidence // [])[]? | "- " + (.claim // "claim") + ": " + (.status // "unknown") + " via " + (.commandOrArtifact // "artifact") + " - " + (.keyObservation // "")),
240
264
  (if .qa.coverageAudit then "- qa.coverage: " + (.qa.coverageAudit.status // "unknown") + ", gaps=" + (((.qa.coverageAudit.gaps // []) | length) | tostring) else empty end),
241
- (if .qa.browserEvidence then "- qa.browser: " + (.qa.browserEvidence.status // "unknown") + ", mode=" + (.qa.browserEvidence.mode // "unknown") else empty end)
265
+ (if .qa.browserEvidence then "- qa.browser: " + (.qa.browserEvidence.status // "unknown") + ", mode=" + (.qa.browserEvidence.mode // "unknown") else empty end),
266
+ (if .qa.feedbackLoop then "- qa.feedbackLoop: " + (.qa.feedbackLoop.status // "unknown") + ", mode=" + (.qa.feedbackLoop.mode // "unknown") + ", signal=" + (.qa.feedbackLoop.signalSharpness // "not recorded") else empty end),
267
+ (if .qa.behaviorEvidence then "- qa.behavior: " + (.qa.behaviorEvidence.status // "unknown") + ", expected=" + (.qa.behaviorEvidence.expectedBehavior // "not recorded") + ", actual=" + (.qa.behaviorEvidence.actualBehavior // "not recorded") else empty end)
242
268
  ' "$report_card" 2>/dev/null | sed '/^$/d' > "$out_file" || true
243
269
  req_act_dedup_file "$out_file"
244
270
  }
@@ -157,6 +157,23 @@ browser_qa_summary="$(jq -r '
157
157
  (if (($browser.skipReason // "") != "") then ", skip=\($browser.skipReason)" else "" end)
158
158
  end
159
159
  ' "$report_card")"
160
+ feedback_loop_summary="$(jq -r '
161
+ .qa.feedbackLoop as $loop |
162
+ if $loop == null then
163
+ "not recorded"
164
+ else
165
+ "status=\($loop.status // "unknown"), mode=\($loop.mode // "unknown"), determinism=\($loop.determinism // "not recorded"), reproductionRate=\($loop.reproductionRate // "not recorded")" +
166
+ (if (($loop.blockedReason // "") != "") then ", blocked=\($loop.blockedReason)" else "" end)
167
+ end
168
+ ' "$report_card")"
169
+ behavior_evidence_summary="$(jq -r '
170
+ .qa.behaviorEvidence as $behavior |
171
+ if $behavior == null then
172
+ "not recorded"
173
+ else
174
+ "status=\($behavior.status // "unknown"), boundary=\($behavior.userFacingBoundary // "not recorded"), expected=\($behavior.expectedBehavior // "not recorded"), actual=\($behavior.actualBehavior // "not recorded"), steps=\((($behavior.reproductionSteps // []) | length))"
175
+ end
176
+ ' "$report_card")"
160
177
  failure_ownership_summary="$(jq -r '
161
178
  (.runtime.failureOwnership? // [])
162
179
  | if length == 0 then
@@ -210,6 +227,8 @@ pr_body_accuracy_summary="body must be regenerated from this pr-brief, current r
210
227
  echo "- Specialist review facets: $specialist_review_summary"
211
228
  echo "- QA coverage: $qa_coverage_summary"
212
229
  echo "- Browser QA: $browser_qa_summary"
230
+ echo "- Feedback loop: $feedback_loop_summary"
231
+ echo "- Behavior evidence: $behavior_evidence_summary"
213
232
  echo "- Failure ownership: $failure_ownership_summary"
214
233
  echo "- Documentation release: $documentation_release_summary"
215
234
  echo "- PR body accuracy: $pr_body_accuracy_summary"
@@ -252,6 +271,18 @@ pr_body_accuracy_summary="body must be regenerated from this pr-brief, current r
252
271
  echo "- No evidence lines captured yet."
253
272
  fi
254
273
  echo
274
+ echo "## QA Behavior Evidence"
275
+ echo
276
+ echo "- Feedback loop: $feedback_loop_summary"
277
+ echo "- Behavior evidence: $behavior_evidence_summary"
278
+ jq -r '
279
+ .qa.behaviorEvidence as $behavior |
280
+ if $behavior == null then empty else
281
+ (($behavior.reproductionSteps // [])[]? | "- Reproduction step: " + .),
282
+ (($behavior.domainLanguage // [])[]? | "- Domain language: " + .)
283
+ end
284
+ ' "$report_card" 2>/dev/null | sed '/^$/d' || true
285
+ echo
255
286
  echo "## Documentation Sync"
256
287
  echo
257
288
  echo "- \`CLAUDE.md\`: $claude_status"
@@ -47,6 +47,8 @@ failure_ownership_open="$(jq -r '
47
47
  ' "$report_card" 2>/dev/null || echo 0)"
48
48
  coverage_status="$(jq -r '.qa.coverageAudit.status // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
49
49
  browser_status="$(jq -r '.qa.browserEvidence.status // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
50
+ feedback_loop_status="$(jq -r '.qa.feedbackLoop.status // "skipped"' "$report_card" 2>/dev/null || echo skipped)"
51
+ behavior_evidence_status="$(jq -r '.qa.behaviorEvidence.status // "skipped"' "$report_card" 2>/dev/null || echo skipped)"
50
52
 
51
53
  remaining_tasks="0"
52
54
  if [[ -f "$tasks_file" ]]; then
@@ -62,6 +64,8 @@ fi
62
64
  [[ "$failure_ownership_open" -eq 0 ]] || { echo "Gate open: failure_ownership_open=$failure_ownership_open" >&2; exit 1; }
63
65
  [[ "$coverage_status" != "blocked" && "$coverage_status" != "fail" && "$coverage_status" != "pending" ]] || { echo "Gate open: coverage_status=$coverage_status" >&2; exit 1; }
64
66
  [[ "$browser_status" != "blocked" && "$browser_status" != "fail" && "$browser_status" != "pending" ]] || { echo "Gate open: browser_status=$browser_status" >&2; exit 1; }
67
+ [[ "$feedback_loop_status" != "blocked" && "$feedback_loop_status" != "fail" && "$feedback_loop_status" != "pending" ]] || { echo "Gate open: feedback_loop_status=$feedback_loop_status" >&2; exit 1; }
68
+ [[ "$behavior_evidence_status" != "blocked" && "$behavior_evidence_status" != "fail" && "$behavior_evidence_status" != "pending" ]] || { echo "Gate open: behavior_evidence_status=$behavior_evidence_status" >&2; exit 1; }
65
69
  [[ "$remaining_tasks" -eq 0 ]] || { echo "Gate open: remaining_tasks=$remaining_tasks" >&2; exit 1; }
66
70
 
67
71
  cat <<EOF
@@ -75,5 +79,7 @@ REVIEW_FRESHNESS=$review_freshness
75
79
  FAILURE_OWNERSHIP_OPEN=$failure_ownership_open
76
80
  COVERAGE_STATUS=$coverage_status
77
81
  BROWSER_STATUS=$browser_status
82
+ FEEDBACK_LOOP_STATUS=$feedback_loop_status
83
+ BEHAVIOR_EVIDENCE_STATUS=$behavior_evidence_status
78
84
  REMAINING_TASKS=$remaining_tasks
79
85
  EOF
@@ -1,5 +1,23 @@
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
+
9
+ ## v1.10.0 - 2026-04-28
10
+
11
+ - add test fixture honesty review for partial fixtures, generated stubs, casts, and missing mock payload fields
12
+ - require fixture shortcuts to preserve public seam behavior instead of hiding contract or input-shape problems
13
+
14
+ ## v1.9.0 - 2026-04-28
15
+
16
+ - add QA feedback-loop evidence so bugfix and behavior checks record reproduction mode, determinism, signal quality, and blocked loop reasons before a pass verdict
17
+ - add behavior evidence fields for expected behavior, actual behavior, reproduction steps, consistency, and domain language
18
+ - tighten test-quality review around public-interface tests, system-boundary mocks, and architecture follow-ups when no correct test seam exists
19
+ - update the report-card template, renderer, and gate validation for the new QA evidence shape while keeping older reports structurally compatible
20
+
3
21
  ## v1.8.4 - 2026-04-28
4
22
 
5
23
  - add review freshness, quality score, specialist review facets, and finding confidence fingerprints so stale or noisy review evidence cannot masquerade as current proof
@@ -41,6 +41,7 @@ NO PASS WITHOUT FRESH EVIDENCE
41
41
  - task review proof
42
42
  - requirement diff review
43
43
  - claim evidence matrix
44
+ - QA feedback loop and behavior evidence
44
45
  - QA regression / test-quality proof
45
46
  - QA coverage and browser evidence
46
47
  - review freshness and finding confidence
@@ -62,6 +63,8 @@ NO PASS WITHOUT FRESH EVIDENCE
62
63
  6. 把每个成功声明映射到 `claimEvidence[]`
63
64
  7. 行为变更必须补 `qa` 证据或例外理由
64
65
  8. 失败输出必须写入 `runtime.failureOwnership[]`
66
+ 9. failure ownership 必须包含 named error、artifact refs 和 rescue action
67
+ 10. human UAT 必须 pass、fail、blocked 或带 skip reason;失败不能被测试绿灯覆盖
65
68
 
66
69
  ## Verification Layers
67
70
 
@@ -69,11 +72,14 @@ NO PASS WITHOUT FRESH EVIDENCE
69
72
  2. Task review proof
70
73
  3. Requirement diff truth
71
74
  4. Claim evidence matrix
72
- 5. QA regression and test quality
73
- 6. QA coverage and browser evidence
74
- 7. Review freshness and confidence calibration
75
- 8. Failure ownership
76
- 9. Spec alignment and sync readiness
75
+ 5. QA feedback loop and behavior evidence
76
+ 6. QA regression and test quality
77
+ 7. QA coverage and browser evidence
78
+ 8. Review freshness and confidence calibration
79
+ 9. Failure ownership
80
+ 10. Spec alignment and sync readiness
81
+ 11. Human UAT
82
+ 12. Named runtime errors and rescue actions
77
83
 
78
84
  ## Claim Evidence Matrix
79
85
 
@@ -121,13 +127,16 @@ review 还要带 `freshness`:`status`、`reviewedCommit`、`currentCommit`、`
121
127
 
122
128
  行为变化、bugfix、边界条件、用户可见流程必须补 `qa`:
123
129
 
130
+ - `feedbackLoop`:用什么 loop 证明现实,速度、确定性、信号锋利度、复现率如何
131
+ - `behaviorEvidence`:用户边界、expected / actual、复现步骤、稳定性、领域语言
124
132
  - `regressionProof`:red command、red failure reason、green command、是否恢复最终状态
125
- - `testQuality`:是否验证真实行为、mock 边界、是否存在 test-only production API
133
+ - `testQuality`:是否经公共接口验证真实行为、mock 是否只停在系统边界、是否存在 test-only production API
134
+ - `architectureFollowUps`:没有正确 test seam 时记录 seam / hidden coupling / shallow module 的后续改造
126
135
  - `tddException`:纯配置、生成文件、throwaway prototype 等例外和替代验证
127
136
  - `coverageAudit`:覆盖率、codepath / user-flow map、缺口、是否需要 e2e / eval、测试质量星级
128
137
  - `browserEvidence`:UI / 用户路径变更的 affected routes、截图、console、health score、issues,或明确 skip reason
129
138
 
130
- 测试只绿过一次,不能证明 regression test 有效;断言 mock 本身,不能证明真实行为。
139
+ 测试只绿过一次,不能证明 regression test 有效;断言 mock 本身,不能证明真实行为。没有可信反馈环时,`pass` 不成立。
131
140
 
132
141
  ## Failure Ownership
133
142
 
@@ -171,6 +180,26 @@ review 还要带 `freshness`:`status`、`reviewedCommit`、`currentCommit`、`
171
180
  },
172
181
  "qa": {
173
182
  "status": "pass",
183
+ "feedbackLoop": {
184
+ "status": "pass",
185
+ "mode": "targeted-test",
186
+ "commandOrArtifact": "npm test -- src/feature/feature.test.ts",
187
+ "speed": "fast",
188
+ "determinism": "high",
189
+ "signalSharpness": "fails only when the target behavior is absent",
190
+ "reproductionRate": "1/1",
191
+ "attempts": [],
192
+ "blockedReason": ""
193
+ },
194
+ "behaviorEvidence": {
195
+ "status": "pass",
196
+ "userFacingBoundary": "feature action",
197
+ "expectedBehavior": "the user-visible behavior succeeds",
198
+ "actualBehavior": "verified by targeted test",
199
+ "reproductionSteps": [],
200
+ "consistency": "deterministic",
201
+ "domainLanguage": []
202
+ },
174
203
  "regressionProof": [],
175
204
  "testQuality": [],
176
205
  "coverageAudit": {
@@ -193,6 +222,7 @@ review 还要带 `freshness`:`status`、`reviewedCommit`、`currentCommit`、`
193
222
  "issues": [],
194
223
  "skipReason": "not a UI or user-path change"
195
224
  },
225
+ "architectureFollowUps": [],
196
226
  "tddException": null
197
227
  },
198
228
  "quickGates": [],
@@ -251,3 +281,4 @@ review 还要带 `freshness`:`status`、`reviewedCommit`、`currentCommit`、`
251
281
  4. `review.status` 是真实现实,还是我脑补的绿色?
252
282
  5. 如果把这份 `report-card.json` 给下一位接手者,他知道接下来去哪吗?
253
283
  6. diff review 是否同时覆盖了 plan completion、scope drift、critical pass、doc staleness?
284
+ 7. feedback loop 是否真的证明了用户描述的行为,而不是只证明附近代码能跑?
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cc-check
3
- version: 1.8.4
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:
@@ -120,6 +120,7 @@ NO PASS WITHOUT FRESH EVIDENCE
120
120
  - task-level review proof
121
121
  - requirement-level diff review
122
122
  - claim evidence matrix
123
+ - QA feedback loop and behavior evidence
123
124
  - QA regression / test-quality proof
124
125
  - spec alignment / sync readiness
125
126
  4. **Freeze Verdict**
@@ -138,7 +139,7 @@ NO PASS WITHOUT FRESH EVIDENCE
138
139
 
139
140
  ## Verification Layers
140
141
 
141
- `cc-check` 不是只看“测试是不是绿的”,而是至少看 9 层:
142
+ `cc-check` 不是只看“测试是不是绿的”,而是至少看 10 层:
142
143
 
143
144
  1. **Runtime Layer**
144
145
  - 测试、lint、typecheck、build、脚本 gate
@@ -154,6 +155,7 @@ NO PASS WITHOUT FRESH EVIDENCE
154
155
  6. **QA Test Layer**
155
156
  - 回归测试是否有 red/green 证据
156
157
  - 测试是否验证真实行为,而不是 mock 或 test-only production API
158
+ - 反馈环是否能稳定复现或证明用户描述的行为
157
159
  7. **Review Freshness Layer**
158
160
  - review 是否绑定当前 `headSha`
159
161
  - 从 review 到当前 HEAD 是否还有新增 commit
@@ -164,6 +166,15 @@ NO PASS WITHOUT FRESH EVIDENCE
164
166
  9. **Failure Ownership Layer**
165
167
  - 失败是本分支引入、基线已存在、环境阻塞,还是归属不明
166
168
  - 归属不明默认不能支撑 `pass`
169
+ 10. **Behavior Contract Layer**
170
+ - expected / actual / reproduction steps 是否用用户和领域语言写清
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`
167
178
 
168
179
  任何一层失真,都不能写 `pass`。
169
180
 
@@ -187,13 +198,27 @@ NO PASS WITHOUT FRESH EVIDENCE
187
198
 
188
199
  `cc-check` 必须区分“有测试”和“测试证明了正确行为”:
189
200
 
190
- 1. 回归测试必须记录 red/green 证据;red 要因为目标行为缺失而失败,不是语法、fixture mock 写错。
191
- 2. 测试应验证真实行为;如果依赖 mock,必须说明 mock 的边界和为什么不会测试 mock 本身。
192
- 3. 生产代码里新增仅测试使用的 API,默认是坏味道,必须 blocking,除非有明确生产生命周期理由。
193
- 4. 复杂 mock setup 超过测试主体时,优先要求 integration / contract test 解释。
201
+ 1. 先建立反馈环,再谈修复:failing test、curl / HTTP、CLI fixture、headless browser、trace replay、throwaway harness、bisect / differential loop 都可以,但必须说明速度、确定性、信号锋利度和复现率。
202
+ 2. 回归测试必须记录 red/green 证据;red 要因为目标行为缺失而失败,不是语法、fixture mock 写错。
203
+ 3. 测试应从公共接口验证真实行为;不准为了方便直接测私有实现。
204
+ 4. mock 只允许站在系统边界:外部 API、数据库、时间、随机数、文件系统、网络。mock 自家模块、断言内部调用次数或顺序,默认是 review finding。
205
+ 5. 生产代码里新增仅测试使用的 API,默认是坏味道,必须 blocking,除非有明确生产生命周期理由。
206
+ 6. 复杂 mock setup 超过测试主体时,优先要求 integration / contract test 解释。
207
+ 7. test fixture 必须诚实表达 contract:partial fixture、generated stub、`as` / `any` / 双重 cast、缺字段 mock payload 都要说明真实字段与填充字段;如果这些技巧让测试绕过公共 seam 或隐藏错误输入,默认是 review finding。
208
+ 8. 如果没有正确测试 seam,不要硬造脆弱测试;记录 `qa.architectureFollowUps`,说明缺失 seam / hidden coupling / shallow module,并按严重度决定 reroute 或 follow-up。
194
209
 
195
210
  这些事实写入 `qa.regressionProof` 和 `qa.testQuality`。如果本需求没有行为测试空间,必须记录 `tddException` 或替代验证命令。
196
211
 
212
+ ## QA Behavior Evidence
213
+
214
+ 用户可见行为、bugfix、regression、工作流、CLI 行为和 API 行为都必须留下行为证据:
215
+
216
+ 1. `qa.feedbackLoop` 记录本轮用什么 loop 证明现实,包含 `status`、`mode`、`commandOrArtifact`、`speed`、`determinism`、`signalSharpness`、`reproductionRate`、`attempts`、`blockedReason`。
217
+ 2. `qa.behaviorEvidence` 记录 `userFacingBoundary`、`expectedBehavior`、`actualBehavior`、`reproductionSteps`、`consistency`、`domainLanguage`、`status`。
218
+ 3. bugfix 不能只写“代码改了”;必须证明用户描述的原始症状已经被同一条或更可信的反馈环覆盖。
219
+ 4. 不能复现时,verdict 默认 `blocked` 或回 `cc-investigate`,并写清尝试过哪些 loop、还缺什么 artifact / 权限 / 输入。
220
+ 5. QA issue / follow-up 必须用行为和验收条件表达,不写易失效的文件路径或行号,除非它是当前 review finding 的证据位置。
221
+
197
222
  ## QA Coverage And Browser Evidence
198
223
 
199
224
  测试不是数量游戏。`cc-check` 必须判断测试覆盖了哪条真实路径:
@@ -265,6 +290,13 @@ NO PASS WITHOUT FRESH EVIDENCE
265
290
  4. `environment` 必须记录缺失依赖、权限、服务、密钥或平台约束。
266
291
  5. `pass` 不能带未解释的 `in-branch` 或 `ambiguous` 失败。
267
292
 
293
+ 每条 failure ownership 还必须命名:
294
+
295
+ - `errorName`:可搜索的错误名,例如 `MissingSpecReviewProof`
296
+ - `artifactRefs`:指向 report、manifest、checkpoint、日志或命令输出
297
+ - `rescueAction`:下一步救援动作,不写空泛“检查一下”
298
+ - `owner`:`branch` / `baseline` / `environment` / `external` / `unknown`
299
+
268
300
  ## Entry Gate
269
301
 
270
302
  1. 先读 `planning/design.md` 或 `planning/analysis.md`,再读 `planning/tasks.md`、`planning/task-manifest.json`。