cc-devflow 4.5.4 → 4.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +6 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +21 -5
  3. package/.claude/skills/cc-act/SKILL.md +21 -11
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +10 -0
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +8 -0
  6. package/.claude/skills/cc-act/references/closure-contract.md +3 -0
  7. package/.claude/skills/cc-act/scripts/cc-act-common.sh +48 -0
  8. package/.claude/skills/cc-act/scripts/generate-status-report.sh +3 -0
  9. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +6 -0
  10. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +13 -0
  11. package/.claude/skills/cc-do/CHANGELOG.md +6 -0
  12. package/.claude/skills/cc-do/PLAYBOOK.md +7 -6
  13. package/.claude/skills/cc-do/SKILL.md +27 -12
  14. package/.claude/skills/cc-do/references/execution-recovery.md +9 -0
  15. package/.claude/skills/cc-investigate/CHANGELOG.md +6 -0
  16. package/.claude/skills/cc-investigate/PLAYBOOK.md +5 -1
  17. package/.claude/skills/cc-investigate/SKILL.md +22 -5
  18. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +14 -0
  19. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +1 -0
  20. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +9 -1
  21. package/.claude/skills/cc-investigate/references/investigation-contract.md +2 -0
  22. package/.claude/skills/cc-plan/CHANGELOG.md +23 -0
  23. package/.claude/skills/cc-plan/PLAYBOOK.md +38 -18
  24. package/.claude/skills/cc-plan/SKILL.md +81 -47
  25. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +68 -3
  26. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -5
  27. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +54 -2
  28. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +44 -0
  29. package/.claude/skills/cc-plan/references/planning-contract.md +29 -15
  30. package/.claude/skills/cc-roadmap/CHANGELOG.md +12 -0
  31. package/.claude/skills/cc-roadmap/PLAYBOOK.md +15 -9
  32. package/.claude/skills/cc-roadmap/SKILL.md +22 -16
  33. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +3 -1
  34. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +11 -1
  35. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +57 -10
  36. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +68 -3
  37. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +120 -0
  38. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +25 -1
  39. package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +13 -5
  40. package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +3 -3
  41. package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +3 -3
  42. package/CHANGELOG.md +7 -0
  43. package/README.md +5 -5
  44. package/README.zh-CN.md +5 -5
  45. package/docs/CLAUDE.md +1 -1
  46. package/docs/examples/START-HERE.md +3 -3
  47. package/docs/examples/example-bindings.json +26 -9
  48. package/docs/examples/full-design-blocked/BACKLOG.md +4 -2
  49. package/docs/examples/full-design-blocked/README.md +4 -4
  50. package/docs/examples/full-design-blocked/ROADMAP.md +16 -2
  51. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +39 -1
  52. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +41 -0
  53. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +8 -1
  54. package/docs/examples/full-design-blocked/roadmap.json +123 -0
  55. package/docs/examples/local-handoff/BACKLOG.md +4 -2
  56. package/docs/examples/local-handoff/README.md +4 -4
  57. package/docs/examples/local-handoff/ROADMAP.md +16 -2
  58. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +19 -1
  59. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +26 -0
  60. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +8 -1
  61. package/docs/examples/local-handoff/roadmap.json +121 -0
  62. package/docs/examples/pdca-loop/BACKLOG.md +4 -2
  63. package/docs/examples/pdca-loop/README.md +4 -4
  64. package/docs/examples/pdca-loop/ROADMAP.md +16 -2
  65. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +19 -1
  66. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +22 -3
  67. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +8 -1
  68. package/docs/examples/pdca-loop/roadmap.json +191 -0
  69. package/docs/examples/scripts/check-example-bindings.sh +7 -4
  70. package/docs/guides/getting-started.md +2 -2
  71. package/docs/guides/getting-started.zh-CN.md +2 -2
  72. package/lib/compiler/__tests__/skills-registry.test.js +17 -3
  73. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +9 -1
  74. package/package.json +1 -1
@@ -0,0 +1,191 @@
1
+ {
2
+ "version": 3,
3
+ "outputPolicy": {
4
+ "documentLanguage": "en"
5
+ },
6
+ "meta": {
7
+ "roadmapVersion": "roadmap.v1",
8
+ "skillVersion": "5.0.0",
9
+ "status": "active",
10
+ "lastUpdated": "2026-04-19",
11
+ "currentFocusStage": "Stage 1"
12
+ },
13
+ "context": {
14
+ "planningPosture": "",
15
+ "evidenceMaturity": "",
16
+ "canonicalTerms": [],
17
+ "durableDecisionSources": []
18
+ },
19
+ "evidence": [],
20
+ "route": {
21
+ "recommended": "",
22
+ "whyThisWinsNow": "",
23
+ "rejectedRoutes": [],
24
+ "firstSignal": "",
25
+ "killSignal": ""
26
+ },
27
+ "stages": [],
28
+ "items": [
29
+ {
30
+ "rmId": "RM-001",
31
+ "item": "Add one-click copy action to the share dialog",
32
+ "stage": "Stage 1",
33
+ "priority": "P1",
34
+ "primaryCapability": "cap-invite-links",
35
+ "secondaryCapabilities": [],
36
+ "expectedSpecDelta": "tighten invite-link copy truth",
37
+ "dependsOn": [],
38
+ "status": "In review",
39
+ "req": "REQ-001",
40
+ "progress": "100%",
41
+ "backlog": {
42
+ "capabilityGap": "share dialog exposes invite URL but not direct copy action",
43
+ "evidence": "repeated support friction",
44
+ "parallelWith": [],
45
+ "unknowns": "copied-state feedback shape",
46
+ "nextDecision": "freeze tiny design and execute",
47
+ "ready": true,
48
+ "whyNow": "it removes the first visible collaboration friction in the beta flow",
49
+ "successSignal": "users can copy the invite link with one click",
50
+ "entryConstraints": "no backend changes, no share dialog redesign",
51
+ "openRisks": "clipboard failure copy may still need follow-up UX",
52
+ "firstPlanningQuestion": "can this stay a tiny-design patch without changing contracts?",
53
+ "requiredContextToLoad": "current share dialog, current invite URL source, existing tests",
54
+ "whyReadyNow": "the ask is narrow, the evidence is real, and the dependency surface is already known",
55
+ "parked": false,
56
+ "parkedReason": "",
57
+ "triggerToReopen": "",
58
+ "missingEvidence": ""
59
+ }
60
+ },
61
+ {
62
+ "rmId": "RM-002",
63
+ "item": "Add copied-state feedback to the share dialog",
64
+ "stage": "Stage 1",
65
+ "priority": "P2",
66
+ "primaryCapability": "cap-invite-links",
67
+ "secondaryCapabilities": [],
68
+ "expectedSpecDelta": "extend invite-link feedback truth",
69
+ "dependsOn": [
70
+ "RM-001"
71
+ ],
72
+ "status": "Planned",
73
+ "req": "",
74
+ "progress": "0%",
75
+ "backlog": {
76
+ "capabilityGap": "invite links lack durable copied-state feedback after action completion",
77
+ "evidence": "likely useful after RM-001",
78
+ "parallelWith": [],
79
+ "unknowns": "toast vs inline state",
80
+ "nextDecision": "decide after first patch ships",
81
+ "ready": false,
82
+ "whyNow": "",
83
+ "successSignal": "",
84
+ "entryConstraints": "",
85
+ "openRisks": "",
86
+ "firstPlanningQuestion": "",
87
+ "requiredContextToLoad": "",
88
+ "whyReadyNow": "",
89
+ "parked": false,
90
+ "parkedReason": "",
91
+ "triggerToReopen": "",
92
+ "missingEvidence": ""
93
+ }
94
+ },
95
+ {
96
+ "rmId": "RM-004",
97
+ "item": "Collaboration analytics follow-up",
98
+ "stage": "",
99
+ "priority": "",
100
+ "primaryCapability": "",
101
+ "secondaryCapabilities": [],
102
+ "expectedSpecDelta": "",
103
+ "dependsOn": [],
104
+ "status": "",
105
+ "req": "",
106
+ "progress": "",
107
+ "backlog": {
108
+ "capabilityGap": "",
109
+ "evidence": "",
110
+ "parallelWith": [],
111
+ "unknowns": "",
112
+ "nextDecision": "",
113
+ "ready": false,
114
+ "whyNow": "",
115
+ "successSignal": "",
116
+ "entryConstraints": "",
117
+ "openRisks": "",
118
+ "firstPlanningQuestion": "",
119
+ "requiredContextToLoad": "",
120
+ "whyReadyNow": "",
121
+ "parked": true,
122
+ "parkedReason": "collaboration analytics is premature before Stage 1 and 2 prove usage",
123
+ "triggerToReopen": "repeated invite usage after beta activation",
124
+ "missingEvidence": "stable collaboration volume"
125
+ }
126
+ }
127
+ ],
128
+ "handoff": {
129
+ "readyForCcPlan": [
130
+ "RM-001"
131
+ ],
132
+ "parked": [
133
+ "RM-004"
134
+ ],
135
+ "serialSpine": [
136
+ "RM-001 -> RM-002"
137
+ ],
138
+ "parallelWaves": [
139
+ "none until RM-001 proves the copy action shape"
140
+ ]
141
+ },
142
+ "architecture": {
143
+ "diagramType": "flowchart",
144
+ "nodes": [
145
+ {
146
+ "id": "roadmap_json",
147
+ "label": "roadmap.json"
148
+ },
149
+ {
150
+ "id": "roadmap_md",
151
+ "label": "ROADMAP.md"
152
+ },
153
+ {
154
+ "id": "backlog_md",
155
+ "label": "BACKLOG.md (deprecated)"
156
+ },
157
+ {
158
+ "id": "cc_plan",
159
+ "label": "cc-plan"
160
+ }
161
+ ],
162
+ "edges": [
163
+ {
164
+ "from": "roadmap_json",
165
+ "to": "roadmap_md",
166
+ "label": "renders"
167
+ },
168
+ {
169
+ "from": "roadmap_json",
170
+ "to": "backlog_md",
171
+ "label": "projects"
172
+ },
173
+ {
174
+ "from": "roadmap_md",
175
+ "to": "cc_plan",
176
+ "label": "hands off"
177
+ }
178
+ ]
179
+ },
180
+ "backlogMeta": {
181
+ "roadmapVersion": "roadmap.v1",
182
+ "skillVersion": "4.4.1",
183
+ "currentFocusStage": "Stage 1"
184
+ },
185
+ "dependencyHandoff": {
186
+ "serialSpine": "RM-001 -> RM-002",
187
+ "parallelReadyNextWave": "none until RM-001 proves the copy action shape",
188
+ "notesOnBlockers": "RM-002 should reuse the final interaction contract from RM-001, not race it"
189
+ },
190
+ "lastSyncedAt": "2026-04-19"
191
+ }
@@ -67,7 +67,7 @@ while IFS= read -r encoded; do
67
67
  review_dir="$change_dir/review"
68
68
  handoff_dir="$change_dir/handoff"
69
69
 
70
- for file in "$readme" "$root/ROADMAP.md" "$root/BACKLOG.md" "$root/roadmap-tracking.json" "$planning_dir/design.md" "$planning_dir/tasks.md" "$planning_dir/task-manifest.json"; do
70
+ for file in "$readme" "$root/ROADMAP.md" "$root/BACKLOG.md" "$root/roadmap.json" "$planning_dir/design.md" "$planning_dir/tasks.md" "$planning_dir/task-manifest.json"; do
71
71
  if [[ ! -f "$file" ]]; then
72
72
  echo "Example $example_id is missing required file: $file" >&2
73
73
  exit 1
@@ -75,14 +75,17 @@ while IFS= read -r encoded; do
75
75
  done
76
76
 
77
77
  assert_contains "$root/ROADMAP.md" "- Skill version: \`$ROADMAP_VERSION\`"
78
- assert_contains "$root/ROADMAP.md" "- Tracking source: \`roadmap-tracking.json\`"
78
+ assert_contains "$root/ROADMAP.md" "- Roadmap state source: \`roadmap.json\`"
79
+ assert_contains "$root/ROADMAP.md" "## Technical Architecture"
80
+ assert_contains "$root/ROADMAP.md" "\`\`\`mermaid"
79
81
  assert_contains "$root/BACKLOG.md" "- Skill version: \`$ROADMAP_VERSION\`"
80
- assert_contains "$root/BACKLOG.md" "- Tracking source: \`roadmap-tracking.json\`"
82
+ assert_contains "$root/BACKLOG.md" "> Deprecated projection. Edit \`roadmap.json\` instead."
83
+ assert_contains "$root/BACKLOG.md" "- Roadmap state source: \`roadmap.json\`"
81
84
  assert_contains "$root/BACKLOG.md" "| RM-ID | Title | Source Stage | Priority | Primary Capability | Secondary Capabilities | Capability Gap | Expected Spec Delta | Evidence | Depends On | Parallel With | Unknowns | Next Decision | Ready |"
82
85
  assert_contains "$root/BACKLOG.md" "## Ready For Req-Plan"
83
86
  assert_contains "$root/BACKLOG.md" " - Primary Capability:"
84
87
  assert_contains "$root/BACKLOG.md" " - Expected spec delta:"
85
- jq -er '.version == 2 and (.items | length) > 0 and (.backlogMeta | type == "object") and (.dependencyHandoff | type == "object") and any(.items[]; .backlog != null)' "$root/roadmap-tracking.json" >/dev/null
88
+ jq -er '.version == 3 and (.items | length) > 0 and (.meta | type == "object") and (.handoff | type == "object") and (.architecture.nodes | length) > 0 and any(.items[]; .backlog != null)' "$root/roadmap.json" >/dev/null
86
89
  assert_contains "$planning_dir/design.md" "- CC-Plan skill version: \`$REQ_PLAN_VERSION\`"
87
90
  assert_contains "$planning_dir/tasks.md" "- CC-Plan skill version: \`$REQ_PLAN_VERSION\`"
88
91
 
@@ -83,7 +83,7 @@ Use the skills in this order:
83
83
 
84
84
  Typical outputs:
85
85
 
86
- - `cc-roadmap` writes `devflow/ROADMAP.md` and `devflow/BACKLOG.md`; helper sync can also maintain `devflow/roadmap-tracking.json` as the shared roadmap/backlog truth source
86
+ - `cc-roadmap` writes `devflow/roadmap.json` as the editable roadmap truth, then generates `devflow/ROADMAP.md` and deprecated `devflow/BACKLOG.md`
87
87
  - `cc-spec-init` writes `devflow/specs/INDEX.md`, capability specs, and `change-meta.json`
88
88
  - `cc-plan` writes `planning/design.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
89
89
  - `cc-investigate` writes `planning/analysis.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
@@ -94,7 +94,7 @@ Capability truth lives in `devflow/specs/`.
94
94
  Change truth lives in `devflow/changes/<change>/`.
95
95
 
96
96
  - Keep `INDEX.md` plus capability markdown under `devflow/specs/`.
97
- - Name new change directories as `REQ-<number>-<description>` for requirements or `FIX-<number>-<description>` for bug fixes; old lowercase directories are compatibility reads only.
97
+ - Name new change directories as `REQ-<number>-<description>` for requirements or `FIX-<number>-<description>` for bug fixes. `REQ` and `FIX` are separate number sequences; old lowercase directories are compatibility reads only.
98
98
  - Keep `change-state.json`, `change-meta.json`, planning docs, `task-manifest.json`, optional `team-state.json`, task `checkpoint.json`, `report-card.json`, and one final handoff file under each `devflow/changes/<change>/`.
99
99
  - Worker prompts, journals, assignments, and session logs belong under `devflow/workspaces/<change>/` as ephemeral scratch.
100
100
 
@@ -83,7 +83,7 @@ find .codex/skills -mindepth 2 -maxdepth 2 -name SKILL.md | sort
83
83
 
84
84
  常见产物:
85
85
 
86
- - `cc-roadmap` 产出 `devflow/ROADMAP.md` 和 `devflow/BACKLOG.md`;如果使用内置同步脚本,还会维护 `devflow/roadmap-tracking.json` 作为 roadmap/backlog 的共享真相源
86
+ - `cc-roadmap` 产出可编辑真相 `devflow/roadmap.json`,再生成 `devflow/ROADMAP.md` 和 deprecated `devflow/BACKLOG.md`
87
87
  - `cc-spec-init` 产出 `devflow/specs/INDEX.md`、capability spec 和 `change-meta.json`
88
88
  - `cc-plan` 产出 `planning/design.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
89
89
  - `cc-investigate` 产出 `planning/analysis.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
@@ -93,7 +93,7 @@ find .codex/skills -mindepth 2 -maxdepth 2 -name SKILL.md | sort
93
93
  durable truth 分两层:
94
94
 
95
95
  - `devflow/specs/`:capability 真相,保留 `INDEX.md` 与 `capabilities/*.md`
96
- - 新 change 目录必须命名为 `REQ-<number>-<description>`(需求)或 `FIX-<number>-<description>`(修复);旧小写目录只作为历史兼容读取。
96
+ - 新 change 目录必须命名为 `REQ-<number>-<description>`(需求)或 `FIX-<number>-<description>`(修复);`REQ` 和 `FIX` 分别维护自己的递增编号,旧小写目录只作为历史兼容读取。
97
97
  - `devflow/changes/<change>/`:变更真相,保留 `change-state.json`、`change-meta.json`、planning 文档、`task-manifest.json`、可选 `team-state.json`、任务级 `checkpoint.json`、`report-card.json` 和唯一的最终 handoff 文件。
98
98
  - worker prompt、journal、assignment、session log 统一放到 `devflow/workspaces/<change>/`,作为 ephemeral scratch。
99
99
 
@@ -195,7 +195,7 @@ describe('Skills Registry Generator', () => {
195
195
  );
196
196
  });
197
197
 
198
- test('should publish roadmap outputs under devflow', async () => {
198
+ test('should publish unified roadmap state outputs under devflow', async () => {
199
199
  const { generateSkillsRegistryV2 } = require('../skills-registry');
200
200
 
201
201
  const result = await generateSkillsRegistryV2('.claude/skills');
@@ -204,14 +204,28 @@ describe('Skills Registry Generator', () => {
204
204
  expect(roadmap).toBeDefined();
205
205
  expect(roadmap.writes).toEqual(
206
206
  expect.arrayContaining([
207
- expect.objectContaining({ path: 'devflow/ROADMAP.md' }),
208
- expect.objectContaining({ path: 'devflow/BACKLOG.md' })
207
+ expect.objectContaining({
208
+ path: 'devflow/roadmap.json',
209
+ durability: 'durable',
210
+ required: true
211
+ }),
212
+ expect.objectContaining({
213
+ path: 'devflow/ROADMAP.md',
214
+ durability: 'durable',
215
+ required: true
216
+ }),
217
+ expect.objectContaining({
218
+ path: 'devflow/BACKLOG.md',
219
+ durability: 'durable',
220
+ required: false
221
+ })
209
222
  ])
210
223
  );
211
224
  expect(roadmap.writes).not.toEqual(
212
225
  expect.arrayContaining([
213
226
  expect.objectContaining({ path: 'ROADMAP.md' }),
214
227
  expect.objectContaining({ path: 'BACKLOG.md' }),
228
+ expect.objectContaining({ path: 'devflow/roadmap-tracking.json', required: true }),
215
229
  expect.objectContaining({ path: 'devflow/roadmap/roadmap.md' }),
216
230
  expect.objectContaining({ path: 'devflow/roadmap/backlog.md' })
217
231
  ])
@@ -229,6 +229,11 @@ describe('cc-devflow cli distribution bootstrap', () => {
229
229
  );
230
230
  expect(codexRoadmapSkill.data.writes).toEqual(
231
231
  expect.arrayContaining([
232
+ expect.objectContaining({
233
+ path: 'devflow/roadmap.json',
234
+ durability: 'durable',
235
+ required: true
236
+ }),
232
237
  expect.objectContaining({
233
238
  path: 'devflow/ROADMAP.md',
234
239
  durability: 'durable',
@@ -237,10 +242,13 @@ describe('cc-devflow cli distribution bootstrap', () => {
237
242
  expect.objectContaining({
238
243
  path: 'devflow/BACKLOG.md',
239
244
  durability: 'durable',
240
- required: true
245
+ required: false
241
246
  })
242
247
  ])
243
248
  );
249
+ expect(codexRoadmapSkill.data.writes).not.toEqual(
250
+ expect.arrayContaining([expect.objectContaining({ path: 'devflow/roadmap-tracking.json', required: true })])
251
+ );
244
252
  });
245
253
 
246
254
  test('adapt mirrors Codex skills without baking project YAML output policy', () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-devflow",
3
- "version": "4.5.4",
3
+ "version": "4.5.5",
4
4
  "description": "Multi-platform CLI and skill pack for agent coding",
5
5
  "main": "bin/cc-devflow.js",
6
6
  "bin": {