cc-devflow 4.5.5 → 4.5.7
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/PLAYBOOK.md +2 -2
- package/.claude/skills/cc-act/SKILL.md +2 -2
- package/.claude/skills/cc-act/scripts/{archive-requirement.sh → archive-change.sh} +7 -7
- package/.claude/skills/cc-investigate/CHANGELOG.md +5 -0
- package/.claude/skills/cc-investigate/SKILL.md +2 -2
- package/.claude/skills/cc-plan/CHANGELOG.md +34 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +22 -17
- package/.claude/skills/cc-plan/SKILL.md +135 -12
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +51 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +2 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +66 -3
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +37 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +33 -10
- package/.claude/skills/cc-plan/scripts/next-change-key.sh +78 -0
- package/.claude/skills/cc-review/CHANGELOG.md +7 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +54 -0
- package/.claude/skills/cc-review/SKILL.md +173 -0
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +81 -0
- package/.claude/skills/cc-review/references/implementation-review-branch.md +115 -0
- package/.claude/skills/cc-review/references/plan-review-branch.md +116 -0
- package/.claude/skills/cc-review/references/review-methods.md +126 -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/CHANGELOG.md +21 -0
- package/README.md +10 -5
- package/README.zh-CN.md +10 -5
- package/bin/cc-devflow-cli.js +135 -2
- package/config/distributable-skills.json +2 -0
- package/docs/CLAUDE.md +1 -1
- package/docs/examples/example-bindings.json +5 -4
- 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 +42 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +345 -65
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +2 -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 +34 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +197 -39
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +2 -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 +34 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +89 -8
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +2 -1
- package/docs/examples/pdca-loop/roadmap.json +16 -2
- package/docs/examples/scripts/check-example-bindings.sh +2 -0
- package/docs/guides/getting-started.md +13 -10
- package/docs/guides/getting-started.zh-CN.md +13 -10
- package/lib/skill-runtime/__tests__/archive-change.test.js +124 -0
- package/lib/skill-runtime/__tests__/autopilot.test.js +13 -10
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +1 -0
- package/lib/skill-runtime/__tests__/paths.test.js +106 -1
- package/lib/skill-runtime/__tests__/query.test.js +49 -0
- package/lib/skill-runtime/archive-change.js +64 -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 +60 -7
- package/lib/skill-runtime/query-registry.js +3 -3
- package/lib/skill-runtime/query.js +30 -30
- package/package.json +2 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"requirementId": "REQ-002",
|
|
7
7
|
"requirementVersion": "REQ-002.v2",
|
|
8
8
|
"planningMeta": {
|
|
9
|
-
"reqPlanSkillVersion": "3.
|
|
9
|
+
"reqPlanSkillVersion": "3.8.1",
|
|
10
10
|
"designVersion": "design.v2",
|
|
11
11
|
"approvedAt": null,
|
|
12
12
|
"approvedBy": null,
|
|
@@ -14,21 +14,28 @@
|
|
|
14
14
|
"requirementBrief": {
|
|
15
15
|
"problemStatement": "Admins onboarding larger teams need predictable bulk invite behavior for duplicates, invalid rows, and seat limits.",
|
|
16
16
|
"solutionSummary": "Freeze deterministic CSV row outcomes before executing the bulk invite flow.",
|
|
17
|
-
"actors": [
|
|
17
|
+
"actors": [
|
|
18
|
+
"workspace admin",
|
|
19
|
+
"support operator"
|
|
20
|
+
],
|
|
18
21
|
"userStories": [
|
|
19
22
|
{
|
|
20
23
|
"id": "US-001",
|
|
21
24
|
"actor": "workspace admin",
|
|
22
25
|
"want": "upload a CSV of invite emails",
|
|
23
26
|
"benefit": "invite many collaborators without one-by-one entry",
|
|
24
|
-
"acceptance": [
|
|
27
|
+
"acceptance": [
|
|
28
|
+
"Mixed valid rows produce visible accepted outcomes"
|
|
29
|
+
]
|
|
25
30
|
},
|
|
26
31
|
{
|
|
27
32
|
"id": "US-002",
|
|
28
33
|
"actor": "workspace admin",
|
|
29
34
|
"want": "see duplicate, invalid, and over-limit row states",
|
|
30
35
|
"benefit": "understand what happened without support help",
|
|
31
|
-
"acceptance": [
|
|
36
|
+
"acceptance": [
|
|
37
|
+
"Every skipped or rejected row has a reason"
|
|
38
|
+
]
|
|
32
39
|
}
|
|
33
40
|
],
|
|
34
41
|
"edgeOrRecoveryStories": [
|
|
@@ -37,13 +44,155 @@
|
|
|
37
44
|
"actor": "workspace admin",
|
|
38
45
|
"boundary": "CSV contains duplicates, invalid emails, or over-limit rows",
|
|
39
46
|
"desiredOutcome": "safe rows can proceed while bad rows are explained",
|
|
40
|
-
"acceptance": [
|
|
47
|
+
"acceptance": [
|
|
48
|
+
"Rule matrix covers duplicate, invalid, and seat-limit cases"
|
|
49
|
+
]
|
|
41
50
|
}
|
|
42
51
|
],
|
|
43
|
-
"implementationDecisions": [
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
52
|
+
"implementationDecisions": [
|
|
53
|
+
"Freeze one row-outcome matrix before execution resumes"
|
|
54
|
+
],
|
|
55
|
+
"testingDecisions": [
|
|
56
|
+
"Test row semantics through bulk-import rules and the admin upload flow"
|
|
57
|
+
],
|
|
58
|
+
"outOfScope": [
|
|
59
|
+
"enterprise SCIM provisioning",
|
|
60
|
+
"background job redesign",
|
|
61
|
+
"rollback wizard for partial success"
|
|
62
|
+
],
|
|
63
|
+
"furtherNotes": [
|
|
64
|
+
"Design remains blocked until duplicate and seat-limit semantics are approved"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"externalBestPractice": {
|
|
68
|
+
"needed": true,
|
|
69
|
+
"decisionStatus": "declined",
|
|
70
|
+
"decisionQuestionId": "D2",
|
|
71
|
+
"privacyGuard": "generalized terms only; no project names, private requirements, customer names, secrets, logs, or proprietary concepts",
|
|
72
|
+
"generalizedSearchTerms": [
|
|
73
|
+
"bulk invite CSV import validation best practices"
|
|
74
|
+
],
|
|
75
|
+
"sourcesChecked": [],
|
|
76
|
+
"conventionalWisdom": "",
|
|
77
|
+
"currentDiscourse": "",
|
|
78
|
+
"repoFitVerdict": "skipped",
|
|
79
|
+
"designImpacts": [
|
|
80
|
+
"keep the design blocked until row-outcome semantics are approved from internal evidence"
|
|
81
|
+
],
|
|
82
|
+
"skippedReason": "user kept the example repo-local for the blocked design"
|
|
83
|
+
},
|
|
84
|
+
"decisionQuestions": [
|
|
85
|
+
{
|
|
86
|
+
"questionId": "D1",
|
|
87
|
+
"gate": "approach-approval",
|
|
88
|
+
"knownEvidence": [
|
|
89
|
+
"Best-effort upload would hide duplicate, invalid, and seat-limit semantics",
|
|
90
|
+
"Audit mapping depends on deterministic row outcomes"
|
|
91
|
+
],
|
|
92
|
+
"recommendation": "Choose Option B and freeze a rule matrix first",
|
|
93
|
+
"options": [
|
|
94
|
+
{
|
|
95
|
+
"id": "A",
|
|
96
|
+
"label": "Front-end-only CSV upload",
|
|
97
|
+
"recommended": false,
|
|
98
|
+
"completeness": "5/10",
|
|
99
|
+
"good": "Fastest prototype and reuses the existing single-invite API",
|
|
100
|
+
"costRisk": "Lets hidden backend edge cases define user-visible semantics"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "B",
|
|
104
|
+
"label": "Rule matrix first",
|
|
105
|
+
"recommended": true,
|
|
106
|
+
"completeness": "9/10",
|
|
107
|
+
"good": "Makes billing, duplicate, invalid, and audit behavior reviewable",
|
|
108
|
+
"costRisk": "Requires one more planning pass before execution can start"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"userChoice": "B",
|
|
112
|
+
"impact": "cc-do stays blocked until row outcomes are modeled",
|
|
113
|
+
"status": "answered"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"questionId": "D2",
|
|
117
|
+
"gate": "external-best-practice",
|
|
118
|
+
"knownEvidence": [
|
|
119
|
+
"Bulk CSV import semantics could benefit from generalized external practice",
|
|
120
|
+
"The example keeps private details out of any external lookup"
|
|
121
|
+
],
|
|
122
|
+
"recommendation": "Stay repo-local for this blocked example",
|
|
123
|
+
"options": [
|
|
124
|
+
{
|
|
125
|
+
"id": "A",
|
|
126
|
+
"label": "Search generalized best practices",
|
|
127
|
+
"recommended": false,
|
|
128
|
+
"completeness": "9/10",
|
|
129
|
+
"good": "Could improve row-outcome terminology before task generation",
|
|
130
|
+
"costRisk": "Sends generalized category terms outside the local repo"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "B",
|
|
134
|
+
"label": "Stay repo-local",
|
|
135
|
+
"recommended": true,
|
|
136
|
+
"completeness": "7/10",
|
|
137
|
+
"good": "Keeps the blocked example private and focused on internal semantics",
|
|
138
|
+
"costRisk": "Does not compare against external CSV-import conventions"
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"userChoice": "B",
|
|
142
|
+
"impact": "cc-do still must not start implementation until row outcomes are answered from internal evidence",
|
|
143
|
+
"status": "answered"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"questionId": "D3",
|
|
147
|
+
"gate": "review-blocker",
|
|
148
|
+
"knownEvidence": [
|
|
149
|
+
"Duplicate and seat-limit outcomes are still not explicit enough for final requirement proof",
|
|
150
|
+
"Audit entries must match visible row outcomes"
|
|
151
|
+
],
|
|
152
|
+
"recommendation": "Answer the row-outcome matrix before retry or cc-act",
|
|
153
|
+
"options": [
|
|
154
|
+
{
|
|
155
|
+
"id": "A",
|
|
156
|
+
"label": "Block execution until matrix is explicit",
|
|
157
|
+
"recommended": true,
|
|
158
|
+
"completeness": "10/10",
|
|
159
|
+
"good": "Prevents cc-do from inventing semantics during implementation",
|
|
160
|
+
"costRisk": "Requires user/product input before coding can continue"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "B",
|
|
164
|
+
"label": "Let implementation choose defaults",
|
|
165
|
+
"recommended": false,
|
|
166
|
+
"completeness": "4/10",
|
|
167
|
+
"good": "Starts coding sooner with fewer planning minutes",
|
|
168
|
+
"costRisk": "Creates invisible product decisions inside implementation tasks"
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
"userChoice": null,
|
|
172
|
+
"impact": "cc-do retry and cc-act must stay blocked until this is answered",
|
|
173
|
+
"status": "asked"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"aiLeverageDecisionLens": {
|
|
177
|
+
"realUserOrOperator": "workspace admin onboarding larger teams",
|
|
178
|
+
"statusQuoWorkaround": "paste invite emails one by one or track them in spreadsheets",
|
|
179
|
+
"humanTeamEffortForFullScope": "multiple weeks across product, engineering, billing, and support review",
|
|
180
|
+
"ccAgentEffortForFullScope": "several hours once row semantics are approved, but unbounded before that",
|
|
181
|
+
"aiCompressionRatio": "high after semantics freeze, low while the product contract is ambiguous",
|
|
182
|
+
"completeLakeBoundary": "row classification, admin upload flow, billing-seat checks, and audit mapping after rule approval",
|
|
183
|
+
"oceanBoundary": "SCIM, background retries, rollback wizard, and unspecified billing semantics",
|
|
184
|
+
"scopeRecommendation": "sharp-wedge",
|
|
185
|
+
"costModel": {
|
|
186
|
+
"agentTime": "medium after rule approval",
|
|
187
|
+
"humanReviewTime": "high until semantics are approved",
|
|
188
|
+
"verificationCost": "bulk rules, admin flow, billing, and audit tests",
|
|
189
|
+
"maintenanceCost": "medium after semantics freeze",
|
|
190
|
+
"failureCost": "high if billing or audit outcomes drift",
|
|
191
|
+
"reversibility": "limited once execution semantics ship"
|
|
192
|
+
},
|
|
193
|
+
"verdict": "sharp-wedge",
|
|
194
|
+
"missingEvidenceOrPivotReason": "none at plan approval; cc-check later reopened duplicate, invalid-row, partial-success, and seat-limit semantics before retry or cc-act",
|
|
195
|
+
"impactOnApprovedDirection": "allow bounded import-path execution, then block final proof if review finds row semantics drift"
|
|
47
196
|
}
|
|
48
197
|
},
|
|
49
198
|
"currentTaskId": null,
|
|
@@ -56,19 +205,44 @@
|
|
|
56
205
|
"phase": 1,
|
|
57
206
|
"parallel": false,
|
|
58
207
|
"dependsOn": [],
|
|
59
|
-
"touches": [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
208
|
+
"touches": [
|
|
209
|
+
"bulk-invite-rules"
|
|
210
|
+
],
|
|
211
|
+
"files": [
|
|
212
|
+
"src/invite/bulk-import.test.ts"
|
|
213
|
+
],
|
|
214
|
+
"run": [
|
|
215
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
216
|
+
],
|
|
217
|
+
"checks": [
|
|
218
|
+
"tests fail before implementation"
|
|
219
|
+
],
|
|
220
|
+
"acceptance": [
|
|
221
|
+
"dangerous row outcomes are reproduced as explicit failing tests"
|
|
222
|
+
],
|
|
223
|
+
"verification": [
|
|
224
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
225
|
+
],
|
|
226
|
+
"evidence": [
|
|
227
|
+
"failing test output"
|
|
228
|
+
],
|
|
66
229
|
"context": {
|
|
67
|
-
"readFiles": [
|
|
68
|
-
|
|
69
|
-
|
|
230
|
+
"readFiles": [
|
|
231
|
+
"design.md",
|
|
232
|
+
"tasks.md",
|
|
233
|
+
"src/invite/bulk-import.ts"
|
|
234
|
+
],
|
|
235
|
+
"commands": [
|
|
236
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
237
|
+
],
|
|
238
|
+
"notes": [
|
|
239
|
+
"freeze row semantics before broader execution"
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"reviews": {
|
|
243
|
+
"spec": "pass",
|
|
244
|
+
"code": "pass"
|
|
70
245
|
},
|
|
71
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
72
246
|
"status": "passed",
|
|
73
247
|
"attempts": 1,
|
|
74
248
|
"maxRetries": 1
|
|
@@ -79,20 +253,48 @@
|
|
|
79
253
|
"type": "IMPL",
|
|
80
254
|
"phase": 1,
|
|
81
255
|
"parallel": false,
|
|
82
|
-
"dependsOn": [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
256
|
+
"dependsOn": [
|
|
257
|
+
"T001"
|
|
258
|
+
],
|
|
259
|
+
"touches": [
|
|
260
|
+
"bulk-invite-rules"
|
|
261
|
+
],
|
|
262
|
+
"files": [
|
|
263
|
+
"src/invite/bulk-import.ts"
|
|
264
|
+
],
|
|
265
|
+
"run": [
|
|
266
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
267
|
+
],
|
|
268
|
+
"checks": [
|
|
269
|
+
"rule tests pass"
|
|
270
|
+
],
|
|
271
|
+
"acceptance": [
|
|
272
|
+
"bulk invite rows receive deterministic initial states"
|
|
273
|
+
],
|
|
274
|
+
"verification": [
|
|
275
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
276
|
+
],
|
|
277
|
+
"evidence": [
|
|
278
|
+
"passing test output",
|
|
279
|
+
"checkpoint summary"
|
|
280
|
+
],
|
|
90
281
|
"context": {
|
|
91
|
-
"readFiles": [
|
|
92
|
-
|
|
93
|
-
|
|
282
|
+
"readFiles": [
|
|
283
|
+
"design.md",
|
|
284
|
+
"tasks.md",
|
|
285
|
+
"src/invite/bulk-import.test.ts"
|
|
286
|
+
],
|
|
287
|
+
"commands": [
|
|
288
|
+
"npm test -- src/invite/bulk-import.test.ts"
|
|
289
|
+
],
|
|
290
|
+
"notes": [
|
|
291
|
+
"do not invent partial-failure semantics outside the approved design"
|
|
292
|
+
]
|
|
293
|
+
},
|
|
294
|
+
"reviews": {
|
|
295
|
+
"spec": "pass",
|
|
296
|
+
"code": "pass"
|
|
94
297
|
},
|
|
95
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
96
298
|
"status": "passed",
|
|
97
299
|
"attempts": 1,
|
|
98
300
|
"maxRetries": 1
|
|
@@ -103,20 +305,47 @@
|
|
|
103
305
|
"type": "TEST",
|
|
104
306
|
"phase": 2,
|
|
105
307
|
"parallel": false,
|
|
106
|
-
"dependsOn": [
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"
|
|
113
|
-
|
|
308
|
+
"dependsOn": [
|
|
309
|
+
"T002"
|
|
310
|
+
],
|
|
311
|
+
"touches": [
|
|
312
|
+
"admin-bulk-invite-ui"
|
|
313
|
+
],
|
|
314
|
+
"files": [
|
|
315
|
+
"src/admin/BulkInvitePanel.test.tsx"
|
|
316
|
+
],
|
|
317
|
+
"run": [
|
|
318
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
319
|
+
],
|
|
320
|
+
"checks": [
|
|
321
|
+
"admin panel tests fail before UI integration"
|
|
322
|
+
],
|
|
323
|
+
"acceptance": [
|
|
324
|
+
"mixed row outcomes are visible as UI failures before implementation"
|
|
325
|
+
],
|
|
326
|
+
"verification": [
|
|
327
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
328
|
+
],
|
|
329
|
+
"evidence": [
|
|
330
|
+
"failing test output"
|
|
331
|
+
],
|
|
114
332
|
"context": {
|
|
115
|
-
"readFiles": [
|
|
116
|
-
|
|
117
|
-
|
|
333
|
+
"readFiles": [
|
|
334
|
+
"design.md",
|
|
335
|
+
"tasks.md",
|
|
336
|
+
"src/admin/BulkInvitePanel.tsx"
|
|
337
|
+
],
|
|
338
|
+
"commands": [
|
|
339
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
340
|
+
],
|
|
341
|
+
"notes": [
|
|
342
|
+
"UI must not hide ambiguous row states"
|
|
343
|
+
]
|
|
344
|
+
},
|
|
345
|
+
"reviews": {
|
|
346
|
+
"spec": "pass",
|
|
347
|
+
"code": "pass"
|
|
118
348
|
},
|
|
119
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
120
349
|
"status": "passed",
|
|
121
350
|
"attempts": 1,
|
|
122
351
|
"maxRetries": 1
|
|
@@ -127,20 +356,48 @@
|
|
|
127
356
|
"type": "IMPL",
|
|
128
357
|
"phase": 2,
|
|
129
358
|
"parallel": false,
|
|
130
|
-
"dependsOn": [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
"
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"
|
|
137
|
-
|
|
359
|
+
"dependsOn": [
|
|
360
|
+
"T003"
|
|
361
|
+
],
|
|
362
|
+
"touches": [
|
|
363
|
+
"admin-bulk-invite-ui"
|
|
364
|
+
],
|
|
365
|
+
"files": [
|
|
366
|
+
"src/admin/BulkInvitePanel.tsx"
|
|
367
|
+
],
|
|
368
|
+
"run": [
|
|
369
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
370
|
+
],
|
|
371
|
+
"checks": [
|
|
372
|
+
"admin panel tests pass"
|
|
373
|
+
],
|
|
374
|
+
"acceptance": [
|
|
375
|
+
"admins can see accepted, skipped, and rejected rows in the panel"
|
|
376
|
+
],
|
|
377
|
+
"verification": [
|
|
378
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
379
|
+
],
|
|
380
|
+
"evidence": [
|
|
381
|
+
"passing test output",
|
|
382
|
+
"review notes"
|
|
383
|
+
],
|
|
138
384
|
"context": {
|
|
139
|
-
"readFiles": [
|
|
140
|
-
|
|
141
|
-
|
|
385
|
+
"readFiles": [
|
|
386
|
+
"design.md",
|
|
387
|
+
"tasks.md",
|
|
388
|
+
"src/admin/BulkInvitePanel.test.tsx"
|
|
389
|
+
],
|
|
390
|
+
"commands": [
|
|
391
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
392
|
+
],
|
|
393
|
+
"notes": [
|
|
394
|
+
"surface row states without redefining backend truth"
|
|
395
|
+
]
|
|
396
|
+
},
|
|
397
|
+
"reviews": {
|
|
398
|
+
"spec": "pass",
|
|
399
|
+
"code": "pass"
|
|
142
400
|
},
|
|
143
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
144
401
|
"status": "passed",
|
|
145
402
|
"attempts": 1,
|
|
146
403
|
"maxRetries": 1
|
|
@@ -151,29 +408,52 @@
|
|
|
151
408
|
"type": "OTHER",
|
|
152
409
|
"phase": 3,
|
|
153
410
|
"parallel": false,
|
|
154
|
-
"dependsOn": [
|
|
155
|
-
|
|
156
|
-
|
|
411
|
+
"dependsOn": [
|
|
412
|
+
"T004"
|
|
413
|
+
],
|
|
414
|
+
"touches": [
|
|
415
|
+
"quality-gates"
|
|
416
|
+
],
|
|
417
|
+
"files": [
|
|
418
|
+
"src/admin/BulkInvitePanel.tsx",
|
|
419
|
+
"src/invite/bulk-import.ts"
|
|
420
|
+
],
|
|
157
421
|
"run": [
|
|
158
422
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
159
423
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
160
424
|
],
|
|
161
|
-
"checks": [
|
|
162
|
-
|
|
425
|
+
"checks": [
|
|
426
|
+
"targeted tests pass",
|
|
427
|
+
"review evidence collected"
|
|
428
|
+
],
|
|
429
|
+
"acceptance": [
|
|
430
|
+
"fresh verification evidence exists for cc-check"
|
|
431
|
+
],
|
|
163
432
|
"verification": [
|
|
164
433
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
165
434
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
166
435
|
],
|
|
167
|
-
"evidence": [
|
|
436
|
+
"evidence": [
|
|
437
|
+
"passing targeted test output",
|
|
438
|
+
"review notes"
|
|
439
|
+
],
|
|
168
440
|
"context": {
|
|
169
|
-
"readFiles": [
|
|
441
|
+
"readFiles": [
|
|
442
|
+
"tasks.md",
|
|
443
|
+
"task-manifest.json"
|
|
444
|
+
],
|
|
170
445
|
"commands": [
|
|
171
446
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
172
447
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
173
448
|
],
|
|
174
|
-
"notes": [
|
|
449
|
+
"notes": [
|
|
450
|
+
"fresh evidence can still block if the design contract is incomplete"
|
|
451
|
+
]
|
|
452
|
+
},
|
|
453
|
+
"reviews": {
|
|
454
|
+
"spec": "pass",
|
|
455
|
+
"code": "pass"
|
|
175
456
|
},
|
|
176
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
177
457
|
"status": "passed",
|
|
178
458
|
"attempts": 1,
|
|
179
459
|
"maxRetries": 1
|
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Requirement version: `REQ-002.v2`
|
|
6
6
|
- Design version: `design.v2`
|
|
7
|
-
- CC-Plan skill version: `3.
|
|
7
|
+
- CC-Plan skill version: `3.8.1`
|
|
8
8
|
- Source roadmap item: `RM-010`
|
|
9
9
|
- Source roadmap version: `roadmap.v2`
|
|
10
10
|
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
- Implementation decisions: reuse invite engine, billing checks, and audit contract after the row-outcome matrix is approved
|
|
23
23
|
- Testing decisions: test bulk-import rules, admin upload flow, and audit mapping
|
|
24
24
|
- Out of scope: SCIM provisioning, background jobs, rollback wizard
|
|
25
|
+
- AI Leverage Decision Lens: sharp-wedge; AI can implement this bounded import path fast, but cc-check may still block final proof if row semantics drift
|
|
25
26
|
- Read first:
|
|
26
27
|
- `design.md`
|
|
27
28
|
- `src/admin/BulkInvitePanel.tsx`
|
|
@@ -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,23 @@
|
|
|
14
14
|
"planningPosture": "",
|
|
15
15
|
"evidenceMaturity": "",
|
|
16
16
|
"canonicalTerms": [],
|
|
17
|
-
"durableDecisionSources": []
|
|
17
|
+
"durableDecisionSources": [],
|
|
18
|
+
"aiLeverageRouteLens": {
|
|
19
|
+
"realUserOrOperator": "workspace admin onboarding 20-200 collaborators",
|
|
20
|
+
"statusQuoWorkaround": "paste individual invite emails or coordinate in spreadsheets",
|
|
21
|
+
"humanTeamEffortForFullScope": "multiple weeks across product, engineering, billing, and support review",
|
|
22
|
+
"ccAgentEffortForFullScope": "several hours once row semantics are approved, but unbounded before that",
|
|
23
|
+
"aiCompressionRatio": "high after semantics freeze, low while the product contract is ambiguous",
|
|
24
|
+
"completeLakeBoundary": "row classification, admin upload flow, billing-seat checks, and audit mapping after rule approval",
|
|
25
|
+
"oceanBoundary": "SCIM, background retries, rollback wizard, and unspecified billing semantics",
|
|
26
|
+
"scopeRecommendation": "sharp-wedge",
|
|
27
|
+
"firstSuccessSignal": "admins can predict duplicate, invalid, and over-limit outcomes",
|
|
28
|
+
"killSignal": "duplicate and seat-limit semantics remain unresolved",
|
|
29
|
+
"verdict": "sharp-wedge",
|
|
30
|
+
"missingEvidence": [
|
|
31
|
+
"none recorded at route handoff; cc-check later reopened duplicate, invalid-row, partial-success, and seat-limit semantics"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
18
34
|
},
|
|
19
35
|
"evidence": [],
|
|
20
36
|
"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.1`, `cc-do@1.6.2`, `cc-check@1.10.1`, `cc-act@1.8.2`
|
|
8
8
|
|
|
9
9
|
This example shows verified work that is **ready to move forward**, but `cc-act` still chooses `local-handoff`.
|
|
10
10
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Roadmap Meta
|
|
4
4
|
|
|
5
5
|
- Roadmap version: `roadmap.v3`
|
|
6
|
-
- Skill version: `5.
|
|
6
|
+
- Skill version: `5.2.0`
|
|
7
7
|
- Status: `active`
|
|
8
8
|
- Last updated: `2026-04-16`
|
|
9
9
|
- Owner / decider: `product-owner`
|
|
@@ -27,6 +27,21 @@
|
|
|
27
27
|
- Adoption / trust bottleneck: admins want proof they can take activity history out of the UI cleanly
|
|
28
28
|
- Known unknowns: whether CSV alone is enough or if JSON export will be needed later
|
|
29
29
|
|
|
30
|
+
## AI Leverage Route Lens
|
|
31
|
+
|
|
32
|
+
- Real user / operator: workspace admin preparing weekly activity review notes
|
|
33
|
+
- Status quo workaround: manually copy visible audit rows into an internal note
|
|
34
|
+
- Human-team effort for full scope: about one day for an engineer to implement, test, and document the local export
|
|
35
|
+
- CC / agent effort for full scope: about 30 minutes for visible-row CSV export plus targeted test and lint
|
|
36
|
+
- AI compression ratio: roughly 10x for the bounded local export path
|
|
37
|
+
- Complete-lake boundary: visible-row CSV export, panel action, current data source, targeted panel test, and lint
|
|
38
|
+
- Ocean boundary: JSON export, scheduled reporting, shared reporting backend, and cross-panel reporting platform
|
|
39
|
+
- Scope recommendation: `boil-lake`
|
|
40
|
+
- First success signal: admins finish weekly review without manual row copying
|
|
41
|
+
- Kill signal: implementation requires shared reporting pipeline redesign
|
|
42
|
+
- Verdict: `boil-lake`
|
|
43
|
+
- Missing evidence before ready-for-cc-plan: none
|
|
44
|
+
|
|
30
45
|
## Recommended Route
|
|
31
46
|
|
|
32
47
|
- Recommendation: `wedge-first`
|
|
@@ -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.1`
|
|
8
8
|
- Requirement ID: `REQ-003`
|
|
9
9
|
- Design mode: `tiny-design`
|
|
10
10
|
- Why this stays `tiny-design`: the patch adds one export action inside the existing admin audit UI without changing data contracts
|
|
@@ -66,6 +66,30 @@
|
|
|
66
66
|
- Risk: admins may soon ask for more export formats
|
|
67
67
|
- Mitigation: treat JSON or scheduled exports as later roadmap items
|
|
68
68
|
|
|
69
|
+
## AI Leverage Decision Lens
|
|
70
|
+
|
|
71
|
+
- Real user / operator: workspace admin preparing weekly review notes
|
|
72
|
+
- Status quo workaround: manually copy visible audit rows
|
|
73
|
+
- Human-team effort for full scope: about one day for an engineer to implement, test, and document the local export
|
|
74
|
+
- CC / agent effort for full scope: about 30 minutes for visible-row CSV export plus targeted test and lint
|
|
75
|
+
- AI compression ratio: roughly 10x for the bounded local export path
|
|
76
|
+
- Complete-lake boundary: visible-row CSV export, panel action, current data source, targeted panel test, and lint
|
|
77
|
+
- Ocean boundary: JSON export, scheduled reporting, shared reporting backend, and cross-panel reporting platform
|
|
78
|
+
- Scope recommendation: `boil-lake`
|
|
79
|
+
- Cost model: low agent time, low human review time, targeted panel test plus lint, low maintenance cost while scoped to visible rows, reversible UI action
|
|
80
|
+
- Verdict: `boil-lake`
|
|
81
|
+
- Missing evidence or pivot reason: none
|
|
82
|
+
|
|
83
|
+
## External Best-Practice Validation
|
|
84
|
+
|
|
85
|
+
- Needed: No
|
|
86
|
+
- Decision status: not-needed
|
|
87
|
+
- Generalized search terms:
|
|
88
|
+
- Sources checked:
|
|
89
|
+
- Repo-fit verdict: skipped
|
|
90
|
+
- Changes to frozen design:
|
|
91
|
+
- Skipped reason: the local handoff exports existing visible rows and does not introduce a new reporting standard
|
|
92
|
+
|
|
69
93
|
## Review Gate
|
|
70
94
|
|
|
71
95
|
- Placeholder scan: pass
|
|
@@ -74,8 +98,17 @@
|
|
|
74
98
|
- Ambiguity scan: pass
|
|
75
99
|
- Feasibility scan: pass
|
|
76
100
|
- PRD brief scan: pass; the export story and scope boundaries are explicit
|
|
101
|
+
- AI Leverage Decision Lens scan: pass; visible-row export lake is bounded enough to complete while reporting platform work stays out
|
|
102
|
+
- External best-practice scan: pass; not needed for a repo-local visible-row export
|
|
103
|
+
- Decision question scan: pass; `D1` approved the tiny-design CSV-export boundary
|
|
77
104
|
- Final recommendation: approved as `tiny-design`
|
|
78
105
|
|
|
106
|
+
## Decision Questions
|
|
107
|
+
|
|
108
|
+
| ID | Gate | Known evidence | Recommendation | User choice | Impact on `cc-do` | Status |
|
|
109
|
+
|----|------|----------------|----------------|-------------|-------------------|--------|
|
|
110
|
+
| D1 | approach-approval | Existing admin panel already owns visible summary rows and the change does not need a reporting backend | Approve the tiny-design CSV export | Tiny design CSV export | Export only visible rows from the current panel; do not create reporting contracts | answered |
|
|
111
|
+
|
|
79
112
|
## Approval
|
|
80
113
|
|
|
81
114
|
- User approval status: approved
|