cc-devflow 4.5.4 → 4.5.6

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 (84) 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 +35 -0
  23. package/.claude/skills/cc-plan/PLAYBOOK.md +41 -19
  24. package/.claude/skills/cc-plan/SKILL.md +132 -47
  25. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +77 -3
  26. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -5
  27. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +84 -3
  28. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +51 -0
  29. package/.claude/skills/cc-plan/references/planning-contract.md +47 -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 +19 -0
  43. package/README.md +5 -5
  44. package/README.zh-CN.md +5 -5
  45. package/bin/cc-devflow-cli.js +16 -2
  46. package/docs/CLAUDE.md +1 -1
  47. package/docs/examples/START-HERE.md +3 -3
  48. package/docs/examples/example-bindings.json +26 -9
  49. package/docs/examples/full-design-blocked/BACKLOG.md +4 -2
  50. package/docs/examples/full-design-blocked/README.md +4 -4
  51. package/docs/examples/full-design-blocked/ROADMAP.md +16 -2
  52. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +47 -1
  53. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +97 -0
  54. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +8 -1
  55. package/docs/examples/full-design-blocked/roadmap.json +123 -0
  56. package/docs/examples/local-handoff/BACKLOG.md +4 -2
  57. package/docs/examples/local-handoff/README.md +4 -4
  58. package/docs/examples/local-handoff/ROADMAP.md +16 -2
  59. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +26 -1
  60. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +55 -0
  61. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +8 -1
  62. package/docs/examples/local-handoff/roadmap.json +121 -0
  63. package/docs/examples/pdca-loop/BACKLOG.md +4 -2
  64. package/docs/examples/pdca-loop/README.md +4 -4
  65. package/docs/examples/pdca-loop/ROADMAP.md +16 -2
  66. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +26 -1
  67. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +51 -3
  68. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +8 -1
  69. package/docs/examples/pdca-loop/roadmap.json +191 -0
  70. package/docs/examples/scripts/check-example-bindings.sh +7 -4
  71. package/docs/guides/getting-started.md +2 -2
  72. package/docs/guides/getting-started.zh-CN.md +2 -2
  73. package/lib/compiler/__tests__/skills-registry.test.js +17 -3
  74. package/lib/skill-runtime/__tests__/autopilot.test.js +13 -10
  75. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +9 -1
  76. package/lib/skill-runtime/__tests__/paths.test.js +25 -0
  77. package/lib/skill-runtime/__tests__/query.test.js +49 -0
  78. package/lib/skill-runtime/artifacts.js +2 -2
  79. package/lib/skill-runtime/intent.js +14 -14
  80. package/lib/skill-runtime/operations/autopilot-shared.js +4 -4
  81. package/lib/skill-runtime/paths.js +28 -7
  82. package/lib/skill-runtime/query-registry.js +3 -3
  83. package/lib/skill-runtime/query.js +30 -30
  84. package/package.json +1 -1
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-003.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.7.1`
7
+ - CC-Plan skill version: `3.7.7`
8
8
  - Source roadmap item: `RM-020`
9
9
  - Source roadmap version: `roadmap.v3`
10
10
 
@@ -15,6 +15,13 @@
15
15
  - Frozen decisions:
16
16
  - export only the visible audit summary rows
17
17
  - CSV is the only format in this requirement
18
+ - PRD brief:
19
+ - Problem statement: admins manually copy audit summaries into weekly reports
20
+ - Solution summary: CSV download action for currently visible audit summary rows
21
+ - User stories covered: `US-001`
22
+ - Implementation decisions: export visible rows only, CSV only
23
+ - Testing decisions: test through admin panel action and visible row data
24
+ - Out of scope: JSON export, scheduled reporting, shared reporting backend
18
25
  - Read first:
19
26
  - `design.md`
20
27
  - `src/admin/AuditSummaryPanel.tsx`
@@ -0,0 +1,121 @@
1
+ {
2
+ "version": 3,
3
+ "outputPolicy": {
4
+ "documentLanguage": "en"
5
+ },
6
+ "meta": {
7
+ "roadmapVersion": "roadmap.v2",
8
+ "skillVersion": "5.0.0",
9
+ "status": "active",
10
+ "lastUpdated": "2026-04-19",
11
+ "currentFocusStage": "Stage 2"
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-020",
31
+ "item": "Add an audit-log export summary download",
32
+ "stage": "Stage 2",
33
+ "priority": "P1",
34
+ "primaryCapability": "cap-audit-log-export",
35
+ "secondaryCapabilities": [],
36
+ "expectedSpecDelta": "codify local export summary truth",
37
+ "dependsOn": [],
38
+ "status": "Local handoff",
39
+ "req": "REQ-003",
40
+ "progress": "100%",
41
+ "backlog": {
42
+ "capabilityGap": "admins can export raw audit data but not a compact summary for review",
43
+ "evidence": "support escalations keep asking for a lightweight summary bundle",
44
+ "parallelWith": [],
45
+ "unknowns": "csv-only or csv-plus-markdown summary",
46
+ "nextDecision": "resume from local handoff once remote access returns",
47
+ "ready": true,
48
+ "whyNow": "the implementation and proof already exist, only the landing path is deferred",
49
+ "successSignal": "admins can download a concise audit summary without manual spreadsheet cleanup",
50
+ "entryConstraints": "stay local-only and avoid remote automation",
51
+ "openRisks": "handoff may age if schema changes before the next maintainer resumes",
52
+ "firstPlanningQuestion": "does the summary format need another review before remote landing?",
53
+ "requiredContextToLoad": "admin export screen, generated summary fixture, local handoff notes",
54
+ "whyReadyNow": "the requirement is already proven and only needs a clean resume point",
55
+ "parked": false,
56
+ "parkedReason": "",
57
+ "triggerToReopen": "",
58
+ "missingEvidence": ""
59
+ }
60
+ }
61
+ ],
62
+ "handoff": {
63
+ "readyForCcPlan": [
64
+ "RM-020"
65
+ ],
66
+ "parked": [],
67
+ "serialSpine": [
68
+ "RM-020"
69
+ ],
70
+ "parallelWaves": []
71
+ },
72
+ "architecture": {
73
+ "diagramType": "flowchart",
74
+ "nodes": [
75
+ {
76
+ "id": "roadmap_json",
77
+ "label": "roadmap.json"
78
+ },
79
+ {
80
+ "id": "roadmap_md",
81
+ "label": "ROADMAP.md"
82
+ },
83
+ {
84
+ "id": "backlog_md",
85
+ "label": "BACKLOG.md (deprecated)"
86
+ },
87
+ {
88
+ "id": "cc_plan",
89
+ "label": "cc-plan"
90
+ }
91
+ ],
92
+ "edges": [
93
+ {
94
+ "from": "roadmap_json",
95
+ "to": "roadmap_md",
96
+ "label": "renders"
97
+ },
98
+ {
99
+ "from": "roadmap_json",
100
+ "to": "backlog_md",
101
+ "label": "projects"
102
+ },
103
+ {
104
+ "from": "roadmap_md",
105
+ "to": "cc_plan",
106
+ "label": "hands off"
107
+ }
108
+ ]
109
+ },
110
+ "backlogMeta": {
111
+ "roadmapVersion": "roadmap.v2",
112
+ "skillVersion": "4.4.1",
113
+ "currentFocusStage": "Stage 2"
114
+ },
115
+ "dependencyHandoff": {
116
+ "serialSpine": "RM-020",
117
+ "parallelReadyNextWave": "-",
118
+ "notesOnBlockers": "export work stays local-only until the next maintainer has remote access"
119
+ },
120
+ "lastSyncedAt": "2026-04-19"
121
+ }
@@ -1,12 +1,14 @@
1
1
  # BACKLOG
2
2
 
3
+ > Deprecated projection. Edit `roadmap.json` instead.
4
+
3
5
  ## Backlog Meta
4
6
 
5
7
  - Roadmap version: `roadmap.v1`
6
- - Skill version: `4.4.1`
8
+ - Skill version: `5.0.0`
7
9
  - Last synced: `2026-04-19`
8
10
  - Current focus stage: `Stage 1`
9
- - Tracking source: `roadmap-tracking.json`
11
+ - Roadmap state source: `roadmap.json`
10
12
 
11
13
  ## Queue
12
14
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Example version: `1.0.0`
6
6
  - Last reviewed: `2026-04-17`
7
- - Bound skills: `cc-roadmap@4.4.1`, `cc-plan@3.7.1`, `cc-do@1.6.1`, `cc-check@1.10.1`, `cc-act@1.8.1`
7
+ - Bound skills: `cc-roadmap@5.0.0`, `cc-plan@3.7.7`, `cc-do@1.6.2`, `cc-check@1.10.1`, `cc-act@1.8.2`
8
8
 
9
9
  This folder shows one minimal but complete `cc-roadmap -> cc-plan -> cc-do -> cc-check -> cc-act` loop.
10
10
 
@@ -27,9 +27,9 @@ The sample requirement is:
27
27
 
28
28
  ## Artifact Map
29
29
 
30
- - `ROADMAP.md`: what `cc-roadmap` decided and why this item is first
31
- - `roadmap-tracking.json`: machine-readable roadmap/backlog truth that renders `ROADMAP.md` and `BACKLOG.md`
32
- - `BACKLOG.md`: capability-aware handoff that makes `RM-001` ready for `cc-plan`
30
+ - `roadmap.json`: editable roadmap truth that renders the generated views
31
+ - `ROADMAP.md`: generated view of what `cc-roadmap` decided and why this item is first
32
+ - `BACKLOG.md`: deprecated capability-aware projection that makes `RM-001` ready for `cc-plan`
33
33
  - `changes/REQ-001-copy-invite-link/planning/design.md`: approved tiny design
34
34
  - `changes/REQ-001-copy-invite-link/planning/tasks.md`: executable task handoff
35
35
  - `changes/REQ-001-copy-invite-link/planning/task-manifest.json`: machine-readable execution truth
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v1`
6
- - Skill version: `4.4.1`
6
+ - Skill version: `5.0.0`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-15`
9
9
  - Owner / decider: `product-owner`
@@ -122,7 +122,7 @@
122
122
  - What changed in this version: narrowed Stage 1 to the smallest visible sharing fix
123
123
 
124
124
  ## Implementation Tracking
125
- - Tracking source: `roadmap-tracking.json`
125
+ - Roadmap state source: `roadmap.json`
126
126
 
127
127
  <!-- roadmap-tracking:start -->
128
128
  | RM-ID | Item | Stage | Priority | Primary Capability | Secondary Capabilities | Expected Spec Delta | Depends On | Status | REQ | Progress |
@@ -131,3 +131,17 @@
131
131
  | RM-002 | Add copied-state feedback to the share dialog | Stage 1 | P2 | cap-invite-links | - | extend invite-link feedback truth | RM-001 | Planned | - | 0% |
132
132
  | RM-004 | Collaboration analytics follow-up | - | - | - | - | - | - | - | - | - |
133
133
  <!-- roadmap-tracking:end -->
134
+
135
+
136
+ ## Technical Architecture
137
+
138
+ ```mermaid
139
+ flowchart TD
140
+ roadmap_json["roadmap.json"]
141
+ roadmap_md["ROADMAP.md"]
142
+ backlog_md["BACKLOG.md (deprecated)"]
143
+ cc_plan["cc-plan"]
144
+ roadmap_json -->|renders| roadmap_md
145
+ roadmap_json -->|projects| backlog_md
146
+ roadmap_md -->|hands off| cc_plan
147
+ ```
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-001.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.7.1`
7
+ - CC-Plan skill version: `3.7.7`
8
8
  - Requirement ID: `REQ-001`
9
9
  - Design mode: `tiny-design`
10
10
  - Why this stays `tiny-design`: the patch is limited to an existing dialog and test file, with no API or data model changes
@@ -34,6 +34,23 @@
34
34
  - show a lightweight copied-state confirmation inside the current dialog
35
35
  - Upgrade trigger to `full-design`: if clipboard support requires new platform fallbacks, or if the patch spills into shared share-service contracts
36
36
 
37
+ ## PRD-Grade Brief
38
+
39
+ - Problem statement: users can see the invite URL, but copying it still requires manual selection and creates avoidable share-flow friction.
40
+ - Solution summary: users get a one-click copy action in the existing share dialog and see lightweight confirmation after the link is copied.
41
+ - Actors / personas:
42
+ - workspace member sharing an invite
43
+ - User stories:
44
+ - US-001: As a workspace member, I want to copy the invite link with one click, so that I can share it without manually selecting text.
45
+ - Implementation decisions:
46
+ - Reuse the existing invite URL source and dialog props.
47
+ - Keep clipboard behavior inside the current share dialog surface.
48
+ - Testing decisions:
49
+ - Test through the dialog behavior, not an internal helper.
50
+ - Existing share-dialog tests are the prior art.
51
+ - Out of scope: new invite generation, role controls, analytics, or clipboard fallback redesign.
52
+ - Further notes: if confirmation remains unclear, open a separate UX requirement.
53
+
37
54
  ## Validation
38
55
 
39
56
  - Primary check: targeted dialog test proves the button renders and copies the current invite URL
@@ -57,8 +74,16 @@
57
74
  - Scope scan: pass; no backend, no permission work
58
75
  - Ambiguity scan: pass; execution does not need to re-decide button placement or clipboard source
59
76
  - Feasibility scan: pass; existing dialog and tests already cover the target surface
77
+ - PRD brief scan: pass; problem, story, implementation decision, testing decision, and out-of-scope are durable
78
+ - Decision question scan: pass; `D1` approved the tiny-design copy-action boundary
60
79
  - Final recommendation: approved as `tiny-design`
61
80
 
81
+ ## Decision Questions
82
+
83
+ | ID | Gate | Known evidence | Recommendation | User choice | Impact on `cc-do` | Status |
84
+ |----|------|----------------|----------------|-------------|-------------------|--------|
85
+ | D1 | approach-approval | Existing dialog already renders the invite URL and the change stays inside one UI/test surface | Approve the tiny-design copy action | Tiny design copy action | Keep implementation inside the share dialog; do not add backend or permission work | answered |
86
+
62
87
  ## Approval
63
88
 
64
89
  - User approval status: approved
@@ -9,7 +9,7 @@
9
9
  "sourceRoadmap": {
10
10
  "itemId": "RM-001",
11
11
  "roadmapVersion": "roadmap.v1",
12
- "roadmapSkillVersion": "4.4.1",
12
+ "roadmapSkillVersion": "5.0.0",
13
13
  "sourceStage": "Stage 1",
14
14
  "successSignal": "Users can copy the invite link with one click",
15
15
  "killSignal": "The patch requires backend or permission changes",
@@ -22,11 +22,59 @@
22
22
  ]
23
23
  },
24
24
  "planningMeta": {
25
- "reqPlanSkillVersion": "3.7.1",
25
+ "reqPlanSkillVersion": "3.7.7",
26
26
  "designVersion": "design.v1",
27
27
  "approvedAt": "2026-04-15T10:05:00.000Z",
28
28
  "approvedBy": "user",
29
- "basedOnOption": "Tiny design card"
29
+ "basedOnOption": "Tiny design card",
30
+ "requirementBrief": {
31
+ "problemStatement": "Users can see the invite URL, but copying it still requires manual selection.",
32
+ "solutionSummary": "Add a one-click copy action with lightweight confirmation inside the existing share dialog.",
33
+ "actors": ["workspace member sharing an invite"],
34
+ "userStories": [
35
+ {
36
+ "id": "US-001",
37
+ "actor": "workspace member",
38
+ "want": "copy the invite link with one click",
39
+ "benefit": "share it without manually selecting text",
40
+ "acceptance": ["Dialog behavior test proves the current invite URL is copied"]
41
+ }
42
+ ],
43
+ "edgeOrRecoveryStories": [],
44
+ "implementationDecisions": ["Reuse the existing invite URL source and dialog props"],
45
+ "testingDecisions": ["Test through the share dialog behavior, not an internal helper"],
46
+ "outOfScope": ["invite generation", "role controls", "analytics", "clipboard fallback redesign"],
47
+ "furtherNotes": ["Richer copied-state feedback is a separate UX requirement"]
48
+ },
49
+ "decisionQuestions": [
50
+ {
51
+ "questionId": "D1",
52
+ "gate": "approach-approval",
53
+ "knownEvidence": ["Existing dialog already renders the invite URL", "The patch stays inside one UI/test surface"],
54
+ "recommendation": "Approve the tiny-design copy action",
55
+ "options": [
56
+ {
57
+ "id": "A",
58
+ "label": "Tiny design copy action",
59
+ "recommended": true,
60
+ "completeness": "8/10",
61
+ "good": "Ships the visible user win with one dialog and one behavior test",
62
+ "costRisk": "Leaves richer feedback and clipboard fallback work for later"
63
+ },
64
+ {
65
+ "id": "B",
66
+ "label": "Full share-flow redesign",
67
+ "recommended": false,
68
+ "completeness": "10/10",
69
+ "good": "Could solve broader invite UX issues in one larger pass",
70
+ "costRisk": "Expands beyond the roadmap wedge and touches unrelated share contracts"
71
+ }
72
+ ],
73
+ "userChoice": "A",
74
+ "impact": "cc-do keeps implementation inside the share dialog and avoids backend or permission work",
75
+ "status": "answered"
76
+ }
77
+ ]
30
78
  },
31
79
  "currentTaskId": null,
32
80
  "activePhase": null,
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-001.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.7.1`
7
+ - CC-Plan skill version: `3.7.7`
8
8
  - Source roadmap item: `RM-001`
9
9
  - Source roadmap version: `roadmap.v1`
10
10
 
@@ -16,6 +16,13 @@
16
16
  - copy from the existing invite URL source
17
17
  - keep the patch inside the current dialog
18
18
  - leave richer feedback for a future requirement if needed
19
+ - PRD brief:
20
+ - Problem statement: copying the visible invite URL still requires manual selection
21
+ - Solution summary: one-click copy action with lightweight confirmation
22
+ - User stories covered: `US-001`
23
+ - Implementation decisions: reuse existing invite URL source and dialog props
24
+ - Testing decisions: test through share dialog behavior
25
+ - Out of scope: invite generation, role controls, analytics, clipboard fallback redesign
19
26
  - Read first:
20
27
  - `design.md`
21
28
  - `src/features/share/ShareDialog.tsx`
@@ -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` advance as separate local sequences, so cross-prefix duplicates are valid. Parallel worktrees may still repeat numbers; the full change key, especially the description, distinguishes the work. 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` 分别维护自己的递增编号,跨前缀同号不是冲突;并行工作树造成重复编号时,完整 change key 的描述负责区分业务内容,旧小写目录只作为历史兼容读取。
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