cc-devflow 4.5.8 → 4.5.10
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.
- package/.claude/skills/cc-act/CHANGELOG.md +33 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +9 -4
- package/.claude/skills/cc-act/SKILL.md +73 -12
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +30 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +29 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +103 -0
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +61 -5
- package/.claude/skills/cc-act/references/closure-contract.md +4 -1
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +342 -37
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +29 -1
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +164 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +1 -1
- package/.claude/skills/cc-check/CHANGELOG.md +17 -0
- package/.claude/skills/cc-check/PLAYBOOK.md +1 -0
- package/.claude/skills/cc-check/SKILL.md +9 -5
- package/.claude/skills/cc-check/references/review-contract.md +7 -0
- package/.claude/skills/cc-check/scripts/render-report-card.js +6 -1
- package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
- package/.claude/skills/cc-dev/SKILL.md +26 -1
- package/.claude/skills/cc-do/CHANGELOG.md +23 -0
- package/.claude/skills/cc-do/PLAYBOOK.md +7 -7
- package/.claude/skills/cc-do/SKILL.md +49 -45
- package/.claude/skills/cc-do/references/execution-recovery.md +18 -13
- package/.claude/skills/cc-do/scripts/build-task-context.sh +13 -22
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +0 -6
- package/.claude/skills/cc-do/scripts/record-review-decision.sh +4 -5
- package/.claude/skills/cc-do/scripts/recover-workflow.sh +9 -11
- package/.claude/skills/cc-do/scripts/verify-task-gates.sh +12 -10
- package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +7 -29
- package/.claude/skills/cc-investigate/CHANGELOG.md +34 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +21 -5
- package/.claude/skills/cc-investigate/SKILL.md +97 -40
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +66 -4
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +30 -59
- package/.claude/skills/cc-investigate/assets/{ANALYSIS_TEMPLATE.md → legacy/ANALYSIS_TEMPLATE.md} +48 -0
- package/.claude/skills/cc-investigate/references/investigation-contract.md +16 -2
- package/.claude/skills/cc-investigate/scripts/bootstrap-analysis.sh +1 -1
- package/.claude/skills/cc-next/CHANGELOG.md +6 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +26 -4
- package/.claude/skills/cc-next/SKILL.md +39 -4
- package/.claude/skills/cc-plan/CHANGELOG.md +38 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +60 -53
- package/.claude/skills/cc-plan/SKILL.md +164 -87
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +101 -9
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +58 -229
- package/.claude/skills/cc-plan/assets/{DESIGN_TEMPLATE.md → legacy/DESIGN_TEMPLATE.md} +68 -0
- package/.claude/skills/cc-plan/assets/{TINY_DESIGN_TEMPLATE.md → legacy/TINY_DESIGN_TEMPLATE.md} +47 -1
- package/.claude/skills/cc-plan/references/planning-contract.md +48 -33
- package/.claude/skills/cc-review/CHANGELOG.md +6 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +9 -11
- package/.claude/skills/cc-review/SKILL.md +37 -61
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +1 -1
- package/.claude/skills/cc-review/references/implementation-review-branch.md +5 -5
- package/.claude/skills/cc-review/references/plan-review-branch.md +1 -1
- package/.claude/skills/cc-review/references/review-methods.md +4 -4
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +14 -7
- package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +30 -0
- package/.claude/skills/cc-roadmap/SKILL.md +45 -8
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +8 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +22 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +32 -1
- package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +14 -14
- package/CHANGELOG.md +28 -0
- package/CONTRIBUTING.md +40 -4
- package/CONTRIBUTING.zh-CN.md +40 -4
- package/README.md +57 -43
- package/README.zh-CN.md +57 -43
- package/bin/cc-devflow-cli.js +293 -36
- package/docs/examples/START-HERE.md +5 -4
- package/docs/examples/example-bindings.json +10 -10
- package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
- package/docs/examples/full-design-blocked/README.md +2 -2
- package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +2 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +29 -312
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +11 -8
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +4 -4
- package/docs/examples/full-design-blocked/roadmap.json +1 -1
- package/docs/examples/local-handoff/BACKLOG.md +1 -1
- package/docs/examples/local-handoff/README.md +2 -2
- package/docs/examples/local-handoff/ROADMAP.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +2 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +27 -210
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +9 -6
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +1 -1
- package/docs/examples/local-handoff/roadmap.json +1 -1
- package/docs/examples/pdca-loop/BACKLOG.md +1 -1
- package/docs/examples/pdca-loop/README.md +2 -2
- package/docs/examples/pdca-loop/ROADMAP.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +65 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +2 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +26 -228
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +9 -6
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +1 -1
- package/docs/examples/pdca-loop/roadmap.json +1 -1
- package/docs/examples/scripts/check-example-bindings.sh +11 -5
- package/docs/get-shit-done-strategy-audit.md +22 -22
- package/docs/guides/artifact-contract.md +44 -0
- package/docs/guides/getting-started.md +10 -8
- package/docs/guides/getting-started.zh-CN.md +10 -8
- package/docs/guides/minimize-artifacts.md +123 -0
- package/docs/guides/project-postmortem.md +78 -0
- package/lib/compiler/__tests__/skills-registry.test.js +2 -2
- package/lib/skill-runtime/CLAUDE.md +1 -1
- package/lib/skill-runtime/__tests__/autopilot.test.js +42 -6
- package/lib/skill-runtime/__tests__/benchmark-artifacts.test.js +165 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +2 -2
- package/lib/skill-runtime/__tests__/dispatch.test.js +8 -38
- package/lib/skill-runtime/__tests__/intent.test.js +4 -20
- package/lib/skill-runtime/__tests__/lifecycle.test.js +1 -1
- package/lib/skill-runtime/__tests__/paths.test.js +7 -1
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +63 -2
- package/lib/skill-runtime/__tests__/prepare-pr.test.js +3 -16
- package/lib/skill-runtime/__tests__/query.test.js +388 -7
- package/lib/skill-runtime/__tests__/review-check-integration.test.js +148 -0
- package/lib/skill-runtime/__tests__/review-records.test.js +619 -0
- package/lib/skill-runtime/__tests__/runtime.integration.test.js +64 -23
- package/lib/skill-runtime/__tests__/schemas.test.js +76 -2
- package/lib/skill-runtime/__tests__/task-contract-migrate.test.js +137 -0
- package/lib/skill-runtime/__tests__/task-contract.test.js +783 -0
- package/lib/skill-runtime/__tests__/verify-artifacts.test.js +203 -0
- package/lib/skill-runtime/__tests__/worker-run.test.js +4 -11
- package/lib/skill-runtime/__tests__/workflow-context-legacy-fallback.test.js +31 -0
- package/lib/skill-runtime/__tests__/workflow-context.test.js +98 -0
- package/lib/skill-runtime/artifacts.js +0 -5
- package/lib/skill-runtime/context-index.js +545 -0
- package/lib/skill-runtime/intent.js +9 -33
- package/lib/skill-runtime/lifecycle.js +1 -1
- package/lib/skill-runtime/operations/CLAUDE.md +2 -2
- package/lib/skill-runtime/operations/dispatch.js +4 -42
- package/lib/skill-runtime/operations/init.js +2 -6
- package/lib/skill-runtime/operations/janitor.js +2 -18
- package/lib/skill-runtime/operations/resume.js +21 -38
- package/lib/skill-runtime/operations/review-records.js +265 -0
- package/lib/skill-runtime/operations/snapshot.js +1 -1
- package/lib/skill-runtime/operations/task-contract.js +524 -0
- package/lib/skill-runtime/operations/worker-run.js +2 -30
- package/lib/skill-runtime/paths.js +4 -4
- package/lib/skill-runtime/planner.js +25 -13
- package/lib/skill-runtime/query-registry.js +2 -2
- package/lib/skill-runtime/query.js +16 -3
- package/lib/skill-runtime/review-records.js +123 -0
- package/lib/skill-runtime/review.js +246 -11
- package/lib/skill-runtime/schemas.js +179 -15
- package/lib/skill-runtime/store.js +0 -10
- package/lib/skill-runtime/task-contract.js +187 -0
- package/lib/skill-runtime/workflow-context.js +748 -0
- package/package.json +7 -4
|
@@ -2,15 +2,80 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
`cc-act` 在执行 `create-pr` / `update-pr`
|
|
5
|
+
`cc-act` 在执行 `create-pr` / `update-pr` 时,必须让 Git 历史成为可 review、可 bisect、可 revert、可交接的工程记录,而不是一句含糊的摘要。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
2. 提交边界干净、不要把不同类型变更揉成一团
|
|
9
|
-
3. 分支历史尽量线性,便于 review 和回滚
|
|
7
|
+
提交记录要同时满足 5 个目标:
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
1. `git log --oneline` 能看懂变更类型和范围。
|
|
10
|
+
2. `git show` 能解释问题、取舍、验证和风险。
|
|
11
|
+
3. 每个 commit 边界足够小,后续可以独立 review、cherry-pick 或 revert。
|
|
12
|
+
4. PR body、release note、handoff 和 commit history 讲同一套事实。
|
|
13
|
+
5. 后续维护者不需要聊天记录,也能知道为什么这么改。
|
|
14
|
+
|
|
15
|
+
## Research Baseline
|
|
16
|
+
|
|
17
|
+
本规范吸收当前公开实践,但落成 `cc-devflow` 自己的提交合同:
|
|
18
|
+
|
|
19
|
+
- Git 官方 `git commit` 文档建议首行少于 50 字符,空一行后写更完整描述;Git 会把首个空行前内容当成 title。
|
|
20
|
+
- Git 官方 `SubmittingPatches` 强调提交说明和代码同样重要,要解释 future maintainer 需要知道的 `why`,并使用祈使句。
|
|
21
|
+
- Conventional Commits 1.0.0 给出机器可读标题、body、footer 结构,`feat` / `fix` / `BREAKING CHANGE` 可驱动 changelog 和 semver。
|
|
22
|
+
- Git trailer 规范支持结构化 footer,例如 `Reviewed-by`、`Signed-off-by`、`Refs`。
|
|
23
|
+
- GitHub 支持在 commit message 或 PR 描述里用 closing keywords 关联和关闭 issue。
|
|
24
|
+
- 近期提交信息研究提示:只有 Conventional Commit 标题还不够,很多提交仍然信息量不足;所以本规范要求正文模板,而不是只要求 `type(scope): subject`。
|
|
12
25
|
|
|
13
|
-
|
|
26
|
+
## Commit Record Contract
|
|
27
|
+
|
|
28
|
+
默认使用 Conventional Commits 标题,但非平凡提交必须带正文。
|
|
29
|
+
|
|
30
|
+
`type(scope)` 保持 ASCII 和机器可读;`subject`、正文标题、正文内容默认使用项目 `Output language`。中文项目输出中文 commit 文本,不能照抄英文模板。
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
<type>(<scope>): <中文 subject>
|
|
34
|
+
|
|
35
|
+
问题:
|
|
36
|
+
- <哪里坏了、缺了、风险在哪里、读者为什么要关心>
|
|
37
|
+
|
|
38
|
+
变更:
|
|
39
|
+
- <持久实现、模板、脚本、产物或契约变化>
|
|
40
|
+
- <关键边界、数据形状、工作流决策>
|
|
41
|
+
|
|
42
|
+
原因:
|
|
43
|
+
- <为什么当前方案是正确取舍>
|
|
44
|
+
- <为什么没有选择更窄、更宽或其它替代方案>
|
|
45
|
+
|
|
46
|
+
验证:
|
|
47
|
+
- <命令、产物、review gate,或明确 not-run 原因>
|
|
48
|
+
|
|
49
|
+
风险:
|
|
50
|
+
- <影响范围、迁移问题、回滚路径,或“低:仅文档/模板”>
|
|
51
|
+
|
|
52
|
+
关联:
|
|
53
|
+
- <REQ/FIX/RM/issue/PR/spec/review artifact,适用时填写>
|
|
54
|
+
|
|
55
|
+
<footer trailers when applicable>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
正文不是复述 diff。正文解释 diff 看不出来的上下文:为什么改、边界在哪里、怎么证明、哪里可能坏。
|
|
59
|
+
|
|
60
|
+
## When Body Is Required
|
|
61
|
+
|
|
62
|
+
只允许非常小的机械变更使用单行 commit。满足任一条件时必须写 body:
|
|
63
|
+
|
|
64
|
+
1. 修改超过 1 个文件。
|
|
65
|
+
2. 改变用户可见行为、公共 API、CLI、schema、prompt、skill contract、验证脚本或发布流程。
|
|
66
|
+
3. 修 bug、回归、flaky、性能、安全、权限、数据一致性或 trust boundary。
|
|
67
|
+
4. 引入或改变测试策略、mock 边界、fixture、golden artifact。
|
|
68
|
+
5. 触碰 roadmap / planning / task manifest / report-card / handoff 等 durable artifact。
|
|
69
|
+
6. 有兼容性、迁移、回滚、release note 或 follow-up 风险。
|
|
70
|
+
|
|
71
|
+
单行 commit 仅适合:
|
|
72
|
+
|
|
73
|
+
- typo / spelling
|
|
74
|
+
- 纯格式化且无行为变化
|
|
75
|
+
- 单文件注释澄清
|
|
76
|
+
- 生成物版本号同步,且 changelog 或 PR body 已解释原因
|
|
77
|
+
|
|
78
|
+
## Commit Message Format
|
|
14
79
|
|
|
15
80
|
```text
|
|
16
81
|
<type>(<scope>): <subject>
|
|
@@ -20,64 +85,304 @@
|
|
|
20
85
|
<footer>
|
|
21
86
|
```
|
|
22
87
|
|
|
23
|
-
|
|
88
|
+
规则:
|
|
89
|
+
|
|
90
|
+
1. `type` 必须表达变更性质。
|
|
91
|
+
2. `scope` 必须是 repo 里真实模块、skill、capability、script、doc area 或 package 名;不要写 `misc` / `stuff`。
|
|
92
|
+
3. `subject` 使用项目输出语言;中文项目写中文短句,`type(scope)` 仍保持 Conventional Commits ASCII 前缀。
|
|
93
|
+
4. `subject` 目标 50 字符以内;超过时先缩 scope 或拆 commit。
|
|
94
|
+
5. `body` 使用上面的中文结构化标题;非平凡提交不要只写一段泛泛说明。
|
|
95
|
+
6. `footer` 使用 Git trailer 风格:`Token: value`,每个 trailer 独立一行。
|
|
96
|
+
7. 如果当前仓库已有更严格规范,以仓库规范为准;但不能低于本文件的信息量要求。
|
|
24
97
|
|
|
25
98
|
## Allowed Types
|
|
26
99
|
|
|
27
|
-
- `feat`:
|
|
28
|
-
- `fix`:
|
|
29
|
-
- `docs`:
|
|
100
|
+
- `feat`: 新功能或新增可观察能力
|
|
101
|
+
- `fix`: 修复缺陷、回归或错误行为
|
|
102
|
+
- `docs`: 文档、指南、示例文字
|
|
30
103
|
- `style`: 纯格式调整,不改行为
|
|
31
104
|
- `refactor`: 重构,不改外部行为
|
|
32
105
|
- `perf`: 性能优化
|
|
33
|
-
- `test`:
|
|
34
|
-
- `
|
|
106
|
+
- `test`: 测试、fixture、golden artifact、验证 seam
|
|
107
|
+
- `build`: 构建系统、打包、发布配置
|
|
108
|
+
- `ci`: CI / workflow / automation
|
|
109
|
+
- `chore`: 依赖、脚本、仓库维护、生成物同步
|
|
110
|
+
- `revert`: 回滚既有 commit
|
|
111
|
+
|
|
112
|
+
## Body Templates By Type
|
|
113
|
+
|
|
114
|
+
### `feat`
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
问题:
|
|
118
|
+
- <谁以前无法完成什么>
|
|
119
|
+
|
|
120
|
+
变更:
|
|
121
|
+
- <新增能力>
|
|
122
|
+
- <公共接口、产物、命令或用户可见流程>
|
|
123
|
+
|
|
124
|
+
原因:
|
|
125
|
+
- <为什么这个范围是当前正确切片>
|
|
126
|
+
- <哪些内容明确不在本次范围内>
|
|
127
|
+
|
|
128
|
+
验证:
|
|
129
|
+
- <命令或人工证明>
|
|
130
|
+
|
|
131
|
+
风险:
|
|
132
|
+
- <兼容性、发布、迁移、回滚>
|
|
133
|
+
|
|
134
|
+
关联:
|
|
135
|
+
- <REQ/RM/spec/issue>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### `fix`
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
问题:
|
|
142
|
+
- <报告的现象和影响>
|
|
143
|
+
|
|
144
|
+
根因:
|
|
145
|
+
- <first bad state 或被破坏的契约>
|
|
146
|
+
|
|
147
|
+
变更:
|
|
148
|
+
- <最小修复>
|
|
149
|
+
- <为什么这不是只补症状>
|
|
150
|
+
|
|
151
|
+
验证:
|
|
152
|
+
- <可用时写 failing-before / passing-after 证据>
|
|
153
|
+
- <回归命令>
|
|
154
|
+
|
|
155
|
+
风险:
|
|
156
|
+
- <影响范围和回滚路径>
|
|
157
|
+
|
|
158
|
+
关联:
|
|
159
|
+
- <FIX/issue/analysis/report-card>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### `refactor`
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
问题:
|
|
166
|
+
- <坏味道、耦合、重复或维护风险>
|
|
167
|
+
|
|
168
|
+
不变量:
|
|
169
|
+
- <必须保持不变的行为>
|
|
170
|
+
|
|
171
|
+
变更:
|
|
172
|
+
- <移动、重命名、抽取或收敛的结构>
|
|
173
|
+
|
|
174
|
+
原因:
|
|
175
|
+
- <为什么这会简化系统>
|
|
176
|
+
- <为什么兼容性被保留或为何要改变>
|
|
177
|
+
|
|
178
|
+
验证:
|
|
179
|
+
- <测试、类型检查、diff check>
|
|
180
|
+
|
|
181
|
+
风险:
|
|
182
|
+
- <触碰的调用方和回滚路径>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### `test`
|
|
35
186
|
|
|
36
|
-
|
|
187
|
+
```text
|
|
188
|
+
问题:
|
|
189
|
+
- <以前没有覆盖的行为或回归>
|
|
190
|
+
|
|
191
|
+
变更:
|
|
192
|
+
- <新增的测试 seam、fixture 或断言>
|
|
193
|
+
|
|
194
|
+
原因:
|
|
195
|
+
- <为什么这个 seam 能触达真实触发链>
|
|
196
|
+
- <为什么更浅的覆盖会制造假安全>
|
|
197
|
+
|
|
198
|
+
验证:
|
|
199
|
+
- <测试命令和预期信号>
|
|
200
|
+
|
|
201
|
+
风险:
|
|
202
|
+
- <flaky 风险、fixture 维护成本、运行耗时>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### `docs`
|
|
206
|
+
|
|
207
|
+
```text
|
|
208
|
+
问题:
|
|
209
|
+
- <读者困惑、契约过期、缺 runbook 或文档漂移>
|
|
210
|
+
|
|
211
|
+
变更:
|
|
212
|
+
- <更新的章节或示例>
|
|
213
|
+
|
|
214
|
+
原因:
|
|
215
|
+
- <使用的真相源>
|
|
216
|
+
- <未来读者不再需要追问什么>
|
|
217
|
+
|
|
218
|
+
验证:
|
|
219
|
+
- <链接检查、示例检查、渲染检查,或 not-run 原因>
|
|
220
|
+
|
|
221
|
+
风险:
|
|
222
|
+
- <低,或文档继续漂移的风险>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### `build` / `ci` / `chore`
|
|
226
|
+
|
|
227
|
+
```text
|
|
228
|
+
问题:
|
|
229
|
+
- <工具链、依赖、发布或自动化缺口>
|
|
230
|
+
|
|
231
|
+
变更:
|
|
232
|
+
- <配置、脚本、package、lockfile、生成物>
|
|
233
|
+
|
|
234
|
+
原因:
|
|
235
|
+
- <为什么现在需要这个工具链变更>
|
|
236
|
+
|
|
237
|
+
验证:
|
|
238
|
+
- <真实工具入口或最接近的 smoke>
|
|
239
|
+
|
|
240
|
+
风险:
|
|
241
|
+
- <环境、版本、发布、回滚>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### `revert`
|
|
245
|
+
|
|
246
|
+
```text
|
|
247
|
+
问题:
|
|
248
|
+
- <为什么被回滚的 commit 不安全或错误>
|
|
249
|
+
|
|
250
|
+
变更:
|
|
251
|
+
- 回滚 <sha> (<subject>)。
|
|
252
|
+
|
|
253
|
+
原因:
|
|
254
|
+
- <为什么现在回滚优于向前修复>
|
|
37
255
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
256
|
+
验证:
|
|
257
|
+
- <回滚后的命令或证据>
|
|
258
|
+
|
|
259
|
+
风险:
|
|
260
|
+
- <丢失的行为、follow-up、回滚本次回滚的路径>
|
|
261
|
+
```
|
|
43
262
|
|
|
44
263
|
## Commit Boundary Rules
|
|
45
264
|
|
|
46
|
-
`cc-act` 生成 commit
|
|
265
|
+
`cc-act` 生成 commit 前必须先写 commit plan。不要先 `git add .` 再想 message。
|
|
266
|
+
|
|
267
|
+
Commit plan 模板:
|
|
268
|
+
|
|
269
|
+
```text
|
|
270
|
+
Commit 1:
|
|
271
|
+
- 类型/scope:
|
|
272
|
+
- 文件:
|
|
273
|
+
- 分组原因:
|
|
274
|
+
- 验证:
|
|
275
|
+
- Commit 文本草稿:
|
|
276
|
+
|
|
277
|
+
Commit 2:
|
|
278
|
+
- 类型/scope:
|
|
279
|
+
- 文件:
|
|
280
|
+
- 分组原因:
|
|
281
|
+
- 验证:
|
|
282
|
+
- Commit 文本草稿:
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
拆分规则:
|
|
47
286
|
|
|
48
287
|
1. 功能、测试、文档、配置属于不同类型时,拆成多个 commit。
|
|
49
288
|
2. 多个模块彼此独立时,按模块拆分 commit。
|
|
50
|
-
3.
|
|
51
|
-
4.
|
|
52
|
-
5.
|
|
289
|
+
3. 数据模型、服务层、API、UI 横跨多层时,优先按层拆分,除非某层单独无法通过验证。
|
|
290
|
+
4. 修 bug 与补防御性 guard / follow-up 不是同一件事,能拆就拆。
|
|
291
|
+
5. 生成物和源文件一起提交,必须在 body 里说明生成关系和验证命令。
|
|
292
|
+
6. 一个 commit 如果预期触碰超过 8 个文件,先问自己是否混了多个语义;不能拆时在 body 的 `Risk` 里说明原因。
|
|
293
|
+
7. 每个 commit 尽量独立可验证。不能独立跑全量测试时,至少给出最贴近该 commit 的验证。
|
|
53
294
|
|
|
54
295
|
推荐拆分顺序:
|
|
55
296
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
297
|
+
1. 数据 / schema / contract
|
|
298
|
+
2. 核心实现
|
|
299
|
+
3. 测试
|
|
300
|
+
4. 文档 / examples
|
|
301
|
+
5. 构建 / 发布 / 生成物
|
|
60
302
|
|
|
61
303
|
## History Rules
|
|
62
304
|
|
|
63
|
-
1. 推送前优先同步 base branch
|
|
64
|
-
2.
|
|
305
|
+
1. 推送前优先同步 base branch,并尽量用 `git pull --rebase` 或 `git rebase <base>` 保持线性历史。
|
|
306
|
+
2. 已有打开 PR / MR 时,更新现有 PR / MR,不重复创建第二个。
|
|
65
307
|
3. rebase 之后如果必须强推,只允许 `git push --force-with-lease`,不要裸 `--force`。
|
|
308
|
+
4. 不改写公共分支历史。
|
|
309
|
+
5. 不把 WIP、AI 过程笔记、debug probe、临时日志留在最终历史里;必要时 squash/fixup 到语义 commit。
|
|
310
|
+
6. 使用 `fixup!` / `squash!` 时,最终 ship 前要 autosquash 成干净历史,除非团队明确接受。
|
|
311
|
+
|
|
312
|
+
## Footer Trailers
|
|
313
|
+
|
|
314
|
+
Footer 用于机器和长期审计,不用于塞正文。
|
|
315
|
+
|
|
316
|
+
常用 trailers:
|
|
66
317
|
|
|
67
|
-
|
|
318
|
+
- `BREAKING CHANGE: <what breaks and migration path>`
|
|
319
|
+
- `Closes: #123`
|
|
320
|
+
- `Refs: #123`
|
|
321
|
+
- `Reviewed-by: <name>`
|
|
322
|
+
- `Co-authored-by: <name> <email>`
|
|
323
|
+
- `Signed-off-by: <name> <email>`,仅在项目要求 DCO / signoff 时使用
|
|
324
|
+
- `Change-Id: <id>`,仅在 Gerrit 或项目要求时使用
|
|
325
|
+
|
|
326
|
+
GitHub 自动关闭 issue 时,每个 issue 都要带 closing keyword,例如:
|
|
68
327
|
|
|
69
328
|
```text
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
329
|
+
Closes: #10
|
|
330
|
+
Resolves: #123
|
|
331
|
+
Fixes: owner/repo#100
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
只想关联不想关闭时,用 `Refs:`,不要用 closing keyword。
|
|
335
|
+
|
|
336
|
+
## Bad Messages
|
|
337
|
+
|
|
338
|
+
禁止这些标题:
|
|
339
|
+
|
|
340
|
+
- `fix bug`
|
|
341
|
+
- `update files`
|
|
342
|
+
- `misc changes`
|
|
343
|
+
- `wip`
|
|
344
|
+
- `improve stuff`
|
|
345
|
+
- `final changes`
|
|
346
|
+
- `address feedback`
|
|
347
|
+
- `cleanup`
|
|
348
|
+
- `changes from review`
|
|
349
|
+
|
|
350
|
+
可以改成:
|
|
351
|
+
|
|
352
|
+
```text
|
|
353
|
+
fix(auth): 拒绝过期 refresh token
|
|
354
|
+
|
|
355
|
+
问题:
|
|
356
|
+
- 后台续期流程会接受已经过期的 refresh token。
|
|
357
|
+
|
|
358
|
+
根因:
|
|
359
|
+
- 续期路径信任缓存的过期标记,而不是 token payload 里的真实过期时间。
|
|
360
|
+
|
|
361
|
+
变更:
|
|
362
|
+
- 发放替换 token 前先解析 payload 过期时间。
|
|
363
|
+
- 缓存只保留为优化手段,不再作为信任边界。
|
|
364
|
+
|
|
365
|
+
验证:
|
|
366
|
+
- npm test -- auth-token-refresh.test.ts
|
|
367
|
+
|
|
368
|
+
风险:
|
|
369
|
+
- 低:只影响 auth 续期路径;回滚会恢复旧缓存检查。
|
|
370
|
+
|
|
371
|
+
关联:
|
|
372
|
+
- FIX-042
|
|
75
373
|
```
|
|
76
374
|
|
|
77
375
|
## CC-Act Enforcement
|
|
78
376
|
|
|
79
377
|
`cc-act` 在 `create-pr` / `update-pr` 模式下至少要检查:
|
|
80
378
|
|
|
81
|
-
1. commit
|
|
82
|
-
2.
|
|
83
|
-
3.
|
|
379
|
+
1. 是否先列出 commit plan,再 staging。
|
|
380
|
+
2. staged files 是否只属于当前 commit bucket。
|
|
381
|
+
3. commit title 是否符合 Conventional Commits 或仓库更严格规范。
|
|
382
|
+
4. 非平凡 commit 是否有 `问题`、`变更`、`原因`、`验证`、`风险`。
|
|
383
|
+
5. `fix` commit 是否写了 `根因`,且不是只描述 symptom。
|
|
384
|
+
6. `验证` 是否是实际命令 / artifact / explicit skip reason,而不是 “tested locally”。
|
|
385
|
+
7. footer 是否使用 trailer 风格,issue closing keyword 是否符合目标平台语义。
|
|
386
|
+
8. push、PR body、release note、handoff 是否与最终 commit history 表达同一套事实。
|
|
387
|
+
|
|
388
|
+
如果无法满足这些条件,停在 `local-handoff` 或 reroute,不要制造粗糙历史。
|
|
@@ -34,6 +34,10 @@ req_act_manifest_path() {
|
|
|
34
34
|
printf '%s/task-manifest.json\n' "$(req_act_planning_dir "$1")"
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
req_act_change_meta_path() {
|
|
38
|
+
printf '%s/change-meta.json\n' "$(req_act_change_dir "$1")"
|
|
39
|
+
}
|
|
40
|
+
|
|
37
41
|
req_act_tasks_path() {
|
|
38
42
|
printf '%s/tasks.md\n' "$(req_act_planning_dir "$1")"
|
|
39
43
|
}
|
|
@@ -243,11 +247,22 @@ req_act_collect_touched_files() {
|
|
|
243
247
|
req_act_collect_spec_files() {
|
|
244
248
|
local manifest="$1"
|
|
245
249
|
local out_file="$2"
|
|
250
|
+
local change_dir=""
|
|
251
|
+
local change_meta=""
|
|
246
252
|
|
|
247
253
|
: > "$out_file"
|
|
248
254
|
|
|
249
255
|
if [[ -f "$manifest" ]]; then
|
|
250
|
-
|
|
256
|
+
change_dir="$(req_act_change_dir "$(dirname "$manifest")")"
|
|
257
|
+
change_meta="$(req_act_change_meta_path "$change_dir")"
|
|
258
|
+
fi
|
|
259
|
+
|
|
260
|
+
if [[ -n "$change_meta" && -f "$change_meta" ]]; then
|
|
261
|
+
jq -r '(.spec.specFiles // [])[]?' "$change_meta" 2>/dev/null | sed '/^$/d' > "$out_file" || true
|
|
262
|
+
fi
|
|
263
|
+
|
|
264
|
+
if [[ -f "$manifest" ]]; then
|
|
265
|
+
jq -r '(.spec.specFiles // [])[]?' "$manifest" 2>/dev/null | sed '/^$/d' >> "$out_file" || true
|
|
251
266
|
fi
|
|
252
267
|
|
|
253
268
|
req_act_dedup_file "$out_file"
|
|
@@ -262,8 +277,21 @@ req_act_roadmap_sync_summary() {
|
|
|
262
277
|
local no_op_reason=""
|
|
263
278
|
local updated_files=""
|
|
264
279
|
local existing_files=""
|
|
280
|
+
local change_dir=""
|
|
281
|
+
local change_meta=""
|
|
265
282
|
|
|
266
283
|
if [[ -f "$manifest" ]]; then
|
|
284
|
+
change_dir="$(req_act_change_dir "$(dirname "$manifest")")"
|
|
285
|
+
change_meta="$(req_act_change_meta_path "$change_dir")"
|
|
286
|
+
fi
|
|
287
|
+
|
|
288
|
+
if [[ -n "$change_meta" && -f "$change_meta" ]]; then
|
|
289
|
+
item_id="$(jq -r '.sourceRoadmap.itemId // empty' "$change_meta" 2>/dev/null || true)"
|
|
290
|
+
sync_status="$(jq -r '.roadmapSync.status // .sourceRoadmap.syncStatus // "not recorded"' "$change_meta" 2>/dev/null || true)"
|
|
291
|
+
sync_command="$(jq -r '.roadmapSync.command // .sourceRoadmap.syncCommand // empty' "$change_meta" 2>/dev/null || true)"
|
|
292
|
+
no_op_reason="$(jq -r '.roadmapSync.noOpReason // .sourceRoadmap.noOpReason // empty' "$change_meta" 2>/dev/null || true)"
|
|
293
|
+
updated_files="$(jq -r '(.roadmapSync.updatedFiles // .sourceRoadmap.updatedFiles // []) | join(", ")' "$change_meta" 2>/dev/null || true)"
|
|
294
|
+
elif [[ -f "$manifest" ]]; then
|
|
267
295
|
item_id="$(jq -r '.sourceRoadmap.itemId // empty' "$manifest" 2>/dev/null || true)"
|
|
268
296
|
sync_status="$(jq -r '.sourceRoadmap.syncStatus // .roadmapSync.status // "not recorded"' "$manifest" 2>/dev/null || true)"
|
|
269
297
|
sync_command="$(jq -r '.sourceRoadmap.syncCommand // .roadmapSync.command // empty' "$manifest" 2>/dev/null || true)"
|
|
@@ -66,6 +66,17 @@ requirement_id="$(req_act_requirement_id "$manifest" "$CHANGE_DIR")"
|
|
|
66
66
|
report_summary="$(req_act_report_summary "$report_card")"
|
|
67
67
|
report_verdict="$(req_act_report_verdict "$report_card")"
|
|
68
68
|
output_language="$(req_act_output_language "$report_card")"
|
|
69
|
+
normalized_output_language="$(printf '%s' "$output_language" | tr '[:upper:]' '[:lower:]')"
|
|
70
|
+
case "$normalized_output_language" in
|
|
71
|
+
*zh*|*chinese*|*中文*)
|
|
72
|
+
pr_body_locale="zh"
|
|
73
|
+
pr_language_label="中文"
|
|
74
|
+
;;
|
|
75
|
+
*)
|
|
76
|
+
pr_body_locale="en"
|
|
77
|
+
pr_language_label="English"
|
|
78
|
+
;;
|
|
79
|
+
esac
|
|
69
80
|
design_goal="$(req_act_design_goal "$design_file")"
|
|
70
81
|
main_risk="$(req_act_main_risk "$design_file")"
|
|
71
82
|
review_base_sha="$(jq -r '[.review.taskReviews.reviewPacket.baseSha?, .review.diffReview.reviewPacket.baseSha?] | map(select(. != null and . != "")) | first // "not recorded"' "$report_card")"
|
|
@@ -241,6 +252,159 @@ roadmap_sync_summary="$(req_act_roadmap_sync_summary "$manifest" "$REPO_ROOT")"
|
|
|
241
252
|
echo "- Roadmap progress: $roadmap_sync_summary"
|
|
242
253
|
echo "- PR body accuracy: $pr_body_accuracy_summary"
|
|
243
254
|
echo
|
|
255
|
+
echo "## Pull Request Body Contract"
|
|
256
|
+
echo
|
|
257
|
+
echo "- Language source: \`Output language: $output_language\`"
|
|
258
|
+
echo "- PR body language: $pr_language_label"
|
|
259
|
+
echo "- Title rule: use the same language as the PR body after the Conventional Commits \`type(scope)\` prefix; keep identifiers, paths, commands, and issue keys unchanged."
|
|
260
|
+
echo "- Body source: rebuild from this \`pr-brief.md\`, current diff, current \`review/report-card.json\`, doc sync output, and roadmap/backlog writeback; do not reuse a stale PR body."
|
|
261
|
+
echo "- Required sections: summary, problem, changes, validation, review/gate evidence, risk/rollback, docs/writeback, and follow-ups."
|
|
262
|
+
echo "- Completeness gate: no empty headings, no generic \"tests passed\" claim without commands or evidence, and no \`<placeholder>\` text may remain before \`gh pr create\` or \`gh pr edit\`."
|
|
263
|
+
echo
|
|
264
|
+
echo "## Pull Request Body Draft"
|
|
265
|
+
echo
|
|
266
|
+
echo '```markdown'
|
|
267
|
+
if [[ "$pr_body_locale" == "zh" ]]; then
|
|
268
|
+
echo "## 摘要"
|
|
269
|
+
if [[ -n "$report_summary" ]]; then
|
|
270
|
+
echo "- $report_summary"
|
|
271
|
+
fi
|
|
272
|
+
if [[ -n "$design_goal" && "$design_goal" != "$report_summary" ]]; then
|
|
273
|
+
echo "- $design_goal"
|
|
274
|
+
fi
|
|
275
|
+
if [[ -z "$report_summary" && -z "$design_goal" ]]; then
|
|
276
|
+
echo "- 未记录顶层摘要;创建或更新 PR 前必须补齐。"
|
|
277
|
+
fi
|
|
278
|
+
echo
|
|
279
|
+
echo "## 问题"
|
|
280
|
+
echo "- 需求:$requirement_id"
|
|
281
|
+
echo "- 用户可见缺口:${design_goal:-需要从 planning 产物补齐}"
|
|
282
|
+
echo
|
|
283
|
+
echo "## 变更"
|
|
284
|
+
if [[ -s "$tmp_changed" ]]; then
|
|
285
|
+
while IFS= read -r line; do
|
|
286
|
+
echo "- $line"
|
|
287
|
+
done < "$tmp_changed"
|
|
288
|
+
else
|
|
289
|
+
echo "- 未捕获完成任务列表;创建或更新 PR 前必须补齐。"
|
|
290
|
+
fi
|
|
291
|
+
echo
|
|
292
|
+
echo "## 验证"
|
|
293
|
+
echo "- \`report-card.json\` 结论:$report_verdict"
|
|
294
|
+
if [[ -s "$tmp_evidence" ]]; then
|
|
295
|
+
while IFS= read -r line; do
|
|
296
|
+
echo "- $line"
|
|
297
|
+
done < "$tmp_evidence"
|
|
298
|
+
else
|
|
299
|
+
echo "- 未记录证据行;必须补充命令、退出码或关键观察。"
|
|
300
|
+
fi
|
|
301
|
+
if [[ -s "$tmp_verify" ]]; then
|
|
302
|
+
while IFS= read -r cmd; do
|
|
303
|
+
echo "- \`$cmd\`"
|
|
304
|
+
done < "$tmp_verify"
|
|
305
|
+
fi
|
|
306
|
+
echo
|
|
307
|
+
echo "## Review / Gate 证据"
|
|
308
|
+
echo "- Reviewed base SHA: $review_base_sha"
|
|
309
|
+
echo "- Reviewed head SHA: $review_head_sha"
|
|
310
|
+
echo "- Review packet: $review_packet_summary"
|
|
311
|
+
echo "- Finding triage: $finding_triage_summary"
|
|
312
|
+
echo "- QA / claim evidence: $qa_claim_summary"
|
|
313
|
+
echo "- Readiness: review freshness=[$review_freshness_summary]; qa coverage=[$qa_coverage_summary]; browser QA=[$browser_qa_summary]"
|
|
314
|
+
echo
|
|
315
|
+
echo "## 风险与回滚"
|
|
316
|
+
if [[ -n "$main_risk" ]]; then
|
|
317
|
+
echo "- 主要风险:$main_risk"
|
|
318
|
+
else
|
|
319
|
+
echo "- 主要风险:planning/design.md 未记录新增风险。"
|
|
320
|
+
fi
|
|
321
|
+
echo "- 回滚边界:按 \`Rollback Guard\` 的 safe state、side effects 和 owner 执行;如未补齐,不得合并。"
|
|
322
|
+
echo
|
|
323
|
+
echo "## 文档与回写"
|
|
324
|
+
echo "- \`CLAUDE.md\`: $claude_status"
|
|
325
|
+
echo "- \`README.md\`: $readme_status"
|
|
326
|
+
echo "- Roadmap progress: $roadmap_sync_summary"
|
|
327
|
+
echo
|
|
328
|
+
echo "## 后续事项"
|
|
329
|
+
if [[ -s "$tmp_followups" ]]; then
|
|
330
|
+
while IFS= read -r line; do
|
|
331
|
+
echo "- $line"
|
|
332
|
+
done < "$tmp_followups"
|
|
333
|
+
else
|
|
334
|
+
echo "- 无已记录后续事项。"
|
|
335
|
+
fi
|
|
336
|
+
else
|
|
337
|
+
echo "## Summary"
|
|
338
|
+
if [[ -n "$report_summary" ]]; then
|
|
339
|
+
echo "- $report_summary"
|
|
340
|
+
fi
|
|
341
|
+
if [[ -n "$design_goal" && "$design_goal" != "$report_summary" ]]; then
|
|
342
|
+
echo "- $design_goal"
|
|
343
|
+
fi
|
|
344
|
+
if [[ -z "$report_summary" && -z "$design_goal" ]]; then
|
|
345
|
+
echo "- No top-line summary recorded; fill this before creating or updating the PR."
|
|
346
|
+
fi
|
|
347
|
+
echo
|
|
348
|
+
echo "## Problem"
|
|
349
|
+
echo "- Requirement: $requirement_id"
|
|
350
|
+
echo "- User-visible gap: ${design_goal:-fill from planning artifacts before PR update}"
|
|
351
|
+
echo
|
|
352
|
+
echo "## Changes"
|
|
353
|
+
if [[ -s "$tmp_changed" ]]; then
|
|
354
|
+
while IFS= read -r line; do
|
|
355
|
+
echo "- $line"
|
|
356
|
+
done < "$tmp_changed"
|
|
357
|
+
else
|
|
358
|
+
echo "- No completed task list captured; fill this before creating or updating the PR."
|
|
359
|
+
fi
|
|
360
|
+
echo
|
|
361
|
+
echo "## Validation"
|
|
362
|
+
echo "- \`report-card.json\` verdict: $report_verdict"
|
|
363
|
+
if [[ -s "$tmp_evidence" ]]; then
|
|
364
|
+
while IFS= read -r line; do
|
|
365
|
+
echo "- $line"
|
|
366
|
+
done < "$tmp_evidence"
|
|
367
|
+
else
|
|
368
|
+
echo "- No evidence lines recorded; add command, exit status, or key observation evidence."
|
|
369
|
+
fi
|
|
370
|
+
if [[ -s "$tmp_verify" ]]; then
|
|
371
|
+
while IFS= read -r cmd; do
|
|
372
|
+
echo "- \`$cmd\`"
|
|
373
|
+
done < "$tmp_verify"
|
|
374
|
+
fi
|
|
375
|
+
echo
|
|
376
|
+
echo "## Review / Gate Evidence"
|
|
377
|
+
echo "- Reviewed base SHA: $review_base_sha"
|
|
378
|
+
echo "- Reviewed head SHA: $review_head_sha"
|
|
379
|
+
echo "- Review packet: $review_packet_summary"
|
|
380
|
+
echo "- Finding triage: $finding_triage_summary"
|
|
381
|
+
echo "- QA / claim evidence: $qa_claim_summary"
|
|
382
|
+
echo "- Readiness: review freshness=[$review_freshness_summary]; qa coverage=[$qa_coverage_summary]; browser QA=[$browser_qa_summary]"
|
|
383
|
+
echo
|
|
384
|
+
echo "## Risk And Rollback"
|
|
385
|
+
if [[ -n "$main_risk" ]]; then
|
|
386
|
+
echo "- Main risk: $main_risk"
|
|
387
|
+
else
|
|
388
|
+
echo "- Main risk: no additional risk captured in planning/design.md."
|
|
389
|
+
fi
|
|
390
|
+
echo "- Rollback boundary: follow the \`Rollback Guard\` safe state, side effects, and owner; do not merge if this is incomplete."
|
|
391
|
+
echo
|
|
392
|
+
echo "## Docs And Writeback"
|
|
393
|
+
echo "- \`CLAUDE.md\`: $claude_status"
|
|
394
|
+
echo "- \`README.md\`: $readme_status"
|
|
395
|
+
echo "- Roadmap progress: $roadmap_sync_summary"
|
|
396
|
+
echo
|
|
397
|
+
echo "## Follow-ups"
|
|
398
|
+
if [[ -s "$tmp_followups" ]]; then
|
|
399
|
+
while IFS= read -r line; do
|
|
400
|
+
echo "- $line"
|
|
401
|
+
done < "$tmp_followups"
|
|
402
|
+
else
|
|
403
|
+
echo "- None recorded."
|
|
404
|
+
fi
|
|
405
|
+
fi
|
|
406
|
+
echo '```'
|
|
407
|
+
echo
|
|
244
408
|
echo "## Summary"
|
|
245
409
|
echo
|
|
246
410
|
if [[ -n "$report_summary" ]]; then
|
|
@@ -209,7 +209,7 @@ case "$ship_mode" in
|
|
|
209
209
|
create-pr) next_action="Push current branch and create PR / MR from pr-brief.md." ;;
|
|
210
210
|
update-pr) next_action="Refresh the open PR / MR body and resolve outstanding review feedback." ;;
|
|
211
211
|
local-handoff) next_action="Hand off with pr-brief.md and this resume index." ;;
|
|
212
|
-
post-merge-closeout) next_action="
|
|
212
|
+
post-merge-closeout) next_action="Run release note/backlog writeback, then run cc-devflow archive-change $requirement_id and verify the archive path." ;;
|
|
213
213
|
esac
|
|
214
214
|
if [[ "$branch_rescue" == "create-branch-before-pr" ]]; then
|
|
215
215
|
next_action="Run ensure-ship-branch.sh, rerun final verification, then push the named branch and create PR / MR from pr-brief.md."
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# CC-Check Skill Changelog
|
|
2
2
|
|
|
3
|
+
## v1.11.1 - 2026-05-13
|
|
4
|
+
|
|
5
|
+
- treat `passed`, `done`, `completed`, and `verified` task statuses as complete when rendering the `requirements-met` claim evidence
|
|
6
|
+
- keep report-card task-gap detection aligned with `mark-task-complete.sh` and shared lifecycle status semantics
|
|
7
|
+
|
|
8
|
+
## v1.11.0 - 2026-05-13
|
|
9
|
+
|
|
10
|
+
- read requirement-level review truth from `review-findings.json` first, then `review-ledger.jsonl`, then legacy `cc-review-report.md`
|
|
11
|
+
- block with `review-missing` when no machine review record or legacy report exists
|
|
12
|
+
- document that legacy Markdown fallback has unknown freshness and cannot silently support a high-confidence pass
|
|
13
|
+
|
|
14
|
+
## v1.10.2 - 2026-05-12
|
|
15
|
+
|
|
16
|
+
- add a `workflow-context` context-index reset before verification so `cc-check` starts from current next-action truth instead of full artifact reload
|
|
17
|
+
- make deep verification reads conditional on the workflow context `openWhen.conditions` triggers
|
|
18
|
+
- preserve fresh-evidence requirements while reducing default context needed to choose `cc-check` vs reroute
|
|
19
|
+
|
|
3
20
|
## v1.10.1 - 2026-04-29
|
|
4
21
|
|
|
5
22
|
- add named runtime failure fields with artifact references, owners, and rescue actions
|