cc-devflow 4.5.6 → 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 +22 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +20 -17
- package/.claude/skills/cc-plan/SKILL.md +91 -19
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +42 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +2 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +36 -2
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +30 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +20 -15
- 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 +9 -0
- package/README.md +9 -4
- package/README.zh-CN.md +9 -4
- package/bin/cc-devflow-cli.js +119 -0
- package/config/distributable-skills.json +2 -0
- 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 +36 -3
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +295 -71
- 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 +27 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +170 -41
- 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 +27 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +62 -10
- 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 +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 +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,19 +44,51 @@
|
|
|
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"
|
|
47
83
|
},
|
|
48
84
|
"decisionQuestions": [
|
|
49
85
|
{
|
|
50
86
|
"questionId": "D1",
|
|
51
87
|
"gate": "approach-approval",
|
|
52
|
-
"knownEvidence": [
|
|
88
|
+
"knownEvidence": [
|
|
89
|
+
"Best-effort upload would hide duplicate, invalid, and seat-limit semantics",
|
|
90
|
+
"Audit mapping depends on deterministic row outcomes"
|
|
91
|
+
],
|
|
53
92
|
"recommendation": "Choose Option B and freeze a rule matrix first",
|
|
54
93
|
"options": [
|
|
55
94
|
{
|
|
@@ -75,9 +114,42 @@
|
|
|
75
114
|
},
|
|
76
115
|
{
|
|
77
116
|
"questionId": "D2",
|
|
78
|
-
"gate": "
|
|
79
|
-
"knownEvidence": [
|
|
80
|
-
|
|
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",
|
|
81
153
|
"options": [
|
|
82
154
|
{
|
|
83
155
|
"id": "A",
|
|
@@ -97,10 +169,31 @@
|
|
|
97
169
|
}
|
|
98
170
|
],
|
|
99
171
|
"userChoice": null,
|
|
100
|
-
"impact": "
|
|
172
|
+
"impact": "cc-do retry and cc-act must stay blocked until this is answered",
|
|
101
173
|
"status": "asked"
|
|
102
174
|
}
|
|
103
|
-
]
|
|
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"
|
|
196
|
+
}
|
|
104
197
|
},
|
|
105
198
|
"currentTaskId": null,
|
|
106
199
|
"activePhase": null,
|
|
@@ -112,19 +205,44 @@
|
|
|
112
205
|
"phase": 1,
|
|
113
206
|
"parallel": false,
|
|
114
207
|
"dependsOn": [],
|
|
115
|
-
"touches": [
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
"
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
"
|
|
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
|
+
],
|
|
122
229
|
"context": {
|
|
123
|
-
"readFiles": [
|
|
124
|
-
|
|
125
|
-
|
|
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"
|
|
126
245
|
},
|
|
127
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
128
246
|
"status": "passed",
|
|
129
247
|
"attempts": 1,
|
|
130
248
|
"maxRetries": 1
|
|
@@ -135,20 +253,48 @@
|
|
|
135
253
|
"type": "IMPL",
|
|
136
254
|
"phase": 1,
|
|
137
255
|
"parallel": false,
|
|
138
|
-
"dependsOn": [
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
"
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
"
|
|
145
|
-
|
|
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
|
+
],
|
|
146
281
|
"context": {
|
|
147
|
-
"readFiles": [
|
|
148
|
-
|
|
149
|
-
|
|
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"
|
|
150
297
|
},
|
|
151
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
152
298
|
"status": "passed",
|
|
153
299
|
"attempts": 1,
|
|
154
300
|
"maxRetries": 1
|
|
@@ -159,20 +305,47 @@
|
|
|
159
305
|
"type": "TEST",
|
|
160
306
|
"phase": 2,
|
|
161
307
|
"parallel": false,
|
|
162
|
-
"dependsOn": [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
"
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
"
|
|
169
|
-
|
|
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
|
+
],
|
|
170
332
|
"context": {
|
|
171
|
-
"readFiles": [
|
|
172
|
-
|
|
173
|
-
|
|
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"
|
|
174
348
|
},
|
|
175
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
176
349
|
"status": "passed",
|
|
177
350
|
"attempts": 1,
|
|
178
351
|
"maxRetries": 1
|
|
@@ -183,20 +356,48 @@
|
|
|
183
356
|
"type": "IMPL",
|
|
184
357
|
"phase": 2,
|
|
185
358
|
"parallel": false,
|
|
186
|
-
"dependsOn": [
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
"
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
"
|
|
193
|
-
|
|
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
|
+
],
|
|
194
384
|
"context": {
|
|
195
|
-
"readFiles": [
|
|
196
|
-
|
|
197
|
-
|
|
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"
|
|
198
400
|
},
|
|
199
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
200
401
|
"status": "passed",
|
|
201
402
|
"attempts": 1,
|
|
202
403
|
"maxRetries": 1
|
|
@@ -207,29 +408,52 @@
|
|
|
207
408
|
"type": "OTHER",
|
|
208
409
|
"phase": 3,
|
|
209
410
|
"parallel": false,
|
|
210
|
-
"dependsOn": [
|
|
211
|
-
|
|
212
|
-
|
|
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
|
+
],
|
|
213
421
|
"run": [
|
|
214
422
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
215
423
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
216
424
|
],
|
|
217
|
-
"checks": [
|
|
218
|
-
|
|
425
|
+
"checks": [
|
|
426
|
+
"targeted tests pass",
|
|
427
|
+
"review evidence collected"
|
|
428
|
+
],
|
|
429
|
+
"acceptance": [
|
|
430
|
+
"fresh verification evidence exists for cc-check"
|
|
431
|
+
],
|
|
219
432
|
"verification": [
|
|
220
433
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
221
434
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
222
435
|
],
|
|
223
|
-
"evidence": [
|
|
436
|
+
"evidence": [
|
|
437
|
+
"passing targeted test output",
|
|
438
|
+
"review notes"
|
|
439
|
+
],
|
|
224
440
|
"context": {
|
|
225
|
-
"readFiles": [
|
|
441
|
+
"readFiles": [
|
|
442
|
+
"tasks.md",
|
|
443
|
+
"task-manifest.json"
|
|
444
|
+
],
|
|
226
445
|
"commands": [
|
|
227
446
|
"npm test -- src/invite/bulk-import.test.ts",
|
|
228
447
|
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
229
448
|
],
|
|
230
|
-
"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"
|
|
231
456
|
},
|
|
232
|
-
"reviews": { "spec": "pass", "code": "pass" },
|
|
233
457
|
"status": "passed",
|
|
234
458
|
"attempts": 1,
|
|
235
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,6 +98,8 @@
|
|
|
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
|
|
77
103
|
- Decision question scan: pass; `D1` approved the tiny-design CSV-export boundary
|
|
78
104
|
- Final recommendation: approved as `tiny-design`
|
|
79
105
|
|