cc-devflow 4.3.0 → 4.5.0
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 +70 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +212 -0
- package/.claude/skills/cc-act/SKILL.md +330 -0
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +68 -0
- package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +29 -0
- package/.claude/skills/cc-act/references/closure-contract.md +49 -0
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +83 -0
- package/.claude/skills/cc-act/scripts/archive-requirement.sh +49 -0
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +245 -0
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +82 -0
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +83 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +200 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +328 -0
- package/.claude/skills/cc-act/scripts/verify-act-gate.sh +63 -0
- package/.claude/skills/cc-check/CHANGELOG.md +78 -0
- package/.claude/skills/cc-check/PLAYBOOK.md +153 -0
- package/.claude/skills/cc-check/SKILL.md +353 -0
- package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +53 -0
- package/.claude/skills/cc-check/references/gate-contract.md +29 -0
- package/.claude/skills/cc-check/references/review-contract.md +45 -0
- package/.claude/skills/cc-check/scripts/render-report-card.js +229 -0
- package/.claude/skills/cc-check/scripts/run-quality-gates.sh +86 -0
- package/.claude/skills/cc-check/scripts/verify-gate.sh +57 -0
- package/.claude/skills/cc-do/CHANGELOG.md +54 -0
- package/.claude/skills/cc-do/PLAYBOOK.md +119 -0
- package/.claude/skills/cc-do/SKILL.md +224 -0
- package/.claude/skills/cc-do/references/execution-recovery.md +86 -0
- package/.claude/skills/cc-do/references/parallel-dispatch.md +80 -0
- package/.claude/skills/cc-do/scripts/build-task-context.sh +184 -0
- package/.claude/skills/cc-do/scripts/cc-do-common.sh +79 -0
- package/.claude/skills/cc-do/scripts/check-task-status.sh +92 -0
- package/.claude/skills/cc-do/scripts/detect-file-conflicts.sh +87 -0
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +119 -0
- package/.claude/skills/cc-do/scripts/record-review-decision.sh +89 -0
- package/.claude/skills/cc-do/scripts/recover-workflow.sh +84 -0
- package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +70 -0
- package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +135 -0
- package/.claude/skills/cc-do/scripts/verify-task-gates.sh +94 -0
- package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +102 -0
- package/.claude/skills/cc-investigate/CHANGELOG.md +31 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +49 -0
- package/.claude/skills/cc-investigate/SKILL.md +229 -0
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +56 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +53 -0
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +106 -0
- package/.claude/skills/cc-investigate/references/investigation-contract.md +28 -0
- package/.claude/skills/cc-investigate/scripts/bootstrap-analysis.sh +38 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +104 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +106 -0
- package/.claude/skills/cc-plan/SKILL.md +333 -0
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +156 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +99 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +111 -0
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +80 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +82 -0
- package/.claude/skills/cc-plan/scripts/bump-skill-version.sh +103 -0
- package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +75 -0
- package/.claude/skills/cc-plan/scripts/validate-scope.sh +78 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +119 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +136 -0
- package/.claude/skills/cc-roadmap/SKILL.md +267 -0
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +46 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +154 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +51 -0
- package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +37 -0
- package/.claude/skills/cc-roadmap/scripts/bump-skill-version.sh +103 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +604 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/query.js +63 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +245 -0
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +139 -0
- package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +109 -0
- package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +153 -0
- package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +100 -0
- package/.claude/skills/cc-simplify/CHANGELOG.md +10 -0
- package/.claude/skills/cc-simplify/SKILL.md +55 -0
- package/.claude/skills/cc-spec-init/CHANGELOG.md +12 -0
- package/.claude/skills/cc-spec-init/PLAYBOOK.md +55 -0
- package/.claude/skills/cc-spec-init/SKILL.md +135 -0
- package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +64 -0
- package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +28 -0
- package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +35 -0
- package/.claude/skills/cc-spec-init/references/spec-contract.md +22 -0
- package/.claude/skills/cc-spec-init/scripts/bootstrap-specs.sh +31 -0
- package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +45 -0
- package/CHANGELOG.md +80 -4
- package/README.md +148 -741
- package/README.zh-CN.md +146 -740
- package/bin/adapt.js +2 -6
- package/bin/cc-devflow-cli.js +287 -166
- package/config/distributable-skills.json +24 -0
- package/config/schema/cc-devflow-config.schema.json +45 -0
- package/config/user-config.template.yml +16 -0
- package/docs/CLAUDE.md +10 -6
- package/docs/commands/README.md +19 -46
- package/docs/commands/README.zh-CN.md +25 -48
- package/docs/examples/BY-ARTIFACT.md +7 -0
- package/docs/examples/README.md +38 -0
- package/docs/examples/START-HERE.md +149 -0
- package/docs/examples/example-bindings.json +38 -0
- package/docs/examples/full-design-blocked/BACKLOG.md +45 -0
- package/docs/examples/full-design-blocked/README.md +55 -0
- package/docs/examples/full-design-blocked/ROADMAP.md +53 -0
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +154 -0
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +146 -0
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +78 -0
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +52 -0
- package/docs/examples/full-design-blocked/roadmap-tracking.json +50 -0
- package/docs/examples/local-handoff/BACKLOG.md +45 -0
- package/docs/examples/local-handoff/README.md +56 -0
- package/docs/examples/local-handoff/ROADMAP.md +45 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +39 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +29 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +71 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +98 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +59 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +44 -0
- package/docs/examples/local-handoff/roadmap-tracking.json +48 -0
- package/docs/examples/pdca-loop/BACKLOG.md +46 -0
- package/docs/examples/pdca-loop/README.md +58 -0
- package/docs/examples/pdca-loop/ROADMAP.md +133 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +72 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +29 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +72 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +201 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +73 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +44 -0
- package/docs/examples/pdca-loop/roadmap-tracking.json +114 -0
- package/docs/examples/scripts/check-example-bindings.sh +116 -0
- package/docs/guides/getting-started.md +94 -129
- package/docs/guides/getting-started.zh-CN.md +103 -84
- package/docs/skill-runtime-migration.md +46 -0
- package/docs/v4.3.0-migration-guide.md +60 -225
- package/lib/compiler/CLAUDE.md +55 -84
- package/lib/compiler/__tests__/drift.test.js +1 -1
- package/lib/compiler/__tests__/errors.test.js +0 -1
- package/lib/compiler/__tests__/integration.test.js +49 -3
- package/lib/compiler/__tests__/manifest.test.js +0 -156
- package/lib/compiler/__tests__/parser.test.js +33 -104
- package/lib/compiler/__tests__/schemas.test.js +30 -34
- package/lib/compiler/__tests__/skills-registry.test.js +114 -0
- package/lib/compiler/__tests__/transformer.test.js +5 -9
- package/lib/compiler/emitters/antigravity-emitter.js +5 -213
- package/lib/compiler/emitters/base-emitter.js +3 -298
- package/lib/compiler/emitters/codex-emitter.js +4 -202
- package/lib/compiler/emitters/cursor-emitter.js +3 -287
- package/lib/compiler/emitters/qwen-emitter.js +4 -176
- package/lib/compiler/index.js +65 -345
- package/lib/compiler/manifest.js +6 -68
- package/lib/compiler/parser.js +31 -63
- package/lib/compiler/platforms.js +32 -277
- package/lib/compiler/resource-copier.js +176 -6
- package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +3 -3
- package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +14 -4
- package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +16 -7
- package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +10 -15
- package/lib/compiler/rules-emitters/base-rules-emitter.js +5 -5
- package/lib/compiler/rules-emitters/cursor-rules-emitter.js +7 -12
- package/lib/compiler/rules-emitters/index.js +6 -3
- package/lib/compiler/rules-emitters/qwen-rules-emitter.js +7 -7
- package/lib/compiler/schemas.js +8 -4
- package/lib/compiler/skills-registry.js +213 -15
- package/lib/compiler/transformer.js +1 -1
- package/lib/skill-runtime/CLAUDE.md +19 -0
- package/lib/skill-runtime/__tests__/autopilot.test.js +210 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +291 -0
- package/lib/skill-runtime/__tests__/config.test.js +161 -0
- package/lib/skill-runtime/__tests__/delegation.test.js +97 -0
- package/lib/skill-runtime/__tests__/dispatch.test.js +267 -0
- package/lib/skill-runtime/__tests__/intent.test.js +219 -0
- package/lib/skill-runtime/__tests__/lifecycle.test.js +169 -0
- package/lib/skill-runtime/__tests__/paths.test.js +42 -0
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +250 -0
- package/lib/skill-runtime/__tests__/prepare-pr.test.js +139 -0
- package/lib/skill-runtime/__tests__/query.test.js +284 -0
- package/lib/skill-runtime/__tests__/runtime.integration.test.js +281 -0
- package/lib/skill-runtime/__tests__/schemas.test.js +207 -0
- package/lib/skill-runtime/__tests__/team-state.test.js +51 -0
- package/lib/skill-runtime/__tests__/worker-run.test.js +253 -0
- package/lib/skill-runtime/__tests__/worker.test.js +56 -0
- package/lib/skill-runtime/artifacts.js +93 -0
- package/lib/skill-runtime/config.js +379 -0
- package/lib/skill-runtime/delegation.js +533 -0
- package/lib/skill-runtime/index.js +36 -0
- package/lib/skill-runtime/intent.js +333 -0
- package/lib/skill-runtime/lifecycle.js +294 -0
- package/lib/skill-runtime/operations/CLAUDE.md +19 -0
- package/lib/skill-runtime/operations/approve.js +66 -0
- package/lib/skill-runtime/operations/autopilot-core.js +337 -0
- package/lib/skill-runtime/operations/autopilot-execution.js +307 -0
- package/lib/skill-runtime/operations/autopilot-shared.js +48 -0
- package/lib/skill-runtime/operations/autopilot.js +163 -0
- package/lib/skill-runtime/operations/dispatch.js +454 -0
- package/lib/skill-runtime/operations/init.js +64 -0
- package/lib/{harness → skill-runtime}/operations/janitor.js +9 -6
- package/lib/skill-runtime/operations/plan.js +59 -0
- package/lib/skill-runtime/operations/prepare-pr.js +25 -0
- package/lib/skill-runtime/operations/release.js +96 -0
- package/lib/skill-runtime/operations/resume.js +143 -0
- package/lib/skill-runtime/operations/snapshot.js +45 -0
- package/lib/skill-runtime/operations/verify.js +170 -0
- package/lib/skill-runtime/operations/worker-run.js +529 -0
- package/lib/skill-runtime/operations/worker.js +33 -0
- package/lib/skill-runtime/paths.js +213 -0
- package/lib/skill-runtime/planner.js +519 -0
- package/lib/skill-runtime/query.js +157 -0
- package/lib/skill-runtime/review.js +557 -0
- package/lib/skill-runtime/schemas.js +400 -0
- package/lib/{harness → skill-runtime}/store.js +45 -30
- package/lib/skill-runtime/team-state.js +122 -0
- package/package.json +13 -11
- package/.claude/CLAUDE.md +0 -125
- package/.claude/agents/architecture-designer.md +0 -443
- package/.claude/agents/bug-analyzer.md +0 -381
- package/.claude/agents/checklist-agent.md +0 -175
- package/.claude/agents/clarify-analyst.md +0 -50
- package/.claude/agents/code-quality-reviewer.md +0 -205
- package/.claude/agents/code-reviewer.md +0 -71
- package/.claude/agents/codex-analyzer.md +0 -39
- package/.claude/agents/compatibility-checker.md +0 -579
- package/.claude/agents/consistency-checker.md +0 -532
- package/.claude/agents/dev-implementer.md +0 -195
- package/.claude/agents/flow-researcher.md +0 -132
- package/.claude/agents/impact-analyzer.md +0 -440
- package/.claude/agents/planner.md +0 -230
- package/.claude/agents/prd-writer.md +0 -320
- package/.claude/agents/project-guidelines-generator.md +0 -1329
- package/.claude/agents/qa-tester.md +0 -313
- package/.claude/agents/release-manager.md +0 -295
- package/.claude/agents/security-reviewer.md +0 -314
- package/.claude/agents/spec-reviewer.md +0 -221
- package/.claude/agents/style-guide-generator.md +0 -458
- package/.claude/agents/tech-architect.md +0 -516
- package/.claude/agents/ui-designer.md +0 -485
- package/.claude/commands/core/architecture.md +0 -459
- package/.claude/commands/core/guidelines.md +0 -511
- package/.claude/commands/core/roadmap.md +0 -468
- package/.claude/commands/core/style.md +0 -83
- package/.claude/commands/flow/CLAUDE.md +0 -24
- package/.claude/commands/flow/archive.md +0 -280
- package/.claude/commands/flow/constitution.md +0 -82
- package/.claude/commands/flow/context.md +0 -150
- package/.claude/commands/flow/delta.md +0 -245
- package/.claude/commands/flow/dev.md +0 -40
- package/.claude/commands/flow/fix.md +0 -217
- package/.claude/commands/flow/ideate.md +0 -214
- package/.claude/commands/flow/init.md +0 -38
- package/.claude/commands/flow/release.md +0 -36
- package/.claude/commands/flow/restart.md +0 -97
- package/.claude/commands/flow/spec.md +0 -36
- package/.claude/commands/flow/status.md +0 -64
- package/.claude/commands/flow/update.md +0 -111
- package/.claude/commands/flow/upgrade.md +0 -115
- package/.claude/commands/flow/verify.md +0 -37
- package/.claude/commands/flow/workspace.md +0 -155
- package/.claude/commands/util/cancel-ralph.md +0 -60
- package/.claude/commands/util/code-review.md +0 -58
- package/.claude/commands/util/git-commit.md +0 -422
- package/.claude/commands/util/problem-analyzer.md +0 -60
- package/.claude/config/quality-gates.yml +0 -305
- package/.claude/config/quality-rules.yml +0 -161
- package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +0 -426
- package/.claude/docs/design/consistency-conflict-detection-algorithms.md +0 -658
- package/.claude/docs/design/intent-driven-input-design.md +0 -380
- package/.claude/docs/design/prd-version-management-design.md +0 -437
- package/.claude/docs/examples/design-inspiration-pool.md +0 -59
- package/.claude/docs/examples/ui-prototype-constitution-checklist.md +0 -75
- package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +0 -117
- package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +0 -99
- package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +0 -188
- package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +0 -338
- package/.claude/docs/guides/TEAM_MODE_GUIDE.md +0 -312
- package/.claude/docs/implementation-summary-v7.md +0 -449
- package/.claude/docs/spec-format-guide.md +0 -349
- package/.claude/docs/state-consolidation-design.md +0 -323
- package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +0 -332
- package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +0 -156
- package/.claude/docs/templates/BACKLOG_TEMPLATE.md +0 -261
- package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +0 -148
- package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +0 -52
- package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +0 -206
- package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +0 -71
- package/.claude/docs/templates/DELTA_SPEC_TEMPLATE.md +0 -91
- package/.claude/docs/templates/DESIGN_DECISIONS_TEMPLATE.md +0 -151
- package/.claude/docs/templates/DESIGN_TEMPLATE.md +0 -157
- package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +0 -80
- package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +0 -198
- package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +0 -57
- package/.claude/docs/templates/JOURNAL_TEMPLATE.md +0 -75
- package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +0 -76
- package/.claude/docs/templates/PROPOSAL_TEMPLATE.md +0 -91
- package/.claude/docs/templates/RESEARCH_TEMPLATE.md +0 -276
- package/.claude/docs/templates/REVIEW-HIGH.md +0 -57
- package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +0 -198
- package/.claude/docs/templates/ROADMAP_TEMPLATE.md +0 -310
- package/.claude/docs/templates/SPEC_TEMPLATE_DELTA.md +0 -139
- package/.claude/docs/templates/SPEC_TEMPLATE_PROJECT.md +0 -93
- package/.claude/docs/templates/STYLE_TEMPLATE.md +0 -479
- package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +0 -373
- package/.claude/docs/templates/_shared/CLAUDE.md +0 -36
- package/.claude/docs/templates/_shared/CONSTITUTION_CHECK.md +0 -125
- package/.claude/docs/templates/_shared/VALIDATION_CHECKLIST.md +0 -187
- package/.claude/docs/templates/_shared/YAML_FRONTMATTER.md +0 -164
- package/.claude/docs/templates/context/dev.jsonl.template +0 -6
- package/.claude/docs/templates/context/epic.jsonl.template +0 -5
- package/.claude/docs/templates/context/prd.jsonl.template +0 -4
- package/.claude/docs/templates/context/research.jsonl.template +0 -4
- package/.claude/docs/templates/context/review.jsonl.template +0 -5
- package/.claude/docs/templates/context/tech.jsonl.template +0 -5
- package/.claude/guides/agent-guides/agent-coordination-guide.md +0 -459
- package/.claude/guides/project-guidelines-system.md +0 -463
- package/.claude/guides/technical-guides/datetime-handling-guide.md +0 -563
- package/.claude/guides/technical-guides/git-github-guide.md +0 -642
- package/.claude/guides/technical-guides/test-execution-guide.md +0 -618
- package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +0 -217
- package/.claude/guides/workflow-guides/flow-orchestrator.md +0 -48
- package/.claude/hooks/CLAUDE.md +0 -342
- package/.claude/hooks/checklist-gate.js +0 -397
- package/.claude/hooks/error-handling-reminder.sh +0 -12
- package/.claude/hooks/error-handling-reminder.ts +0 -459
- package/.claude/hooks/hooks.json +0 -15
- package/.claude/hooks/inject-agent-context.ts +0 -480
- package/.claude/hooks/inject-skill-context.ts +0 -359
- package/.claude/hooks/post-tool-use-tracker.sh +0 -280
- package/.claude/hooks/pre-tool-use-guardrail.sh +0 -36
- package/.claude/hooks/pre-tool-use-guardrail.ts +0 -342
- package/.claude/hooks/ralph-loop.ts +0 -931
- package/.claude/hooks/ralph-stop-hook.sh +0 -190
- package/.claude/hooks/skill-activation-prompt.sh +0 -36
- package/.claude/hooks/skill-activation-prompt.ts +0 -214
- package/.claude/hooks/state/skills-used-test-guard.json +0 -3
- package/.claude/hooks/task-completed-hook.ts +0 -593
- package/.claude/hooks/teammate-idle-hook.ts +0 -690
- package/.claude/hooks/types/team-types.d.ts +0 -238
- package/.claude/rules/devflow-conventions.md +0 -286
- package/.claude/rules/project-constitution.md +0 -1002
- package/.claude/rules/rationalization-library.md +0 -282
- package/.claude/schemas/constitution.schema.json +0 -43
- package/.claude/scripts/.claude/commands/flow/export-openspec.md +0 -221
- package/.claude/scripts/.claude/commands/flow/import-openspec.md +0 -171
- package/.claude/scripts/CLAUDE.md +0 -76
- package/.claude/scripts/__tests__/openspec.test.js +0 -212
- package/.claude/scripts/analyze-upgrade-impact.sh +0 -200
- package/.claude/scripts/archive-requirement.sh +0 -394
- package/.claude/scripts/calculate-checklist-completion.sh +0 -243
- package/.claude/scripts/calculate-quarter.sh +0 -206
- package/.claude/scripts/check-dependencies.sh +0 -409
- package/.claude/scripts/check-prerequisites.sh +0 -232
- package/.claude/scripts/check-task-status.sh +0 -288
- package/.claude/scripts/checklist-errors.sh +0 -131
- package/.claude/scripts/common.sh +0 -1102
- package/.claude/scripts/consolidate-research.sh +0 -182
- package/.claude/scripts/create-requirement.sh +0 -451
- package/.claude/scripts/delta-parser.ts +0 -637
- package/.claude/scripts/detect-file-conflicts.sh +0 -151
- package/.claude/scripts/export-contracts.sh +0 -117
- package/.claude/scripts/export-openspec.js +0 -222
- package/.claude/scripts/extract-data-model.sh +0 -78
- package/.claude/scripts/flow-context-add.sh +0 -134
- package/.claude/scripts/flow-context-init.sh +0 -133
- package/.claude/scripts/flow-context-validate.sh +0 -144
- package/.claude/scripts/flow-delta-apply.sh +0 -297
- package/.claude/scripts/flow-delta-archive.sh +0 -71
- package/.claude/scripts/flow-delta-create.sh +0 -202
- package/.claude/scripts/flow-delta-list.sh +0 -142
- package/.claude/scripts/flow-delta-status.sh +0 -235
- package/.claude/scripts/flow-quality-full.sh +0 -215
- package/.claude/scripts/flow-quality-quick.sh +0 -119
- package/.claude/scripts/flow-workspace-init.sh +0 -117
- package/.claude/scripts/flow-workspace-record.sh +0 -164
- package/.claude/scripts/generate-clarification-questions.sh +0 -377
- package/.claude/scripts/generate-clarification-report.sh +0 -463
- package/.claude/scripts/generate-quickstart.sh +0 -146
- package/.claude/scripts/generate-research-tasks.sh +0 -157
- package/.claude/scripts/generate-status-report.sh +0 -523
- package/.claude/scripts/generate-tech-analysis.sh +0 -46
- package/.claude/scripts/get-workflow-status.sh +0 -415
- package/.claude/scripts/import-openspec.js +0 -272
- package/.claude/scripts/locate-requirement-in-roadmap.sh +0 -233
- package/.claude/scripts/manage-constitution.sh +0 -602
- package/.claude/scripts/mark-task-complete.sh +0 -198
- package/.claude/scripts/parse-task-dependencies.js +0 -334
- package/.claude/scripts/populate-research-tasks.sh +0 -284
- package/.claude/scripts/record-quality-error.sh +0 -165
- package/.claude/scripts/recover-workflow.sh +0 -463
- package/.claude/scripts/run-clarify-scan.sh +0 -601
- package/.claude/scripts/run-high-review.sh +0 -62
- package/.claude/scripts/run-problem-analysis.sh +0 -68
- package/.claude/scripts/run-quality-gates.sh +0 -242
- package/.claude/scripts/setup-epic.sh +0 -173
- package/.claude/scripts/setup-ralph-loop.sh +0 -155
- package/.claude/scripts/sync-roadmap-progress.sh +0 -300
- package/.claude/scripts/sync-task-marks.sh +0 -199
- package/.claude/scripts/team-dev-init.sh +0 -319
- package/.claude/scripts/team-state-recovery.sh +0 -229
- package/.claude/scripts/test-clarify-scan.sh +0 -515
- package/.claude/scripts/update-agent-context.sh +0 -806
- package/.claude/scripts/validate-constitution.sh +0 -567
- package/.claude/scripts/validate-hooks.sh +0 -487
- package/.claude/scripts/validate-research.sh +0 -332
- package/.claude/scripts/validate-scope-boundary.sh +0 -493
- package/.claude/scripts/validate-scope.sh +0 -200
- package/.claude/scripts/verify-gate.sh +0 -269
- package/.claude/scripts/verify-setup.sh +0 -37
- package/.claude/scripts/workflow-status.ts +0 -433
- package/.claude/settings.json +0 -95
- package/.claude/skills/_reference-implementations/README.md +0 -96
- package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +0 -302
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +0 -451
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +0 -307
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +0 -638
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +0 -275
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +0 -224
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +0 -213
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +0 -756
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +0 -336
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +0 -789
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +0 -235
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +0 -754
- package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +0 -399
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +0 -331
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +0 -872
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +0 -502
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +0 -767
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +0 -502
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +0 -501
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +0 -406
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +0 -364
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +0 -428
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +0 -418
- package/.claude/skills/attention-refresh/SKILL.md +0 -170
- package/.claude/skills/brainstorming/SKILL.md +0 -161
- package/.claude/skills/cc-devflow-orchestrator/SKILL.md +0 -169
- package/.claude/skills/constitution-guardian/SKILL.md +0 -306
- package/.claude/skills/constitution-quick-ref/SKILL.md +0 -374
- package/.claude/skills/debugging/SKILL.md +0 -221
- package/.claude/skills/file-standards/SKILL.md +0 -353
- package/.claude/skills/finishing-branch/SKILL.md +0 -189
- package/.claude/skills/flow-dev/CLAUDE.md +0 -16
- package/.claude/skills/flow-dev/SKILL.md +0 -94
- package/.claude/skills/flow-dev/assets/IMPLEMENTATION_PLAN_TEMPLATE.md +0 -71
- package/.claude/skills/flow-dev/context.jsonl +0 -4
- package/.claude/skills/flow-dev/dev-implementer.jsonl +0 -8
- package/.claude/skills/flow-dev/scripts/entry-gate.sh +0 -116
- package/.claude/skills/flow-dev/scripts/exit-gate.sh +0 -101
- package/.claude/skills/flow-dev/scripts/task-orchestrator.sh +0 -106
- package/.claude/skills/flow-fix/SKILL.md +0 -105
- package/.claude/skills/flow-fix/context.jsonl +0 -6
- package/.claude/skills/flow-fix/references/bug-analyzer.md +0 -381
- package/.claude/skills/flow-init/SKILL.md +0 -105
- package/.claude/skills/flow-init/assets/BRAINSTORM_TEMPLATE.md +0 -148
- package/.claude/skills/flow-init/assets/INIT_FLOW_TEMPLATE.md +0 -198
- package/.claude/skills/flow-init/assets/RESEARCH_TEMPLATE.md +0 -276
- package/.claude/skills/flow-init/context.jsonl +0 -5
- package/.claude/skills/flow-init/references/flow-researcher.md +0 -132
- package/.claude/skills/flow-init/scripts/check-prerequisites.sh +0 -240
- package/.claude/skills/flow-init/scripts/consolidate-research.sh +0 -182
- package/.claude/skills/flow-init/scripts/create-requirement.sh +0 -404
- package/.claude/skills/flow-init/scripts/generate-research-tasks.sh +0 -157
- package/.claude/skills/flow-init/scripts/populate-research-tasks.sh +0 -284
- package/.claude/skills/flow-init/scripts/validate-research.sh +0 -340
- package/.claude/skills/flow-quality/SKILL.md +0 -98
- package/.claude/skills/flow-quality/context.jsonl +0 -6
- package/.claude/skills/flow-quality/references/code-quality-reviewer.md +0 -205
- package/.claude/skills/flow-quality/references/qa-tester.md +0 -313
- package/.claude/skills/flow-quality/references/security-reviewer.md +0 -314
- package/.claude/skills/flow-quality/references/spec-reviewer.md +0 -221
- package/.claude/skills/flow-release/SKILL.md +0 -60
- package/.claude/skills/flow-release/context.jsonl +0 -5
- package/.claude/skills/flow-release/references/release-manager.md +0 -295
- package/.claude/skills/flow-spec/CLAUDE.md +0 -17
- package/.claude/skills/flow-spec/SKILL.md +0 -102
- package/.claude/skills/flow-spec/context.jsonl +0 -5
- package/.claude/skills/flow-spec/scripts/entry-gate.sh +0 -194
- package/.claude/skills/flow-spec/scripts/exit-gate.sh +0 -244
- package/.claude/skills/flow-spec/scripts/parallel-orchestrator.sh +0 -205
- package/.claude/skills/flow-spec/scripts/team-communication.sh +0 -353
- package/.claude/skills/flow-spec/scripts/team-init.sh +0 -195
- package/.claude/skills/flow-spec/scripts/test-team-mode.sh +0 -496
- package/.claude/skills/flow-spec/team-config.json +0 -165
- package/.claude/skills/flow-verify/CLAUDE.md +0 -10
- package/.claude/skills/flow-verify/SKILL.md +0 -53
- package/.claude/skills/flow-verify/context.jsonl +0 -5
- package/.claude/skills/fractal-docs/SKILL.md +0 -45
- package/.claude/skills/journey-checker/SKILL.md +0 -199
- package/.claude/skills/journey-checker/pressure-scenarios.md +0 -164
- package/.claude/skills/receiving-review/SKILL.md +0 -153
- package/.claude/skills/skill-creator/LICENSE.txt +0 -202
- package/.claude/skills/skill-creator/SKILL.md +0 -356
- package/.claude/skills/skill-creator/references/output-patterns.md +0 -82
- package/.claude/skills/skill-creator/references/workflows.md +0 -28
- package/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
- package/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
- package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -95
- package/.claude/skills/skill-rules.json +0 -359
- package/.claude/skills/tdd/SKILL.md +0 -218
- package/.claude/skills/tdd-enforcer/SKILL.md +0 -192
- package/.claude/skills/utility/npm-release/CLAUDE.md +0 -55
- package/.claude/skills/utility/npm-release/SKILL.md +0 -379
- package/.claude/skills/utility/npm-release/references/version-decision-guide.md +0 -134
- package/.claude/skills/utility/npm-release/scripts/atomic-version-bump.sh +0 -95
- package/.claude/skills/utility/npm-release/scripts/validate-version-sync.sh +0 -82
- package/.claude/skills/utility/npm-release/scripts/version-decision-tree.sh +0 -44
- package/.claude/skills/verification/SKILL.md +0 -158
- package/.claude/skills/workflow.yaml +0 -219
- package/.claude/tests/README.md +0 -300
- package/.claude/tests/TODO.md +0 -69
- package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/constitution/run_all_constitution_tests.sh +0 -111
- package/.claude/tests/constitution/test_agent_assignment.sh +0 -207
- package/.claude/tests/constitution/test_article_coverage.sh +0 -201
- package/.claude/tests/constitution/test_template_completeness.sh +0 -150
- package/.claude/tests/constitution/test_version_consistency.sh +0 -120
- package/.claude/tests/fixtures/spec_delta_full.md +0 -16
- package/.claude/tests/fixtures/tasks_progress_sample.md +0 -5
- package/.claude/tests/run-all-tests.sh +0 -229
- package/.claude/tests/scripts/run.sh +0 -30
- package/.claude/tests/scripts/test-framework.sh +0 -128
- package/.claude/tests/scripts/test_check_prerequisites.sh +0 -511
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak +0 -504
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +0 -505
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +0 -506
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +0 -507
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +0 -508
- package/.claude/tests/scripts/test_check_task_status.sh +0 -499
- package/.claude/tests/scripts/test_common.sh +0 -244
- package/.claude/tests/scripts/test_generate_status_report.sh +0 -71
- package/.claude/tests/scripts/test_mark_task_complete.sh +0 -441
- package/.claude/tests/scripts/test_mark_task_complete.sh.backup +0 -410
- package/.claude/tests/scripts/test_recover_workflow.sh +0 -304
- package/.claude/tests/scripts/test_setup_epic.sh +0 -437
- package/.claude/tests/scripts/test_sync_task_marks.sh +0 -196
- package/.claude/tests/scripts/test_validate_constitution.sh +0 -74
- package/.claude/tests/scripts/test_validate_research.sh +0 -462
- package/.claude/tests/slugify.bats +0 -82
- package/.claude/tests/test-framework.sh +0 -732
- package/.claude/tests/test_analyze_upgrade_impact.py +0 -34
- package/.claude/tests/test_consolidate_research.py +0 -48
- package/.claude/tests/test_export_contracts.py +0 -43
- package/.claude/tests/test_extract_data_model.py +0 -33
- package/.claude/tests/test_generate_quickstart.py +0 -50
- package/.claude/tests/test_generate_research_tasks.py +0 -52
- package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/affected-repos.txt +0 -1
- package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/edited-files.log +0 -2
- package/bin/harness.js +0 -22
- package/docs/commands/core-roadmap.md +0 -106
- package/docs/commands/core-roadmap.zh-CN.md +0 -102
- package/docs/commands/core-style.md +0 -53
- package/docs/commands/core-style.zh-CN.md +0 -53
- package/docs/commands/flow-init.md +0 -140
- package/docs/commands/flow-init.zh-CN.md +0 -169
- package/docs/commands/flow-new.md +0 -39
- package/docs/commands/flow-new.zh-CN.md +0 -39
- package/lib/compiler/__tests__/compile-regression.test.js +0 -103
- package/lib/compiler/__tests__/multi-module-emitters.test.js +0 -534
- package/lib/compiler/__tests__/resource-copier.test.js +0 -26
- package/lib/compiler/__tests__/skill-discovery.test.js +0 -72
- package/lib/compiler/context-expander.js +0 -179
- package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +0 -109
- package/lib/compiler/rules-emitters/codex-rules-emitter.js +0 -116
- package/lib/compiler/skill-discovery.js +0 -68
- package/lib/harness/CLAUDE.md +0 -22
- package/lib/harness/__tests__/planner.tdd.test.js +0 -125
- package/lib/harness/cli.js +0 -208
- package/lib/harness/index.js +0 -18
- package/lib/harness/operations/dispatch.js +0 -298
- package/lib/harness/operations/init.js +0 -48
- package/lib/harness/operations/pack.js +0 -100
- package/lib/harness/operations/plan.js +0 -83
- package/lib/harness/operations/release.js +0 -170
- package/lib/harness/operations/resume.js +0 -44
- package/lib/harness/operations/verify.js +0 -177
- package/lib/harness/planner.js +0 -272
- package/lib/harness/query.js +0 -126
- package/lib/harness/schemas.js +0 -129
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# DESIGN
|
|
2
|
+
|
|
3
|
+
## Document Meta
|
|
4
|
+
|
|
5
|
+
- Requirement version: `REQ-002.v2`
|
|
6
|
+
- Design version: `design.v2`
|
|
7
|
+
- CC-Plan skill version: `3.5.4`
|
|
8
|
+
- Requirement ID: `REQ-002`
|
|
9
|
+
- Design mode: `full-design`
|
|
10
|
+
- Why not `tiny-design`: the feature crosses import parsing, invite rules, billing limits, duplicate handling, and audit logging
|
|
11
|
+
- Design status: `in-review`
|
|
12
|
+
- Source roadmap item: `RM-010`
|
|
13
|
+
- Source roadmap version: `roadmap.v2`
|
|
14
|
+
- Source roadmap skill version: `4.1.0`
|
|
15
|
+
- Date: `2026-04-16`
|
|
16
|
+
- Owner: `product-owner`
|
|
17
|
+
|
|
18
|
+
## Source Handoff
|
|
19
|
+
|
|
20
|
+
- Source stage: `Stage 2`
|
|
21
|
+
- Why now from roadmap: admin demand is real, but trust risks dominate the design
|
|
22
|
+
- Inherited success signal: admins can predict every bulk invite outcome
|
|
23
|
+
- Inherited kill signal: if semantics remain underspecified, stop execution and reopen planning
|
|
24
|
+
- Inherited dependencies:
|
|
25
|
+
- existing seat limit enforcement
|
|
26
|
+
- current audit log contract
|
|
27
|
+
- Inherited non-goals:
|
|
28
|
+
- no background job redesign
|
|
29
|
+
- no enterprise provisioning layer
|
|
30
|
+
- Upstream evidence: support notes from larger teams
|
|
31
|
+
- Assumptions to re-validate:
|
|
32
|
+
- duplicate emails can be skipped safely
|
|
33
|
+
- seat-limit failures can be partially accepted
|
|
34
|
+
|
|
35
|
+
## Requirement Snapshot
|
|
36
|
+
|
|
37
|
+
- Raw ask: admins want to upload a CSV of emails instead of inviting people one by one
|
|
38
|
+
- User: workspace admins onboarding 20-200 collaborators
|
|
39
|
+
- Pain: manual invites are too slow and error-prone
|
|
40
|
+
- Smallest viable wedge: a CSV upload that clearly predicts accepted, skipped, and rejected rows
|
|
41
|
+
- Out of scope:
|
|
42
|
+
- enterprise SCIM provisioning
|
|
43
|
+
- background retry orchestration
|
|
44
|
+
|
|
45
|
+
## Success Criteria
|
|
46
|
+
|
|
47
|
+
- Observable success signals:
|
|
48
|
+
- admin sees deterministic results for each CSV row
|
|
49
|
+
- duplicate, over-limit, and invalid rows are explained consistently
|
|
50
|
+
- Business / operator success signals:
|
|
51
|
+
- support no longer manually explains bulk invite outcomes
|
|
52
|
+
- Abort signals:
|
|
53
|
+
- billing-seat or audit outcomes differ from the documented plan
|
|
54
|
+
|
|
55
|
+
## Options Considered
|
|
56
|
+
|
|
57
|
+
### Option A
|
|
58
|
+
|
|
59
|
+
- Shape: front-end-only CSV parsing with best-effort invite submission
|
|
60
|
+
- Reuses: existing single-invite API
|
|
61
|
+
- Pros: fast to prototype
|
|
62
|
+
- Cons: semantics depend on hidden backend edge cases
|
|
63
|
+
- Risks: partial success becomes impossible to explain
|
|
64
|
+
|
|
65
|
+
### Option B
|
|
66
|
+
|
|
67
|
+
- Shape: freeze a rule matrix first, then implement import around it
|
|
68
|
+
- Reuses: existing invite engine, but with explicit row-state mapping
|
|
69
|
+
- Pros: makes billing, duplicate, and audit behavior reviewable
|
|
70
|
+
- Cons: more upfront planning
|
|
71
|
+
- Risks: may expose a need for additional shared contracts
|
|
72
|
+
|
|
73
|
+
## Approved Direction
|
|
74
|
+
|
|
75
|
+
- Approved option: `Option B`
|
|
76
|
+
- Why this is the best trade-off now: the import UX is not trustworthy until row outcomes and seat limits are explicitly modeled
|
|
77
|
+
- Why not the other options now: best-effort submission would let implementation invent semantics during execution
|
|
78
|
+
- What we explicitly rejected: a UI-only CSV uploader that guesses row behavior
|
|
79
|
+
- Frozen decisions:
|
|
80
|
+
- bulk import must classify each row into accepted, skipped, or rejected
|
|
81
|
+
- seat-limit failures cannot silently pass
|
|
82
|
+
- audit log entries must match the visible row outcome
|
|
83
|
+
- Deferred questions:
|
|
84
|
+
- whether partial success needs an explicit rollback option
|
|
85
|
+
|
|
86
|
+
## Design
|
|
87
|
+
|
|
88
|
+
- Modules touched:
|
|
89
|
+
- admin invite UI
|
|
90
|
+
- invite validation rules
|
|
91
|
+
- billing / seat limit decision points
|
|
92
|
+
- audit log mapping
|
|
93
|
+
- Data flow:
|
|
94
|
+
- CSV parse -> row validation -> invite decision -> row result summary -> audit log write
|
|
95
|
+
- Contracts:
|
|
96
|
+
- one rule matrix for duplicate, invalid, over-limit, and existing-member rows
|
|
97
|
+
- Error handling:
|
|
98
|
+
- every rejected row must expose a user-readable reason
|
|
99
|
+
- Rollout / migration:
|
|
100
|
+
- release only after rule matrix and verification plan are both approved
|
|
101
|
+
|
|
102
|
+
## File Plan
|
|
103
|
+
|
|
104
|
+
| File | Change | Reason |
|
|
105
|
+
|------|--------|--------|
|
|
106
|
+
| `src/admin/BulkInvitePanel.tsx` | update | upload and result display |
|
|
107
|
+
| `src/admin/BulkInvitePanel.test.tsx` | update | row-state behavior tests |
|
|
108
|
+
| `src/invite/bulk-import.ts` | add | import rule orchestration |
|
|
109
|
+
| `src/invite/bulk-import.test.ts` | add | duplicate / seat / invalid cases |
|
|
110
|
+
| `src/audit/invite-log.ts` | update | audit consistency |
|
|
111
|
+
|
|
112
|
+
## Validation Strategy
|
|
113
|
+
|
|
114
|
+
- Unit: rule matrix tests for each row outcome
|
|
115
|
+
- Integration: admin upload flow covering duplicates and seat-limit failures
|
|
116
|
+
- Manual: CSV import with mixed valid and invalid rows
|
|
117
|
+
- Observability / evidence: row summary and audit log must agree
|
|
118
|
+
|
|
119
|
+
## Risks
|
|
120
|
+
|
|
121
|
+
| Risk | Impact | Mitigation |
|
|
122
|
+
|------|--------|------------|
|
|
123
|
+
| duplicate handling is underspecified | high | freeze explicit rule matrix before continuing |
|
|
124
|
+
| audit and visible row summary diverge | high | verify audit mapping in integration review |
|
|
125
|
+
|
|
126
|
+
## Review Gate
|
|
127
|
+
|
|
128
|
+
- Placeholder scan: pass
|
|
129
|
+
- Consistency scan: fail; current implementation evidence still assumes some row outcomes not frozen here
|
|
130
|
+
- Scope scan: pass
|
|
131
|
+
- Ambiguity scan: blocked; duplicate + seat-limit semantics still need sharper wording
|
|
132
|
+
- Feasibility scan: pass
|
|
133
|
+
- Source alignment: pass; roadmap still prioritizes trust over speed
|
|
134
|
+
- UI / interaction review summary: result states are acceptable if semantics are frozen first
|
|
135
|
+
- DX review summary: execution still needs a single row-outcome matrix
|
|
136
|
+
- Auto-decided items:
|
|
137
|
+
- CSV upload stays inside admin settings
|
|
138
|
+
- Taste decisions:
|
|
139
|
+
- show result rows directly after parse instead of a second confirmation wizard
|
|
140
|
+
- User challenges:
|
|
141
|
+
- can admins predict partial failure without reading documentation?
|
|
142
|
+
- Recommendation: do not declare this design complete until the row-outcome matrix is explicit
|
|
143
|
+
|
|
144
|
+
## Approval
|
|
145
|
+
|
|
146
|
+
- User approval status: `in-review`
|
|
147
|
+
- Follow-up changes after review:
|
|
148
|
+
- add a rule matrix section before execution resumes
|
|
149
|
+
|
|
150
|
+
## First-Read Test
|
|
151
|
+
|
|
152
|
+
- 10 秒内能看出这次为什么不是 `tiny-design`
|
|
153
|
+
- 10 秒内能看出批准方案和被拒方案的边界
|
|
154
|
+
- `cc-do` 是否还能被迫二次设计;这里答案仍然是“会”,所以设计还不能诚实闭环
|
|
@@ -0,0 +1,146 @@
|
|
|
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
|
+
"currentTaskId": null,
|
|
9
|
+
"activePhase": null,
|
|
10
|
+
"tasks": [
|
|
11
|
+
{
|
|
12
|
+
"id": "T001",
|
|
13
|
+
"title": "[TEST] Add failing tests for duplicate and over-limit row outcomes",
|
|
14
|
+
"type": "TEST",
|
|
15
|
+
"phase": 1,
|
|
16
|
+
"parallel": false,
|
|
17
|
+
"dependsOn": [],
|
|
18
|
+
"touches": ["bulk-invite-rules"],
|
|
19
|
+
"files": ["src/invite/bulk-import.test.ts"],
|
|
20
|
+
"run": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
21
|
+
"checks": ["tests fail before implementation"],
|
|
22
|
+
"acceptance": ["dangerous row outcomes are reproduced as explicit failing tests"],
|
|
23
|
+
"verification": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
24
|
+
"evidence": ["failing test output"],
|
|
25
|
+
"context": {
|
|
26
|
+
"readFiles": ["design.md", "tasks.md", "src/invite/bulk-import.ts"],
|
|
27
|
+
"commands": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
28
|
+
"notes": ["freeze row semantics before broader execution"]
|
|
29
|
+
},
|
|
30
|
+
"reviews": { "spec": "pass", "code": "pass" },
|
|
31
|
+
"status": "passed",
|
|
32
|
+
"attempts": 1,
|
|
33
|
+
"maxRetries": 1
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "T002",
|
|
37
|
+
"title": "[IMPL] Implement the initial bulk invite row classification",
|
|
38
|
+
"type": "IMPL",
|
|
39
|
+
"phase": 1,
|
|
40
|
+
"parallel": false,
|
|
41
|
+
"dependsOn": ["T001"],
|
|
42
|
+
"touches": ["bulk-invite-rules"],
|
|
43
|
+
"files": ["src/invite/bulk-import.ts"],
|
|
44
|
+
"run": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
45
|
+
"checks": ["rule tests pass"],
|
|
46
|
+
"acceptance": ["bulk invite rows receive deterministic initial states"],
|
|
47
|
+
"verification": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
48
|
+
"evidence": ["passing test output", "checkpoint summary"],
|
|
49
|
+
"context": {
|
|
50
|
+
"readFiles": ["design.md", "tasks.md", "src/invite/bulk-import.test.ts"],
|
|
51
|
+
"commands": ["npm test -- src/invite/bulk-import.test.ts"],
|
|
52
|
+
"notes": ["do not invent partial-failure semantics outside the approved design"]
|
|
53
|
+
},
|
|
54
|
+
"reviews": { "spec": "pass", "code": "pass" },
|
|
55
|
+
"status": "passed",
|
|
56
|
+
"attempts": 1,
|
|
57
|
+
"maxRetries": 1
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "T003",
|
|
61
|
+
"title": "[TEST] Add failing admin panel tests for mixed CSV results",
|
|
62
|
+
"type": "TEST",
|
|
63
|
+
"phase": 2,
|
|
64
|
+
"parallel": false,
|
|
65
|
+
"dependsOn": ["T002"],
|
|
66
|
+
"touches": ["admin-bulk-invite-ui"],
|
|
67
|
+
"files": ["src/admin/BulkInvitePanel.test.tsx"],
|
|
68
|
+
"run": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
69
|
+
"checks": ["admin panel tests fail before UI integration"],
|
|
70
|
+
"acceptance": ["mixed row outcomes are visible as UI failures before implementation"],
|
|
71
|
+
"verification": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
72
|
+
"evidence": ["failing test output"],
|
|
73
|
+
"context": {
|
|
74
|
+
"readFiles": ["design.md", "tasks.md", "src/admin/BulkInvitePanel.tsx"],
|
|
75
|
+
"commands": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
76
|
+
"notes": ["UI must not hide ambiguous row states"]
|
|
77
|
+
},
|
|
78
|
+
"reviews": { "spec": "pass", "code": "pass" },
|
|
79
|
+
"status": "passed",
|
|
80
|
+
"attempts": 1,
|
|
81
|
+
"maxRetries": 1
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "T004",
|
|
85
|
+
"title": "[IMPL] Render bulk invite results in the admin panel",
|
|
86
|
+
"type": "IMPL",
|
|
87
|
+
"phase": 2,
|
|
88
|
+
"parallel": false,
|
|
89
|
+
"dependsOn": ["T003"],
|
|
90
|
+
"touches": ["admin-bulk-invite-ui"],
|
|
91
|
+
"files": ["src/admin/BulkInvitePanel.tsx"],
|
|
92
|
+
"run": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
93
|
+
"checks": ["admin panel tests pass"],
|
|
94
|
+
"acceptance": ["admins can see accepted, skipped, and rejected rows in the panel"],
|
|
95
|
+
"verification": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
96
|
+
"evidence": ["passing test output", "review notes"],
|
|
97
|
+
"context": {
|
|
98
|
+
"readFiles": ["design.md", "tasks.md", "src/admin/BulkInvitePanel.test.tsx"],
|
|
99
|
+
"commands": ["npm test -- src/admin/BulkInvitePanel.test.tsx"],
|
|
100
|
+
"notes": ["surface row states without redefining backend truth"]
|
|
101
|
+
},
|
|
102
|
+
"reviews": { "spec": "pass", "code": "pass" },
|
|
103
|
+
"status": "passed",
|
|
104
|
+
"attempts": 1,
|
|
105
|
+
"maxRetries": 1
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "T005",
|
|
109
|
+
"title": "Run mixed-surface checks and gather review evidence",
|
|
110
|
+
"type": "OTHER",
|
|
111
|
+
"phase": 3,
|
|
112
|
+
"parallel": false,
|
|
113
|
+
"dependsOn": ["T004"],
|
|
114
|
+
"touches": ["quality-gates"],
|
|
115
|
+
"files": ["src/admin/BulkInvitePanel.tsx", "src/invite/bulk-import.ts"],
|
|
116
|
+
"run": [
|
|
117
|
+
"npm test -- src/invite/bulk-import.test.ts",
|
|
118
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
119
|
+
],
|
|
120
|
+
"checks": ["targeted tests pass", "review evidence collected"],
|
|
121
|
+
"acceptance": ["fresh verification evidence exists for cc-check"],
|
|
122
|
+
"verification": [
|
|
123
|
+
"npm test -- src/invite/bulk-import.test.ts",
|
|
124
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
125
|
+
],
|
|
126
|
+
"evidence": ["passing targeted test output", "review notes"],
|
|
127
|
+
"context": {
|
|
128
|
+
"readFiles": ["tasks.md", "task-manifest.json"],
|
|
129
|
+
"commands": [
|
|
130
|
+
"npm test -- src/invite/bulk-import.test.ts",
|
|
131
|
+
"npm test -- src/admin/BulkInvitePanel.test.tsx"
|
|
132
|
+
],
|
|
133
|
+
"notes": ["fresh evidence can still block if the design contract is incomplete"]
|
|
134
|
+
},
|
|
135
|
+
"reviews": { "spec": "pass", "code": "pass" },
|
|
136
|
+
"status": "passed",
|
|
137
|
+
"attempts": 1,
|
|
138
|
+
"maxRetries": 1
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"metadata": {
|
|
142
|
+
"source": "tasks.md",
|
|
143
|
+
"generatedBy": "docs-example",
|
|
144
|
+
"planVersion": 1
|
|
145
|
+
}
|
|
146
|
+
}
|
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# TASKS
|
|
2
|
+
|
|
3
|
+
## Plan Meta
|
|
4
|
+
|
|
5
|
+
- Requirement version: `REQ-002.v2`
|
|
6
|
+
- Design version: `design.v2`
|
|
7
|
+
- CC-Plan skill version: `3.5.4`
|
|
8
|
+
- Source roadmap item: `RM-010`
|
|
9
|
+
- Source roadmap version: `roadmap.v2`
|
|
10
|
+
|
|
11
|
+
## Execution Handoff
|
|
12
|
+
|
|
13
|
+
- Canonical design: `design.md`
|
|
14
|
+
- Execution mode: `single-path`
|
|
15
|
+
- Frozen decisions:
|
|
16
|
+
- bulk invite results must classify each row
|
|
17
|
+
- audit behavior must match visible results
|
|
18
|
+
- Read first:
|
|
19
|
+
- `design.md`
|
|
20
|
+
- `src/admin/BulkInvitePanel.tsx`
|
|
21
|
+
- `src/invite/bulk-import.ts`
|
|
22
|
+
- `src/audit/invite-log.ts`
|
|
23
|
+
- Commands to trust:
|
|
24
|
+
- `npm test -- src/invite/bulk-import.test.ts`
|
|
25
|
+
- `npm test -- src/admin/BulkInvitePanel.test.tsx`
|
|
26
|
+
- Do not re-decide:
|
|
27
|
+
- duplicate handling semantics
|
|
28
|
+
- seat-limit fallback behavior
|
|
29
|
+
- audit row-result contract
|
|
30
|
+
- Parallel boundaries: no parallel execution until row-outcome semantics are frozen
|
|
31
|
+
|
|
32
|
+
## Phase 1: Rule Matrix
|
|
33
|
+
|
|
34
|
+
- [x] T001 [TEST] Add failing tests for duplicate and over-limit row outcomes (dependsOn:none) `src/invite/bulk-import.test.ts`
|
|
35
|
+
Goal: 先把最危险的 bulk invite 行为变成红灯。
|
|
36
|
+
Files: `src/invite/bulk-import.test.ts`
|
|
37
|
+
Read first: `design.md`, `src/invite/bulk-import.ts`
|
|
38
|
+
Verification: `npm test -- src/invite/bulk-import.test.ts`
|
|
39
|
+
Evidence: failing output
|
|
40
|
+
Ready when: 当前规则文件已经可定位
|
|
41
|
+
|
|
42
|
+
- [x] T002 [IMPL] Implement the initial bulk invite row classification (dependsOn:T001) `src/invite/bulk-import.ts`
|
|
43
|
+
Goal: 给 duplicate / over-limit 行为一个最小实现。
|
|
44
|
+
Files: `src/invite/bulk-import.ts`
|
|
45
|
+
Read first: `design.md`, `src/invite/bulk-import.test.ts`
|
|
46
|
+
Verification: `npm test -- src/invite/bulk-import.test.ts`
|
|
47
|
+
Evidence: passing output + checkpoint
|
|
48
|
+
Ready when: T001 已见红
|
|
49
|
+
|
|
50
|
+
## Phase 2: Surface Integration
|
|
51
|
+
|
|
52
|
+
- [x] T003 [TEST] Add failing admin panel tests for mixed CSV results (dependsOn:T002) `src/admin/BulkInvitePanel.test.tsx`
|
|
53
|
+
Goal: 在 UI 层看到 mixed row outcomes 的真实表现。
|
|
54
|
+
Files: `src/admin/BulkInvitePanel.test.tsx`
|
|
55
|
+
Read first: `design.md`, `src/admin/BulkInvitePanel.tsx`
|
|
56
|
+
Verification: `npm test -- src/admin/BulkInvitePanel.test.tsx`
|
|
57
|
+
Evidence: failing output
|
|
58
|
+
Ready when: T002 已完成
|
|
59
|
+
|
|
60
|
+
- [x] T004 [IMPL] Render bulk invite results in the admin panel (dependsOn:T003) `src/admin/BulkInvitePanel.tsx`
|
|
61
|
+
Goal: 把 row outcomes 接进管理界面。
|
|
62
|
+
Files: `src/admin/BulkInvitePanel.tsx`
|
|
63
|
+
Read first: `design.md`, `src/admin/BulkInvitePanel.test.tsx`
|
|
64
|
+
Verification: `npm test -- src/admin/BulkInvitePanel.test.tsx`
|
|
65
|
+
Evidence: passing output + review notes
|
|
66
|
+
Ready when: T003 已见红
|
|
67
|
+
|
|
68
|
+
## Phase 3: Verification
|
|
69
|
+
|
|
70
|
+
- [x] T005 Run mixed-surface checks and gather review evidence (dependsOn:T004) `bulk invite quality gates`
|
|
71
|
+
Goal: 为 `cc-check` 准备 bulk invite 的新鲜证据。
|
|
72
|
+
Files: `src/admin/BulkInvitePanel.tsx`, `src/invite/bulk-import.ts`
|
|
73
|
+
Read first: `tasks.md`, `task-manifest.json`
|
|
74
|
+
Verification:
|
|
75
|
+
- `npm test -- src/invite/bulk-import.test.ts`
|
|
76
|
+
- `npm test -- src/admin/BulkInvitePanel.test.tsx`
|
|
77
|
+
Evidence: passing output + review notes
|
|
78
|
+
Ready when: T004 已完成
|
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"changeId": "REQ-002",
|
|
3
|
+
"verdict": "blocked",
|
|
4
|
+
"overall": "fail",
|
|
5
|
+
"summary": "verdict=blocked quick=2/2 strict=0/0 review=blocked",
|
|
6
|
+
"quickGates": [
|
|
7
|
+
{
|
|
8
|
+
"name": "bulk-rule-tests",
|
|
9
|
+
"status": "pass",
|
|
10
|
+
"command": "npm test -- src/invite/bulk-import.test.ts",
|
|
11
|
+
"summary": "targeted bulk invite rule tests passed"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "admin-panel-tests",
|
|
15
|
+
"status": "pass",
|
|
16
|
+
"command": "npm test -- src/admin/BulkInvitePanel.test.tsx",
|
|
17
|
+
"summary": "admin panel tests passed for the current diff"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"strictGates": [],
|
|
21
|
+
"review": {
|
|
22
|
+
"status": "blocked",
|
|
23
|
+
"summary": "The implementation evidence is real, but the requirement-level design contract is still incomplete",
|
|
24
|
+
"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.",
|
|
25
|
+
"taskReviews": {
|
|
26
|
+
"status": "pass",
|
|
27
|
+
"required": true,
|
|
28
|
+
"summary": "All completed tasks carry spec/code proof",
|
|
29
|
+
"reviewers": [],
|
|
30
|
+
"findings": []
|
|
31
|
+
},
|
|
32
|
+
"diffReview": {
|
|
33
|
+
"status": "blocked",
|
|
34
|
+
"required": false,
|
|
35
|
+
"summary": "Requirement-level review says the row-outcome matrix must be reopened in planning",
|
|
36
|
+
"reviewers": [],
|
|
37
|
+
"findings": [
|
|
38
|
+
"duplicate-email behavior is still underspecified",
|
|
39
|
+
"seat-limit partial-failure semantics are not frozen in design.md"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"findings": [
|
|
43
|
+
"The current code may be locally green while still violating the intended admin trust model"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"blockingFindings": [
|
|
47
|
+
"design: duplicate-email row handling is not frozen tightly enough",
|
|
48
|
+
"design: seat-limit partial-failure semantics must be reopened in cc-plan"
|
|
49
|
+
],
|
|
50
|
+
"reroute": "cc-plan",
|
|
51
|
+
"timestamp": "2026-04-16T12:15:00.000Z"
|
|
52
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"lastSyncedAt": "2026-04-19",
|
|
4
|
+
"backlogMeta": {
|
|
5
|
+
"roadmapVersion": "roadmap.v2",
|
|
6
|
+
"skillVersion": "4.3.2",
|
|
7
|
+
"currentFocusStage": "Stage 2"
|
|
8
|
+
},
|
|
9
|
+
"dependencyHandoff": {
|
|
10
|
+
"serialSpine": "RM-010",
|
|
11
|
+
"parallelReadyNextWave": "-",
|
|
12
|
+
"notesOnBlockers": "verification is blocked until the import contract covers limits, duplicates, billing, and audit consistency"
|
|
13
|
+
},
|
|
14
|
+
"items": [
|
|
15
|
+
{
|
|
16
|
+
"rmId": "RM-010",
|
|
17
|
+
"item": "Add CSV bulk invite import for admins",
|
|
18
|
+
"stage": "Stage 2",
|
|
19
|
+
"priority": "P1",
|
|
20
|
+
"primaryCapability": "cap-bulk-invite-import",
|
|
21
|
+
"secondaryCapabilities": [
|
|
22
|
+
"cap-workspace-membership"
|
|
23
|
+
],
|
|
24
|
+
"expectedSpecDelta": "define import semantics before widening current truth",
|
|
25
|
+
"dependsOn": [],
|
|
26
|
+
"status": "Verification blocked",
|
|
27
|
+
"req": "REQ-002",
|
|
28
|
+
"progress": "80%",
|
|
29
|
+
"backlog": {
|
|
30
|
+
"capabilityGap": "admins can invite one user at a time but cannot safely import invite batches",
|
|
31
|
+
"evidence": "sales onboarding asks for spreadsheet-scale invites",
|
|
32
|
+
"parallelWith": [],
|
|
33
|
+
"unknowns": "duplicate-email policy, seat enforcement, audit fan-out",
|
|
34
|
+
"nextDecision": "reroute to full design before more execution work",
|
|
35
|
+
"ready": true,
|
|
36
|
+
"whyNow": "demand is real, but the contract is too wide to keep improvising in code",
|
|
37
|
+
"successSignal": "the capability has a trusted import contract before implementation resumes",
|
|
38
|
+
"entryConstraints": "must freeze limits, duplicates, warnings, and audit behavior first",
|
|
39
|
+
"openRisks": "another partial implementation pass would deepen the semantic drift",
|
|
40
|
+
"firstPlanningQuestion": "which subflows share one import contract and which need explicit splits?",
|
|
41
|
+
"requiredContextToLoad": "invite limits, billing rules, duplicate handling, audit logging",
|
|
42
|
+
"whyReadyNow": "the blocker is design truth, not implementation effort",
|
|
43
|
+
"parked": false,
|
|
44
|
+
"parkedReason": "",
|
|
45
|
+
"triggerToReopen": "",
|
|
46
|
+
"missingEvidence": ""
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# BACKLOG
|
|
2
|
+
|
|
3
|
+
## Backlog Meta
|
|
4
|
+
|
|
5
|
+
- Roadmap version: `roadmap.v2`
|
|
6
|
+
- Skill version: `4.3.2`
|
|
7
|
+
- Last synced: `2026-04-19`
|
|
8
|
+
- Current focus stage: `Stage 2`
|
|
9
|
+
- Tracking source: `roadmap-tracking.json`
|
|
10
|
+
|
|
11
|
+
## Queue
|
|
12
|
+
|
|
13
|
+
| RM-ID | Title | Source Stage | Priority | Primary Capability | Secondary Capabilities | Capability Gap | Expected Spec Delta | Evidence | Depends On | Parallel With | Unknowns | Next Decision | Ready |
|
|
14
|
+
|------|------|------|------|------|------|------|------|------|------|------|------|------|------|
|
|
15
|
+
| RM-020 | Add an audit-log export summary download | Stage 2 | P1 | cap-audit-log-export | - | admins can export raw audit data but not a compact summary for review | codify local export summary truth | support escalations keep asking for a lightweight summary bundle | - | - | csv-only or csv-plus-markdown summary | resume from local handoff once remote access returns | Yes |
|
|
16
|
+
|
|
17
|
+
## Dependency Handoff
|
|
18
|
+
|
|
19
|
+
- Serial spine: RM-020
|
|
20
|
+
- Parallel-ready next wave: -
|
|
21
|
+
- Notes on blockers: export work stays local-only until the next maintainer has remote access
|
|
22
|
+
|
|
23
|
+
## Ready For Req-Plan
|
|
24
|
+
|
|
25
|
+
- RM-020:
|
|
26
|
+
- Primary Capability: `cap-audit-log-export`
|
|
27
|
+
- Secondary Capabilities: `-`
|
|
28
|
+
- Why now: the implementation and proof already exist, only the landing path is deferred
|
|
29
|
+
- Success signal: admins can download a concise audit summary without manual spreadsheet cleanup
|
|
30
|
+
- Entry constraints: stay local-only and avoid remote automation
|
|
31
|
+
- Capability gap: admins can export raw audit data but not a compact summary for review
|
|
32
|
+
- Expected spec delta: codify local export summary truth
|
|
33
|
+
- Open risks: handoff may age if schema changes before the next maintainer resumes
|
|
34
|
+
- First planning question: does the summary format need another review before remote landing?
|
|
35
|
+
- Required context to load: admin export screen, generated summary fixture, local handoff notes
|
|
36
|
+
- Depends On: `-`
|
|
37
|
+
- Parallel With: `-`
|
|
38
|
+
- Why this is ready now: the requirement is already proven and only needs a clean resume point
|
|
39
|
+
|
|
40
|
+
## Parked
|
|
41
|
+
|
|
42
|
+
- RM-XXX:
|
|
43
|
+
- Reason parked:
|
|
44
|
+
- Trigger to reopen:
|
|
45
|
+
- Missing evidence:
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Local-Handoff Example
|
|
2
|
+
|
|
3
|
+
## Example Meta
|
|
4
|
+
|
|
5
|
+
- Example version: `1.0.0`
|
|
6
|
+
- Last reviewed: `2026-04-17`
|
|
7
|
+
- Bound skills: `cc-roadmap@4.3.2`, `cc-plan@3.5.4`, `cc-do@1.5.2`, `cc-check@1.8.2`, `cc-act@1.6.2`
|
|
8
|
+
|
|
9
|
+
This example shows verified work that is **ready to move forward**, but `cc-act` still chooses `local-handoff`.
|
|
10
|
+
|
|
11
|
+
That is not a failure.
|
|
12
|
+
|
|
13
|
+
It simply means:
|
|
14
|
+
|
|
15
|
+
- the requirement passed verification
|
|
16
|
+
- a PR or remote push is intentionally not the next action
|
|
17
|
+
- the workflow still must leave a clean handoff for the next maintainer
|
|
18
|
+
|
|
19
|
+
## Scenario
|
|
20
|
+
|
|
21
|
+
The fictional product now adds a downloadable audit-log export summary inside the admin console.
|
|
22
|
+
|
|
23
|
+
The implementation is done and verified.
|
|
24
|
+
|
|
25
|
+
But the current environment is local-only:
|
|
26
|
+
|
|
27
|
+
- remote access is unavailable
|
|
28
|
+
- the branch should not be pushed yet
|
|
29
|
+
- another maintainer will pick it up later
|
|
30
|
+
|
|
31
|
+
## What To Look For
|
|
32
|
+
|
|
33
|
+
1. Why `cc-check` is `pass`
|
|
34
|
+
2. Why `cc-act` still does not choose `create-pr`
|
|
35
|
+
3. How `resume-index.md` becomes the only final handoff file
|
|
36
|
+
|
|
37
|
+
## Artifact Map
|
|
38
|
+
|
|
39
|
+
- `ROADMAP.md`
|
|
40
|
+
- `roadmap-tracking.json` (shared roadmap/backlog truth)
|
|
41
|
+
- `BACKLOG.md`
|
|
42
|
+
- `changes/REQ-003-audit-log-export/planning/design.md`
|
|
43
|
+
- `changes/REQ-003-audit-log-export/planning/tasks.md`
|
|
44
|
+
- `changes/REQ-003-audit-log-export/planning/task-manifest.json`
|
|
45
|
+
- `changes/REQ-003-audit-log-export/review/report-card.json`
|
|
46
|
+
- `changes/REQ-003-audit-log-export/handoff/resume-index.md`
|
|
47
|
+
|
|
48
|
+
## Why There Is No `pr-brief.md`
|
|
49
|
+
|
|
50
|
+
This sample intentionally chooses `local-handoff`.
|
|
51
|
+
|
|
52
|
+
That mode needs:
|
|
53
|
+
|
|
54
|
+
- `resume-index.md`
|
|
55
|
+
|
|
56
|
+
It does **not** require a PR brief yet.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# ROADMAP
|
|
2
|
+
|
|
3
|
+
## Roadmap Meta
|
|
4
|
+
|
|
5
|
+
- Roadmap version: `roadmap.v3`
|
|
6
|
+
- Skill version: `4.3.2`
|
|
7
|
+
- Status: `active`
|
|
8
|
+
- Last updated: `2026-04-16`
|
|
9
|
+
- Owner / decider: `product-owner`
|
|
10
|
+
- Current focus stage: `Stage 2`
|
|
11
|
+
- Confidence: `medium`
|
|
12
|
+
- Supersedes roadmap version: `roadmap.v2`
|
|
13
|
+
|
|
14
|
+
## Context Snapshot
|
|
15
|
+
|
|
16
|
+
- Product / repo: `workspace-lite`
|
|
17
|
+
- Project stage: collaboration and admin reporting are now both in use
|
|
18
|
+
- Users: workspace admins reviewing activity and sharing reports internally
|
|
19
|
+
- Pain: admins can inspect audit events, but cannot export a concise summary
|
|
20
|
+
- Existing workaround: manually copy rows into an internal note
|
|
21
|
+
- Strongest demand evidence: admins ask for a downloadable summary during weekly reviews
|
|
22
|
+
- Why now: admin trust now depends on visibility and operational clarity
|
|
23
|
+
- Distribution path: internal admin beta
|
|
24
|
+
- Deadline / forcing function: internal ops review on `2026-04-25`
|
|
25
|
+
- Team / capacity: one engineer
|
|
26
|
+
- Hard constraints: keep export local to the current admin console
|
|
27
|
+
- Adoption / trust bottleneck: admins want proof they can take activity history out of the UI cleanly
|
|
28
|
+
- Known unknowns: whether CSV alone is enough or if JSON export will be needed later
|
|
29
|
+
|
|
30
|
+
## Recommended Route
|
|
31
|
+
|
|
32
|
+
- Recommendation: `wedge-first`
|
|
33
|
+
- Why this route wins now: a simple downloadable summary removes the current reporting pain without broader analytics work
|
|
34
|
+
- Why the rejected routes lose now: platform and rescue variants add scope before the current operator need is solved
|
|
35
|
+
- First signal to watch: admins can finish weekly review without copying rows manually
|
|
36
|
+
- Kill signal / stop condition: if export requires a shared reporting pipeline redesign
|
|
37
|
+
|
|
38
|
+
## Implementation Tracking
|
|
39
|
+
- Tracking source: `roadmap-tracking.json`
|
|
40
|
+
|
|
41
|
+
<!-- roadmap-tracking:start -->
|
|
42
|
+
| RM-ID | Item | Stage | Priority | Primary Capability | Secondary Capabilities | Expected Spec Delta | Depends On | Status | REQ | Progress |
|
|
43
|
+
|------|------|------|------|------|------|------|------|------|------|------|
|
|
44
|
+
| RM-020 | Add an audit-log export summary download | Stage 2 | P1 | cap-audit-log-export | - | codify local export summary truth | - | Local handoff | REQ-003 | 100% |
|
|
45
|
+
<!-- roadmap-tracking:end -->
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Resume Index
|
|
2
|
+
|
|
3
|
+
## Current Reality
|
|
4
|
+
|
|
5
|
+
- Requirement: `REQ-003`
|
|
6
|
+
- Roadmap item: `RM-020`
|
|
7
|
+
- Verification state: `pass`
|
|
8
|
+
- Ship mode: `local-handoff`
|
|
9
|
+
- Current branch: `feature/audit-summary-export`
|
|
10
|
+
- Blocking environment fact: remote push / PR creation is unavailable right now
|
|
11
|
+
|
|
12
|
+
## What Is Already Done
|
|
13
|
+
|
|
14
|
+
- design approved as `tiny-design`
|
|
15
|
+
- implementation tasks `T001-T003` completed
|
|
16
|
+
- targeted test and lint evidence collected
|
|
17
|
+
- `report-card.json` confirms `pass`
|
|
18
|
+
|
|
19
|
+
## Next Entry
|
|
20
|
+
|
|
21
|
+
- when remote access is restored, rerun `detect-ship-target`
|
|
22
|
+
- if the branch still has no PR, switch from `local-handoff` to `create-pr`
|
|
23
|
+
- use `resume-index.md` and `report-card.json` as the truth sources for the next ship step
|
|
24
|
+
|
|
25
|
+
## Read First
|
|
26
|
+
|
|
27
|
+
- `design.md`
|
|
28
|
+
- `tasks.md`
|
|
29
|
+
- `task-manifest.json`
|
|
30
|
+
- `report-card.json`
|
|
31
|
+
|
|
32
|
+
## How To Re-Verify
|
|
33
|
+
|
|
34
|
+
- `npm test -- src/admin/AuditSummaryPanel.test.tsx`
|
|
35
|
+
- `npm run lint -- src/admin/AuditSummaryPanel.tsx`
|
|
36
|
+
|
|
37
|
+
## Open Follow-Up
|
|
38
|
+
|
|
39
|
+
- if operators ask for JSON or scheduled exports, lift that into a new roadmap item instead of reopening `REQ-003`
|