cc-devflow 4.5.1 → 4.5.3

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 (81) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +27 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +32 -1
  3. package/.claude/skills/cc-act/SKILL.md +53 -7
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +35 -1
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +10 -1
  6. package/.claude/skills/cc-act/references/closure-contract.md +11 -0
  7. package/.claude/skills/cc-act/scripts/cc-act-common.sh +32 -1
  8. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +130 -0
  9. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +23 -1
  10. package/.claude/skills/cc-check/CHANGELOG.md +26 -0
  11. package/.claude/skills/cc-check/PLAYBOOK.md +128 -1
  12. package/.claude/skills/cc-check/SKILL.md +147 -7
  13. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +164 -1
  14. package/.claude/skills/cc-check/references/gate-contract.md +11 -0
  15. package/.claude/skills/cc-check/references/review-contract.md +104 -0
  16. package/.claude/skills/cc-check/scripts/render-report-card.js +209 -5
  17. package/.claude/skills/cc-check/scripts/verify-gate.sh +28 -0
  18. package/.claude/skills/cc-do/CHANGELOG.md +12 -0
  19. package/.claude/skills/cc-do/PLAYBOOK.md +14 -9
  20. package/.claude/skills/cc-do/SKILL.md +24 -13
  21. package/.claude/skills/cc-do/references/execution-recovery.md +16 -5
  22. package/.claude/skills/cc-do/scripts/verify-task-gates.sh +19 -6
  23. package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +14 -2
  24. package/.claude/skills/cc-investigate/CHANGELOG.md +31 -0
  25. package/.claude/skills/cc-investigate/PLAYBOOK.md +124 -8
  26. package/.claude/skills/cc-investigate/SKILL.md +252 -17
  27. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +112 -3
  28. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +17 -5
  29. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +141 -1
  30. package/.claude/skills/cc-investigate/references/investigation-contract.md +192 -0
  31. package/.claude/skills/cc-plan/CHANGELOG.md +26 -0
  32. package/.claude/skills/cc-plan/PLAYBOOK.md +18 -6
  33. package/.claude/skills/cc-plan/SKILL.md +72 -34
  34. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +30 -3
  35. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -0
  36. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +46 -1
  37. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +24 -0
  38. package/.claude/skills/cc-plan/references/planning-contract.md +18 -4
  39. package/.claude/skills/cc-roadmap/CHANGELOG.md +14 -0
  40. package/.claude/skills/cc-roadmap/PLAYBOOK.md +10 -7
  41. package/.claude/skills/cc-roadmap/SKILL.md +43 -23
  42. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +10 -0
  43. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +15 -0
  44. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +1 -1
  45. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +11 -7
  46. package/.claude/skills/cc-simplify/CHANGELOG.md +21 -0
  47. package/.claude/skills/cc-simplify/SKILL.md +264 -35
  48. package/.claude/skills/cc-spec-init/CHANGELOG.md +6 -0
  49. package/.claude/skills/cc-spec-init/SKILL.md +14 -1
  50. package/CHANGELOG.md +37 -0
  51. package/README.md +10 -2
  52. package/README.zh-CN.md +10 -2
  53. package/docs/examples/example-bindings.json +7 -7
  54. package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
  55. package/docs/examples/full-design-blocked/README.md +1 -1
  56. package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
  57. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
  58. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +1 -1
  59. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +140 -3
  60. package/docs/examples/full-design-blocked/roadmap-tracking.json +1 -1
  61. package/docs/examples/local-handoff/BACKLOG.md +1 -1
  62. package/docs/examples/local-handoff/README.md +1 -1
  63. package/docs/examples/local-handoff/ROADMAP.md +1 -1
  64. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
  65. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +1 -1
  66. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +92 -0
  67. package/docs/examples/local-handoff/roadmap-tracking.json +1 -1
  68. package/docs/examples/pdca-loop/BACKLOG.md +1 -1
  69. package/docs/examples/pdca-loop/README.md +1 -1
  70. package/docs/examples/pdca-loop/ROADMAP.md +1 -1
  71. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +20 -0
  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/changes/REQ-001-copy-invite-link/review/report-card.json +92 -0
  76. package/docs/examples/pdca-loop/roadmap-tracking.json +1 -1
  77. package/docs/skill-strategy-audit.md +48 -0
  78. package/lib/skill-runtime/__tests__/runtime.integration.test.js +19 -1
  79. package/lib/skill-runtime/review.js +64 -1
  80. package/lib/skill-runtime/schemas.js +161 -4
  81. package/package.json +1 -1
@@ -1,5 +1,32 @@
1
1
  # CC-Act Skill Changelog
2
2
 
3
+ ## v1.8.0 - 2026-04-28
4
+
5
+ - add remote state consistency rules for issue, PR, tracker, `needs-info`, and `ready-for-agent` closeout handoffs
6
+ - require dangerous git actions to have explicit ship semantics and user confirmation before reset, clean, branch deletion, or whole-tree restore
7
+ - require tooling changes to prove the real hook, adapt, publish, lint, or verification entrypoint still works
8
+
9
+ ## v1.7.0 - 2026-04-28
10
+
11
+ - carry cc-check QA feedback-loop and behavior evidence into PR briefs, handoffs, and release notes so ship materials preserve expected/actual/reproduction truth
12
+ - add durable follow-up brief rules for current behavior, desired behavior, key interfaces, acceptance criteria, and out-of-scope boundaries
13
+ - teach shared follow-up and evidence extraction to include report-card followup briefs and QA architecture follow-ups
14
+ - extend readiness dashboard guidance with feedback-loop quality and behavior evidence checks
15
+
16
+ ## v1.6.4 - 2026-04-28
17
+
18
+ - add a readiness dashboard covering review freshness, review quality, specialist facets, QA coverage, browser QA, failure ownership, documentation release, and PR body accuracy
19
+ - require verification to rerun on every cc-act invocation while keeping ship actions idempotent
20
+ - update `verify-act-gate.sh` to recognize `claimEvidence`, review freshness, QA coverage/browser status, and unresolved failure ownership
21
+ - update `render-pr-brief.sh`, shared evidence extraction, and the PR brief template with readiness and PR body accuracy fields
22
+
23
+ ## v1.6.3 - 2026-04-28
24
+
25
+ - require PR briefs and PR bodies to carry the reviewed base/head SHA, review packet summary, finding triage, and QA / claim evidence summary
26
+ - require post-merge closeout to verify the merged result instead of relying only on pre-merge evidence
27
+ - add destructive cleanup confirmation rules for branch, worktree, discard, and archive actions
28
+ - update `render-pr-brief.sh` and the PR brief template with review range and merged-result verification fields
29
+
3
30
  ## v1.6.2 - 2026-04-27
4
31
 
5
32
  - require closeout handoff documents to resolve the runtime output policy before writing PR briefs, release notes, resume indexes, or status handoffs
@@ -25,6 +25,8 @@
25
25
  1. 运行 `scripts/verify-act-gate.sh --dir <requirement-dir>`
26
26
  2. 确认 `review/report-card.json` 是 `pass`,且没有未解释的 gaps / reroute
27
27
  3. 确认 `planning/tasks.md` 不再有未完成项
28
+ 4. 确认 `review.freshness` 新鲜、`runtime.failureOwnership` 无未解释失败、`qa.coverageAudit` / `qa.browserEvidence` 有证据或明确 skip
29
+ 5. 确认 `qa.feedbackLoop` / `qa.behaviorEvidence` 能支撑行为结论;不可复现时必须写清缺什么 artifact / 权限 / 输入
28
30
 
29
31
  如果 gate 没闭合,直接回 `cc-check` 或 `cc-do`,不要在 `cc-act` 自我安慰。
30
32
 
@@ -70,6 +72,7 @@ Ship 必须属于这 4 种模式之一:
70
72
 
71
73
  - `cc-act` 可以做清理和收尾修复
72
74
  - 但只要现实被改写,就必须重新证明
75
+ - verification 每次进 `cc-act` 都要重新跑;只有 push、PR 更新、文档生成这类动作可以因幂等状态跳过
73
76
 
74
77
  ## Phase 2.5: Ship Hygiene
75
78
 
@@ -80,6 +83,7 @@ Ship 必须属于这 4 种模式之一:
80
83
  3. 检查提交边界,按逻辑单元拆分,保证提交顺序不引用未来代码。
81
84
  4. 如果有 WIP commit,只能用非破坏性 rebase / fixup 处理,不允许盲目 soft reset。
82
85
  5. push 前比较 local / remote HEAD;PR 前检查是否已有打开 PR / MR。
86
+ 6. 生成 readiness dashboard:review freshness、review quality、QA coverage、browser QA、feedback loop、behavior evidence、failure ownership、documentation release、PR body accuracy。
83
87
 
84
88
  ## Phase 3: Build Delivery Pack
85
89
 
@@ -104,6 +108,20 @@ Ship 必须属于这 4 种模式之一:
104
108
  1. `scripts/sync-act-docs.sh --dir <requirement-dir>`
105
109
  2. `scripts/render-pr-brief.sh --dir <requirement-dir>`
106
110
 
111
+ `pr-brief.md` 还必须带上 `cc-check` 的 review range:
112
+
113
+ - reviewed base SHA
114
+ - reviewed head SHA
115
+ - review packet path / summary
116
+ - finding triage summary
117
+ - QA / claim evidence summary
118
+ - QA behavior evidence and feedback-loop quality
119
+ - readiness dashboard
120
+ - PR body accuracy check
121
+ - Durable follow-up briefs: current behavior、desired behavior、key interfaces、acceptance criteria、out of scope
122
+
123
+ 缺这些字段时,可以生成 local handoff,但不能声称 PR body 已经可 review。
124
+
107
125
  ## Phase 4: Sync Docs
108
126
 
109
127
  文档同步不是装饰动作,而是 ship 的一部分。
@@ -125,7 +143,8 @@ Ship 必须属于这 4 种模式之一:
125
143
  - 按 `references/git-commit-guidelines.md` 完成提交
126
144
  - 推送当前分支
127
145
  - 用 `gh pr create` 创建 PR / MR
128
- - PR body 以 `pr-brief.md` 为真相源,并包含 Summary、Test Coverage、Pre-Landing Review、Scope Drift、Plan Completion、Verification Results、Documentation、Test plan
146
+ - PR body 以 `pr-brief.md` 为真相源,并包含 Summary、Test Coverage、Pre-Landing Review、Readiness Dashboard、Scope Drift、Plan Completion、Verification Results、Documentation、Test plan
147
+ - 创建前检查 PR body 是否来自当前 report-card 和当前 diff,不继承旧 body
129
148
 
130
149
  ### `update-pr`
131
150
 
@@ -133,6 +152,7 @@ Ship 必须属于这 4 种模式之一:
133
152
  - 不重新造一个 PR
134
153
  - 刷新已有 PR / MR body
135
154
  - 确保 body 由本次最新 `cc-check` 结果与 doc sync 状态重建,不沿用旧 body
155
+ - PR body 与当前 commits / diff 不一致时,必须先更新 body,再继续交付判断
136
156
 
137
157
  ### `local-handoff`
138
158
 
@@ -142,8 +162,15 @@ Ship 必须属于这 4 种模式之一:
142
162
  ### `post-merge-closeout`
143
163
 
144
164
  - 不做 feature branch PR 动作
165
+ - 在 merged result 上重跑必要 gate,并记录命令、exit status、关键观察
145
166
  - 完成 release note、文档同步、backlog/roadmap 回写、归档
146
167
 
168
+ ### destructive cleanup
169
+
170
+ - 删除 branch、worktree、未合并提交、requirement archive 前,先列出对象
171
+ - 丢弃未合并工作必须要求用户显式确认
172
+ - 无法确认时保留现场,切到 `local-handoff`
173
+
147
174
  如果 `gh` 不可用、push 失败、远端不可达,就不要硬凹 `create-pr` / `update-pr`。切到 `local-handoff`,把阻塞和下一步写清楚。
148
175
 
149
176
  ## Phase 6: Write Back The Learning
@@ -159,6 +186,8 @@ Ship 必须属于这 4 种模式之一:
159
186
  - 长期方向写 `devflow/roadmap/roadmap.md`
160
187
  - 下一轮待排队动作写 `devflow/roadmap/backlog.md`
161
188
  - 不要把噪音和碎念回写成系统真相
189
+ - follow-up 必须是 durable brief:用领域语言写 current behavior、desired behavior、key interfaces、acceptance criteria、out of scope
190
+ - 独立行为拆独立条目;有依赖关系时写明顺序,方便下一轮并行或排队
162
191
 
163
192
  ## Phase 7: Declare The Next Entry
164
193
 
@@ -176,6 +205,8 @@ Ship 必须属于这 4 种模式之一:
176
205
  3. reviewer / 接手者 还需不需要追问“所以我现在该看哪个文件”?
177
206
  4. `cc-simplify`、单测、e2e、commit/push 的结果是不是都能追溯?
178
207
  5. PR body / release note / handoff / changelog 说的是不是同一套现实?
208
+ 6. readiness dashboard 有没有 blocker 或 stale warning?
209
+ 7. follow-up 是不是行为契约,而不是“改某文件某行”的易腐烂 TODO?
179
210
 
180
211
  如果第 1 或第 3 题答案不是“能”,说明 `cc-act` 仍然太重或太糊。
181
212
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cc-act
3
- version: 1.6.2
3
+ version: 1.8.0
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
@@ -41,7 +41,7 @@ entry_gate:
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.
44
- - Docs, PR text, release notes, handoff artifacts, and test evidence reflect the same proven facts.
44
+ - Docs, PR text, release notes, handoff artifacts, review range, readiness dashboard, PR body accuracy check, and test evidence reflect the same proven facts.
45
45
  - Follow-up items are written back to roadmap/backlog instead of lingering in chat memory.
46
46
  reroutes:
47
47
  - when: Verification is stale, incomplete, or changed during act.
@@ -126,7 +126,9 @@ tool_budget:
126
126
  2. 再读 `planning/design.md` 或 `planning/analysis.md`、`planning/tasks.md`、`planning/task-manifest.json`、`change-meta.json`、相关 capability spec;如果已有 `handoff/resume-index.md`,一并读取,确认这次到底完成了什么。
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
- 5. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship
129
+ 5. 检查 `review.freshness`、`runtime.failureOwnership`、`qa.coverageAudit`、`qa.browserEvidence`,确认 readiness dashboard 没有 blocker
130
+ 6. 检查 `qa.feedbackLoop`、`qa.behaviorEvidence`、`qa.architectureFollowUps` 和 follow-up brief,确认交付材料继承的是行为证据,不是聊天记忆或易腐烂 TODO。
131
+ 7. 如果在 `cc-act` 期间因为 `cc-simplify`、单测、e2e、review 修复而改了代码,必须回 `cc-check`,不能带着旧证明继续 ship。
130
132
 
131
133
  ## Ship Modes
132
134
 
@@ -146,7 +148,7 @@ tool_budget:
146
148
  - 但要把 handoff 与下一步写清楚
147
149
  4. `post-merge-closeout`
148
150
  - 当前已在 base branch,或 requirement 已完成合并
149
- - 重点是 release note、doc sync、backlog writeback、归档
151
+ - 重点是 merged-result verification、release note、doc sync、backlog writeback、归档
150
152
 
151
153
  不要发明第五种模糊模式。
152
154
 
@@ -207,9 +209,40 @@ tool_budget:
207
209
  2. Scope completion:PR 简报必须包含 `cc-check` 的 plan completion、scope drift、review finding、验证结果摘要。
208
210
  3. Version and changelog:如果项目有 `VERSION`、`package.json`、`CHANGELOG.md`,先判断是否已 bump / 是否漂移;不要重复 bump,也不要覆盖 changelog。
209
211
  4. Bisectable commits:提交按逻辑单元拆分,顺序保证每个 commit 独立可理解、尽量可验证;小于 50 行且少于 4 文件可单 commit。
210
- 5. Fresh final verification:如果 `cc-act` 中的 review fixdoc sync、version sync 改了代码或运行时输入,重新回 `cc-check`;纯文档/PR body 变化记录即可。
212
+ 5. Fresh final verification:每次进入 `cc-act` 都要重跑 entry gatesimplify、单测、e2e 或记录 skip;只有 push、PR 更新、doc 生成这类动作可以幂等跳过。以前跑过不等于现在仍然可信。
211
213
  6. Push idempotency:push 前比较 local/remote HEAD;已同步就不重复 push,不可用就切 `local-handoff`。
212
214
  7. PR idempotency:已有打开的 PR / MR 只更新 body,不重复创建。
215
+ 8. Review range:PR brief / PR body 必须写清 `cc-check` 审过的 base/head SHA、review packet、finding triage 摘要。
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
+ ## Readiness Dashboard
222
+
223
+ PR / handoff 之前必须把 readiness 压成一屏事实:
224
+
225
+ 1. Review freshness:`review.freshness.status` 必须是 `fresh` 或 `not-applicable`。
226
+ 2. Review quality:记录 `review.qualityScore`、specialist facet 覆盖、finding triage 摘要。
227
+ 3. QA coverage:记录 `qa.coverageAudit` 的 coverage、gaps、e2e/eval requirement。
228
+ 4. Browser QA:UI / 用户路径变更必须有 `qa.browserEvidence`,否则要有 skip reason。
229
+ 5. Feedback loop:bugfix / 行为变更必须有 `qa.feedbackLoop`,否则要有不可复现或不适用原因。
230
+ 6. Behavior evidence:expected / actual / reproduction steps 必须能被 reviewer 独立理解。
231
+ 7. Failure ownership:`runtime.failureOwnership` 不能有未解释的 `in-branch` 或 `ambiguous` failure。
232
+ 8. Documentation release:README / CLAUDE / architecture / handoff / changelog 的同步状态必须可审计。
233
+ 9. PR body accuracy:PR body 必须从当前 `pr-brief.md`、当前 diff、当前 report-card 重建;已有 PR body 只能被刷新,不能被继承。
234
+
235
+ readiness dashboard 有 blocker 时,不能创建或更新 PR,只能 reroute 到 `cc-check` / `cc-do` 或生成 local handoff。
236
+
237
+ ## Integration Safety
238
+
239
+ `cc-act` 可以清理交付路径,但不能悄悄做破坏性动作:
240
+
241
+ 1. 删除 feature branch、删除 worktree、丢弃提交、归档 requirement 前,必须列出受影响对象。
242
+ 2. 丢弃未合并工作必须要求用户显式确认;没有确认时只能转 `local-handoff`。
243
+ 3. branch cleanup 只发生在 merge / PR / discard 语义已经清楚之后。
244
+ 4. `post-merge-closeout` 必须记录 merged-result verification:命令、exit status、关键观察、失败时 reroute。
245
+ 5. 危险 Git 动作必须有明确 ship 语义:`git push` 只在 `create-pr` / `update-pr` / release lane 执行,`git reset --hard`、`git clean -f`、`git branch -D`、整树 restore/checkout 必须先列出对象并取得用户确认;没有确认时写 handoff,不执行。
213
246
 
214
247
  ## Documentation Release
215
248
 
@@ -223,6 +256,16 @@ tool_budget:
223
256
  6. Discoverability:新增文档必须能从 README、CLAUDE 或 handoff 入口找到。
224
257
  7. TODO/backlog cleanup:只把有 diff 证据完成的事项移到 completed;新 follow-up 写回 backlog/roadmap。
225
258
 
259
+ ## Issue And Follow-Up Handoff
260
+
261
+ 当本次交付产生或更新 issue / PR / backlog follow-up 时,文案必须耐 refactor:
262
+
263
+ - 先写用户可观察行为:what happened / expected / reproduction 或 desired behavior。
264
+ - 再写 agent 可执行 contract:acceptance criteria、allowed scope、blocked by、verification command。
265
+ - 不把短期文件路径、行号、函数名写成长期事实;只有当前 reviewer 需要定位时才放进 PR brief 的实现备注。
266
+ - 多个 follow-up 必须按独立可验证切片拆开,并标明 `AFK` / `HITL`、blocked-by 和 owner。
267
+ - 已经问过或确认过的信息不能在 `needs-info` 里丢失;问题必须具体到 reporter 能直接补证据。
268
+
226
269
  ## Loop
227
270
 
228
271
  1. 先锁定 ship 事实:当前分支、base branch、PR 状态、requirement 状态。
@@ -245,11 +288,12 @@ tool_budget:
245
288
  - `local-handoff`:不假装已经发出,只生成可接手材料
246
289
  - `post-merge-closeout`:跳过 PR,完成发布与闭环回写
247
290
  11. 处理 PR / MR body:从当前 `pr-brief.md`、最新验证、review、doc sync、TODO/backlog 结果重新渲染,不复用旧 body。
248
- 12. 回写 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`:
291
+ 12. `handoff/pr-brief.md` 写入 readiness dashboard 与 PR body accuracy check;已有 PR body 与当前事实不一致时先刷新再继续。
292
+ 13. 回写 `devflow/roadmap/backlog.md` / `devflow/roadmap/roadmap.md`:
249
293
  - 新发现的 follow-up
250
294
  - 被推迟但必须保留的事项
251
295
  - 因本次结果而改变优先级的事项
252
- 13. 如果 requirement 真正闭环,更新状态摘要并归档;否则把下一位接手者的入口写清楚。
296
+ 14. 如果 requirement 真正闭环,更新状态摘要并归档;否则把下一位接手者的入口写清楚。
253
297
 
254
298
  ## Output
255
299
 
@@ -261,6 +305,7 @@ tool_budget:
261
305
  - 单测 / e2e 的通过证据,或明确记录的 skip / blocker
262
306
  - 必要时创建或更新的 PR / MR
263
307
  - PR / MR body 中的 Summary、Test Coverage、Pre-Landing Review、Scope Drift、Plan Completion、Verification Results、Documentation、Test plan
308
+ - readiness dashboard 和 PR body accuracy check
264
309
 
265
310
  ## Good Output
266
311
 
@@ -300,6 +345,7 @@ tool_budget:
300
345
  10. `create-pr` / `update-pr` 模式默认要求提交历史符合 `references/git-commit-guidelines.md`,并完成正确的 push、PR 创建或更新动作。
301
346
  11. CHANGELOG 只能基于当前 diff / commit history / release truth 更新,不允许覆盖既有历史条目。
302
347
  12. PR / MR body 每次都从当前事实重建,不沿用旧 body 或旧测试输出。
348
+ 13. Verification 每次执行 `cc-act` 都必须重新运行;只有已完成且可证明幂等的动作可以跳过。
303
349
 
304
350
  ## Exit Criteria
305
351
 
@@ -24,6 +24,27 @@
24
24
  - Base branch:
25
25
  - PR / MR:
26
26
 
27
+ ## Review Range
28
+
29
+ - Reviewed base SHA:
30
+ - Reviewed head SHA:
31
+ - Review packet:
32
+ - Finding triage:
33
+ - QA / claim evidence:
34
+
35
+ ## Readiness Dashboard
36
+
37
+ - Review freshness:
38
+ - Review quality:
39
+ - Specialist review facets:
40
+ - QA coverage:
41
+ - Browser QA:
42
+ - Feedback loop:
43
+ - Behavior evidence:
44
+ - Failure ownership:
45
+ - Documentation release:
46
+ - PR body accuracy:
47
+
27
48
  ## Summary
28
49
 
29
50
  -
@@ -36,6 +57,15 @@
36
57
 
37
58
  - `review/report-card.json` verdict:
38
59
  - Fresh evidence:
60
+ - Merged-result verification:
61
+
62
+ ## QA Behavior Evidence
63
+
64
+ - Feedback loop:
65
+ - Expected behavior:
66
+ - Actual behavior:
67
+ - Reproduction steps:
68
+ - Consistency:
39
69
 
40
70
  ## Documentation Sync
41
71
 
@@ -61,7 +91,11 @@
61
91
 
62
92
  ## Follow-Ups
63
93
 
64
- -
94
+ - Current behavior:
95
+ - Desired behavior:
96
+ - Key interfaces:
97
+ - Acceptance criteria:
98
+ - Out of scope:
65
99
 
66
100
  ## Risks
67
101
 
@@ -20,10 +20,19 @@
20
20
 
21
21
  -
22
22
 
23
+ ## QA Behavior Evidence
24
+
25
+ - Feedback loop:
26
+ - User-visible behavior:
27
+ - Reproduction / verification path:
28
+
23
29
  ## Ops Notes
24
30
 
25
31
  -
26
32
 
27
33
  ## Follow-Ups
28
34
 
29
- -
35
+ - Current behavior:
36
+ - Desired behavior:
37
+ - Acceptance criteria:
38
+ - Out of scope:
@@ -8,6 +8,9 @@
8
8
  4. `planning/tasks.md` 不能还有未完成项
9
9
  5. 交付材料必须只总结现实,不补编故事
10
10
  6. 如果文件结构变了,就同步对应目录的 `CLAUDE.md`
11
+ 7. PR / handoff 必须记录 `cc-check` 审过的 base/head SHA、review packet、finding triage 摘要
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
11
14
 
12
15
  ## Ship Decision Contract
13
16
 
@@ -29,6 +32,11 @@
29
32
  5. VERSION / package / changelog 漂移必须先分类处理,不能重复 bump 或覆盖发布历史
30
33
  6. PR / MR body 必须从当前事实重建,不能沿用旧验证输出
31
34
  7. push / PR 创建必须具备幂等检查:已同步则跳过,已存在 PR 则更新
35
+ 8. 本地合并或 post-merge closeout 后必须在 merged result 上重跑必要 gate
36
+ 9. 删除 branch、worktree、未合并提交、归档 requirement 前必须列出对象;丢弃未合并工作需要显式确认
37
+ 10. verification 每次进入 `cc-act` 都必须重新跑;只有 push、PR 更新、文档生成等动作可以因为幂等状态跳过
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
32
40
 
33
41
  ## Memory Consolidation
34
42
 
@@ -45,5 +53,8 @@
45
53
  - reviewer 能接手
46
54
  - maintainer 知道怎么验证
47
55
  - PR / handoff / release 材料反映同一套事实
56
+ - readiness dashboard 没有 blocker,PR body accuracy 已检查或明确阻塞
57
+ - QA behavior evidence 和 feedback loop 已进入 PR / handoff / release 材料
58
+ - post-merge closeout 反映 merged result 的验证事实,而不是只反映合并前事实
48
59
  - 下一轮计划入口更清楚
49
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
@@ -234,7 +258,14 @@ req_act_collect_evidence() {
234
258
  local out_file="$2"
235
259
 
236
260
  : > "$out_file"
237
- jq -r '(.evidence // [])[]?' "$report_card" 2>/dev/null | sed '/^$/d' > "$out_file" || true
261
+ jq -r '
262
+ (.evidence // [])[]?,
263
+ ((.claimEvidence // [])[]? | "- " + (.claim // "claim") + ": " + (.status // "unknown") + " via " + (.commandOrArtifact // "artifact") + " - " + (.keyObservation // "")),
264
+ (if .qa.coverageAudit then "- qa.coverage: " + (.qa.coverageAudit.status // "unknown") + ", gaps=" + (((.qa.coverageAudit.gaps // []) | length) | tostring) 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)
268
+ ' "$report_card" 2>/dev/null | sed '/^$/d' > "$out_file" || true
238
269
  req_act_dedup_file "$out_file"
239
270
  }
240
271
 
@@ -65,6 +65,31 @@ report_verdict="$(req_act_report_verdict "$report_card")"
65
65
  output_language="$(req_act_output_language "$report_card")"
66
66
  design_goal="$(req_act_design_goal "$design_file")"
67
67
  main_risk="$(req_act_main_risk "$design_file")"
68
+ review_base_sha="$(jq -r '[.review.taskReviews.reviewPacket.baseSha?, .review.diffReview.reviewPacket.baseSha?] | map(select(. != null and . != "")) | first // "not recorded"' "$report_card")"
69
+ review_head_sha="$(jq -r '[.review.taskReviews.reviewPacket.headSha?, .review.diffReview.reviewPacket.headSha?] | map(select(. != null and . != "")) | first // "not recorded"' "$report_card")"
70
+ review_packet_summary="$(jq -r '
71
+ [
72
+ .review.taskReviews.reviewPacket.requirements?,
73
+ .review.diffReview.reviewPacket.requirements?
74
+ ]
75
+ | map(select(. != null and . != ""))
76
+ | unique
77
+ | if length == 0 then "not recorded" else join("; ") end
78
+ ' "$report_card")"
79
+ finding_triage_summary="$(jq -r '
80
+ [
81
+ (.review.taskReviews.findings? // []),
82
+ (.review.diffReview.findings? // []),
83
+ (.review.findings? // [])
84
+ ]
85
+ | flatten
86
+ | map(.triageStatus? // .status? // "untriaged")
87
+ | if length == 0 then "no findings" else group_by(.) | map("\(.[0])=\(length)") | join(", ") end
88
+ ' "$report_card")"
89
+ qa_claim_summary="$(jq -r '
90
+ "qa=\(.qa.status? // "not recorded"), claims=" +
91
+ (((.claimEvidence? // []) | map((.claim // "unknown") + ":" + (.status // "unknown")) | join(", ")) // "not recorded")
92
+ ' "$report_card")"
68
93
 
69
94
  tmp_changed="$(mktemp)"
70
95
  tmp_verify="$(mktemp)"
@@ -95,6 +120,73 @@ if [[ -f "$doc_sync_report" ]]; then
95
120
  fi
96
121
  fi
97
122
 
123
+ review_freshness_summary="$(jq -r '
124
+ .review.freshness as $fresh |
125
+ if $fresh == null then
126
+ "not recorded"
127
+ else
128
+ "status=\($fresh.status // "unknown"), reviewed=\($fresh.reviewedCommit // "not recorded"), current=\($fresh.currentCommit // "not recorded"), commitsSinceReview=\($fresh.commitsSinceReview // "unknown")" +
129
+ (if (($fresh.staleReason // "") != "") then ", reason=\($fresh.staleReason)" else "" end)
130
+ end
131
+ ' "$report_card")"
132
+ review_quality_summary="$(jq -r '
133
+ "qualityScore=\(.review.qualityScore // "not recorded")"
134
+ ' "$report_card")"
135
+ specialist_review_summary="$(jq -r '
136
+ (.review.specialistReviews? // [])
137
+ | if length == 0 then
138
+ "no specialist facets recorded"
139
+ else
140
+ map((.name // "unknown") + ":" + (.status // "unknown")) | join(", ")
141
+ end
142
+ ' "$report_card")"
143
+ qa_coverage_summary="$(jq -r '
144
+ .qa.coverageAudit as $coverage |
145
+ if $coverage == null then
146
+ "not recorded"
147
+ else
148
+ "status=\($coverage.status // "unknown"), coverage=\($coverage.coveragePct // "n/a"), gaps=\((($coverage.gaps // []) | length)), e2eRequired=\($coverage.e2eRequired // false), evalRequired=\($coverage.evalRequired // false)"
149
+ end
150
+ ' "$report_card")"
151
+ browser_qa_summary="$(jq -r '
152
+ .qa.browserEvidence as $browser |
153
+ if $browser == null then
154
+ "not recorded"
155
+ else
156
+ "status=\($browser.status // "unknown"), mode=\($browser.mode // "unknown"), routes=\((($browser.affectedRoutes // []) | length)), issues=\((($browser.issues // []) | length)), consoleErrors=\((($browser.consoleErrors // []) | length))" +
157
+ (if (($browser.skipReason // "") != "") then ", skip=\($browser.skipReason)" else "" end)
158
+ end
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")"
177
+ failure_ownership_summary="$(jq -r '
178
+ (.runtime.failureOwnership? // [])
179
+ | if length == 0 then
180
+ "no open failures recorded"
181
+ else
182
+ group_by(.classification // "unknown")
183
+ | map("\(.[0].classification // "unknown")=\(length)")
184
+ | join(", ")
185
+ end
186
+ ' "$report_card")"
187
+ documentation_release_summary="CLAUDE=${claude_status}; README=${readme_status}"
188
+ pr_body_accuracy_summary="body must be regenerated from this pr-brief, current report-card, and current diff before PR create/update"
189
+
98
190
  {
99
191
  echo "# PR Brief"
100
192
  echo
@@ -120,6 +212,27 @@ fi
120
212
  echo "- PR / MR: none"
121
213
  fi
122
214
  echo
215
+ echo "## Review Range"
216
+ echo
217
+ echo "- Reviewed base SHA: $review_base_sha"
218
+ echo "- Reviewed head SHA: $review_head_sha"
219
+ echo "- Review packet: $review_packet_summary"
220
+ echo "- Finding triage: $finding_triage_summary"
221
+ echo "- QA / claim evidence: $qa_claim_summary"
222
+ echo
223
+ echo "## Readiness Dashboard"
224
+ echo
225
+ echo "- Review freshness: $review_freshness_summary"
226
+ echo "- Review quality: $review_quality_summary"
227
+ echo "- Specialist review facets: $specialist_review_summary"
228
+ echo "- QA coverage: $qa_coverage_summary"
229
+ echo "- Browser QA: $browser_qa_summary"
230
+ echo "- Feedback loop: $feedback_loop_summary"
231
+ echo "- Behavior evidence: $behavior_evidence_summary"
232
+ echo "- Failure ownership: $failure_ownership_summary"
233
+ echo "- Documentation release: $documentation_release_summary"
234
+ echo "- PR body accuracy: $pr_body_accuracy_summary"
235
+ echo
123
236
  echo "## Summary"
124
237
  echo
125
238
  if [[ -n "$report_summary" ]]; then
@@ -145,6 +258,11 @@ fi
145
258
  echo "## Verification Evidence"
146
259
  echo
147
260
  echo "- \`report-card.json\` verdict: $report_verdict"
261
+ if [[ "$ship_mode" == "post-merge-closeout" ]]; then
262
+ echo "- Merged-result verification: required before closeout; record command, exit status, and key observation"
263
+ else
264
+ echo "- Merged-result verification: not applicable before merge"
265
+ fi
148
266
  if [[ -s "$tmp_evidence" ]]; then
149
267
  while IFS= read -r line; do
150
268
  echo "- $line"
@@ -153,6 +271,18 @@ fi
153
271
  echo "- No evidence lines captured yet."
154
272
  fi
155
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
156
286
  echo "## Documentation Sync"
157
287
  echo
158
288
  echo "- \`CLAUDE.md\`: $claude_status"
@@ -37,8 +37,18 @@ tasks_file="$(req_act_tasks_path "$CHANGE_DIR")"
37
37
  verdict="$(jq -r '.verdict // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
38
38
  reroute="$(jq -r '.reroute // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
39
39
  spec_sync_ready="$(jq -r '.specSyncReady // false' "$report_card" 2>/dev/null || echo false)"
40
- evidence_count="$(jq -r '(.evidence // []) | length' "$report_card" 2>/dev/null || echo 0)"
40
+ evidence_count="$(jq -r '((.evidence // []) + (.claimEvidence // []) + (.quickGates // []) + (.strictGates // [])) | length' "$report_card" 2>/dev/null || echo 0)"
41
41
  gap_count="$(jq -r '(.gaps // []) | length' "$report_card" 2>/dev/null || echo 0)"
42
+ review_freshness="$(jq -r '.review.freshness.status // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
43
+ failure_ownership_open="$(jq -r '
44
+ (.runtime.failureOwnership? // [])
45
+ | map(select(((.classification? // "") | IN("in-branch", "ambiguous")) and ((.status? // "open") | IN("open", "pending"))))
46
+ | length
47
+ ' "$report_card" 2>/dev/null || echo 0)"
48
+ coverage_status="$(jq -r '.qa.coverageAudit.status // "unknown"' "$report_card" 2>/dev/null || echo unknown)"
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)"
42
52
 
43
53
  remaining_tasks="0"
44
54
  if [[ -f "$tasks_file" ]]; then
@@ -50,6 +60,12 @@ fi
50
60
  [[ "$spec_sync_ready" == "true" ]] || { echo "Gate open: spec_sync_ready=$spec_sync_ready" >&2; exit 1; }
51
61
  [[ "$evidence_count" -gt 0 ]] || { echo "Gate open: evidence is empty" >&2; exit 1; }
52
62
  [[ "$gap_count" -eq 0 ]] || { echo "Gate open: gaps=$gap_count" >&2; exit 1; }
63
+ [[ "$review_freshness" == "fresh" || "$review_freshness" == "not-applicable" ]] || { echo "Gate open: review_freshness=$review_freshness" >&2; exit 1; }
64
+ [[ "$failure_ownership_open" -eq 0 ]] || { echo "Gate open: failure_ownership_open=$failure_ownership_open" >&2; exit 1; }
65
+ [[ "$coverage_status" != "blocked" && "$coverage_status" != "fail" && "$coverage_status" != "pending" ]] || { echo "Gate open: coverage_status=$coverage_status" >&2; exit 1; }
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; }
53
69
  [[ "$remaining_tasks" -eq 0 ]] || { echo "Gate open: remaining_tasks=$remaining_tasks" >&2; exit 1; }
54
70
 
55
71
  cat <<EOF
@@ -59,5 +75,11 @@ REROUTE=$reroute
59
75
  SPEC_SYNC_READY=$spec_sync_ready
60
76
  EVIDENCE_COUNT=$evidence_count
61
77
  GAP_COUNT=$gap_count
78
+ REVIEW_FRESHNESS=$review_freshness
79
+ FAILURE_OWNERSHIP_OPEN=$failure_ownership_open
80
+ COVERAGE_STATUS=$coverage_status
81
+ BROWSER_STATUS=$browser_status
82
+ FEEDBACK_LOOP_STATUS=$feedback_loop_status
83
+ BEHAVIOR_EVIDENCE_STATUS=$behavior_evidence_status
62
84
  REMAINING_TASKS=$remaining_tasks
63
85
  EOF
@@ -1,5 +1,31 @@
1
1
  # CC-Check Skill Changelog
2
2
 
3
+ ## v1.10.0 - 2026-04-28
4
+
5
+ - add test fixture honesty review for partial fixtures, generated stubs, casts, and missing mock payload fields
6
+ - require fixture shortcuts to preserve public seam behavior instead of hiding contract or input-shape problems
7
+
8
+ ## v1.9.0 - 2026-04-28
9
+
10
+ - add QA feedback-loop evidence so bugfix and behavior checks record reproduction mode, determinism, signal quality, and blocked loop reasons before a pass verdict
11
+ - add behavior evidence fields for expected behavior, actual behavior, reproduction steps, consistency, and domain language
12
+ - tighten test-quality review around public-interface tests, system-boundary mocks, and architecture follow-ups when no correct test seam exists
13
+ - update the report-card template, renderer, and gate validation for the new QA evidence shape while keeping older reports structurally compatible
14
+
15
+ ## v1.8.4 - 2026-04-28
16
+
17
+ - add review freshness, quality score, specialist review facets, and finding confidence fingerprints so stale or noisy review evidence cannot masquerade as current proof
18
+ - add QA coverage audit and browser evidence fields for user-flow, route, screenshot, console, and skip-reason proof
19
+ - add runtime failure ownership so failing commands are classified as in-branch, pre-existing, environment, or ambiguous before verdict selection
20
+ - update the report-card template, renderer, and gate validation for the richer review and QA evidence shape
21
+
22
+ ## v1.8.3 - 2026-04-28
23
+
24
+ - add native claim evidence matrix guidance so each completion claim maps to command or artifact proof
25
+ - add QA regression and test-quality review fields for red/green proof, mock boundaries, and test-only API smells
26
+ - require review packets and finding triage so review results can be audited without chat memory
27
+ - update report-card template, renderer, and gate validation for optional `claimEvidence` and `qa` fields
28
+
3
29
  ## v1.8.2 - 2026-04-27
4
30
 
5
31
  - require verification reports to resolve the runtime output policy before writing human-readable verdicts or summaries