cc-devflow 4.5.6 → 4.5.8
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 +11 -2
- package/.claude/skills/cc-act/SKILL.md +17 -7
- package/.claude/skills/cc-act/references/closure-contract.md +4 -0
- package/.claude/skills/cc-act/scripts/{archive-requirement.sh → archive-change.sh} +7 -7
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +27 -0
- package/.claude/skills/cc-act/scripts/ensure-ship-branch.sh +93 -0
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +6 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +6 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +14 -0
- package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +63 -0
- package/.claude/skills/cc-dev/SKILL.md +168 -0
- package/.claude/skills/cc-do/CHANGELOG.md +6 -0
- package/.claude/skills/cc-do/SKILL.md +23 -1
- package/.claude/skills/cc-investigate/CHANGELOG.md +5 -0
- package/.claude/skills/cc-investigate/SKILL.md +2 -2
- package/.claude/skills/cc-next/CHANGELOG.md +5 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +52 -0
- package/.claude/skills/cc-next/SKILL.md +161 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +28 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +20 -17
- package/.claude/skills/cc-plan/SKILL.md +135 -21
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +42 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +84 -2
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +30 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +31 -15
- package/.claude/skills/cc-plan/scripts/next-change-key.sh +78 -0
- package/.claude/skills/cc-pr-land/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-land/PLAYBOOK.md +45 -0
- package/.claude/skills/cc-pr-land/SKILL.md +157 -0
- package/.claude/skills/cc-pr-review/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-review/PLAYBOOK.md +46 -0
- package/.claude/skills/cc-pr-review/SKILL.md +142 -0
- package/.claude/skills/cc-review/CHANGELOG.md +28 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +108 -0
- package/.claude/skills/cc-review/SKILL.md +340 -0
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +85 -0
- package/.claude/skills/cc-review/references/implementation-review-branch.md +152 -0
- package/.claude/skills/cc-review/references/plan-review-branch.md +151 -0
- package/.claude/skills/cc-review/references/review-methods.md +221 -0
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +80 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
- package/.claude/skills/cc-roadmap/SKILL.md +102 -8
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +3 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +23 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +20 -1
- package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +28 -13
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +18 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +8 -0
- package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
- package/.claude/skills/cc-simplify/SKILL.md +19 -8
- package/CHANGELOG.md +16 -0
- package/README.md +58 -4
- package/README.zh-CN.md +58 -4
- package/bin/cc-devflow-cli.js +119 -0
- package/config/distributable-skills.json +10 -0
- package/docs/assets/cc-devflow-pr-harness-en.svg +153 -0
- package/docs/assets/cc-devflow-pr-harness-zh.svg +152 -0
- package/docs/assets/wechat-group-qr.jpg +0 -0
- package/docs/examples/example-bindings.json +11 -6
- 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 +16 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +36 -3
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +604 -76
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +46 -1
- package/docs/examples/full-design-blocked/roadmap.json +18 -2
- 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 +16 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +27 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +366 -44
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +36 -1
- package/docs/examples/local-handoff/roadmap.json +16 -2
- 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 +16 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +27 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +259 -14
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +36 -1
- package/docs/examples/pdca-loop/roadmap.json +16 -2
- package/docs/examples/scripts/check-example-bindings.sh +21 -1
- package/docs/guides/getting-started.md +12 -9
- package/docs/guides/getting-started.zh-CN.md +12 -9
- package/lib/skill-runtime/__tests__/archive-change.test.js +124 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +1 -0
- package/lib/skill-runtime/__tests__/paths.test.js +81 -1
- package/lib/skill-runtime/archive-change.js +64 -0
- package/lib/skill-runtime/paths.js +32 -0
- package/package.json +7 -1
package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"requirementId": "REQ-003",
|
|
7
7
|
"requirementVersion": "REQ-003.v1",
|
|
8
8
|
"planningMeta": {
|
|
9
|
-
"reqPlanSkillVersion": "3.
|
|
9
|
+
"reqPlanSkillVersion": "3.8.2",
|
|
10
10
|
"designVersion": "design.v1",
|
|
11
11
|
"approvedAt": "2026-04-16T13:10:00.000Z",
|
|
12
12
|
"approvedBy": "user",
|
|
@@ -14,27 +14,58 @@
|
|
|
14
14
|
"requirementBrief": {
|
|
15
15
|
"problemStatement": "Admins can review audit summary rows in the UI, but weekly reporting requires manual copying.",
|
|
16
16
|
"solutionSummary": "Add a CSV download action for the currently visible audit summary rows.",
|
|
17
|
-
"actors": [
|
|
17
|
+
"actors": [
|
|
18
|
+
"workspace admin reviewing weekly activity"
|
|
19
|
+
],
|
|
18
20
|
"userStories": [
|
|
19
21
|
{
|
|
20
22
|
"id": "US-001",
|
|
21
23
|
"actor": "workspace admin",
|
|
22
24
|
"want": "download visible audit summary rows as CSV",
|
|
23
25
|
"benefit": "include them in weekly reporting without manual copying",
|
|
24
|
-
"acceptance": [
|
|
26
|
+
"acceptance": [
|
|
27
|
+
"Panel behavior test proves the export action uses current summary rows"
|
|
28
|
+
]
|
|
25
29
|
}
|
|
26
30
|
],
|
|
27
31
|
"edgeOrRecoveryStories": [],
|
|
28
|
-
"implementationDecisions": [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
"implementationDecisions": [
|
|
33
|
+
"Export only rows already visible in the panel",
|
|
34
|
+
"Keep CSV as the only output format"
|
|
35
|
+
],
|
|
36
|
+
"testingDecisions": [
|
|
37
|
+
"Test through the admin panel action and visible row data"
|
|
38
|
+
],
|
|
39
|
+
"outOfScope": [
|
|
40
|
+
"JSON export",
|
|
41
|
+
"scheduled reporting",
|
|
42
|
+
"shared reporting backend"
|
|
43
|
+
],
|
|
44
|
+
"furtherNotes": [
|
|
45
|
+
"Richer machine-readable exports should become a separate requirement"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"externalBestPractice": {
|
|
49
|
+
"needed": false,
|
|
50
|
+
"decisionStatus": "not-needed",
|
|
51
|
+
"decisionQuestionId": "",
|
|
52
|
+
"privacyGuard": "generalized terms only; no project names, private requirements, customer names, secrets, logs, or proprietary concepts",
|
|
53
|
+
"generalizedSearchTerms": [],
|
|
54
|
+
"sourcesChecked": [],
|
|
55
|
+
"conventionalWisdom": "",
|
|
56
|
+
"currentDiscourse": "",
|
|
57
|
+
"repoFitVerdict": "skipped",
|
|
58
|
+
"designImpacts": [],
|
|
59
|
+
"skippedReason": "the local handoff exports existing visible rows and does not introduce a new reporting standard"
|
|
32
60
|
},
|
|
33
61
|
"decisionQuestions": [
|
|
34
62
|
{
|
|
35
63
|
"questionId": "D1",
|
|
36
64
|
"gate": "approach-approval",
|
|
37
|
-
"knownEvidence": [
|
|
65
|
+
"knownEvidence": [
|
|
66
|
+
"Existing admin panel already owns the visible summary rows",
|
|
67
|
+
"No reporting backend is needed for the first useful export"
|
|
68
|
+
],
|
|
38
69
|
"recommendation": "Approve the tiny-design CSV export",
|
|
39
70
|
"options": [
|
|
40
71
|
{
|
|
@@ -58,7 +89,28 @@
|
|
|
58
89
|
"impact": "cc-do exports only visible rows from the current panel and avoids new reporting contracts",
|
|
59
90
|
"status": "answered"
|
|
60
91
|
}
|
|
61
|
-
]
|
|
92
|
+
],
|
|
93
|
+
"aiLeverageDecisionLens": {
|
|
94
|
+
"realUserOrOperator": "workspace admin preparing weekly review notes",
|
|
95
|
+
"statusQuoWorkaround": "manual copy of visible audit rows",
|
|
96
|
+
"humanTeamEffortForFullScope": "about one day for an engineer to implement, test, and document the local export",
|
|
97
|
+
"ccAgentEffortForFullScope": "about 30 minutes for visible-row CSV export plus targeted test and lint",
|
|
98
|
+
"aiCompressionRatio": "roughly 10x for the bounded local export path",
|
|
99
|
+
"completeLakeBoundary": "visible-row CSV export, panel action, current data source, targeted panel test, and lint",
|
|
100
|
+
"oceanBoundary": "JSON export, scheduled reporting, shared reporting backend, and cross-panel reporting platform",
|
|
101
|
+
"scopeRecommendation": "boil-lake",
|
|
102
|
+
"costModel": {
|
|
103
|
+
"agentTime": "low",
|
|
104
|
+
"humanReviewTime": "low",
|
|
105
|
+
"verificationCost": "targeted panel test plus lint",
|
|
106
|
+
"maintenanceCost": "low while scoped to visible rows",
|
|
107
|
+
"failureCost": "admins keep copying rows manually",
|
|
108
|
+
"reversibility": "reversible UI action"
|
|
109
|
+
},
|
|
110
|
+
"verdict": "boil-lake",
|
|
111
|
+
"missingEvidenceOrPivotReason": "",
|
|
112
|
+
"impactOnApprovedDirection": "complete the local visible-row export lake while deferring reporting platform work"
|
|
113
|
+
}
|
|
62
114
|
},
|
|
63
115
|
"currentTaskId": null,
|
|
64
116
|
"activePhase": null,
|
|
@@ -70,22 +122,101 @@
|
|
|
70
122
|
"phase": 1,
|
|
71
123
|
"parallel": false,
|
|
72
124
|
"dependsOn": [],
|
|
73
|
-
"touches": [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
125
|
+
"touches": [
|
|
126
|
+
"audit-summary",
|
|
127
|
+
"tests"
|
|
128
|
+
],
|
|
129
|
+
"files": [
|
|
130
|
+
"src/admin/AuditSummaryPanel.test.tsx"
|
|
131
|
+
],
|
|
132
|
+
"run": [
|
|
133
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
134
|
+
],
|
|
135
|
+
"checks": [
|
|
136
|
+
"test fails before implementation"
|
|
137
|
+
],
|
|
138
|
+
"acceptance": [
|
|
139
|
+
"the missing download action is reproduced as a failing test"
|
|
140
|
+
],
|
|
141
|
+
"verification": [
|
|
142
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
143
|
+
],
|
|
144
|
+
"evidence": [
|
|
145
|
+
"failing test output"
|
|
146
|
+
],
|
|
80
147
|
"context": {
|
|
81
|
-
"readFiles": [
|
|
82
|
-
|
|
83
|
-
|
|
148
|
+
"readFiles": [
|
|
149
|
+
"design.md",
|
|
150
|
+
"tasks.md",
|
|
151
|
+
"src/admin/AuditSummaryPanel.tsx"
|
|
152
|
+
],
|
|
153
|
+
"commands": [
|
|
154
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
155
|
+
],
|
|
156
|
+
"notes": [
|
|
157
|
+
"stay inside the current audit summary panel"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"reviews": {
|
|
161
|
+
"spec": "pass",
|
|
162
|
+
"code": "pass"
|
|
84
163
|
},
|
|
85
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
86
164
|
"status": "passed",
|
|
87
165
|
"attempts": 1,
|
|
88
|
-
"maxRetries": 1
|
|
166
|
+
"maxRetries": 1,
|
|
167
|
+
"tddPhase": "red",
|
|
168
|
+
"verticalSlice": "Slice 1",
|
|
169
|
+
"testSeam": {
|
|
170
|
+
"entry": "admin audit panel UI behavior",
|
|
171
|
+
"behaviorAsserted": "the missing download action is reproduced as a failing test",
|
|
172
|
+
"specStyleTestName": "the missing download action is reproduced as a failing test",
|
|
173
|
+
"oneLogicalBehavior": true,
|
|
174
|
+
"publicVerificationPath": "Run the audit summary panel test and observe CSV export through visible rows",
|
|
175
|
+
"implementationDetailRisk": "low"
|
|
176
|
+
},
|
|
177
|
+
"feedbackLoop": {
|
|
178
|
+
"type": "automated-test",
|
|
179
|
+
"determinism": "deterministic",
|
|
180
|
+
"expectedFailure": "Fails before the behavior exists"
|
|
181
|
+
},
|
|
182
|
+
"allowedMocks": [
|
|
183
|
+
"download / blob boundary"
|
|
184
|
+
],
|
|
185
|
+
"testQuality": {
|
|
186
|
+
"usesPublicInterface": true,
|
|
187
|
+
"describesBehavior": true,
|
|
188
|
+
"specStyleName": true,
|
|
189
|
+
"oneLogicalBehavior": true,
|
|
190
|
+
"verifiesThroughPublicPath": true,
|
|
191
|
+
"survivesInternalRefactor": true,
|
|
192
|
+
"mocksOnlySystemBoundaries": true,
|
|
193
|
+
"noBulkRed": true
|
|
194
|
+
},
|
|
195
|
+
"greenMinimality": {
|
|
196
|
+
"guard": "Keep the task scoped to its stated verification evidence",
|
|
197
|
+
"noSpeculativeBranches": true
|
|
198
|
+
},
|
|
199
|
+
"completion": {
|
|
200
|
+
"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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T001",
|
|
201
|
+
"requiredBeforeCompletion": [
|
|
202
|
+
"verification evidence captured",
|
|
203
|
+
"checkpoint written",
|
|
204
|
+
"spec review gate recorded",
|
|
205
|
+
"code review gate recorded"
|
|
206
|
+
],
|
|
207
|
+
"forbiddenShortcuts": [
|
|
208
|
+
"manual checkbox edit",
|
|
209
|
+
"manual manifest status edit",
|
|
210
|
+
"leaving currentTaskId stale"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"refactorCandidates": [
|
|
214
|
+
"duplication",
|
|
215
|
+
"long method",
|
|
216
|
+
"primitive obsession",
|
|
217
|
+
"naming",
|
|
218
|
+
"more than three nested branches"
|
|
219
|
+
]
|
|
89
220
|
},
|
|
90
221
|
{
|
|
91
222
|
"id": "T002",
|
|
@@ -93,23 +224,104 @@
|
|
|
93
224
|
"type": "IMPL",
|
|
94
225
|
"phase": 1,
|
|
95
226
|
"parallel": false,
|
|
96
|
-
"dependsOn": [
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
"
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
"
|
|
103
|
-
|
|
227
|
+
"dependsOn": [
|
|
228
|
+
"T001"
|
|
229
|
+
],
|
|
230
|
+
"touches": [
|
|
231
|
+
"audit-summary"
|
|
232
|
+
],
|
|
233
|
+
"files": [
|
|
234
|
+
"src/admin/AuditSummaryPanel.tsx"
|
|
235
|
+
],
|
|
236
|
+
"run": [
|
|
237
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
238
|
+
],
|
|
239
|
+
"checks": [
|
|
240
|
+
"panel test passes"
|
|
241
|
+
],
|
|
242
|
+
"acceptance": [
|
|
243
|
+
"admins can trigger a CSV download from the existing summary panel"
|
|
244
|
+
],
|
|
245
|
+
"verification": [
|
|
246
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
247
|
+
],
|
|
248
|
+
"evidence": [
|
|
249
|
+
"passing test output",
|
|
250
|
+
"checkpoint summary"
|
|
251
|
+
],
|
|
104
252
|
"context": {
|
|
105
|
-
"readFiles": [
|
|
106
|
-
|
|
107
|
-
|
|
253
|
+
"readFiles": [
|
|
254
|
+
"design.md",
|
|
255
|
+
"tasks.md",
|
|
256
|
+
"src/admin/AuditSummaryPanel.test.tsx"
|
|
257
|
+
],
|
|
258
|
+
"commands": [
|
|
259
|
+
"npm test -- src/admin/AuditSummaryPanel.test.tsx"
|
|
260
|
+
],
|
|
261
|
+
"notes": [
|
|
262
|
+
"reuse visible summary rows as the export source"
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
"reviews": {
|
|
266
|
+
"spec": "pass",
|
|
267
|
+
"code": "pass"
|
|
108
268
|
},
|
|
109
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
110
269
|
"status": "passed",
|
|
111
270
|
"attempts": 1,
|
|
112
|
-
"maxRetries": 1
|
|
271
|
+
"maxRetries": 1,
|
|
272
|
+
"tddPhase": "green",
|
|
273
|
+
"verticalSlice": "Slice 2",
|
|
274
|
+
"testSeam": {
|
|
275
|
+
"entry": "admin audit panel UI behavior",
|
|
276
|
+
"behaviorAsserted": "admins can trigger a CSV download from the existing summary panel",
|
|
277
|
+
"specStyleTestName": "admins can trigger a CSV download from the existing summary panel",
|
|
278
|
+
"oneLogicalBehavior": true,
|
|
279
|
+
"publicVerificationPath": "Run the audit summary panel test and observe CSV export through visible rows",
|
|
280
|
+
"implementationDetailRisk": "low"
|
|
281
|
+
},
|
|
282
|
+
"feedbackLoop": {
|
|
283
|
+
"type": "automated-test",
|
|
284
|
+
"determinism": "deterministic",
|
|
285
|
+
"expectedFailure": ""
|
|
286
|
+
},
|
|
287
|
+
"allowedMocks": [
|
|
288
|
+
"download / blob boundary"
|
|
289
|
+
],
|
|
290
|
+
"testQuality": {
|
|
291
|
+
"usesPublicInterface": true,
|
|
292
|
+
"describesBehavior": true,
|
|
293
|
+
"specStyleName": true,
|
|
294
|
+
"oneLogicalBehavior": true,
|
|
295
|
+
"verifiesThroughPublicPath": true,
|
|
296
|
+
"survivesInternalRefactor": true,
|
|
297
|
+
"mocksOnlySystemBoundaries": true,
|
|
298
|
+
"noBulkRed": true
|
|
299
|
+
},
|
|
300
|
+
"greenMinimality": {
|
|
301
|
+
"guard": "Implement only the code needed to pass the current red behavior",
|
|
302
|
+
"noSpeculativeBranches": true
|
|
303
|
+
},
|
|
304
|
+
"completion": {
|
|
305
|
+
"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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T002",
|
|
306
|
+
"requiredBeforeCompletion": [
|
|
307
|
+
"verification evidence captured",
|
|
308
|
+
"checkpoint written",
|
|
309
|
+
"spec review gate recorded",
|
|
310
|
+
"code review gate recorded"
|
|
311
|
+
],
|
|
312
|
+
"forbiddenShortcuts": [
|
|
313
|
+
"manual checkbox edit",
|
|
314
|
+
"manual manifest status edit",
|
|
315
|
+
"leaving currentTaskId stale"
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
"refactorCandidates": [
|
|
319
|
+
"duplication",
|
|
320
|
+
"long method",
|
|
321
|
+
"primitive obsession",
|
|
322
|
+
"naming",
|
|
323
|
+
"more than three nested branches"
|
|
324
|
+
]
|
|
113
325
|
},
|
|
114
326
|
{
|
|
115
327
|
"id": "T003",
|
|
@@ -117,37 +329,147 @@
|
|
|
117
329
|
"type": "OTHER",
|
|
118
330
|
"phase": 2,
|
|
119
331
|
"parallel": false,
|
|
120
|
-
"dependsOn": [
|
|
121
|
-
|
|
122
|
-
|
|
332
|
+
"dependsOn": [
|
|
333
|
+
"T002"
|
|
334
|
+
],
|
|
335
|
+
"touches": [
|
|
336
|
+
"quality-gates"
|
|
337
|
+
],
|
|
338
|
+
"files": [
|
|
339
|
+
"src/admin/AuditSummaryPanel.tsx",
|
|
340
|
+
"src/admin/AuditSummaryPanel.test.tsx"
|
|
341
|
+
],
|
|
123
342
|
"run": [
|
|
124
343
|
"npm test -- src/admin/AuditSummaryPanel.test.tsx",
|
|
125
344
|
"npm run lint -- src/admin/AuditSummaryPanel.tsx"
|
|
126
345
|
],
|
|
127
|
-
"checks": [
|
|
128
|
-
|
|
346
|
+
"checks": [
|
|
347
|
+
"targeted tests pass",
|
|
348
|
+
"lint passes"
|
|
349
|
+
],
|
|
350
|
+
"acceptance": [
|
|
351
|
+
"fresh verification evidence exists for local handoff"
|
|
352
|
+
],
|
|
129
353
|
"verification": [
|
|
130
354
|
"npm test -- src/admin/AuditSummaryPanel.test.tsx",
|
|
131
355
|
"npm run lint -- src/admin/AuditSummaryPanel.tsx"
|
|
132
356
|
],
|
|
133
|
-
"evidence": [
|
|
357
|
+
"evidence": [
|
|
358
|
+
"passing test output",
|
|
359
|
+
"clean lint output"
|
|
360
|
+
],
|
|
134
361
|
"context": {
|
|
135
|
-
"readFiles": [
|
|
362
|
+
"readFiles": [
|
|
363
|
+
"tasks.md",
|
|
364
|
+
"task-manifest.json"
|
|
365
|
+
],
|
|
136
366
|
"commands": [
|
|
137
367
|
"npm test -- src/admin/AuditSummaryPanel.test.tsx",
|
|
138
368
|
"npm run lint -- src/admin/AuditSummaryPanel.tsx"
|
|
139
369
|
],
|
|
140
|
-
"notes": [
|
|
370
|
+
"notes": [
|
|
371
|
+
"remote push is intentionally out of scope for this example"
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
"reviews": {
|
|
375
|
+
"spec": "pass",
|
|
376
|
+
"code": "pass"
|
|
141
377
|
},
|
|
142
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
143
378
|
"status": "passed",
|
|
144
379
|
"attempts": 1,
|
|
145
|
-
"maxRetries": 1
|
|
380
|
+
"maxRetries": 1,
|
|
381
|
+
"tddPhase": "evidence",
|
|
382
|
+
"verticalSlice": "Slice 3",
|
|
383
|
+
"testSeam": {
|
|
384
|
+
"entry": "admin audit panel UI behavior",
|
|
385
|
+
"behaviorAsserted": "fresh verification evidence exists for local handoff",
|
|
386
|
+
"specStyleTestName": "fresh verification evidence exists for local handoff",
|
|
387
|
+
"oneLogicalBehavior": true,
|
|
388
|
+
"publicVerificationPath": "Run the audit summary panel test and observe CSV export through visible rows",
|
|
389
|
+
"implementationDetailRisk": "low"
|
|
390
|
+
},
|
|
391
|
+
"feedbackLoop": {
|
|
392
|
+
"type": "automated-test",
|
|
393
|
+
"determinism": "deterministic",
|
|
394
|
+
"expectedFailure": ""
|
|
395
|
+
},
|
|
396
|
+
"allowedMocks": [
|
|
397
|
+
"download / blob boundary"
|
|
398
|
+
],
|
|
399
|
+
"testQuality": {
|
|
400
|
+
"usesPublicInterface": true,
|
|
401
|
+
"describesBehavior": true,
|
|
402
|
+
"specStyleName": true,
|
|
403
|
+
"oneLogicalBehavior": true,
|
|
404
|
+
"verifiesThroughPublicPath": true,
|
|
405
|
+
"survivesInternalRefactor": true,
|
|
406
|
+
"mocksOnlySystemBoundaries": true,
|
|
407
|
+
"noBulkRed": true
|
|
408
|
+
},
|
|
409
|
+
"greenMinimality": {
|
|
410
|
+
"guard": "Keep the task scoped to its stated verification evidence",
|
|
411
|
+
"noSpeculativeBranches": true
|
|
412
|
+
},
|
|
413
|
+
"completion": {
|
|
414
|
+
"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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T003",
|
|
415
|
+
"requiredBeforeCompletion": [
|
|
416
|
+
"verification evidence captured",
|
|
417
|
+
"checkpoint written",
|
|
418
|
+
"spec review gate recorded",
|
|
419
|
+
"code review gate recorded"
|
|
420
|
+
],
|
|
421
|
+
"forbiddenShortcuts": [
|
|
422
|
+
"manual checkbox edit",
|
|
423
|
+
"manual manifest status edit",
|
|
424
|
+
"leaving currentTaskId stale"
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
"refactorCandidates": [
|
|
428
|
+
"duplication",
|
|
429
|
+
"long method",
|
|
430
|
+
"primitive obsession",
|
|
431
|
+
"naming",
|
|
432
|
+
"more than three nested branches"
|
|
433
|
+
]
|
|
146
434
|
}
|
|
147
435
|
],
|
|
148
436
|
"metadata": {
|
|
149
437
|
"source": "tasks.md",
|
|
150
438
|
"generatedBy": "docs-example",
|
|
151
439
|
"planVersion": 1
|
|
440
|
+
},
|
|
441
|
+
"executionProtocol": {
|
|
442
|
+
"templateCompliance": {
|
|
443
|
+
"required": true,
|
|
444
|
+
"sourceTemplate": "assets/TASKS_TEMPLATE.md",
|
|
445
|
+
"taskBlockMustInclude": [
|
|
446
|
+
"Goal",
|
|
447
|
+
"TDD phase",
|
|
448
|
+
"Files",
|
|
449
|
+
"Read first",
|
|
450
|
+
"Verification",
|
|
451
|
+
"Evidence",
|
|
452
|
+
"Test seam",
|
|
453
|
+
"Public verification path",
|
|
454
|
+
"Allowed mocks",
|
|
455
|
+
"Completion"
|
|
456
|
+
],
|
|
457
|
+
"titleOnlyTasks": "forbidden"
|
|
458
|
+
},
|
|
459
|
+
"selection": {
|
|
460
|
+
"sourceOfTruth": "planning/task-manifest.json.currentTaskId",
|
|
461
|
+
"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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json"
|
|
462
|
+
},
|
|
463
|
+
"completion": {
|
|
464
|
+
"manualStatusEdit": "forbidden",
|
|
465
|
+
"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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task <task-id>",
|
|
466
|
+
"failurePolicy": "Do not hand-edit status; fix missing checkpoint, review gate, or dependency evidence and rerun the script.",
|
|
467
|
+
"updates": [
|
|
468
|
+
"planning/task-manifest.json.tasks[].status",
|
|
469
|
+
"planning/task-manifest.json.currentTaskId",
|
|
470
|
+
"planning/task-manifest.json.status",
|
|
471
|
+
"planning/tasks.md checkbox"
|
|
472
|
+
]
|
|
473
|
+
}
|
|
152
474
|
}
|
|
153
475
|
}
|
|
@@ -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
|
+
- CC-Plan skill version: `3.8.2`
|
|
8
8
|
- Source roadmap item: `RM-020`
|
|
9
9
|
- Source roadmap version: `roadmap.v3`
|
|
10
10
|
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
- Implementation decisions: export visible rows only, CSV only
|
|
23
23
|
- Testing decisions: test through admin panel action and visible row data
|
|
24
24
|
- Out of scope: JSON export, scheduled reporting, shared reporting backend
|
|
25
|
+
- AI Leverage Decision Lens: boil-lake; complete visible-row CSV export while keeping reporting-platform work outside the lake
|
|
25
26
|
- Read first:
|
|
26
27
|
- `design.md`
|
|
27
28
|
- `src/admin/AuditSummaryPanel.tsx`
|
|
@@ -35,32 +36,66 @@
|
|
|
35
36
|
- panel placement
|
|
36
37
|
- Parallel boundaries: none
|
|
37
38
|
|
|
39
|
+
## Execution Protocol
|
|
40
|
+
|
|
41
|
+
ClaudeCode / Codex 执行本计划时,必须把本文件当成任务模板合同,而不是普通 TODO 列表。
|
|
42
|
+
|
|
43
|
+
- Template source: `assets/TASKS_TEMPLATE.md`
|
|
44
|
+
- Task selection: read `planning/task-manifest.json.currentTaskId`; if empty, run the ready-task selector before choosing work.
|
|
45
|
+
- Task block rule: read the full task block before coding; title-only execution is invalid.
|
|
46
|
+
- Completion rule: after verification and review gates pass, run the completion script; do not manually edit checkbox, status, or `currentTaskId`.
|
|
47
|
+
- 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.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
SCRIPT_ROOT=".claude/skills/cc-do/scripts"
|
|
51
|
+
if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then
|
|
52
|
+
SCRIPT_ROOT=".codex/skills/cc-do/scripts"
|
|
53
|
+
fi
|
|
54
|
+
bash "$SCRIPT_ROOT/select-ready-tasks.sh" --manifest docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json
|
|
55
|
+
bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task <task-id>
|
|
56
|
+
```
|
|
57
|
+
|
|
38
58
|
## Phase 1: Foundation
|
|
39
59
|
|
|
40
60
|
- [x] T001 [TEST] Add a failing test for the missing download action (dependsOn:none) `src/admin/AuditSummaryPanel.test.tsx`
|
|
41
61
|
Goal: 证明现在还没有可下载的 summary export。
|
|
62
|
+
TDD phase: red
|
|
42
63
|
Files: `src/admin/AuditSummaryPanel.test.tsx`
|
|
43
64
|
Read first: `design.md`, `src/admin/AuditSummaryPanel.tsx`
|
|
44
65
|
Verification: `npm test -- src/admin/AuditSummaryPanel.test.tsx`
|
|
45
66
|
Evidence: failing output
|
|
67
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T001`; do not hand-edit status.
|
|
68
|
+
Test seam: admin audit panel UI behavior
|
|
69
|
+
Public verification path: Run the audit summary panel test and observe CSV export through visible rows
|
|
70
|
+
Allowed mocks: download / blob boundary
|
|
46
71
|
Ready when: 当前 audit summary test 已可运行
|
|
47
72
|
|
|
48
73
|
- [x] T002 [IMPL] Add the download summary action (dependsOn:T001) `src/admin/AuditSummaryPanel.tsx`
|
|
49
74
|
Goal: 用最小实现让 summary export 真的可用。
|
|
75
|
+
TDD phase: green
|
|
50
76
|
Files: `src/admin/AuditSummaryPanel.tsx`
|
|
51
77
|
Read first: `design.md`, `src/admin/AuditSummaryPanel.test.tsx`
|
|
52
78
|
Verification: `npm test -- src/admin/AuditSummaryPanel.test.tsx`
|
|
53
79
|
Evidence: passing output + checkpoint
|
|
80
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T002`; do not hand-edit status.
|
|
81
|
+
Test seam: admin audit panel UI behavior
|
|
82
|
+
Public verification path: Run the audit summary panel test and observe CSV export through visible rows
|
|
83
|
+
Allowed mocks: download / blob boundary
|
|
54
84
|
Ready when: T001 已见红
|
|
55
85
|
|
|
56
86
|
## Phase 2: Verify
|
|
57
87
|
|
|
58
88
|
- [x] T003 Run targeted checks and collect handoff evidence (dependsOn:T002) `audit summary quality gates`
|
|
59
89
|
Goal: 为 `cc-check` 和 `cc-act` 留下这次导出改动的真实证据。
|
|
90
|
+
TDD phase: evidence
|
|
60
91
|
Files: `src/admin/AuditSummaryPanel.tsx`, `src/admin/AuditSummaryPanel.test.tsx`
|
|
61
92
|
Read first: `tasks.md`, `task-manifest.json`
|
|
62
93
|
Verification:
|
|
63
94
|
- `npm test -- src/admin/AuditSummaryPanel.test.tsx`
|
|
64
95
|
- `npm run lint -- src/admin/AuditSummaryPanel.tsx`
|
|
65
96
|
Evidence: passing output + clean lint output
|
|
97
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `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 docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json --tasks docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md --task T003`; do not hand-edit status.
|
|
98
|
+
Test seam: admin audit panel UI behavior
|
|
99
|
+
Public verification path: Run the audit summary panel test and observe CSV export through visible rows
|
|
100
|
+
Allowed mocks: download / blob boundary
|
|
66
101
|
Ready when: T002 已完成
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
},
|
|
6
6
|
"meta": {
|
|
7
7
|
"roadmapVersion": "roadmap.v2",
|
|
8
|
-
"skillVersion": "5.
|
|
8
|
+
"skillVersion": "5.2.0",
|
|
9
9
|
"status": "active",
|
|
10
10
|
"lastUpdated": "2026-04-19",
|
|
11
11
|
"currentFocusStage": "Stage 2"
|
|
@@ -14,7 +14,21 @@
|
|
|
14
14
|
"planningPosture": "",
|
|
15
15
|
"evidenceMaturity": "",
|
|
16
16
|
"canonicalTerms": [],
|
|
17
|
-
"durableDecisionSources": []
|
|
17
|
+
"durableDecisionSources": [],
|
|
18
|
+
"aiLeverageRouteLens": {
|
|
19
|
+
"realUserOrOperator": "workspace admin preparing weekly activity review notes",
|
|
20
|
+
"statusQuoWorkaround": "manual copy of visible audit rows into an internal note",
|
|
21
|
+
"humanTeamEffortForFullScope": "about one day for an engineer to implement, test, and document the local export",
|
|
22
|
+
"ccAgentEffortForFullScope": "about 30 minutes for visible-row CSV export plus targeted test and lint",
|
|
23
|
+
"aiCompressionRatio": "roughly 10x for the bounded local export path",
|
|
24
|
+
"completeLakeBoundary": "visible-row CSV export, panel action, current data source, targeted panel test, and lint",
|
|
25
|
+
"oceanBoundary": "JSON export, scheduled reporting, shared reporting backend, and cross-panel reporting platform",
|
|
26
|
+
"scopeRecommendation": "boil-lake",
|
|
27
|
+
"firstSuccessSignal": "admins finish weekly review without manual row copying",
|
|
28
|
+
"killSignal": "implementation requires shared reporting pipeline redesign",
|
|
29
|
+
"verdict": "boil-lake",
|
|
30
|
+
"missingEvidence": []
|
|
31
|
+
}
|
|
18
32
|
},
|
|
19
33
|
"evidence": [],
|
|
20
34
|
"route": {
|
|
@@ -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@5.
|
|
7
|
+
- Bound skills: `cc-roadmap@5.2.0`, `cc-plan@3.8.2`, `cc-do@1.6.3`, `cc-check@1.10.1`, `cc-act@1.8.3`
|
|
8
8
|
|
|
9
9
|
This folder shows one minimal but complete `cc-roadmap -> cc-plan -> cc-do -> cc-check -> cc-act` loop.
|
|
10
10
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Roadmap Meta
|
|
4
4
|
|
|
5
5
|
- Roadmap version: `roadmap.v1`
|
|
6
|
-
- Skill version: `5.
|
|
6
|
+
- Skill version: `5.2.0`
|
|
7
7
|
- Status: `active`
|
|
8
8
|
- Last updated: `2026-04-15`
|
|
9
9
|
- Owner / decider: `product-owner`
|
|
@@ -36,6 +36,21 @@
|
|
|
36
36
|
| Feasibility | Existing dialog already renders the URL and clipboard API is available | High | current UI behavior | This is a tiny patch, not a redesign |
|
|
37
37
|
| Distribution | Successful sharing unlocks more beta seats | Med | product notes | A smoother invite loop increases activation |
|
|
38
38
|
|
|
39
|
+
## AI Leverage Route Lens
|
|
40
|
+
|
|
41
|
+
- Real user / operator: workspace member sharing an invite during beta onboarding
|
|
42
|
+
- Status quo workaround: manually select and copy the visible invite URL
|
|
43
|
+
- Human-team effort for full scope: about half a day for one engineer including test and review
|
|
44
|
+
- CC / agent effort for full scope: about 20 minutes for a targeted UI patch plus test update
|
|
45
|
+
- AI compression ratio: roughly 10x for this bounded UI slice
|
|
46
|
+
- Complete-lake boundary: copy action, current invite URL source, copied-state feedback, and dialog behavior test
|
|
47
|
+
- Ocean boundary: backend invite generation, permissions, analytics, and clipboard fallback redesign
|
|
48
|
+
- Scope recommendation: `boil-lake`
|
|
49
|
+
- First success signal: users copy the invite link without asking support
|
|
50
|
+
- Kill signal: implementation requires backend or permission changes
|
|
51
|
+
- Verdict: `boil-lake`
|
|
52
|
+
- Missing evidence before ready-for-cc-plan: none
|
|
53
|
+
|
|
39
54
|
## Route Options
|
|
40
55
|
|
|
41
56
|
| Shape | Why this could work | Why this may fail | Decision |
|