cc-devflow 4.5.11 → 4.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/cc-act/CHANGELOG.md +18 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +17 -269
- package/.claude/skills/cc-act/SKILL.md +38 -425
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +2 -13
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +1 -9
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +21 -177
- package/.claude/skills/cc-act/references/closure-contract.md +12 -63
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +5 -5
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +5 -322
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +11 -2
- package/.claude/skills/cc-act/scripts/inspect-git-index.sh +58 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +40 -440
- package/.claude/skills/cc-act/scripts/verify-act-gate.sh +10 -50
- package/.claude/skills/cc-check/CHANGELOG.md +18 -0
- package/.claude/skills/cc-check/PLAYBOOK.md +19 -273
- package/.claude/skills/cc-check/SKILL.md +33 -456
- package/.claude/skills/cc-check/references/review-contract.md +12 -147
- package/.claude/skills/cc-dev/CHANGELOG.md +15 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +1 -1
- package/.claude/skills/cc-dev/SKILL.md +52 -137
- package/.claude/skills/cc-dev/scripts/resolve-cc-devflow.sh +181 -0
- package/.claude/skills/cc-do/CHANGELOG.md +11 -0
- package/.claude/skills/cc-do/PLAYBOOK.md +19 -113
- package/.claude/skills/cc-do/SKILL.md +39 -245
- package/.claude/skills/cc-do/references/execution-recovery.md +15 -109
- package/.claude/skills/cc-do/scripts/cc-do-common.sh +5 -57
- package/.claude/skills/cc-do/scripts/check-task-status.sh +35 -65
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +9 -46
- package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +29 -97
- package/.claude/skills/cc-investigate/CHANGELOG.md +16 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +20 -180
- package/.claude/skills/cc-investigate/SKILL.md +64 -246
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +48 -98
- package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -218
- package/.claude/skills/cc-next/CHANGELOG.md +6 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +12 -8
- package/.claude/skills/cc-next/SKILL.md +34 -140
- package/.claude/skills/cc-plan/CHANGELOG.md +16 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +22 -161
- package/.claude/skills/cc-plan/SKILL.md +45 -295
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +30 -228
- package/.claude/skills/cc-plan/references/planning-contract.md +24 -161
- package/.claude/skills/cc-plan/scripts/next-change-key.sh +8 -44
- package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +2 -2
- package/.claude/skills/cc-plan/scripts/validate-scope.sh +1 -1
- package/.claude/skills/cc-pr-land/SKILL.md +14 -114
- package/.claude/skills/cc-pr-review/CHANGELOG.md +4 -0
- package/.claude/skills/cc-pr-review/SKILL.md +20 -103
- package/.claude/skills/cc-review/CHANGELOG.md +17 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +13 -86
- package/.claude/skills/cc-review/SKILL.md +53 -241
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +2 -2
- package/.claude/skills/cc-review/references/implementation-review-branch.md +7 -147
- package/.claude/skills/cc-review/references/plan-review-branch.md +5 -147
- package/.claude/skills/cc-review/references/review-methods.md +10 -218
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +4 -63
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +1 -1
- package/.claude/skills/cc-roadmap/SKILL.md +3 -3
- package/.claude/skills/cc-simplify/CHANGELOG.md +7 -0
- package/.claude/skills/cc-simplify/SKILL.md +26 -21
- package/.claude/skills/cc-spec-init/PLAYBOOK.md +12 -48
- package/.claude/skills/cc-spec-init/SKILL.md +29 -132
- package/.claude/skills/cc-spec-init/references/spec-contract.md +8 -17
- package/CHANGELOG.md +13 -0
- package/bin/cc-devflow-cli.js +20 -260
- package/bin/cc-devflow.js +44 -7
- package/docs/commands/README.md +1 -1
- package/docs/commands/README.zh-CN.md +1 -1
- package/docs/examples/README.md +1 -1
- package/docs/examples/START-HERE.md +14 -15
- package/docs/examples/example-bindings.json +11 -11
- package/docs/examples/full-design-blocked/README.md +4 -6
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/{planning/tasks.md → task.md} +20 -15
- package/docs/examples/local-handoff/README.md +8 -11
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/pr-brief.md +31 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/{planning/tasks.md → task.md} +18 -13
- package/docs/examples/pdca-loop/README.md +6 -9
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +9 -11
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/{planning/tasks.md → task.md} +18 -13
- package/docs/examples/scripts/check-example-bindings.sh +11 -62
- package/docs/guides/artifact-contract.md +10 -40
- package/docs/guides/getting-started.md +8 -8
- package/docs/guides/getting-started.zh-CN.md +8 -8
- package/docs/guides/minimize-artifacts.md +16 -130
- package/docs/guides/project-postmortem.md +14 -71
- package/lib/compiler/__tests__/skills-registry.test.js +9 -8
- package/lib/compiler/resource-copier.js +29 -0
- package/lib/skill-runtime/__tests__/archive-change.test.js +2 -2
- package/lib/skill-runtime/__tests__/benchmark-skills.test.js +3 -3
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +14 -4
- package/lib/skill-runtime/errors.js +3 -3
- package/lib/skill-runtime/index.js +5 -23
- package/lib/skill-runtime/paths.js +5 -52
- package/lib/skill-runtime/query-registry.js +4 -4
- package/lib/skill-runtime/query.js +89 -201
- package/lib/skill-runtime/store.js +4 -40
- package/lib/skill-runtime/trace.js +2 -2
- package/package.json +2 -5
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +0 -29
- package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +0 -54
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +0 -92
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +0 -355
- package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +0 -234
- package/.claude/skills/cc-check/scripts/render-report-card.js +0 -438
- package/.claude/skills/cc-check/scripts/verify-gate.sh +0 -85
- package/.claude/skills/cc-do/scripts/build-task-context.sh +0 -175
- package/.claude/skills/cc-do/scripts/record-review-decision.sh +0 -88
- package/.claude/skills/cc-do/scripts/recover-workflow.sh +0 -82
- package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +0 -70
- package/.claude/skills/cc-do/scripts/verify-task-gates.sh +0 -109
- package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +0 -92
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +0 -224
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +0 -178
- package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +0 -28
- package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +0 -45
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +0 -234
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +0 -488
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +0 -189
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +0 -39
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +0 -29
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +0 -123
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +0 -292
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +0 -136
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +0 -29
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +0 -124
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +0 -292
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +0 -136
- package/docs/get-shit-done-strategy-audit.md +0 -518
- package/docs/skill-runtime-migration.md +0 -46
- package/lib/skill-runtime/__tests__/approve.test.js +0 -92
- package/lib/skill-runtime/__tests__/autopilot.test.js +0 -253
- package/lib/skill-runtime/__tests__/benchmark-artifacts.test.js +0 -165
- package/lib/skill-runtime/__tests__/delegation.test.js +0 -97
- package/lib/skill-runtime/__tests__/dispatch.test.js +0 -237
- package/lib/skill-runtime/__tests__/intent.test.js +0 -203
- package/lib/skill-runtime/__tests__/lifecycle.test.js +0 -169
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +0 -331
- package/lib/skill-runtime/__tests__/prepare-pr.test.js +0 -126
- package/lib/skill-runtime/__tests__/query.test.js +0 -860
- package/lib/skill-runtime/__tests__/readiness.test.js +0 -53
- package/lib/skill-runtime/__tests__/release.test.js +0 -85
- package/lib/skill-runtime/__tests__/review-check-integration.test.js +0 -148
- package/lib/skill-runtime/__tests__/review-records.test.js +0 -619
- package/lib/skill-runtime/__tests__/runtime.integration.test.js +0 -351
- package/lib/skill-runtime/__tests__/schemas.test.js +0 -337
- package/lib/skill-runtime/__tests__/task-contract-migrate.test.js +0 -137
- package/lib/skill-runtime/__tests__/task-contract.test.js +0 -874
- package/lib/skill-runtime/__tests__/team-state.test.js +0 -51
- package/lib/skill-runtime/__tests__/verify-artifacts.test.js +0 -203
- package/lib/skill-runtime/__tests__/worker-run.test.js +0 -275
- package/lib/skill-runtime/__tests__/worker.test.js +0 -56
- package/lib/skill-runtime/__tests__/workflow-context-legacy-fallback.test.js +0 -31
- package/lib/skill-runtime/__tests__/workflow-context.test.js +0 -98
- package/lib/skill-runtime/artifacts.js +0 -88
- package/lib/skill-runtime/context-index.js +0 -545
- package/lib/skill-runtime/delegation.js +0 -533
- package/lib/skill-runtime/intent.js +0 -309
- package/lib/skill-runtime/lifecycle.js +0 -294
- package/lib/skill-runtime/operations/CLAUDE.md +0 -19
- package/lib/skill-runtime/operations/approve.js +0 -81
- package/lib/skill-runtime/operations/autopilot-core.js +0 -337
- package/lib/skill-runtime/operations/autopilot-execution.js +0 -307
- package/lib/skill-runtime/operations/autopilot-shared.js +0 -48
- package/lib/skill-runtime/operations/autopilot.js +0 -163
- package/lib/skill-runtime/operations/dispatch.js +0 -416
- package/lib/skill-runtime/operations/init.js +0 -60
- package/lib/skill-runtime/operations/janitor.js +0 -61
- package/lib/skill-runtime/operations/plan.js +0 -59
- package/lib/skill-runtime/operations/prepare-pr.js +0 -25
- package/lib/skill-runtime/operations/release.js +0 -99
- package/lib/skill-runtime/operations/resume.js +0 -126
- package/lib/skill-runtime/operations/review-records.js +0 -265
- package/lib/skill-runtime/operations/snapshot.js +0 -45
- package/lib/skill-runtime/operations/task-contract.js +0 -593
- package/lib/skill-runtime/operations/verify.js +0 -170
- package/lib/skill-runtime/operations/worker-run.js +0 -531
- package/lib/skill-runtime/operations/worker.js +0 -33
- package/lib/skill-runtime/planner.js +0 -539
- package/lib/skill-runtime/readiness.js +0 -84
- package/lib/skill-runtime/review-records.js +0 -123
- package/lib/skill-runtime/review.js +0 -855
- package/lib/skill-runtime/schemas.js +0 -746
- package/lib/skill-runtime/task-contract.js +0 -188
- package/lib/skill-runtime/team-state.js +0 -122
- package/lib/skill-runtime/workflow-context.js +0 -748
|
@@ -1,488 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"changeId": "REQ-002",
|
|
3
|
-
"goal": "Add a trustworthy CSV bulk invite flow for admins without inventing row-outcome semantics during execution.",
|
|
4
|
-
"createdAt": "2026-04-16T09:00:00.000Z",
|
|
5
|
-
"updatedAt": "2026-04-16T12:00:00.000Z",
|
|
6
|
-
"requirementId": "REQ-002",
|
|
7
|
-
"requirementVersion": "REQ-002.v2",
|
|
8
|
-
"planningMeta": {
|
|
9
|
-
"reqPlanSkillVersion": "3.9.2",
|
|
10
|
-
"designVersion": "design.v2",
|
|
11
|
-
"workBranch": "REQ/002-bulk-invite-import",
|
|
12
|
-
"approvedAt": null,
|
|
13
|
-
"basedOnOption": "Option B",
|
|
14
|
-
"aiLeverageDecisionLens": {
|
|
15
|
-
"realUserOrOperator": "workspace admin onboarding larger teams",
|
|
16
|
-
"statusQuoWorkaround": "paste invite emails one by one or track them in spreadsheets",
|
|
17
|
-
"humanTeamEffortForFullScope": "multiple weeks across product, engineering, billing, and support review",
|
|
18
|
-
"ccAgentEffortForFullScope": "several hours once row semantics are approved, but unbounded before that",
|
|
19
|
-
"aiCompressionRatio": "high after semantics freeze, low while the product contract is ambiguous",
|
|
20
|
-
"completeLakeBoundary": "row classification, admin upload flow, billing-seat checks, and audit mapping after rule approval",
|
|
21
|
-
"oceanBoundary": "SCIM, background retries, rollback wizard, and unspecified billing semantics",
|
|
22
|
-
"scopeRecommendation": "sharp-wedge",
|
|
23
|
-
"costModel": {
|
|
24
|
-
"agentTime": "medium after rule approval",
|
|
25
|
-
"humanReviewTime": "high until semantics are approved",
|
|
26
|
-
"verificationCost": "bulk rules, admin flow, billing, and audit tests",
|
|
27
|
-
"maintenanceCost": "medium after semantics freeze",
|
|
28
|
-
"failureCost": "high if billing or audit outcomes drift",
|
|
29
|
-
"reversibility": "limited once execution semantics ship"
|
|
30
|
-
},
|
|
31
|
-
"verdict": "sharp-wedge",
|
|
32
|
-
"missingEvidenceOrPivotReason": "none at plan approval; cc-check later reopened duplicate, invalid-row, partial-success, and seat-limit semantics before retry or cc-act",
|
|
33
|
-
"impactOnApprovedDirection": "allow bounded import-path execution, then block final proof if review finds row semantics drift"
|
|
34
|
-
},
|
|
35
|
-
"externalBestPractice": {
|
|
36
|
-
"needed": true,
|
|
37
|
-
"decisionStatus": "declined",
|
|
38
|
-
"decisionQuestionId": "D2",
|
|
39
|
-
"privacyGuard": "generalized terms only; no project names, private requirements, customer names, secrets, logs, or proprietary concepts",
|
|
40
|
-
"generalizedSearchTerms": [
|
|
41
|
-
"bulk invite CSV import validation best practices"
|
|
42
|
-
],
|
|
43
|
-
"sourcesChecked": [],
|
|
44
|
-
"conventionalWisdom": "",
|
|
45
|
-
"currentDiscourse": "",
|
|
46
|
-
"repoFitVerdict": "skipped",
|
|
47
|
-
"designImpacts": [
|
|
48
|
-
"keep the design blocked until row-outcome semantics are approved from internal evidence"
|
|
49
|
-
],
|
|
50
|
-
"skippedReason": "user kept the example repo-local for the blocked design"
|
|
51
|
-
},
|
|
52
|
-
"decisionQuestions": [
|
|
53
|
-
{
|
|
54
|
-
"questionId": "D1",
|
|
55
|
-
"gate": "approach-approval",
|
|
56
|
-
"knownEvidence": [
|
|
57
|
-
"Best-effort upload would hide duplicate, invalid, and seat-limit semantics",
|
|
58
|
-
"Audit mapping depends on deterministic row outcomes"
|
|
59
|
-
],
|
|
60
|
-
"recommendation": "Choose Option B and freeze a rule matrix first",
|
|
61
|
-
"options": [
|
|
62
|
-
{
|
|
63
|
-
"id": "A",
|
|
64
|
-
"label": "Front-end-only CSV upload",
|
|
65
|
-
"recommended": false,
|
|
66
|
-
"completeness": "5/10",
|
|
67
|
-
"good": "Fastest prototype and reuses the existing single-invite API",
|
|
68
|
-
"costRisk": "Lets hidden backend edge cases define user-visible semantics"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "B",
|
|
72
|
-
"label": "Rule matrix first",
|
|
73
|
-
"recommended": true,
|
|
74
|
-
"completeness": "9/10",
|
|
75
|
-
"good": "Makes billing, duplicate, invalid, and audit behavior reviewable",
|
|
76
|
-
"costRisk": "Requires one more planning pass before execution can start"
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
"userChoice": "B",
|
|
80
|
-
"impact": "cc-do stays blocked until row outcomes are modeled",
|
|
81
|
-
"status": "answered"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"questionId": "D2",
|
|
85
|
-
"gate": "external-best-practice",
|
|
86
|
-
"knownEvidence": [
|
|
87
|
-
"Bulk CSV import semantics could benefit from generalized external practice",
|
|
88
|
-
"The example keeps private details out of any external lookup"
|
|
89
|
-
],
|
|
90
|
-
"recommendation": "Stay repo-local for this blocked example",
|
|
91
|
-
"options": [
|
|
92
|
-
{
|
|
93
|
-
"id": "A",
|
|
94
|
-
"label": "Search generalized best practices",
|
|
95
|
-
"recommended": false,
|
|
96
|
-
"completeness": "9/10",
|
|
97
|
-
"good": "Could improve row-outcome terminology before task generation",
|
|
98
|
-
"costRisk": "Sends generalized category terms outside the local repo"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"id": "B",
|
|
102
|
-
"label": "Stay repo-local",
|
|
103
|
-
"recommended": true,
|
|
104
|
-
"completeness": "7/10",
|
|
105
|
-
"good": "Keeps the blocked example private and focused on internal semantics",
|
|
106
|
-
"costRisk": "Does not compare against external CSV-import conventions"
|
|
107
|
-
}
|
|
108
|
-
],
|
|
109
|
-
"userChoice": "B",
|
|
110
|
-
"impact": "cc-do still must not start implementation until row outcomes are answered from internal evidence",
|
|
111
|
-
"status": "answered"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"questionId": "D3",
|
|
115
|
-
"gate": "review-blocker",
|
|
116
|
-
"knownEvidence": [
|
|
117
|
-
"Duplicate and seat-limit outcomes are still not explicit enough for final requirement proof",
|
|
118
|
-
"Audit entries must match visible row outcomes"
|
|
119
|
-
],
|
|
120
|
-
"recommendation": "Answer the row-outcome matrix before retry or cc-act",
|
|
121
|
-
"options": [
|
|
122
|
-
{
|
|
123
|
-
"id": "A",
|
|
124
|
-
"label": "Block execution until matrix is explicit",
|
|
125
|
-
"recommended": true,
|
|
126
|
-
"completeness": "10/10",
|
|
127
|
-
"good": "Prevents cc-do from inventing semantics during implementation",
|
|
128
|
-
"costRisk": "Requires user/product input before coding can continue"
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"id": "B",
|
|
132
|
-
"label": "Let implementation choose defaults",
|
|
133
|
-
"recommended": false,
|
|
134
|
-
"completeness": "4/10",
|
|
135
|
-
"good": "Starts coding sooner with fewer planning minutes",
|
|
136
|
-
"costRisk": "Creates invisible product decisions inside implementation tasks"
|
|
137
|
-
}
|
|
138
|
-
],
|
|
139
|
-
"userChoice": null,
|
|
140
|
-
"impact": "cc-do retry and cc-act must stay blocked until this is answered",
|
|
141
|
-
"status": "asked"
|
|
142
|
-
}
|
|
143
|
-
]
|
|
144
|
-
},
|
|
145
|
-
"currentTaskId": null,
|
|
146
|
-
"tasks": [
|
|
147
|
-
{
|
|
148
|
-
"id": "T001",
|
|
149
|
-
"title": "[TEST] Add failing tests for duplicate and over-limit row outcomes",
|
|
150
|
-
"type": "TEST",
|
|
151
|
-
"phase": 1,
|
|
152
|
-
"parallel": false,
|
|
153
|
-
"dependsOn": [],
|
|
154
|
-
"touches": [
|
|
155
|
-
"bulk-invite-rules"
|
|
156
|
-
],
|
|
157
|
-
"files": [
|
|
158
|
-
"src/invite/bulk-import.test.ts"
|
|
159
|
-
],
|
|
160
|
-
"run": [
|
|
161
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
162
|
-
],
|
|
163
|
-
"checks": [
|
|
164
|
-
"tests fail before implementation"
|
|
165
|
-
],
|
|
166
|
-
"acceptance": [
|
|
167
|
-
"dangerous row outcomes are reproduced as explicit failing tests"
|
|
168
|
-
],
|
|
169
|
-
"verification": [
|
|
170
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
171
|
-
],
|
|
172
|
-
"evidence": [
|
|
173
|
-
"failing test output"
|
|
174
|
-
],
|
|
175
|
-
"context": {
|
|
176
|
-
"readFiles": [
|
|
177
|
-
"design.md",
|
|
178
|
-
"tasks.md",
|
|
179
|
-
"src/invite/bulk-import.ts"
|
|
180
|
-
],
|
|
181
|
-
"commands": [
|
|
182
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
183
|
-
],
|
|
184
|
-
"notes": [
|
|
185
|
-
"freeze row semantics before broader execution"
|
|
186
|
-
]
|
|
187
|
-
},
|
|
188
|
-
"reviews": {
|
|
189
|
-
"spec": "pass",
|
|
190
|
-
"code": "pass"
|
|
191
|
-
},
|
|
192
|
-
"status": "passed",
|
|
193
|
-
"attempts": 1,
|
|
194
|
-
"maxRetries": 1,
|
|
195
|
-
"tddPhase": "red",
|
|
196
|
-
"verticalSlice": "Slice 1",
|
|
197
|
-
"testSeam": {
|
|
198
|
-
"entry": "bulk invite rules and admin upload UI behavior",
|
|
199
|
-
"behaviorAsserted": "dangerous row outcomes are reproduced as explicit failing tests",
|
|
200
|
-
"specStyleTestName": "dangerous row outcomes are reproduced as explicit failing tests",
|
|
201
|
-
"oneLogicalBehavior": true,
|
|
202
|
-
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
203
|
-
"implementationDetailRisk": "low"
|
|
204
|
-
},
|
|
205
|
-
"feedbackLoop": {
|
|
206
|
-
"type": "automated-test",
|
|
207
|
-
"determinism": "deterministic",
|
|
208
|
-
"expectedFailure": "Fails before the behavior exists"
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
"id": "T002",
|
|
213
|
-
"title": "[IMPL] Implement the initial bulk invite row classification",
|
|
214
|
-
"type": "IMPL",
|
|
215
|
-
"phase": 1,
|
|
216
|
-
"parallel": false,
|
|
217
|
-
"dependsOn": [
|
|
218
|
-
"T001"
|
|
219
|
-
],
|
|
220
|
-
"touches": [
|
|
221
|
-
"bulk-invite-rules"
|
|
222
|
-
],
|
|
223
|
-
"files": [
|
|
224
|
-
"src/invite/bulk-import.ts"
|
|
225
|
-
],
|
|
226
|
-
"run": [
|
|
227
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
228
|
-
],
|
|
229
|
-
"checks": [
|
|
230
|
-
"rule tests pass"
|
|
231
|
-
],
|
|
232
|
-
"acceptance": [
|
|
233
|
-
"bulk invite rows receive deterministic initial states"
|
|
234
|
-
],
|
|
235
|
-
"verification": [
|
|
236
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
237
|
-
],
|
|
238
|
-
"evidence": [
|
|
239
|
-
"passing test output",
|
|
240
|
-
"CLI log summary"
|
|
241
|
-
],
|
|
242
|
-
"context": {
|
|
243
|
-
"readFiles": [
|
|
244
|
-
"design.md",
|
|
245
|
-
"tasks.md",
|
|
246
|
-
"src/invite/bulk-import.test.ts"
|
|
247
|
-
],
|
|
248
|
-
"commands": [
|
|
249
|
-
"npm test -- src/invite/bulk-import.test.ts"
|
|
250
|
-
],
|
|
251
|
-
"notes": [
|
|
252
|
-
"do not invent partial-failure semantics outside the approved design"
|
|
253
|
-
]
|
|
254
|
-
},
|
|
255
|
-
"reviews": {
|
|
256
|
-
"spec": "pass",
|
|
257
|
-
"code": "pass"
|
|
258
|
-
},
|
|
259
|
-
"status": "passed",
|
|
260
|
-
"attempts": 1,
|
|
261
|
-
"maxRetries": 1,
|
|
262
|
-
"tddPhase": "green",
|
|
263
|
-
"verticalSlice": "Slice 2",
|
|
264
|
-
"testSeam": {
|
|
265
|
-
"entry": "bulk invite rules and admin upload UI behavior",
|
|
266
|
-
"behaviorAsserted": "bulk invite rows receive deterministic initial states",
|
|
267
|
-
"specStyleTestName": "bulk invite rows receive deterministic initial states",
|
|
268
|
-
"oneLogicalBehavior": true,
|
|
269
|
-
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
270
|
-
"implementationDetailRisk": "low"
|
|
271
|
-
},
|
|
272
|
-
"feedbackLoop": {
|
|
273
|
-
"type": "automated-test",
|
|
274
|
-
"determinism": "deterministic",
|
|
275
|
-
"expectedFailure": ""
|
|
276
|
-
}
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
"id": "T003",
|
|
280
|
-
"title": "[TEST] Add failing admin panel tests for mixed CSV results",
|
|
281
|
-
"type": "TEST",
|
|
282
|
-
"phase": 2,
|
|
283
|
-
"parallel": false,
|
|
284
|
-
"dependsOn": [
|
|
285
|
-
"T002"
|
|
286
|
-
],
|
|
287
|
-
"touches": [
|
|
288
|
-
"admin-bulk-invite-ui"
|
|
289
|
-
],
|
|
290
|
-
"files": [
|
|
291
|
-
"src/admin/BulkInvitePanel.test.tsx"
|
|
292
|
-
],
|
|
293
|
-
"run": [
|
|
294
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
295
|
-
],
|
|
296
|
-
"checks": [
|
|
297
|
-
"admin panel tests fail before UI integration"
|
|
298
|
-
],
|
|
299
|
-
"acceptance": [
|
|
300
|
-
"mixed row outcomes are visible as UI failures before implementation"
|
|
301
|
-
],
|
|
302
|
-
"verification": [
|
|
303
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
304
|
-
],
|
|
305
|
-
"evidence": [
|
|
306
|
-
"failing test output"
|
|
307
|
-
],
|
|
308
|
-
"context": {
|
|
309
|
-
"readFiles": [
|
|
310
|
-
"design.md",
|
|
311
|
-
"tasks.md",
|
|
312
|
-
"src/admin/BulkInvitePanel.tsx"
|
|
313
|
-
],
|
|
314
|
-
"commands": [
|
|
315
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
316
|
-
],
|
|
317
|
-
"notes": [
|
|
318
|
-
"UI must not hide ambiguous row states"
|
|
319
|
-
]
|
|
320
|
-
},
|
|
321
|
-
"reviews": {
|
|
322
|
-
"spec": "pass",
|
|
323
|
-
"code": "pass"
|
|
324
|
-
},
|
|
325
|
-
"status": "passed",
|
|
326
|
-
"attempts": 1,
|
|
327
|
-
"maxRetries": 1,
|
|
328
|
-
"tddPhase": "red",
|
|
329
|
-
"verticalSlice": "Slice 3",
|
|
330
|
-
"testSeam": {
|
|
331
|
-
"entry": "bulk invite rules and admin upload UI behavior",
|
|
332
|
-
"behaviorAsserted": "mixed row outcomes are visible as UI failures before implementation",
|
|
333
|
-
"specStyleTestName": "mixed row outcomes are visible as UI failures before implementation",
|
|
334
|
-
"oneLogicalBehavior": true,
|
|
335
|
-
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
336
|
-
"implementationDetailRisk": "low"
|
|
337
|
-
},
|
|
338
|
-
"feedbackLoop": {
|
|
339
|
-
"type": "automated-test",
|
|
340
|
-
"determinism": "deterministic",
|
|
341
|
-
"expectedFailure": "Fails before the behavior exists"
|
|
342
|
-
}
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
"id": "T004",
|
|
346
|
-
"title": "[IMPL] Render bulk invite results in the admin panel",
|
|
347
|
-
"type": "IMPL",
|
|
348
|
-
"phase": 2,
|
|
349
|
-
"parallel": false,
|
|
350
|
-
"dependsOn": [
|
|
351
|
-
"T003"
|
|
352
|
-
],
|
|
353
|
-
"touches": [
|
|
354
|
-
"admin-bulk-invite-ui"
|
|
355
|
-
],
|
|
356
|
-
"files": [
|
|
357
|
-
"src/admin/BulkInvitePanel.tsx"
|
|
358
|
-
],
|
|
359
|
-
"run": [
|
|
360
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
361
|
-
],
|
|
362
|
-
"checks": [
|
|
363
|
-
"admin panel tests pass"
|
|
364
|
-
],
|
|
365
|
-
"acceptance": [
|
|
366
|
-
"admins can see accepted, skipped, and rejected rows in the panel"
|
|
367
|
-
],
|
|
368
|
-
"verification": [
|
|
369
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
370
|
-
],
|
|
371
|
-
"evidence": [
|
|
372
|
-
"passing test output",
|
|
373
|
-
"review notes"
|
|
374
|
-
],
|
|
375
|
-
"context": {
|
|
376
|
-
"readFiles": [
|
|
377
|
-
"design.md",
|
|
378
|
-
"tasks.md",
|
|
379
|
-
"src/admin/BulkInvitePanel.test.tsx"
|
|
380
|
-
],
|
|
381
|
-
"commands": [
|
|
382
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
383
|
-
],
|
|
384
|
-
"notes": [
|
|
385
|
-
"surface row states without redefining backend truth"
|
|
386
|
-
]
|
|
387
|
-
},
|
|
388
|
-
"reviews": {
|
|
389
|
-
"spec": "pass",
|
|
390
|
-
"code": "pass"
|
|
391
|
-
},
|
|
392
|
-
"status": "passed",
|
|
393
|
-
"attempts": 1,
|
|
394
|
-
"maxRetries": 1,
|
|
395
|
-
"tddPhase": "green",
|
|
396
|
-
"verticalSlice": "Slice 3",
|
|
397
|
-
"testSeam": {
|
|
398
|
-
"entry": "bulk invite rules and admin upload UI behavior",
|
|
399
|
-
"behaviorAsserted": "admins can see accepted, skipped, and rejected rows in the panel",
|
|
400
|
-
"specStyleTestName": "admins can see accepted, skipped, and rejected rows in the panel",
|
|
401
|
-
"oneLogicalBehavior": true,
|
|
402
|
-
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
403
|
-
"implementationDetailRisk": "low"
|
|
404
|
-
},
|
|
405
|
-
"feedbackLoop": {
|
|
406
|
-
"type": "automated-test",
|
|
407
|
-
"determinism": "deterministic",
|
|
408
|
-
"expectedFailure": ""
|
|
409
|
-
}
|
|
410
|
-
},
|
|
411
|
-
{
|
|
412
|
-
"id": "T005",
|
|
413
|
-
"title": "Run mixed-surface checks and gather review evidence",
|
|
414
|
-
"type": "OTHER",
|
|
415
|
-
"phase": 3,
|
|
416
|
-
"parallel": false,
|
|
417
|
-
"dependsOn": [
|
|
418
|
-
"T004"
|
|
419
|
-
],
|
|
420
|
-
"touches": [
|
|
421
|
-
"quality-gates"
|
|
422
|
-
],
|
|
423
|
-
"files": [
|
|
424
|
-
"src/admin/BulkInvitePanel.tsx",
|
|
425
|
-
"src/invite/bulk-import.ts"
|
|
426
|
-
],
|
|
427
|
-
"run": [
|
|
428
|
-
"npm test -- src/invite/bulk-import.test.ts",
|
|
429
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
430
|
-
],
|
|
431
|
-
"checks": [
|
|
432
|
-
"targeted tests pass",
|
|
433
|
-
"review evidence collected"
|
|
434
|
-
],
|
|
435
|
-
"acceptance": [
|
|
436
|
-
"fresh verification evidence exists for cc-check"
|
|
437
|
-
],
|
|
438
|
-
"verification": [
|
|
439
|
-
"npm test -- src/invite/bulk-import.test.ts",
|
|
440
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
441
|
-
],
|
|
442
|
-
"evidence": [
|
|
443
|
-
"passing targeted test output",
|
|
444
|
-
"review notes"
|
|
445
|
-
],
|
|
446
|
-
"context": {
|
|
447
|
-
"readFiles": [
|
|
448
|
-
"tasks.md",
|
|
449
|
-
"task-manifest.json"
|
|
450
|
-
],
|
|
451
|
-
"commands": [
|
|
452
|
-
"npm test -- src/invite/bulk-import.test.ts",
|
|
453
|
-
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
454
|
-
],
|
|
455
|
-
"notes": [
|
|
456
|
-
"fresh evidence can still block if the design contract is incomplete"
|
|
457
|
-
]
|
|
458
|
-
},
|
|
459
|
-
"reviews": {
|
|
460
|
-
"spec": "pass",
|
|
461
|
-
"code": "pass"
|
|
462
|
-
},
|
|
463
|
-
"status": "passed",
|
|
464
|
-
"attempts": 1,
|
|
465
|
-
"maxRetries": 1,
|
|
466
|
-
"tddPhase": "evidence",
|
|
467
|
-
"verticalSlice": "Slice 3",
|
|
468
|
-
"testSeam": {
|
|
469
|
-
"entry": "bulk invite rules and admin upload UI behavior",
|
|
470
|
-
"behaviorAsserted": "fresh verification evidence exists for cc-check",
|
|
471
|
-
"specStyleTestName": "fresh verification evidence exists for cc-check",
|
|
472
|
-
"oneLogicalBehavior": true,
|
|
473
|
-
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
474
|
-
"implementationDetailRisk": "low"
|
|
475
|
-
},
|
|
476
|
-
"feedbackLoop": {
|
|
477
|
-
"type": "automated-test",
|
|
478
|
-
"determinism": "deterministic",
|
|
479
|
-
"expectedFailure": ""
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
],
|
|
483
|
-
"metadata": {
|
|
484
|
-
"source": "tasks.md",
|
|
485
|
-
"generatedBy": "docs-example",
|
|
486
|
-
"planVersion": 1
|
|
487
|
-
}
|
|
488
|
-
}
|
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"changeId": "REQ-002",
|
|
3
|
-
"verdict": "blocked",
|
|
4
|
-
"overall": "fail",
|
|
5
|
-
"summary": "verdict=blocked quick=2/2 strict=0/0 review=blocked",
|
|
6
|
-
"specAlignment": "blocked",
|
|
7
|
-
"specDeltaVerified": false,
|
|
8
|
-
"specSyncReady": false,
|
|
9
|
-
"runtime": {
|
|
10
|
-
"status": "blocked",
|
|
11
|
-
"failureOwnership": [
|
|
12
|
-
{
|
|
13
|
-
"failure": "requirement semantics cannot be proven from current design",
|
|
14
|
-
"classification": "ambiguous",
|
|
15
|
-
"touchedByDiff": true,
|
|
16
|
-
"evidence": "duplicate-email and seat-limit outcomes lack a frozen row matrix",
|
|
17
|
-
"action": "reroute-cc-plan",
|
|
18
|
-
"status": "open"
|
|
19
|
-
}
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
"claimEvidence": [
|
|
23
|
-
{
|
|
24
|
-
"claim": "tests-pass",
|
|
25
|
-
"requiredProof": "fresh targeted test command with exit 0",
|
|
26
|
-
"commandOrArtifact": "npm test -- src/invite/bulk-import.test.ts",
|
|
27
|
-
"exitStatus": 0,
|
|
28
|
-
"keyObservation": "targeted bulk invite rule tests passed",
|
|
29
|
-
"status": "pass"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"claim": "requirements-met",
|
|
33
|
-
"requiredProof": "line-by-line planning/tasks.md and task-manifest.json checklist",
|
|
34
|
-
"commandOrArtifact": "planning/tasks.md#Contract Summary + planning/task-manifest.json",
|
|
35
|
-
"exitStatus": null,
|
|
36
|
-
"keyObservation": "duplicate-email and seat-limit semantics are still underspecified",
|
|
37
|
-
"status": "blocked"
|
|
38
|
-
}
|
|
39
|
-
],
|
|
40
|
-
"qa": {
|
|
41
|
-
"status": "blocked",
|
|
42
|
-
"regressionProof": [],
|
|
43
|
-
"testQuality": [
|
|
44
|
-
{
|
|
45
|
-
"area": "bulk-invite-rules",
|
|
46
|
-
"checksRealBehavior": true,
|
|
47
|
-
"mockBoundary": "none",
|
|
48
|
-
"testOnlyProductionApi": false,
|
|
49
|
-
"status": "pass"
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
"coverageAudit": {
|
|
53
|
-
"status": "blocked",
|
|
54
|
-
"coveragePct": null,
|
|
55
|
-
"pathMap": ["bulk invite parser", "admin panel happy path"],
|
|
56
|
-
"gaps": ["duplicate-email row semantics", "seat-limit partial-failure semantics"],
|
|
57
|
-
"testsAdded": ["src/invite/bulk-import.test.ts", "src/admin/BulkInvitePanel.test.tsx"],
|
|
58
|
-
"e2eRequired": true,
|
|
59
|
-
"evalRequired": false,
|
|
60
|
-
"qualityStars": "★"
|
|
61
|
-
},
|
|
62
|
-
"browserEvidence": {
|
|
63
|
-
"status": "skipped",
|
|
64
|
-
"mode": "not-applicable",
|
|
65
|
-
"affectedRoutes": [],
|
|
66
|
-
"screenshots": [],
|
|
67
|
-
"consoleErrors": [],
|
|
68
|
-
"healthScore": null,
|
|
69
|
-
"issues": [],
|
|
70
|
-
"skipReason": "design contract is blocked before browser QA can prove the intended behavior"
|
|
71
|
-
},
|
|
72
|
-
"tddException": "design contract is incomplete, so tests cannot prove final requirement semantics yet"
|
|
73
|
-
},
|
|
74
|
-
"quickGates": [
|
|
75
|
-
{
|
|
76
|
-
"name": "bulk-rule-tests",
|
|
77
|
-
"status": "pass",
|
|
78
|
-
"command": "npm test -- src/invite/bulk-import.test.ts",
|
|
79
|
-
"summary": "targeted bulk invite rule tests passed"
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"name": "admin-panel-tests",
|
|
83
|
-
"status": "pass",
|
|
84
|
-
"command": "npm test -- src/admin/BulkInvitePanel.test.tsx",
|
|
85
|
-
"summary": "admin panel tests passed for the current diff"
|
|
86
|
-
}
|
|
87
|
-
],
|
|
88
|
-
"strictGates": [],
|
|
89
|
-
"review": {
|
|
90
|
-
"status": "blocked",
|
|
91
|
-
"summary": "The implementation evidence is real, but the requirement-level design contract is still incomplete",
|
|
92
|
-
"details": "Diff review found that duplicate-email and seat-limit semantics are still not frozen tightly enough to trust the current implementation as the requirement truth.",
|
|
93
|
-
"freshness": {
|
|
94
|
-
"status": "fresh",
|
|
95
|
-
"reviewedCommit": "example-head",
|
|
96
|
-
"currentCommit": "example-head",
|
|
97
|
-
"commitsSinceReview": 0,
|
|
98
|
-
"staleReason": ""
|
|
99
|
-
},
|
|
100
|
-
"qualityScore": 6,
|
|
101
|
-
"specialistReviews": [
|
|
102
|
-
{
|
|
103
|
-
"name": "testing",
|
|
104
|
-
"status": "blocked",
|
|
105
|
-
"required": true,
|
|
106
|
-
"summary": "tests are real but cannot cover semantics that are not frozen in design",
|
|
107
|
-
"skipReason": "",
|
|
108
|
-
"findings": []
|
|
109
|
-
}
|
|
110
|
-
],
|
|
111
|
-
"taskReviews": {
|
|
112
|
-
"status": "pass",
|
|
113
|
-
"required": true,
|
|
114
|
-
"summary": "All completed tasks carry spec/code proof",
|
|
115
|
-
"reviewPacket": {
|
|
116
|
-
"baseSha": "example-base",
|
|
117
|
-
"headSha": "example-head",
|
|
118
|
-
"requirements": "planning/tasks.md",
|
|
119
|
-
"implemented": "bulk invite import implementation",
|
|
120
|
-
"reviewerContext": "task manifest plus current implementation evidence"
|
|
121
|
-
},
|
|
122
|
-
"reviewers": [],
|
|
123
|
-
"findings": []
|
|
124
|
-
},
|
|
125
|
-
"diffReview": {
|
|
126
|
-
"status": "blocked",
|
|
127
|
-
"required": false,
|
|
128
|
-
"summary": "Requirement-level review says the row-outcome matrix must be reopened in planning",
|
|
129
|
-
"reviewPacket": {
|
|
130
|
-
"baseSha": "example-base",
|
|
131
|
-
"headSha": "example-head",
|
|
132
|
-
"requirements": "planning/tasks.md#Contract Summary",
|
|
133
|
-
"implemented": "bulk invite import implementation",
|
|
134
|
-
"reviewerContext": "requirement diff, plan completion, scope drift, docs staleness"
|
|
135
|
-
},
|
|
136
|
-
"reviewers": [],
|
|
137
|
-
"findings": [
|
|
138
|
-
{
|
|
139
|
-
"severity": "important",
|
|
140
|
-
"confidence": "high",
|
|
141
|
-
"source": "diff-review",
|
|
142
|
-
"summary": "duplicate-email behavior is still underspecified",
|
|
143
|
-
"evidence": "planning/tasks.md#Contract Summary does not freeze row-level duplicate semantics",
|
|
144
|
-
"action": "reroute-cc-plan",
|
|
145
|
-
"triageStatus": "clarification-needed",
|
|
146
|
-
"confidenceScore": 9,
|
|
147
|
-
"fingerprint": "diff-review:bulk-invite:duplicate-email-semantics",
|
|
148
|
-
"displayTier": "blocking",
|
|
149
|
-
"suppressionReason": null
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
"severity": "important",
|
|
153
|
-
"confidence": "high",
|
|
154
|
-
"source": "diff-review",
|
|
155
|
-
"summary": "seat-limit partial-failure semantics are not frozen in design.md",
|
|
156
|
-
"evidence": "planning/tasks.md#Contract Summary lacks accepted row-outcome matrix",
|
|
157
|
-
"action": "reroute-cc-plan",
|
|
158
|
-
"triageStatus": "clarification-needed",
|
|
159
|
-
"confidenceScore": 9,
|
|
160
|
-
"fingerprint": "diff-review:bulk-invite:seat-limit-partial-failure",
|
|
161
|
-
"displayTier": "blocking",
|
|
162
|
-
"suppressionReason": null
|
|
163
|
-
}
|
|
164
|
-
]
|
|
165
|
-
},
|
|
166
|
-
"findings": [
|
|
167
|
-
{
|
|
168
|
-
"severity": "important",
|
|
169
|
-
"confidence": "medium",
|
|
170
|
-
"source": "diff-review",
|
|
171
|
-
"summary": "The current code may be locally green while still violating the intended admin trust model",
|
|
172
|
-
"evidence": "tests pass but requirement claim remains blocked by design ambiguity",
|
|
173
|
-
"action": "reroute-cc-plan",
|
|
174
|
-
"triageStatus": "clarification-needed",
|
|
175
|
-
"confidenceScore": 7,
|
|
176
|
-
"fingerprint": "diff-review:bulk-invite:trust-model-ambiguous",
|
|
177
|
-
"displayTier": "warning",
|
|
178
|
-
"suppressionReason": null
|
|
179
|
-
}
|
|
180
|
-
]
|
|
181
|
-
},
|
|
182
|
-
"blockingFindings": [
|
|
183
|
-
"design: duplicate-email row handling is not frozen tightly enough",
|
|
184
|
-
"design: seat-limit partial-failure semantics must be reopened in cc-plan"
|
|
185
|
-
],
|
|
186
|
-
"gaps": ["duplicate-email row handling", "seat-limit partial-failure semantics"],
|
|
187
|
-
"reroute": "cc-plan",
|
|
188
|
-
"timestamp": "2026-04-16T12:15:00.000Z"
|
|
189
|
-
}
|