cc-devflow 4.5.8 → 4.5.9
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 +27 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +9 -4
- package/.claude/skills/cc-act/SKILL.md +62 -3
- 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 +60 -4
- package/.claude/skills/cc-act/references/closure-contract.md +3 -0
- 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-do/CHANGELOG.md +11 -0
- package/.claude/skills/cc-do/SKILL.md +19 -13
- package/.claude/skills/cc-do/scripts/build-task-context.sh +9 -5
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +0 -6
- package/.claude/skills/cc-investigate/CHANGELOG.md +17 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +15 -0
- package/.claude/skills/cc-investigate/SKILL.md +46 -1
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +47 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +21 -2
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +28 -58
- package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -0
- 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 +19 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +25 -20
- package/.claude/skills/cc-plan/SKILL.md +83 -22
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +67 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +59 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +55 -228
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +46 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +41 -27
- 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 +12 -0
- package/README.md +37 -35
- package/README.zh-CN.md +37 -35
- package/docs/examples/example-bindings.json +7 -7
- package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
- package/docs/examples/full-design-blocked/README.md +1 -1
- 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 +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +27 -311
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +1 -1
- 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 +1 -1
- package/docs/examples/local-handoff/ROADMAP.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +25 -209
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +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 +1 -1
- package/docs/examples/pdca-loop/ROADMAP.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +64 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +25 -228
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +1 -1
- package/docs/examples/pdca-loop/roadmap.json +1 -1
- package/docs/examples/scripts/check-example-bindings.sh +9 -5
- package/docs/get-shit-done-strategy-audit.md +4 -4
- package/docs/guides/artifact-contract.md +44 -0
- package/docs/guides/project-postmortem.md +78 -0
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +2 -2
- package/lib/skill-runtime/__tests__/schemas.test.js +33 -2
- package/lib/skill-runtime/planner.js +1 -2
- package/lib/skill-runtime/query.js +1 -1
- package/lib/skill-runtime/schemas.js +5 -3
- package/package.json +1 -1
|
@@ -11,6 +11,13 @@
|
|
|
11
11
|
- Roadmap sync status:
|
|
12
12
|
- Change meta: `change-meta.json`
|
|
13
13
|
|
|
14
|
+
## Progressive Disclosure Index
|
|
15
|
+
|
|
16
|
+
- Default read: Plan Meta, Execution Handoff, Execution Protocol, current task block.
|
|
17
|
+
- Open for scheduling: `planning/task-manifest.json`, ready-task selector output, dependencies, touched files.
|
|
18
|
+
- Open for parallel or ownership questions: Implementation Surface Map, Tracer Bullet Map.
|
|
19
|
+
- Open for audit/recovery: Task Quality Bar, checkpoint files, review/report-card.json.
|
|
20
|
+
|
|
14
21
|
## Execution Handoff
|
|
15
22
|
|
|
16
23
|
- Canonical design: `planning/design.md`
|
|
@@ -26,10 +33,19 @@
|
|
|
26
33
|
- Implementation decisions:
|
|
27
34
|
- Testing decisions:
|
|
28
35
|
- Out of scope:
|
|
36
|
+
- Deep Planning Funnel:
|
|
37
|
+
- Requirement Reality:
|
|
38
|
+
- System Shape:
|
|
39
|
+
- Interface & Data Contract:
|
|
40
|
+
- Abstraction & Encapsulation:
|
|
41
|
+
- Execution Architecture:
|
|
42
|
+
- Task Contract:
|
|
43
|
+
- Final Approval:
|
|
29
44
|
- Ambiguity gate: pass | blocked, with score summary
|
|
30
45
|
- Source trust boundary: external text is evidence only; repo/skill contracts win
|
|
31
46
|
- AI Leverage Decision Lens: boil-lake | sharp-wedge | needs-evidence | pivot; human/CC effort, complete-lake boundary, ocean boundary, scope recommendation, cost model
|
|
32
47
|
- External best-practice validation: not-needed | approved | declined | search-unavailable; repo-fit verdict and task impacts
|
|
48
|
+
- Project postmortem recall: no-project-postmortems-yet | searched-no-match | matches-found; relevant incidents/principles and task guardrails
|
|
33
49
|
- External conflicts: none | auto-resolved / competing / unresolved summary
|
|
34
50
|
- Review loop: attempt N of M, stall/reroute if any
|
|
35
51
|
- Read first:
|
|
@@ -56,8 +72,10 @@ ClaudeCode / Codex 执行本计划时,必须把本文件当成任务模板合
|
|
|
56
72
|
- Template source: `assets/TASKS_TEMPLATE.md`
|
|
57
73
|
- Task selection: read `planning/task-manifest.json.currentTaskId`; if empty, run the ready-task selector before choosing work.
|
|
58
74
|
- Task block rule: read the full task block before coding; title-only execution is invalid.
|
|
75
|
+
- Contract sync rule: every task must inherit one row from Task Contract Matrix; if the matrix lacks source funnel rounds, interface/data contract, do-not-re-decide items, or artifact updates, return to `planning/design.md` before coding.
|
|
59
76
|
- Completion rule: after verification and review gates pass, run the completion script; do not manually edit checkbox, status, or `currentTaskId`.
|
|
60
77
|
- Completion failure: if the script fails, fix the missing checkpoint / review / dependency evidence and rerun it. Do not bypass it by editing JSON or Markdown.
|
|
78
|
+
- Postmortem recall rule: before each task, search `devflow/postmortems` with the task's touched files, capability, failure class, and model-risk terms; record relevant reminders or an explicit no-match in checkpoint/events.
|
|
61
79
|
|
|
62
80
|
```bash
|
|
63
81
|
SCRIPT_ROOT=".claude/skills/cc-do/scripts"
|
|
@@ -84,13 +102,26 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
84
102
|
|
|
85
103
|
> 每个 slice 必须能独立证明一个端到端行为,不要按“只改数据层 / 只改 UI 层”横切。
|
|
86
104
|
|
|
105
|
+
## Task Contract Matrix
|
|
106
|
+
|
|
107
|
+
| Task | Source funnel rounds | User / edge story | Interface / method | Key fields | File owner / responsibility | Do not re-decide | Artifact updates | Verification evidence |
|
|
108
|
+
|------|----------------------|-------------------|--------------------|------------|-----------------------------|------------------|------------------|-----------------------|
|
|
109
|
+
| T001 | Requirement Reality; Interface & Data Contract; Task Contract | US-001 / US-EDGE-001 | | | | | test file only | failing output |
|
|
110
|
+
|
|
111
|
+
> 这张表是 task block 的来源映射。每个 task 必须能追溯到已经确认的 funnel round,且明确哪些设计点不允许 `cc-do` 重新发明。
|
|
112
|
+
|
|
87
113
|
## Phase 1: Foundation
|
|
88
114
|
|
|
89
115
|
- [ ] T001 [TEST] Write the first failing test (dependsOn:none) `path/to/test`
|
|
90
116
|
Goal: 证明当前行为还没实现,必须先看到失败。
|
|
117
|
+
Source funnel rounds: Requirement Reality; Interface & Data Contract; Task Contract.
|
|
118
|
+
Contract: user story `US-001`; edge story `US-EDGE-001`; file responsibility `tests own behavior proof`; method/interface `<public seam>`; key fields `<field list>`; input/output `<contract>`; failure path `<expected missing behavior>`; AFK/HITL `AFK`.
|
|
119
|
+
Do not re-decide: target behavior, public seam, key fields, allowed mock boundary.
|
|
120
|
+
Artifact updates: `path/to/test`; no production files in Red.
|
|
91
121
|
TDD phase: red
|
|
92
122
|
Files: `path/to/test`
|
|
93
123
|
Read first: `design.md`, `tasks.md`
|
|
124
|
+
Project postmortem search: `rg -n "<test seam|capability|module|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
94
125
|
Verification: `npm test -- path/to/test`
|
|
95
126
|
Evidence: failing output
|
|
96
127
|
Completion: after failing evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T001`; do not hand-edit status.
|
|
@@ -107,9 +138,14 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
107
138
|
|
|
108
139
|
- [ ] T002 [IMPL] Make the first test pass (dependsOn:T001) `path/to/file`
|
|
109
140
|
Goal: 用最小实现让 T001 转绿。
|
|
141
|
+
Source funnel rounds: System Shape; Abstraction & Encapsulation; Execution Architecture; Task Contract.
|
|
142
|
+
Contract: user story `US-001`; file responsibility `<module responsibility>`; method/interface `<method or operation>`; key fields `<field list>`; input/output `<contract>`; failure path `<rescue or error behavior>`; AFK/HITL `AFK`.
|
|
143
|
+
Do not re-decide: file ownership, method shape, key fields, error shape, Green minimality boundary.
|
|
144
|
+
Artifact updates: `path/to/file`; update tests only if the approved public seam changes.
|
|
110
145
|
TDD phase: green
|
|
111
146
|
Files: `path/to/file`
|
|
112
147
|
Read first: `design.md`, `path/to/test`
|
|
148
|
+
Project postmortem search: `rg -n "<implementation surface|module|failure-class|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
113
149
|
Verification: `npm test -- path/to/test`
|
|
114
150
|
Evidence: passing output + checkpoint
|
|
115
151
|
Completion: after green evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T002`; do not hand-edit status.
|
|
@@ -121,9 +157,14 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
121
157
|
|
|
122
158
|
- [ ] T003 [P] [TEST] Add another independent failing test (dependsOn:T002) `path/to/other.test`
|
|
123
159
|
Goal: 为独立行为补红灯。
|
|
160
|
+
Source funnel rounds: Requirement Reality; Interface & Data Contract; Task Contract.
|
|
161
|
+
Contract: user story `US-002`; edge story `US-EDGE-002`; file responsibility `tests own behavior proof`; method/interface `<public seam>`; key fields `<field list>`; input/output `<contract>`; failure path `<expected missing behavior>`; AFK/HITL `AFK`.
|
|
162
|
+
Do not re-decide: behavior boundary, public seam, key fields, allowed mock boundary.
|
|
163
|
+
Artifact updates: `path/to/other.test`; no production files in Red.
|
|
124
164
|
TDD phase: red
|
|
125
165
|
Files: `path/to/other.test`
|
|
126
166
|
Read first: `design.md`, `tasks.md`
|
|
167
|
+
Project postmortem search: `rg -n "<test seam|capability|module|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
127
168
|
Verification: `npm test -- path/to/other.test`
|
|
128
169
|
Evidence: failing output
|
|
129
170
|
Completion: after failing evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T003`; do not hand-edit status.
|
|
@@ -140,9 +181,14 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
140
181
|
|
|
141
182
|
- [ ] T004 [P] [IMPL] Make the independent test pass (dependsOn:T003) `path/to/other-file`
|
|
142
183
|
Goal: 用最小实现让 T003 转绿,并保留重构空间。
|
|
184
|
+
Source funnel rounds: System Shape; Abstraction & Encapsulation; Execution Architecture; Task Contract.
|
|
185
|
+
Contract: user story `US-002`; file responsibility `<module responsibility>`; method/interface `<method or operation>`; key fields `<field list>`; input/output `<contract>`; failure path `<rescue or error behavior>`; AFK/HITL `AFK`.
|
|
186
|
+
Do not re-decide: module ownership, method shape, key fields, Green minimality boundary.
|
|
187
|
+
Artifact updates: `path/to/other-file`; preserve public seam from T003.
|
|
143
188
|
TDD phase: green
|
|
144
189
|
Files: `path/to/other-file`
|
|
145
190
|
Read first: `design.md`, `path/to/other.test`
|
|
191
|
+
Project postmortem search: `rg -n "<implementation surface|module|failure-class|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
146
192
|
Verification: `npm test -- path/to/other.test`
|
|
147
193
|
Evidence: passing output + review notes
|
|
148
194
|
Completion: after green evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T004`; do not hand-edit status.
|
|
@@ -154,9 +200,14 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
154
200
|
|
|
155
201
|
- [ ] T005 [REFACTOR] Simplify after green evidence (dependsOn:T002,T004) `path/to/file`
|
|
156
202
|
Goal: 在所有相关测试已绿后清理重复、命名、结构和坏味道。
|
|
203
|
+
Source funnel rounds: Abstraction & Encapsulation; Execution Architecture; Task Contract.
|
|
204
|
+
Contract: user story `US-001/US-002`; file responsibility `<module responsibility>`; method/interface `<public surface stays unchanged>`; key fields `<no contract drift>`; input/output `<unchanged>`; failure path `<green tests must still cover>`; AFK/HITL `AFK`.
|
|
205
|
+
Do not re-decide: public interface, key fields, user-visible behavior, scope boundary.
|
|
206
|
+
Artifact updates: implementation files only; update tests only to remove implementation coupling.
|
|
157
207
|
TDD phase: refactor
|
|
158
208
|
Files: `path/to/file`
|
|
159
209
|
Read first: `design.md`, green test outputs
|
|
210
|
+
Project postmortem search: `rg -n "<refactor candidate|code smell|module|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
160
211
|
Verification: `npm test -- path/to/test path/to/other.test`
|
|
161
212
|
Evidence: refactor diff + repeated green output
|
|
162
213
|
Completion: after refactor evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T005`; do not hand-edit status.
|
|
@@ -165,9 +216,14 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
165
216
|
|
|
166
217
|
- [ ] T006 Run checks and collect evidence (dependsOn:T005) `command or file`
|
|
167
218
|
Goal: 为 `cc-check` 准备新鲜证据。
|
|
219
|
+
Source funnel rounds: Execution Architecture; Task Contract; Final Approval.
|
|
220
|
+
Contract: user story `all planned stories`; file responsibility `verification evidence`; method/interface `all changed public seams`; key fields `all contract fields`; input/output `not applicable`; failure path `gate failure blocks completion`; AFK/HITL `AFK`.
|
|
221
|
+
Do not re-decide: scope, test framework, gate set, completion protocol.
|
|
222
|
+
Artifact updates: review evidence / checkpoint only; no behavior changes.
|
|
168
223
|
TDD phase: evidence
|
|
169
224
|
Files: `command or file`
|
|
170
225
|
Read first: `tasks.md`, `task-manifest.json`
|
|
226
|
+
Project postmortem search: `rg -n "<verification|release|tooling|model-risk>" devflow/postmortems` or record `no-project-postmortems-yet`
|
|
171
227
|
Verification: `npm test && npm run lint`
|
|
172
228
|
Evidence: gate output
|
|
173
229
|
Completion: after gate evidence and required checkpoint/review records exist, run `bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task T006`; do not hand-edit status.
|
|
@@ -185,6 +241,8 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
185
241
|
- 要留下什么证据给 `cc-check`
|
|
186
242
|
- 它处于 Red、Green、Refactor,还是明确的 TDD exception
|
|
187
243
|
- 它覆盖哪条 user story 或 edge / recovery story
|
|
244
|
+
- 它继承了 Deep Planning Funnel 里确认的哪个接口、方法、字段、分类、输入输出和失败路径
|
|
245
|
+
- 它来自哪几轮 funnel,哪些设计点不允许重决策,哪些 artifact 可以改、哪些不能改
|
|
188
246
|
- 测试框架依据来自哪里,回归测试是否被明确处理
|
|
189
247
|
- Red task 通过哪个公共 seam 证明行为缺失,允许 mock 的边界是什么
|
|
190
248
|
- Red task 的测试名是否像规格,一个测试是否只证明一个逻辑行为,结果是否从公共入口读回
|
|
@@ -193,3 +251,4 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest devflow/changes/<change-key
|
|
|
193
251
|
- 测试是否会在内部重构后继续成立,而不是绑定私有函数、调用次数或临时结构
|
|
194
252
|
- 它属于哪个 tracer bullet 垂直切片,完成后哪个可观察行为被证明
|
|
195
253
|
- 它完成后要运行哪条 `mark-task-complete.sh` 命令,以及为什么不能手工改状态
|
|
254
|
+
- 开工前查过哪些项目尸检报告,相关原则如何转成当前 task guardrail
|
|
@@ -1,57 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"changeId": "REQ-XXX",
|
|
3
|
+
"goal": "Deliver planned requirement changes safely.",
|
|
4
|
+
"createdAt": "2026-05-11T00:00:00.000Z",
|
|
5
|
+
"updatedAt": "2026-05-11T00:00:00.000Z",
|
|
3
6
|
"requirementId": "REQ-XXX",
|
|
4
7
|
"requirementVersion": "REQ-XXX.v1",
|
|
5
8
|
"outputPolicy": {
|
|
6
9
|
"documentLanguage": ""
|
|
7
10
|
},
|
|
8
|
-
"sourceRoadmap": {
|
|
9
|
-
"itemId": "RM-001",
|
|
10
|
-
"roadmapVersion": "1.0",
|
|
11
|
-
"roadmapSkillVersion": "5.2.0",
|
|
12
|
-
"syncStatus": "pending",
|
|
13
|
-
"syncCommand": ".claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh --rm RM-001 --status Planned --req REQ-XXX --progress 0%",
|
|
14
|
-
"updatedFiles": [
|
|
15
|
-
"devflow/roadmap.json",
|
|
16
|
-
"devflow/ROADMAP.md",
|
|
17
|
-
"devflow/BACKLOG.md"
|
|
18
|
-
],
|
|
19
|
-
"noOpReason": "",
|
|
20
|
-
"sourceStage": "Stage 1",
|
|
21
|
-
"successSignal": "User can complete the new flow without manual workaround",
|
|
22
|
-
"killSignal": "Implementation requires reworking unrelated modules",
|
|
23
|
-
"dependencies": [
|
|
24
|
-
"Existing auth/session contract stays unchanged"
|
|
25
|
-
],
|
|
26
|
-
"nonGoals": [
|
|
27
|
-
"No redesign of unrelated settings screens"
|
|
28
|
-
]
|
|
29
|
-
},
|
|
30
11
|
"planningMeta": {
|
|
31
|
-
"reqPlanSkillVersion": "3.8.
|
|
12
|
+
"reqPlanSkillVersion": "3.8.5",
|
|
32
13
|
"designVersion": "design.v1",
|
|
33
14
|
"approvedAt": "2026-04-15T12:00:00.000Z",
|
|
34
|
-
"approvedBy": "user",
|
|
35
15
|
"basedOnOption": "Option A",
|
|
36
|
-
"requirementBrief": {
|
|
37
|
-
"problemStatement": "The user-perspective problem this requirement solves.",
|
|
38
|
-
"solutionSummary": "The user-perspective solution after the requirement lands.",
|
|
39
|
-
"actors": [],
|
|
40
|
-
"userStories": [
|
|
41
|
-
{
|
|
42
|
-
"id": "US-001",
|
|
43
|
-
"actor": "",
|
|
44
|
-
"want": "",
|
|
45
|
-
"benefit": "",
|
|
46
|
-
"acceptance": []
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
"edgeOrRecoveryStories": [],
|
|
50
|
-
"implementationDecisions": [],
|
|
51
|
-
"testingDecisions": [],
|
|
52
|
-
"outOfScope": [],
|
|
53
|
-
"furtherNotes": []
|
|
54
|
-
},
|
|
55
16
|
"aiLeverageDecisionLens": {
|
|
56
17
|
"realUserOrOperator": "",
|
|
57
18
|
"statusQuoWorkaround": "",
|
|
@@ -73,21 +34,6 @@
|
|
|
73
34
|
"missingEvidenceOrPivotReason": "",
|
|
74
35
|
"impactOnApprovedDirection": ""
|
|
75
36
|
},
|
|
76
|
-
"ambiguityGate": {
|
|
77
|
-
"whatScore": 0,
|
|
78
|
-
"whyScore": 0,
|
|
79
|
-
"blockingThreshold": 3,
|
|
80
|
-
"status": "pass",
|
|
81
|
-
"assumptionsPreview": [],
|
|
82
|
-
"blockedQuestions": []
|
|
83
|
-
},
|
|
84
|
-
"reviewLoop": {
|
|
85
|
-
"attempt": 1,
|
|
86
|
-
"maxAttempts": 3,
|
|
87
|
-
"repeatedConcernFingerprints": [],
|
|
88
|
-
"stallReason": "",
|
|
89
|
-
"rerouteIfStalled": "ask-user"
|
|
90
|
-
},
|
|
91
37
|
"externalBestPractice": {
|
|
92
38
|
"needed": false,
|
|
93
39
|
"decisionStatus": "not-needed",
|
|
@@ -131,181 +77,39 @@
|
|
|
131
77
|
}
|
|
132
78
|
]
|
|
133
79
|
},
|
|
134
|
-
"executionProtocol": {
|
|
135
|
-
"templateCompliance": {
|
|
136
|
-
"required": true,
|
|
137
|
-
"sourceTemplate": "assets/TASKS_TEMPLATE.md",
|
|
138
|
-
"taskBlockMustInclude": [
|
|
139
|
-
"Goal",
|
|
140
|
-
"TDD phase",
|
|
141
|
-
"Files",
|
|
142
|
-
"Read first",
|
|
143
|
-
"Verification",
|
|
144
|
-
"Evidence",
|
|
145
|
-
"Test seam",
|
|
146
|
-
"Public verification path",
|
|
147
|
-
"Allowed mocks",
|
|
148
|
-
"Completion"
|
|
149
|
-
],
|
|
150
|
-
"titleOnlyTasks": "forbidden"
|
|
151
|
-
},
|
|
152
|
-
"selection": {
|
|
153
|
-
"sourceOfTruth": "planning/task-manifest.json.currentTaskId",
|
|
154
|
-
"commandTemplate": "SCRIPT_ROOT=\".claude/skills/cc-do/scripts\"; if [[ ! -d \"$SCRIPT_ROOT\" && -d \".codex/skills/cc-do/scripts\" ]]; then SCRIPT_ROOT=\".codex/skills/cc-do/scripts\"; fi; bash \"$SCRIPT_ROOT/select-ready-tasks.sh\" --manifest devflow/changes/<change-key>/planning/task-manifest.json"
|
|
155
|
-
},
|
|
156
|
-
"completion": {
|
|
157
|
-
"manualStatusEdit": "forbidden",
|
|
158
|
-
"commandTemplate": "SCRIPT_ROOT=\".claude/skills/cc-do/scripts\"; if [[ ! -d \"$SCRIPT_ROOT\" && -d \".codex/skills/cc-do/scripts\" ]]; then SCRIPT_ROOT=\".codex/skills/cc-do/scripts\"; fi; bash \"$SCRIPT_ROOT/mark-task-complete.sh\" --manifest devflow/changes/<change-key>/planning/task-manifest.json --tasks devflow/changes/<change-key>/planning/tasks.md --task <task-id>",
|
|
159
|
-
"failurePolicy": "Do not hand-edit status; fix missing checkpoint, review gate, or dependency evidence and rerun the script.",
|
|
160
|
-
"updates": [
|
|
161
|
-
"planning/task-manifest.json.tasks[].status",
|
|
162
|
-
"planning/task-manifest.json.currentTaskId",
|
|
163
|
-
"planning/task-manifest.json.status",
|
|
164
|
-
"planning/tasks.md checkbox"
|
|
165
|
-
]
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
"sourceEvidence": [
|
|
169
|
-
{
|
|
170
|
-
"source": "planning/design.md",
|
|
171
|
-
"trust": "internal-contract",
|
|
172
|
-
"useAs": "contract",
|
|
173
|
-
"instructionRisk": "low",
|
|
174
|
-
"decision": "authoritative for this requirement"
|
|
175
|
-
}
|
|
176
|
-
],
|
|
177
|
-
"languageAndDecisions": {
|
|
178
|
-
"languageSources": [],
|
|
179
|
-
"canonicalTerms": [],
|
|
180
|
-
"languageConflicts": [],
|
|
181
|
-
"decisionDocs": [],
|
|
182
|
-
"adrOrSpecConflicts": [],
|
|
183
|
-
"externalDocConflicts": {
|
|
184
|
-
"autoResolved": [],
|
|
185
|
-
"competing": [],
|
|
186
|
-
"unresolved": []
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
"executionDiscipline": {
|
|
190
|
-
"default": "red-green-refactor",
|
|
191
|
-
"taskShape": "vertical-tracer-bullets",
|
|
192
|
-
"testFirstRequired": true,
|
|
193
|
-
"testFrameworkSource": "",
|
|
194
|
-
"testQualityPolicy": {
|
|
195
|
-
"publicInterfaceRequired": true,
|
|
196
|
-
"behaviorAssertionRequired": true,
|
|
197
|
-
"specStyleTestNameRequired": true,
|
|
198
|
-
"oneLogicalBehaviorPerRed": true,
|
|
199
|
-
"publicVerificationPathRequired": true,
|
|
200
|
-
"mockBoundary": "system-boundaries-only",
|
|
201
|
-
"implementationDetailTests": "blocked",
|
|
202
|
-
"bulkRedTests": "blocked",
|
|
203
|
-
"boundaryAdapterShape": "specific-operations-preferred",
|
|
204
|
-
"feedbackLoopPreference": [
|
|
205
|
-
"automated-test",
|
|
206
|
-
"http-curl",
|
|
207
|
-
"cli-fixture",
|
|
208
|
-
"browser-script",
|
|
209
|
-
"trace-replay",
|
|
210
|
-
"throwaway-harness",
|
|
211
|
-
"property-fuzz",
|
|
212
|
-
"differential-loop",
|
|
213
|
-
"hitl-script"
|
|
214
|
-
]
|
|
215
|
-
},
|
|
216
|
-
"regressionTestsRequired": [],
|
|
217
|
-
"tddExceptions": []
|
|
218
|
-
},
|
|
219
|
-
"status": "planned",
|
|
220
|
-
"designMode": "tiny-design",
|
|
221
|
-
"approvedOption": "Option A",
|
|
222
|
-
"designStatus": "approved",
|
|
223
|
-
"reviewStatus": "approved",
|
|
224
|
-
"spec": {
|
|
225
|
-
"primaryCapability": "cap-example",
|
|
226
|
-
"secondaryCapabilities": [],
|
|
227
|
-
"expectedDelta": [
|
|
228
|
-
"Tighten current truth for the capability"
|
|
229
|
-
],
|
|
230
|
-
"affectedInvariants": [],
|
|
231
|
-
"gapsClosed": [],
|
|
232
|
-
"newGaps": [],
|
|
233
|
-
"specFiles": [
|
|
234
|
-
"devflow/specs/capabilities/cap-example.md"
|
|
235
|
-
],
|
|
236
|
-
"syncStatus": "planned"
|
|
237
|
-
},
|
|
238
|
-
"tasteDecisions": [],
|
|
239
|
-
"userChallenges": [],
|
|
240
80
|
"currentTaskId": "T001",
|
|
241
|
-
"activePhase": 1,
|
|
242
|
-
"frozenDecisions": [
|
|
243
|
-
"Keep the existing route and data contract",
|
|
244
|
-
"Prefer a minimal patch over a broader refactor"
|
|
245
|
-
],
|
|
246
81
|
"tasks": [
|
|
247
82
|
{
|
|
248
83
|
"id": "T001",
|
|
249
84
|
"title": "[TEST] Add a failing test for the missing behavior",
|
|
85
|
+
"type": "TEST",
|
|
250
86
|
"phase": 1,
|
|
251
|
-
"
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
"behaviorAsserted": "The user or caller observable behavior that should exist",
|
|
257
|
-
"specStyleTestName": "caller can observe the required behavior",
|
|
258
|
-
"oneLogicalBehavior": true,
|
|
259
|
-
"publicVerificationPath": "Read back through the same public interface or user-visible path",
|
|
260
|
-
"implementationDetailRisk": "low"
|
|
261
|
-
},
|
|
262
|
-
"feedbackLoop": {
|
|
263
|
-
"type": "automated-test",
|
|
264
|
-
"determinism": "deterministic",
|
|
265
|
-
"expectedFailure": "Fails because the target behavior is missing"
|
|
266
|
-
},
|
|
267
|
-
"allowedMocks": [
|
|
268
|
-
"external API / time / randomness / filesystem / database boundary"
|
|
269
|
-
],
|
|
270
|
-
"testQuality": {
|
|
271
|
-
"usesPublicInterface": true,
|
|
272
|
-
"describesBehavior": true,
|
|
273
|
-
"specStyleName": true,
|
|
274
|
-
"oneLogicalBehavior": true,
|
|
275
|
-
"verifiesThroughPublicPath": true,
|
|
276
|
-
"survivesInternalRefactor": true,
|
|
277
|
-
"mocksOnlySystemBoundaries": true,
|
|
278
|
-
"noBulkRed": true
|
|
279
|
-
},
|
|
280
|
-
"greenMinimality": {
|
|
281
|
-
"guard": "Implement only the code needed to pass this Red behavior",
|
|
282
|
-
"noSpeculativeBranches": true
|
|
283
|
-
},
|
|
284
|
-
"completion": {
|
|
285
|
-
"command": "SCRIPT_ROOT=\".claude/skills/cc-do/scripts\"; if [[ ! -d \"$SCRIPT_ROOT\" && -d \".codex/skills/cc-do/scripts\" ]]; then SCRIPT_ROOT=\".codex/skills/cc-do/scripts\"; fi; bash \"$SCRIPT_ROOT/mark-task-complete.sh\" --manifest devflow/changes/REQ-XXX-short-name/planning/task-manifest.json --tasks devflow/changes/REQ-XXX-short-name/planning/tasks.md --task T001",
|
|
286
|
-
"requiredBeforeCompletion": [
|
|
287
|
-
"verification evidence captured",
|
|
288
|
-
"checkpoint written",
|
|
289
|
-
"spec review gate recorded",
|
|
290
|
-
"code review gate recorded"
|
|
87
|
+
"contract": {
|
|
88
|
+
"sourceFunnelRounds": [
|
|
89
|
+
"Requirement Reality",
|
|
90
|
+
"Interface & Data Contract",
|
|
91
|
+
"Task Contract"
|
|
291
92
|
],
|
|
292
|
-
"
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
93
|
+
"userStory": "US-001",
|
|
94
|
+
"edgeOrRecoveryStory": "US-EDGE-001",
|
|
95
|
+
"fileResponsibility": "tests own behavior proof",
|
|
96
|
+
"methodOrInterface": "public interface / caller flow / CLI / API / UI / trace replay / harness",
|
|
97
|
+
"keyFields": [],
|
|
98
|
+
"inputOutput": "",
|
|
99
|
+
"failurePath": "The behavior is currently missing",
|
|
100
|
+
"afkOrHitl": "AFK",
|
|
101
|
+
"doNotRedecide": [
|
|
102
|
+
"target behavior",
|
|
103
|
+
"public seam",
|
|
104
|
+
"key fields",
|
|
105
|
+
"allowed mock boundary"
|
|
106
|
+
],
|
|
107
|
+
"artifactUpdates": [
|
|
108
|
+
"src/feature/feature.test.ts"
|
|
296
109
|
]
|
|
297
110
|
},
|
|
298
|
-
"refactorCandidates": [
|
|
299
|
-
"duplication",
|
|
300
|
-
"long method",
|
|
301
|
-
"shallow module",
|
|
302
|
-
"feature envy",
|
|
303
|
-
"primitive obsession",
|
|
304
|
-
"naming",
|
|
305
|
-
"more than three nested branches"
|
|
306
|
-
],
|
|
307
|
-
"dependsOn": [],
|
|
308
111
|
"parallel": false,
|
|
112
|
+
"dependsOn": [],
|
|
309
113
|
"touches": [
|
|
310
114
|
"tests",
|
|
311
115
|
"requirement-behavior"
|
|
@@ -313,6 +117,9 @@
|
|
|
313
117
|
"files": [
|
|
314
118
|
"src/feature/feature.test.ts"
|
|
315
119
|
],
|
|
120
|
+
"run": [
|
|
121
|
+
"npm test -- src/feature/feature.test.ts"
|
|
122
|
+
],
|
|
316
123
|
"acceptance": [
|
|
317
124
|
"The target behavior is reproduced as a failing test",
|
|
318
125
|
"The failure message points to the missing requirement behavior"
|
|
@@ -340,11 +147,31 @@
|
|
|
340
147
|
"reviews": {
|
|
341
148
|
"spec": "pending",
|
|
342
149
|
"code": "pending"
|
|
343
|
-
}
|
|
150
|
+
},
|
|
151
|
+
"status": "pending",
|
|
152
|
+
"tddPhase": "red",
|
|
153
|
+
"verticalSlice": "Slice 1",
|
|
154
|
+
"testSeam": {
|
|
155
|
+
"entry": "public interface / caller flow / CLI / API / UI / trace replay / harness",
|
|
156
|
+
"behaviorAsserted": "The user or caller observable behavior that should exist",
|
|
157
|
+
"specStyleTestName": "caller can observe the required behavior",
|
|
158
|
+
"oneLogicalBehavior": true,
|
|
159
|
+
"publicVerificationPath": "Read back through the same public interface or user-visible path",
|
|
160
|
+
"implementationDetailRisk": "low"
|
|
161
|
+
},
|
|
162
|
+
"feedbackLoop": {
|
|
163
|
+
"type": "automated-test",
|
|
164
|
+
"determinism": "deterministic",
|
|
165
|
+
"expectedFailure": "Fails because the target behavior is missing"
|
|
166
|
+
},
|
|
167
|
+
"checks": [],
|
|
168
|
+
"attempts": 0,
|
|
169
|
+
"maxRetries": 1
|
|
344
170
|
}
|
|
345
171
|
],
|
|
346
|
-
"
|
|
347
|
-
|
|
348
|
-
"
|
|
349
|
-
|
|
172
|
+
"metadata": {
|
|
173
|
+
"source": "tasks.md",
|
|
174
|
+
"generatedBy": "skill:cc-plan",
|
|
175
|
+
"planVersion": 1
|
|
176
|
+
}
|
|
350
177
|
}
|
|
@@ -16,6 +16,13 @@
|
|
|
16
16
|
- Primary capability:
|
|
17
17
|
- Secondary capabilities:
|
|
18
18
|
|
|
19
|
+
## Progressive Disclosure Index
|
|
20
|
+
|
|
21
|
+
- Default read: Frozen Design Card, Validation, Main Risk, Approval.
|
|
22
|
+
- Open for scope questions: Source Handoff, Capability Handoff, Implementation Surface Map.
|
|
23
|
+
- Open for trust/conflict questions: Source Trust Boundary, External Document Conflicts, Domain Language & Decisions.
|
|
24
|
+
- Open for audit/recovery: Project Postmortem Recall, Review Gate, Bounded Review Loop, Decision Questions.
|
|
25
|
+
|
|
19
26
|
## Source Handoff
|
|
20
27
|
|
|
21
28
|
- Why now:
|
|
@@ -42,6 +49,20 @@
|
|
|
42
49
|
- Gate verdict: `pass` | `blocked`
|
|
43
50
|
- Blocked question if any:
|
|
44
51
|
|
|
52
|
+
## Deep Planning Funnel
|
|
53
|
+
|
|
54
|
+
| Round | Confirmed answer | Evidence / user answer | Status | Artifact impact |
|
|
55
|
+
|-------|------------------|------------------------|--------|-----------------|
|
|
56
|
+
| Requirement Reality | | | confirmed / auto-decided / blocked / not-applicable | Frozen Design Card |
|
|
57
|
+
| System Shape | | | confirmed / auto-decided / blocked / not-applicable | Implementation Surface Map |
|
|
58
|
+
| Interface & Data Contract | | | confirmed / auto-decided / blocked / not-applicable | Interface Shape / Validation |
|
|
59
|
+
| Abstraction & Encapsulation | | | confirmed / auto-decided / blocked / not-applicable | Interface Shape |
|
|
60
|
+
| Execution Architecture | | | confirmed / auto-decided / blocked / not-applicable | Validation / Roadmap Sync Gate |
|
|
61
|
+
| Task Contract | | | confirmed / auto-decided / blocked / not-applicable | planning/tasks.md / task-manifest.json |
|
|
62
|
+
| Final Approval | | | confirmed / blocked | Approval |
|
|
63
|
+
|
|
64
|
+
> tiny-design 也必须把关键确认落盘。若出现新接口、字段、状态机或跨模块决策,优先升级 `full-design`。
|
|
65
|
+
|
|
45
66
|
## External Document Conflicts
|
|
46
67
|
|
|
47
68
|
- Auto-resolved:
|
|
@@ -76,6 +97,19 @@
|
|
|
76
97
|
- Changes to frozen design:
|
|
77
98
|
- Skipped reason:
|
|
78
99
|
|
|
100
|
+
## Project Postmortem Recall
|
|
101
|
+
|
|
102
|
+
- Search status: `no-project-postmortems-yet` | `searched-no-match` | `matches-found`
|
|
103
|
+
- Search command:
|
|
104
|
+
- Search terms:
|
|
105
|
+
- Sources opened:
|
|
106
|
+
- Matching incidents:
|
|
107
|
+
- Matching principles:
|
|
108
|
+
- Planning impact:
|
|
109
|
+
- No-op reason:
|
|
110
|
+
|
|
111
|
+
> tiny-design 也必须查尸检报告。越小的改动越容易让模型凭直觉重复旧错误。
|
|
112
|
+
|
|
79
113
|
## Capability Handoff
|
|
80
114
|
|
|
81
115
|
- Canonical capability spec:
|
|
@@ -121,9 +155,15 @@
|
|
|
121
155
|
|
|
122
156
|
- Callers:
|
|
123
157
|
- Public operations:
|
|
158
|
+
- Methods / operations:
|
|
159
|
+
- Key fields:
|
|
160
|
+
- Input / output:
|
|
161
|
+
- Error shape:
|
|
162
|
+
- Category / type source:
|
|
124
163
|
- Complexity hidden:
|
|
125
164
|
- Misuse risk:
|
|
126
165
|
- Why this stays simple:
|
|
166
|
+
- Rejected abstraction:
|
|
127
167
|
|
|
128
168
|
## Interface Testability
|
|
129
169
|
|
|
@@ -161,6 +201,12 @@
|
|
|
161
201
|
- Primary check:
|
|
162
202
|
- Secondary checks:
|
|
163
203
|
|
|
204
|
+
## Task Contract Preview
|
|
205
|
+
|
|
206
|
+
| Task | User / edge story | File responsibility | Method / interface | Key fields | Failure path | Verification | AFK / HITL |
|
|
207
|
+
|------|-------------------|---------------------|--------------------|------------|--------------|--------------|------------|
|
|
208
|
+
| T001 | | | | | | | AFK / HITL |
|
|
209
|
+
|
|
164
210
|
## Roadmap Sync Gate
|
|
165
211
|
|
|
166
212
|
- Source RM:
|