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.
Files changed (92) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +6 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +11 -2
  3. package/.claude/skills/cc-act/SKILL.md +17 -7
  4. package/.claude/skills/cc-act/references/closure-contract.md +4 -0
  5. package/.claude/skills/cc-act/scripts/{archive-requirement.sh → archive-change.sh} +7 -7
  6. package/.claude/skills/cc-act/scripts/detect-ship-target.sh +27 -0
  7. package/.claude/skills/cc-act/scripts/ensure-ship-branch.sh +93 -0
  8. package/.claude/skills/cc-act/scripts/generate-status-report.sh +6 -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 +14 -0
  11. package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
  12. package/.claude/skills/cc-dev/PLAYBOOK.md +63 -0
  13. package/.claude/skills/cc-dev/SKILL.md +168 -0
  14. package/.claude/skills/cc-do/CHANGELOG.md +6 -0
  15. package/.claude/skills/cc-do/SKILL.md +23 -1
  16. package/.claude/skills/cc-investigate/CHANGELOG.md +5 -0
  17. package/.claude/skills/cc-investigate/SKILL.md +2 -2
  18. package/.claude/skills/cc-next/CHANGELOG.md +5 -0
  19. package/.claude/skills/cc-next/PLAYBOOK.md +52 -0
  20. package/.claude/skills/cc-next/SKILL.md +161 -0
  21. package/.claude/skills/cc-plan/CHANGELOG.md +28 -0
  22. package/.claude/skills/cc-plan/PLAYBOOK.md +20 -17
  23. package/.claude/skills/cc-plan/SKILL.md +135 -21
  24. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +42 -0
  25. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +28 -0
  26. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +84 -2
  27. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +30 -0
  28. package/.claude/skills/cc-plan/references/planning-contract.md +31 -15
  29. package/.claude/skills/cc-plan/scripts/next-change-key.sh +78 -0
  30. package/.claude/skills/cc-pr-land/CHANGELOG.md +5 -0
  31. package/.claude/skills/cc-pr-land/PLAYBOOK.md +45 -0
  32. package/.claude/skills/cc-pr-land/SKILL.md +157 -0
  33. package/.claude/skills/cc-pr-review/CHANGELOG.md +5 -0
  34. package/.claude/skills/cc-pr-review/PLAYBOOK.md +46 -0
  35. package/.claude/skills/cc-pr-review/SKILL.md +142 -0
  36. package/.claude/skills/cc-review/CHANGELOG.md +28 -0
  37. package/.claude/skills/cc-review/PLAYBOOK.md +108 -0
  38. package/.claude/skills/cc-review/SKILL.md +340 -0
  39. package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +85 -0
  40. package/.claude/skills/cc-review/references/implementation-review-branch.md +152 -0
  41. package/.claude/skills/cc-review/references/plan-review-branch.md +151 -0
  42. package/.claude/skills/cc-review/references/review-methods.md +221 -0
  43. package/.claude/skills/cc-review/scripts/collect-review-context.sh +80 -0
  44. package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
  45. package/.claude/skills/cc-roadmap/SKILL.md +102 -8
  46. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +3 -0
  47. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +23 -0
  48. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +20 -1
  49. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +28 -13
  50. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +18 -0
  51. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +8 -0
  52. package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
  53. package/.claude/skills/cc-simplify/SKILL.md +19 -8
  54. package/CHANGELOG.md +16 -0
  55. package/README.md +58 -4
  56. package/README.zh-CN.md +58 -4
  57. package/bin/cc-devflow-cli.js +119 -0
  58. package/config/distributable-skills.json +10 -0
  59. package/docs/assets/cc-devflow-pr-harness-en.svg +153 -0
  60. package/docs/assets/cc-devflow-pr-harness-zh.svg +152 -0
  61. package/docs/assets/wechat-group-qr.jpg +0 -0
  62. package/docs/examples/example-bindings.json +11 -6
  63. package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
  64. package/docs/examples/full-design-blocked/README.md +1 -1
  65. package/docs/examples/full-design-blocked/ROADMAP.md +16 -1
  66. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +36 -3
  67. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +604 -76
  68. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +46 -1
  69. package/docs/examples/full-design-blocked/roadmap.json +18 -2
  70. package/docs/examples/local-handoff/BACKLOG.md +1 -1
  71. package/docs/examples/local-handoff/README.md +1 -1
  72. package/docs/examples/local-handoff/ROADMAP.md +16 -1
  73. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +27 -1
  74. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +366 -44
  75. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +36 -1
  76. package/docs/examples/local-handoff/roadmap.json +16 -2
  77. package/docs/examples/pdca-loop/BACKLOG.md +1 -1
  78. package/docs/examples/pdca-loop/README.md +1 -1
  79. package/docs/examples/pdca-loop/ROADMAP.md +16 -1
  80. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +27 -1
  81. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +259 -14
  82. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +36 -1
  83. package/docs/examples/pdca-loop/roadmap.json +16 -2
  84. package/docs/examples/scripts/check-example-bindings.sh +21 -1
  85. package/docs/guides/getting-started.md +12 -9
  86. package/docs/guides/getting-started.zh-CN.md +12 -9
  87. package/lib/skill-runtime/__tests__/archive-change.test.js +124 -0
  88. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +1 -0
  89. package/lib/skill-runtime/__tests__/paths.test.js +81 -1
  90. package/lib/skill-runtime/archive-change.js +64 -0
  91. package/lib/skill-runtime/paths.js +32 -0
  92. package/package.json +7 -1
@@ -6,7 +6,7 @@
6
6
  "requirementId": "REQ-003",
7
7
  "requirementVersion": "REQ-003.v1",
8
8
  "planningMeta": {
9
- "reqPlanSkillVersion": "3.7.7",
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": ["workspace admin reviewing weekly activity"],
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": ["Panel behavior test proves the export action uses current summary rows"]
26
+ "acceptance": [
27
+ "Panel behavior test proves the export action uses current summary rows"
28
+ ]
25
29
  }
26
30
  ],
27
31
  "edgeOrRecoveryStories": [],
28
- "implementationDecisions": ["Export only rows already visible in the panel", "Keep CSV as the only output format"],
29
- "testingDecisions": ["Test through the admin panel action and visible row data"],
30
- "outOfScope": ["JSON export", "scheduled reporting", "shared reporting backend"],
31
- "furtherNotes": ["Richer machine-readable exports should become a separate requirement"]
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": ["Existing admin panel already owns the visible summary rows", "No reporting backend is needed for the first useful export"],
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": ["audit-summary", "tests"],
74
- "files": ["src/admin/AuditSummaryPanel.test.tsx"],
75
- "run": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
76
- "checks": ["test fails before implementation"],
77
- "acceptance": ["the missing download action is reproduced as a failing test"],
78
- "verification": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
79
- "evidence": ["failing test output"],
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": ["design.md", "tasks.md", "src/admin/AuditSummaryPanel.tsx"],
82
- "commands": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
83
- "notes": ["stay inside the current audit summary panel"]
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": ["T001"],
97
- "touches": ["audit-summary"],
98
- "files": ["src/admin/AuditSummaryPanel.tsx"],
99
- "run": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
100
- "checks": ["panel test passes"],
101
- "acceptance": ["admins can trigger a CSV download from the existing summary panel"],
102
- "verification": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
103
- "evidence": ["passing test output", "checkpoint summary"],
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": ["design.md", "tasks.md", "src/admin/AuditSummaryPanel.test.tsx"],
106
- "commands": ["npm test -- src/admin/AuditSummaryPanel.test.tsx"],
107
- "notes": ["reuse visible summary rows as the export source"]
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": ["T002"],
121
- "touches": ["quality-gates"],
122
- "files": ["src/admin/AuditSummaryPanel.tsx", "src/admin/AuditSummaryPanel.test.tsx"],
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": ["targeted tests pass", "lint passes"],
128
- "acceptance": ["fresh verification evidence exists for local handoff"],
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": ["passing test output", "clean lint output"],
357
+ "evidence": [
358
+ "passing test output",
359
+ "clean lint output"
360
+ ],
134
361
  "context": {
135
- "readFiles": ["tasks.md", "task-manifest.json"],
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": ["remote push is intentionally out of scope for this example"]
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.7`
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.0.0",
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": {
@@ -5,7 +5,7 @@
5
5
  ## Backlog Meta
6
6
 
7
7
  - Roadmap version: `roadmap.v1`
8
- - Skill version: `5.0.0`
8
+ - Skill version: `5.2.0`
9
9
  - Last synced: `2026-04-19`
10
10
  - Current focus stage: `Stage 1`
11
11
  - Roadmap state source: `roadmap.json`
@@ -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.0.0`, `cc-plan@3.7.7`, `cc-do@1.6.2`, `cc-check@1.10.1`, `cc-act@1.8.2`
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.0.0`
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 |