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.
- package/.claude/skills/cc-act/CHANGELOG.md +6 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +21 -5
- package/.claude/skills/cc-act/SKILL.md +21 -11
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +10 -0
- package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +8 -0
- package/.claude/skills/cc-act/references/closure-contract.md +3 -0
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +48 -0
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +3 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +6 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +13 -0
- package/.claude/skills/cc-do/CHANGELOG.md +6 -0
- package/.claude/skills/cc-do/PLAYBOOK.md +7 -6
- package/.claude/skills/cc-do/SKILL.md +27 -12
- package/.claude/skills/cc-do/references/execution-recovery.md +9 -0
- package/.claude/skills/cc-investigate/CHANGELOG.md +6 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +5 -1
- package/.claude/skills/cc-investigate/SKILL.md +22 -5
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +14 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +1 -0
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +9 -1
- package/.claude/skills/cc-investigate/references/investigation-contract.md +2 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +35 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +41 -19
- package/.claude/skills/cc-plan/SKILL.md +132 -47
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +77 -3
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -5
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +84 -3
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +51 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +47 -15
- package/.claude/skills/cc-roadmap/CHANGELOG.md +12 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +15 -9
- package/.claude/skills/cc-roadmap/SKILL.md +22 -16
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +3 -1
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +11 -1
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +57 -10
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +68 -3
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +120 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +25 -1
- package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +13 -5
- package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +3 -3
- package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +3 -3
- package/CHANGELOG.md +19 -0
- package/README.md +5 -5
- package/README.zh-CN.md +5 -5
- package/bin/cc-devflow-cli.js +16 -2
- package/docs/CLAUDE.md +1 -1
- package/docs/examples/START-HERE.md +3 -3
- package/docs/examples/example-bindings.json +26 -9
- package/docs/examples/full-design-blocked/BACKLOG.md +4 -2
- package/docs/examples/full-design-blocked/README.md +4 -4
- package/docs/examples/full-design-blocked/ROADMAP.md +16 -2
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +47 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +97 -0
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +8 -1
- package/docs/examples/full-design-blocked/roadmap.json +123 -0
- package/docs/examples/local-handoff/BACKLOG.md +4 -2
- package/docs/examples/local-handoff/README.md +4 -4
- package/docs/examples/local-handoff/ROADMAP.md +16 -2
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +26 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +55 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +8 -1
- package/docs/examples/local-handoff/roadmap.json +121 -0
- package/docs/examples/pdca-loop/BACKLOG.md +4 -2
- package/docs/examples/pdca-loop/README.md +4 -4
- package/docs/examples/pdca-loop/ROADMAP.md +16 -2
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +26 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +51 -3
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +8 -1
- package/docs/examples/pdca-loop/roadmap.json +191 -0
- package/docs/examples/scripts/check-example-bindings.sh +7 -4
- package/docs/guides/getting-started.md +2 -2
- package/docs/guides/getting-started.zh-CN.md +2 -2
- package/lib/compiler/__tests__/skills-registry.test.js +17 -3
- package/lib/skill-runtime/__tests__/autopilot.test.js +13 -10
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +9 -1
- package/lib/skill-runtime/__tests__/paths.test.js +25 -0
- package/lib/skill-runtime/__tests__/query.test.js +49 -0
- package/lib/skill-runtime/artifacts.js +2 -2
- package/lib/skill-runtime/intent.js +14 -14
- package/lib/skill-runtime/operations/autopilot-shared.js +4 -4
- package/lib/skill-runtime/paths.js +28 -7
- package/lib/skill-runtime/query-registry.js +3 -3
- package/lib/skill-runtime/query.js +30 -30
- 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.
|
|
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: `
|
|
8
|
+
- Skill version: `5.0.0`
|
|
7
9
|
- Last synced: `2026-04-19`
|
|
8
10
|
- Current focus stage: `Stage 1`
|
|
9
|
-
-
|
|
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@
|
|
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
|
-
- `
|
|
31
|
-
- `
|
|
32
|
-
- `BACKLOG.md`: capability-aware
|
|
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: `
|
|
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
|
-
-
|
|
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.
|
|
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
|
package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"sourceRoadmap": {
|
|
10
10
|
"itemId": "RM-001",
|
|
11
11
|
"roadmapVersion": "roadmap.v1",
|
|
12
|
-
"roadmapSkillVersion": "
|
|
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.
|
|
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.
|
|
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
|
|
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" "-
|
|
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" "
|
|
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 ==
|
|
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/
|
|
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;
|
|
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`
|
|
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
|
|