cc-devflow 4.5.10 → 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.
Files changed (187) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +23 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +17 -269
  3. package/.claude/skills/cc-act/SKILL.md +38 -418
  4. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +2 -13
  5. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +1 -9
  6. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +21 -177
  7. package/.claude/skills/cc-act/references/closure-contract.md +12 -63
  8. package/.claude/skills/cc-act/references/git-commit-guidelines.md +5 -5
  9. package/.claude/skills/cc-act/scripts/cc-act-common.sh +5 -322
  10. package/.claude/skills/cc-act/scripts/detect-ship-target.sh +11 -2
  11. package/.claude/skills/cc-act/scripts/inspect-git-index.sh +58 -0
  12. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +40 -440
  13. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +10 -50
  14. package/.claude/skills/cc-check/CHANGELOG.md +24 -0
  15. package/.claude/skills/cc-check/PLAYBOOK.md +19 -273
  16. package/.claude/skills/cc-check/SKILL.md +33 -454
  17. package/.claude/skills/cc-check/references/review-contract.md +12 -147
  18. package/.claude/skills/cc-dev/CHANGELOG.md +20 -0
  19. package/.claude/skills/cc-dev/PLAYBOOK.md +1 -1
  20. package/.claude/skills/cc-dev/SKILL.md +52 -130
  21. package/.claude/skills/cc-dev/scripts/resolve-cc-devflow.sh +181 -0
  22. package/.claude/skills/cc-do/CHANGELOG.md +17 -0
  23. package/.claude/skills/cc-do/PLAYBOOK.md +19 -113
  24. package/.claude/skills/cc-do/SKILL.md +39 -236
  25. package/.claude/skills/cc-do/references/execution-recovery.md +15 -109
  26. package/.claude/skills/cc-do/scripts/cc-do-common.sh +5 -57
  27. package/.claude/skills/cc-do/scripts/check-task-status.sh +35 -65
  28. package/.claude/skills/cc-do/scripts/mark-task-complete.sh +9 -46
  29. package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +29 -97
  30. package/.claude/skills/cc-investigate/CHANGELOG.md +23 -0
  31. package/.claude/skills/cc-investigate/PLAYBOOK.md +20 -180
  32. package/.claude/skills/cc-investigate/SKILL.md +65 -513
  33. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +48 -95
  34. package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -217
  35. package/.claude/skills/cc-next/CHANGELOG.md +6 -0
  36. package/.claude/skills/cc-next/PLAYBOOK.md +12 -8
  37. package/.claude/skills/cc-next/SKILL.md +34 -140
  38. package/.claude/skills/cc-plan/CHANGELOG.md +29 -0
  39. package/.claude/skills/cc-plan/PLAYBOOK.md +22 -161
  40. package/.claude/skills/cc-plan/SKILL.md +47 -640
  41. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +30 -225
  42. package/.claude/skills/cc-plan/references/planning-contract.md +24 -160
  43. package/.claude/skills/cc-plan/scripts/next-change-key.sh +8 -44
  44. package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +2 -2
  45. package/.claude/skills/cc-plan/scripts/validate-scope.sh +1 -1
  46. package/.claude/skills/cc-pr-land/SKILL.md +14 -114
  47. package/.claude/skills/cc-pr-review/CHANGELOG.md +4 -0
  48. package/.claude/skills/cc-pr-review/SKILL.md +20 -103
  49. package/.claude/skills/cc-review/CHANGELOG.md +17 -0
  50. package/.claude/skills/cc-review/PLAYBOOK.md +13 -86
  51. package/.claude/skills/cc-review/SKILL.md +53 -241
  52. package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +2 -2
  53. package/.claude/skills/cc-review/references/implementation-review-branch.md +7 -147
  54. package/.claude/skills/cc-review/references/plan-review-branch.md +5 -147
  55. package/.claude/skills/cc-review/references/review-methods.md +10 -218
  56. package/.claude/skills/cc-review/scripts/collect-review-context.sh +4 -63
  57. package/.claude/skills/cc-roadmap/PLAYBOOK.md +1 -1
  58. package/.claude/skills/cc-roadmap/SKILL.md +3 -3
  59. package/.claude/skills/cc-simplify/CHANGELOG.md +7 -0
  60. package/.claude/skills/cc-simplify/SKILL.md +26 -21
  61. package/.claude/skills/cc-spec-init/PLAYBOOK.md +12 -48
  62. package/.claude/skills/cc-spec-init/SKILL.md +29 -132
  63. package/.claude/skills/cc-spec-init/references/spec-contract.md +8 -17
  64. package/CHANGELOG.md +27 -0
  65. package/README.md +5 -3
  66. package/README.zh-CN.md +5 -3
  67. package/bin/cc-devflow-cli.js +20 -260
  68. package/bin/cc-devflow.js +44 -7
  69. package/docs/commands/README.md +1 -1
  70. package/docs/commands/README.zh-CN.md +1 -1
  71. package/docs/examples/README.md +1 -1
  72. package/docs/examples/START-HERE.md +14 -14
  73. package/docs/examples/example-bindings.json +11 -11
  74. package/docs/examples/full-design-blocked/README.md +4 -6
  75. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/{planning/tasks.md → task.md} +20 -15
  76. package/docs/examples/local-handoff/README.md +8 -11
  77. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/pr-brief.md +31 -0
  78. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/{planning/tasks.md → task.md} +18 -13
  79. package/docs/examples/pdca-loop/README.md +6 -9
  80. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +9 -11
  81. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/{planning/tasks.md → task.md} +18 -13
  82. package/docs/examples/scripts/check-example-bindings.sh +11 -62
  83. package/docs/guides/artifact-contract.md +10 -36
  84. package/docs/guides/getting-started.md +8 -7
  85. package/docs/guides/getting-started.zh-CN.md +8 -7
  86. package/docs/guides/minimize-artifacts.md +16 -116
  87. package/docs/guides/project-postmortem.md +14 -71
  88. package/lib/compiler/__tests__/skills-registry.test.js +9 -8
  89. package/lib/compiler/resource-copier.js +29 -0
  90. package/lib/skill-runtime/__tests__/archive-change.test.js +2 -2
  91. package/lib/skill-runtime/__tests__/benchmark-skills.test.js +109 -0
  92. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +14 -4
  93. package/lib/skill-runtime/errors.js +3 -3
  94. package/lib/skill-runtime/index.js +5 -23
  95. package/lib/skill-runtime/paths.js +5 -52
  96. package/lib/skill-runtime/query-registry.js +4 -4
  97. package/lib/skill-runtime/query.js +89 -201
  98. package/lib/skill-runtime/store.js +4 -40
  99. package/lib/skill-runtime/trace.js +2 -2
  100. package/package.json +5 -7
  101. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +0 -29
  102. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +0 -54
  103. package/.claude/skills/cc-act/scripts/generate-status-report.sh +0 -92
  104. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +0 -355
  105. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +0 -234
  106. package/.claude/skills/cc-check/scripts/render-report-card.js +0 -438
  107. package/.claude/skills/cc-check/scripts/verify-gate.sh +0 -85
  108. package/.claude/skills/cc-do/scripts/build-task-context.sh +0 -175
  109. package/.claude/skills/cc-do/scripts/record-review-decision.sh +0 -88
  110. package/.claude/skills/cc-do/scripts/recover-workflow.sh +0 -82
  111. package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +0 -70
  112. package/.claude/skills/cc-do/scripts/verify-task-gates.sh +0 -109
  113. package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +0 -92
  114. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +0 -225
  115. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +0 -179
  116. package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +0 -28
  117. package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +0 -45
  118. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +0 -234
  119. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +0 -488
  120. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +0 -189
  121. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +0 -39
  122. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +0 -29
  123. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +0 -123
  124. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +0 -292
  125. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +0 -136
  126. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +0 -29
  127. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +0 -124
  128. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +0 -292
  129. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +0 -136
  130. package/docs/get-shit-done-strategy-audit.md +0 -518
  131. package/docs/skill-runtime-migration.md +0 -46
  132. package/lib/skill-runtime/__tests__/approve.test.js +0 -92
  133. package/lib/skill-runtime/__tests__/autopilot.test.js +0 -253
  134. package/lib/skill-runtime/__tests__/benchmark-artifacts.test.js +0 -165
  135. package/lib/skill-runtime/__tests__/delegation.test.js +0 -97
  136. package/lib/skill-runtime/__tests__/dispatch.test.js +0 -237
  137. package/lib/skill-runtime/__tests__/intent.test.js +0 -203
  138. package/lib/skill-runtime/__tests__/lifecycle.test.js +0 -169
  139. package/lib/skill-runtime/__tests__/planner.tdd.test.js +0 -331
  140. package/lib/skill-runtime/__tests__/prepare-pr.test.js +0 -126
  141. package/lib/skill-runtime/__tests__/query.test.js +0 -860
  142. package/lib/skill-runtime/__tests__/readiness.test.js +0 -53
  143. package/lib/skill-runtime/__tests__/release.test.js +0 -85
  144. package/lib/skill-runtime/__tests__/review-check-integration.test.js +0 -148
  145. package/lib/skill-runtime/__tests__/review-records.test.js +0 -619
  146. package/lib/skill-runtime/__tests__/runtime.integration.test.js +0 -351
  147. package/lib/skill-runtime/__tests__/schemas.test.js +0 -337
  148. package/lib/skill-runtime/__tests__/task-contract-migrate.test.js +0 -137
  149. package/lib/skill-runtime/__tests__/task-contract.test.js +0 -783
  150. package/lib/skill-runtime/__tests__/team-state.test.js +0 -51
  151. package/lib/skill-runtime/__tests__/verify-artifacts.test.js +0 -203
  152. package/lib/skill-runtime/__tests__/worker-run.test.js +0 -275
  153. package/lib/skill-runtime/__tests__/worker.test.js +0 -56
  154. package/lib/skill-runtime/__tests__/workflow-context-legacy-fallback.test.js +0 -31
  155. package/lib/skill-runtime/__tests__/workflow-context.test.js +0 -98
  156. package/lib/skill-runtime/artifacts.js +0 -88
  157. package/lib/skill-runtime/context-index.js +0 -545
  158. package/lib/skill-runtime/delegation.js +0 -533
  159. package/lib/skill-runtime/intent.js +0 -309
  160. package/lib/skill-runtime/lifecycle.js +0 -294
  161. package/lib/skill-runtime/operations/CLAUDE.md +0 -19
  162. package/lib/skill-runtime/operations/approve.js +0 -81
  163. package/lib/skill-runtime/operations/autopilot-core.js +0 -337
  164. package/lib/skill-runtime/operations/autopilot-execution.js +0 -307
  165. package/lib/skill-runtime/operations/autopilot-shared.js +0 -48
  166. package/lib/skill-runtime/operations/autopilot.js +0 -163
  167. package/lib/skill-runtime/operations/dispatch.js +0 -416
  168. package/lib/skill-runtime/operations/init.js +0 -60
  169. package/lib/skill-runtime/operations/janitor.js +0 -61
  170. package/lib/skill-runtime/operations/plan.js +0 -59
  171. package/lib/skill-runtime/operations/prepare-pr.js +0 -25
  172. package/lib/skill-runtime/operations/release.js +0 -99
  173. package/lib/skill-runtime/operations/resume.js +0 -126
  174. package/lib/skill-runtime/operations/review-records.js +0 -265
  175. package/lib/skill-runtime/operations/snapshot.js +0 -45
  176. package/lib/skill-runtime/operations/task-contract.js +0 -524
  177. package/lib/skill-runtime/operations/verify.js +0 -170
  178. package/lib/skill-runtime/operations/worker-run.js +0 -531
  179. package/lib/skill-runtime/operations/worker.js +0 -33
  180. package/lib/skill-runtime/planner.js +0 -539
  181. package/lib/skill-runtime/readiness.js +0 -84
  182. package/lib/skill-runtime/review-records.js +0 -123
  183. package/lib/skill-runtime/review.js +0 -855
  184. package/lib/skill-runtime/schemas.js +0 -746
  185. package/lib/skill-runtime/task-contract.js +0 -187
  186. package/lib/skill-runtime/team-state.js +0 -122
  187. package/lib/skill-runtime/workflow-context.js +0 -748
@@ -60,8 +60,6 @@ Commands:
60
60
  config doctor Validate config and local ignore safety
61
61
  query list List typed runtime query ids
62
62
  query <id> Run a typed runtime query as JSON
63
- task-contract Compile task contract artifacts
64
- review Record durable review ledger events
65
63
  next-change-key Compute the next REQ/FIX change key
66
64
  archive-change Archive a completed change to devflow/changes/archive/YYYY-MM/
67
65
  restore-change Restore an archived change back to devflow/changes/
@@ -115,11 +113,7 @@ Examples:
115
113
  cc-devflow config set output.document_language zh-CN --user
116
114
  cc-devflow config resolve --cwd /path/to/project --format policy
117
115
  cc-devflow query list
118
- cc-devflow query ship-readiness --cwd /path/to/project --change REQ-123
119
116
  cc-devflow query workflow-context --cwd /path/to/project --change REQ-123 --change-key REQ-123-my-feature --data-only --no-trace --compact
120
- cc-devflow query progress --change REQ-123 --change-key REQ-123-my-feature
121
- cc-devflow task-contract compile --cwd /path/to/project --change REQ-123 --change-key REQ-123-my-feature
122
- cc-devflow review start --cwd /path/to/project --change REQ-123 --change-key REQ-123-my-feature --base-sha abc --head-sha def
123
117
  `);
124
118
  }
125
119
 
@@ -183,6 +177,9 @@ function copyManagedDirectory(src, dest, options = {}) {
183
177
  const stats = fs.statSync(src);
184
178
  if (stats.isDirectory()) {
185
179
  fs.mkdirSync(dest, { recursive: true });
180
+ if (force) {
181
+ pruneManagedDirectory(src, dest);
182
+ }
186
183
  const entries = fs.readdirSync(src);
187
184
  for (const entry of entries) {
188
185
  copyManagedDirectory(path.join(src, entry), path.join(dest, entry), options);
@@ -212,6 +209,23 @@ function copyManagedDirectory(src, dest, options = {}) {
212
209
  }
213
210
  }
214
211
 
212
+ function pruneManagedDirectory(src, dest) {
213
+ if (!fs.existsSync(dest) || !fs.statSync(dest).isDirectory()) {
214
+ return;
215
+ }
216
+
217
+ const sourceEntries = new Set(fs.readdirSync(src));
218
+ for (const entry of fs.readdirSync(dest)) {
219
+ if (sourceEntries.has(entry)) {
220
+ continue;
221
+ }
222
+
223
+ const targetPath = path.join(dest, entry);
224
+ fs.rmSync(targetPath, { recursive: true, force: true });
225
+ console.log(`[DELETE] ${path.relative(process.cwd(), targetPath)}`);
226
+ }
227
+ }
228
+
215
229
  function syncDistributedSkills(targetRoot, options = {}) {
216
230
  const { force = false } = options;
217
231
  const targetClaudeDir = path.join(targetRoot, '.claude');
@@ -540,252 +554,6 @@ async function runQueryCommand(args) {
540
554
  return result.ok ? 0 : 2;
541
555
  }
542
556
 
543
- async function runTaskContractCommand(args) {
544
- const [subcommand, ...rest] = args;
545
-
546
- if (!subcommand || subcommand === '--help' || subcommand === '-h') {
547
- console.error('Use: cc-devflow task-contract <compile|validate|migrate> --change <changeId> [--change-key <key>] [--cwd <path>] [--fold-design] [--fold-analysis]');
548
- return 3;
549
- }
550
-
551
- const options = parseChangeScopedArgs(rest);
552
- if (!options.changeId) {
553
- console.error('task-contract --change is required.');
554
- return 3;
555
- }
556
-
557
- if (subcommand === 'compile' || subcommand === 'validate' || subcommand === 'migrate') {
558
- const {
559
- runCompile,
560
- runValidate,
561
- runMigrate
562
- } = require(path.join(PACKAGE_ROOT, 'lib/skill-runtime/operations/task-contract.js'));
563
- const runners = {
564
- compile: runCompile,
565
- validate: runValidate,
566
- migrate: runMigrate
567
- };
568
- const runner = runners[subcommand];
569
- const result = await runner({
570
- repoRoot: path.resolve(options.cwd || process.cwd()),
571
- changeId: options.changeId,
572
- changeKey: options.changeKey,
573
- foldDesign: options.rest.includes('--fold-design'),
574
- foldAnalysis: options.rest.includes('--fold-analysis')
575
- });
576
- if (result.code !== 0) {
577
- console.error(result.stderr || result.error || `task-contract ${subcommand} failed`);
578
- return result.code;
579
- }
580
- process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
581
- return result.code;
582
- }
583
-
584
- console.error(`Unknown task-contract command: ${subcommand}`);
585
- return 3;
586
- }
587
-
588
- function parseReviewStartArgs(args) {
589
- const scoped = parseChangeScopedArgs(args);
590
- const parsed = {
591
- ...scoped,
592
- mode: 'implementation',
593
- scope: 'current-diff',
594
- baseSha: 'unknown',
595
- headSha: 'unknown',
596
- selectedNodes: [],
597
- skippedNodes: [],
598
- riskLanes: []
599
- };
600
-
601
- for (let i = 0; i < scoped.rest.length; i++) {
602
- const arg = scoped.rest[i];
603
- if (arg === '--mode') { parsed.mode = scoped.rest[++i]; continue; }
604
- if (arg.startsWith('--mode=')) { parsed.mode = arg.slice('--mode='.length); continue; }
605
- if (arg === '--scope') { parsed.scope = scoped.rest[++i]; continue; }
606
- if (arg.startsWith('--scope=')) { parsed.scope = arg.slice('--scope='.length); continue; }
607
- if (arg === '--base-sha') { parsed.baseSha = scoped.rest[++i]; continue; }
608
- if (arg.startsWith('--base-sha=')) { parsed.baseSha = arg.slice('--base-sha='.length); continue; }
609
- if (arg === '--head-sha') { parsed.headSha = scoped.rest[++i]; continue; }
610
- if (arg.startsWith('--head-sha=')) { parsed.headSha = arg.slice('--head-sha='.length); continue; }
611
- if (arg === '--selected-node') { parsed.selectedNodes.push(scoped.rest[++i]); continue; }
612
- if (arg.startsWith('--selected-node=')) { parsed.selectedNodes.push(arg.slice('--selected-node='.length)); continue; }
613
- if (arg === '--skipped-node') { parsed.skippedNodes.push(scoped.rest[++i]); continue; }
614
- if (arg.startsWith('--skipped-node=')) { parsed.skippedNodes.push(arg.slice('--skipped-node='.length)); continue; }
615
- if (arg === '--risk-lane') { parsed.riskLanes.push(scoped.rest[++i]); continue; }
616
- if (arg.startsWith('--risk-lane=')) { parsed.riskLanes.push(arg.slice('--risk-lane='.length)); continue; }
617
- }
618
-
619
- return parsed;
620
- }
621
-
622
- function parseReviewEventArgs(args) {
623
- const scoped = parseChangeScopedArgs(args);
624
- const parsed = {
625
- ...scoped,
626
- reviewId: null,
627
- nodeId: null,
628
- mode: 'implementation',
629
- target: null,
630
- status: null,
631
- coverage: [],
632
- evidenceRefs: [],
633
- findings: [],
634
- next: null,
635
- findingId: null,
636
- severity: null,
637
- confidence: null,
638
- displayTier: null,
639
- fingerprint: null,
640
- scope: null,
641
- path: null,
642
- evidence: null,
643
- recommendation: null,
644
- route: null,
645
- blockingCount: null,
646
- warningCount: null,
647
- output: null
648
- };
649
-
650
- for (let i = 0; i < scoped.rest.length; i++) {
651
- const arg = scoped.rest[i];
652
- if (arg === '--review-id') { parsed.reviewId = scoped.rest[++i]; continue; }
653
- if (arg.startsWith('--review-id=')) { parsed.reviewId = arg.slice('--review-id='.length); continue; }
654
- if (arg === '--node-id') { parsed.nodeId = scoped.rest[++i]; continue; }
655
- if (arg.startsWith('--node-id=')) { parsed.nodeId = arg.slice('--node-id='.length); continue; }
656
- if (arg === '--mode') { parsed.mode = scoped.rest[++i]; continue; }
657
- if (arg.startsWith('--mode=')) { parsed.mode = arg.slice('--mode='.length); continue; }
658
- if (arg === '--target') { parsed.target = scoped.rest[++i]; continue; }
659
- if (arg.startsWith('--target=')) { parsed.target = arg.slice('--target='.length); continue; }
660
- if (arg === '--status') { parsed.status = scoped.rest[++i]; continue; }
661
- if (arg.startsWith('--status=')) { parsed.status = arg.slice('--status='.length); continue; }
662
- if (arg === '--coverage') { parsed.coverage.push(scoped.rest[++i]); continue; }
663
- if (arg.startsWith('--coverage=')) { parsed.coverage.push(arg.slice('--coverage='.length)); continue; }
664
- if (arg === '--evidence-ref') { parsed.evidenceRefs.push(scoped.rest[++i]); continue; }
665
- if (arg.startsWith('--evidence-ref=')) { parsed.evidenceRefs.push(arg.slice('--evidence-ref='.length)); continue; }
666
- if (arg === '--finding') { parsed.findings.push(scoped.rest[++i]); continue; }
667
- if (arg.startsWith('--finding=')) { parsed.findings.push(arg.slice('--finding='.length)); continue; }
668
- if (arg === '--next') { parsed.next = scoped.rest[++i]; continue; }
669
- if (arg.startsWith('--next=')) { parsed.next = arg.slice('--next='.length); continue; }
670
- if (arg === '--finding-id') { parsed.findingId = scoped.rest[++i]; continue; }
671
- if (arg.startsWith('--finding-id=')) { parsed.findingId = arg.slice('--finding-id='.length); continue; }
672
- if (arg === '--severity') { parsed.severity = scoped.rest[++i]; continue; }
673
- if (arg.startsWith('--severity=')) { parsed.severity = arg.slice('--severity='.length); continue; }
674
- if (arg === '--confidence') { parsed.confidence = scoped.rest[++i]; continue; }
675
- if (arg.startsWith('--confidence=')) { parsed.confidence = arg.slice('--confidence='.length); continue; }
676
- if (arg === '--display-tier') { parsed.displayTier = scoped.rest[++i]; continue; }
677
- if (arg.startsWith('--display-tier=')) { parsed.displayTier = arg.slice('--display-tier='.length); continue; }
678
- if (arg === '--fingerprint') { parsed.fingerprint = scoped.rest[++i]; continue; }
679
- if (arg.startsWith('--fingerprint=')) { parsed.fingerprint = arg.slice('--fingerprint='.length); continue; }
680
- if (arg === '--scope') { parsed.scope = scoped.rest[++i]; continue; }
681
- if (arg.startsWith('--scope=')) { parsed.scope = arg.slice('--scope='.length); continue; }
682
- if (arg === '--path') { parsed.path = scoped.rest[++i]; continue; }
683
- if (arg.startsWith('--path=')) { parsed.path = arg.slice('--path='.length); continue; }
684
- if (arg === '--evidence') { parsed.evidence = scoped.rest[++i]; continue; }
685
- if (arg.startsWith('--evidence=')) { parsed.evidence = arg.slice('--evidence='.length); continue; }
686
- if (arg === '--recommendation') { parsed.recommendation = scoped.rest[++i]; continue; }
687
- if (arg.startsWith('--recommendation=')) { parsed.recommendation = arg.slice('--recommendation='.length); continue; }
688
- if (arg === '--route') { parsed.route = scoped.rest[++i]; continue; }
689
- if (arg.startsWith('--route=')) { parsed.route = arg.slice('--route='.length); continue; }
690
- if (arg === '--blocking-count') { parsed.blockingCount = scoped.rest[++i]; continue; }
691
- if (arg.startsWith('--blocking-count=')) { parsed.blockingCount = arg.slice('--blocking-count='.length); continue; }
692
- if (arg === '--warning-count') { parsed.warningCount = scoped.rest[++i]; continue; }
693
- if (arg.startsWith('--warning-count=')) { parsed.warningCount = arg.slice('--warning-count='.length); continue; }
694
- if (arg === '--output') { parsed.output = scoped.rest[++i]; continue; }
695
- if (arg.startsWith('--output=')) { parsed.output = arg.slice('--output='.length); continue; }
696
- }
697
-
698
- return parsed;
699
- }
700
-
701
- async function runReviewCommand(args) {
702
- const [subcommand, ...rest] = args;
703
-
704
- if (!subcommand || subcommand === '--help' || subcommand === '-h') {
705
- console.error('Use: cc-devflow review start --change <changeId> [--change-key <key>] [--cwd <path>]');
706
- return 3;
707
- }
708
-
709
- const reviewRunners = {
710
- start: null,
711
- 'record-node': 'runReviewRecordNode',
712
- 'add-finding': 'runReviewAddFinding',
713
- close: 'runReviewClose',
714
- render: 'runReviewRender'
715
- };
716
-
717
- if (subcommand === 'start') {
718
- const options = parseReviewStartArgs(rest);
719
- if (!options.changeId) {
720
- console.error('review start --change is required.');
721
- return 3;
722
- }
723
-
724
- const { runReviewStart } = require(path.join(PACKAGE_ROOT, 'lib/skill-runtime/operations/review-records.js'));
725
- const result = await runReviewStart({
726
- repoRoot: path.resolve(options.cwd || process.cwd()),
727
- changeId: options.changeId,
728
- changeKey: options.changeKey,
729
- mode: options.mode,
730
- scope: options.scope,
731
- baseSha: options.baseSha,
732
- headSha: options.headSha,
733
- selectedNodes: options.selectedNodes,
734
- skippedNodes: options.skippedNodes,
735
- riskLanes: options.riskLanes
736
- });
737
- process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
738
- return result.code;
739
- }
740
-
741
- if (reviewRunners[subcommand]) {
742
- const options = parseReviewEventArgs(rest);
743
- if (!options.changeId) {
744
- console.error(`review ${subcommand} --change is required.`);
745
- return 3;
746
- }
747
-
748
- const runnerName = reviewRunners[subcommand];
749
- const runners = require(path.join(PACKAGE_ROOT, 'lib/skill-runtime/operations/review-records.js'));
750
- const result = await runners[runnerName]({
751
- repoRoot: path.resolve(options.cwd || process.cwd()),
752
- changeId: options.changeId,
753
- changeKey: options.changeKey,
754
- reviewId: options.reviewId,
755
- nodeId: options.nodeId,
756
- mode: options.mode,
757
- target: options.target,
758
- status: options.status,
759
- coverage: options.coverage,
760
- evidenceRefs: options.evidenceRefs,
761
- findings: options.findings,
762
- next: options.next,
763
- findingId: options.findingId,
764
- severity: options.severity,
765
- confidence: options.confidence,
766
- displayTier: options.displayTier,
767
- fingerprint: options.fingerprint,
768
- scope: options.scope,
769
- path: options.path,
770
- evidence: options.evidence,
771
- recommendation: options.recommendation,
772
- route: options.route,
773
- blockingCount: options.blockingCount,
774
- warningCount: options.warningCount,
775
- output: options.output
776
- });
777
- if (result.code !== 0) {
778
- console.error(result.stderr || result.error || `review ${subcommand} failed`);
779
- return result.code;
780
- }
781
- process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
782
- return result.code;
783
- }
784
-
785
- console.error(`Unknown review command: ${subcommand}`);
786
- return 3;
787
- }
788
-
789
557
  function runNextChangeKey(args) {
790
558
  const parsed = { prefix: null, description: null, cwd: null };
791
559
 
@@ -948,14 +716,6 @@ async function main() {
948
716
  return runQueryCommand(rest);
949
717
  }
950
718
 
951
- if (command === 'task-contract') {
952
- return runTaskContractCommand(rest);
953
- }
954
-
955
- if (command === 'review') {
956
- return runReviewCommand(rest);
957
- }
958
-
959
719
  if (command === 'next-change-key') {
960
720
  return runNextChangeKey(rest);
961
721
  }
package/bin/cc-devflow.js CHANGED
@@ -1,16 +1,53 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const AdapterRegistry = require('../lib/adapters/registry');
4
- const ClaudeAdapter = require('../lib/adapters/claude-adapter');
5
- const CodexAdapter = require('../lib/adapters/codex-adapter');
6
- const { validateConfig, getDefaultConfig } = require('../lib/adapters/config-validator');
7
- const logger = require('../lib/adapters/logger');
8
- const fs = require('fs');
3
+ const { spawnSync } = require('child_process');
9
4
  const path = require('path');
10
- const yaml = require('js-yaml');
5
+
6
+ const CLI_BIN = path.resolve(__dirname, 'cc-devflow-cli.js');
7
+ const CLI_COMMANDS = new Set([
8
+ 'help',
9
+ '--help',
10
+ '-h',
11
+ 'init',
12
+ 'adapt',
13
+ 'config',
14
+ 'query',
15
+ 'next-change-key',
16
+ 'archive-change',
17
+ 'restore-change',
18
+ 'list-archived'
19
+ ]);
20
+
21
+ function runCli(args) {
22
+ const result = spawnSync(process.execPath, [CLI_BIN, ...args], {
23
+ stdio: 'inherit'
24
+ });
25
+
26
+ if (result.error) {
27
+ console.error(`Failed to run cc-devflow CLI: ${result.error.message}`);
28
+ return 1;
29
+ }
30
+
31
+ return typeof result.status === 'number' ? result.status : 1;
32
+ }
11
33
 
12
34
  async function main() {
13
35
  try {
36
+ const cliArgs = process.argv.slice(2);
37
+ const cliCommand = cliArgs[0];
38
+
39
+ if (!cliCommand || CLI_COMMANDS.has(cliCommand)) {
40
+ process.exit(runCli(cliArgs));
41
+ }
42
+
43
+ const AdapterRegistry = require('../lib/adapters/registry');
44
+ const ClaudeAdapter = require('../lib/adapters/claude-adapter');
45
+ const CodexAdapter = require('../lib/adapters/codex-adapter');
46
+ const { validateConfig, getDefaultConfig } = require('../lib/adapters/config-validator');
47
+ const logger = require('../lib/adapters/logger');
48
+ const fs = require('fs');
49
+ const yaml = require('js-yaml');
50
+
14
51
  // 1. Initialize Registry
15
52
  const registry = AdapterRegistry.getInstance();
16
53
 
@@ -20,7 +20,7 @@ IDCA: cc-investigate -> cc-do -> cc-check -> cc-act
20
20
 
21
21
  Use maintenance skills separately when needed:
22
22
 
23
- - `cc-spec-init`: bootstrap or repair `devflow/specs/` and `change-meta.json`
23
+ - `cc-spec-init`: bootstrap or repair `devflow/specs/` and ``
24
24
  - `cc-simplify`: cleanup pass before ship
25
25
 
26
26
  Use [skills.sh CLI](https://skills.sh/docs/cli) when you only want one skill:
@@ -20,7 +20,7 @@ IDCA: cc-investigate -> cc-do -> cc-check -> cc-act
20
20
 
21
21
  维护类动作按需单独调用:
22
22
 
23
- - `cc-spec-init`:初始化或修复 `devflow/specs/` 与 `change-meta.json`
23
+ - `cc-spec-init`:初始化或修复 `devflow/specs/` 与 ``
24
24
  - `cc-simplify`:ship 前做清理和坏味道检查
25
25
 
26
26
  如果你只想安装单个 Skill,再使用 [skills.sh CLI](https://skills.sh/docs/cli):
@@ -33,6 +33,6 @@ If you need to verify that examples still match the current skill contracts, use
33
33
  - Shows:
34
34
  - work that is truly verified
35
35
  - a case where remote / PR actions are intentionally skipped
36
- - `cc-act` leaving exactly one final handoff file, with `resume-index.md` only for local-handoff
36
+ - `cc-act` leaving exactly one final `handoff/pr-brief.md` file for local handoff
37
37
 
38
38
  If you need symptom routing or artifact-based lookup, go back to [START-HERE.md](./START-HERE.md).
@@ -30,7 +30,7 @@ npm run verify:publish
30
30
 
31
31
  ## Fast Route
32
32
 
33
- ### 1. Do you already have a `report-card.json` verdict?
33
+ ### 1. Do you already have a verification verdict?
34
34
 
35
35
  - If **no**, start with [the happy path example](./pdca-loop/README.md) to understand the full loop once.
36
36
  - If **yes**, continue below.
@@ -67,14 +67,13 @@ Use this when the only thing you know is the file in front of you.
67
67
  | `roadmap.json` | `cc-roadmap` editable machine truth source | [pdca-loop/roadmap.json](./pdca-loop/roadmap.json) |
68
68
  | `ROADMAP.md` | `cc-roadmap` generated human view | [pdca-loop/ROADMAP.md](./pdca-loop/ROADMAP.md) |
69
69
  | `BACKLOG.md` | deprecated `cc-roadmap` -> `cc-plan` projection | [pdca-loop/BACKLOG.md](./pdca-loop/BACKLOG.md) |
70
- | `tasks.md` | `cc-plan`, `cc-investigate`, or `cc-do` | [pdca-loop/tasks.md](./pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md) |
71
- | `design.md` | legacy `cc-plan` fallback | [pdca-loop/design.md](./pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md) or [full-design-blocked/design.md](./full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md) |
72
- | `task-manifest.json` | `cc-do` | [pdca-loop/task-manifest.json](./pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json) |
73
- | `report-card.json` | `cc-check` | [pdca-loop/report-card.json](./pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json), [full-design-blocked/report-card.json](./full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json), or [local-handoff/report-card.json](./local-handoff/changes/REQ-003-audit-log-export/review/report-card.json) |
70
+ | `task.md` | `cc-plan`, `cc-investigate`, or `cc-do` | [pdca-loop/task.md](./pdca-loop/changes/REQ-001-copy-invite-link/task.md) |
71
+ | Git diff / commit | `cc-do` or `cc-check` | current branch history and working tree |
72
+ | current response verdict | `cc-check` | the verification summary from the latest run |
74
73
  | `pr-brief.md` | `cc-act` | [pdca-loop/pr-brief.md](./pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md) |
75
- | `resume-index.md` | `cc-act` with `local-handoff` | [local-handoff/resume-index.md](./local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md) |
74
+ | local `pr-brief.md` | `cc-act` with `local-handoff` | [local-handoff/pr-brief.md](./local-handoff/changes/REQ-003-audit-log-export/handoff/pr-brief.md) |
76
75
 
77
- ### Read `report-card.json` Like This
76
+ ### Read The Verification Verdict Like This
78
77
 
79
78
  | Verdict | Reroute | Meaning |
80
79
  | --- | --- | --- |
@@ -83,7 +82,7 @@ Use this when the only thing you know is the file in front of you.
83
82
  | `blocked` | `cc-do` | proof or execution prerequisites are missing |
84
83
  | `blocked` | `cc-plan` | design or scope truth is broken; do not keep coding blindly |
85
84
 
86
- ### Read `resume-index.md` Like This
85
+ ### Read Local Handoff Like This
87
86
 
88
87
  Ask only:
89
88
 
@@ -118,17 +117,17 @@ If both are true, you are usually in `cc-act` local handoff territory, not back
118
117
 
119
118
  ## Wrong Turns To Avoid
120
119
 
121
- - Do not jump from `tasks.md` straight to `cc-act`
122
- - Do not treat green tests as stronger than a `report-card.json` reroute
123
- - Do not treat `resume-index.md` as proof that planning failed; it may simply mean local handoff
120
+ - Do not jump from `task.md` straight to `cc-act`
121
+ - Do not treat green tests as stronger than a `cc-check` reroute
122
+ - Do not treat `local-handoff` as proof that planning failed; it may simply mean remote actions are intentionally unavailable
124
123
 
125
124
  ## One-Minute Rule
126
125
 
127
126
  If you only have one minute, open these files in order:
128
127
 
129
128
  1. example `README.md`
130
- 2. change `planning/tasks.md`
131
- 3. `report-card.json` or the single final handoff file
129
+ 2. change `task.md`
130
+ 3. `handoff/pr-brief.md` when present; otherwise the latest Git commit and current verification response
132
131
 
133
132
  That should already tell you:
134
133
 
@@ -140,7 +139,8 @@ That should already tell you:
140
139
 
141
140
  `devflow/changes/<change>/` should stay lean.
142
141
 
143
- - Durable truth only: `change-meta.json`, `planning/tasks.md`, CLI-generated `task-manifest.json`, review ledger/findings records, optional CLI logs for debug/failure, `report-card.json`, and one final handoff file. Do not generate task `context.md`, `checkpoint.json`, or AI-written process files.
142
+ - Durable truth only: `task.md`, optional `handoff/pr-brief.md`, and incident postmortem files when a real recurring failure needs one. Do not generate process files.
143
+ - Workflow state is Git-owned: keep `task.md` current and commit each completed stage.
144
144
  - Legacy `planning/design.md`, `planning/analysis.md`, and `cc-review-*.md` are readable fallback inputs for older examples, not new default writes.
145
145
  - Runtime scratch belongs in `devflow/workspaces/<change>/`, not beside the durable record.
146
146
 
@@ -2,17 +2,17 @@
2
2
  "updatedAt": "2026-05-13",
3
3
  "skills": {
4
4
  "cc-roadmap": "5.3.0",
5
- "cc-next": "1.0.1",
6
- "cc-dev": "1.0.1",
7
- "cc-plan": "3.9.0",
8
- "cc-investigate": "1.5.0",
9
- "cc-do": "1.6.7",
10
- "cc-review": "2.0.0",
11
- "cc-pr-review": "1.0.0",
12
- "cc-pr-land": "1.0.0",
13
- "cc-check": "1.11.1",
14
- "cc-act": "1.8.8",
15
- "cc-spec-init": "1.1.0"
5
+ "cc-next": "1.1.1",
6
+ "cc-dev": "1.1.2",
7
+ "cc-plan": "3.10.1",
8
+ "cc-investigate": "1.6.1",
9
+ "cc-do": "1.7.1",
10
+ "cc-review": "2.1.2",
11
+ "cc-pr-review": "1.1.1",
12
+ "cc-pr-land": "1.1.0",
13
+ "cc-check": "1.12.1",
14
+ "cc-act": "1.9.1",
15
+ "cc-spec-init": "1.2.0"
16
16
  },
17
17
  "examples": [
18
18
  {
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Example version: `1.0.0`
6
6
  - Last reviewed: `2026-04-17`
7
- - Bound skills: `cc-roadmap@5.3.0`, `cc-plan@3.9.0`, `cc-do@1.6.7`, `cc-check@1.11.1`
7
+ - Bound skills: `cc-roadmap@5.3.0`, `cc-plan@3.10.1`, `cc-do@1.7.1`, `cc-check@1.12.1`
8
8
 
9
9
  This example shows a requirement that **looked executable**, but `cc-check` correctly stopped it and sent it back to `cc-plan`.
10
10
 
@@ -13,7 +13,7 @@ The shape is intentional:
13
13
  - roadmap item is real enough to matter
14
14
  - design requires `full-design`
15
15
  - tasks were executed far enough to produce evidence
16
- - `report-card.json` is still `blocked`
16
+ - the verification verdict is still `blocked`
17
17
  - reroute is `cc-plan`, not `cc-do`
18
18
 
19
19
  ## Scenario
@@ -43,10 +43,8 @@ The sample shows what happens when implementation moved before the integration d
43
43
  - `roadmap.json` (editable roadmap truth)
44
44
  - `ROADMAP.md` (generated view)
45
45
  - `BACKLOG.md` (deprecated projection)
46
- - `changes/REQ-002-bulk-invite-import/planning/tasks.md`
47
- - `changes/REQ-002-bulk-invite-import/planning/design.md` (legacy fallback sample)
48
- - `changes/REQ-002-bulk-invite-import/planning/task-manifest.json`
49
- - `changes/REQ-002-bulk-invite-import/review/report-card.json`
46
+ - `changes/REQ-002-bulk-invite-import/task.md`
47
+ - `changes/REQ-002-bulk-invite-import/task.md`
50
48
 
51
49
  ## Why There Is No `cc-act` Output
52
50
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-002.v2`
6
6
  - Design version: `design.v2`
7
- - CC-Plan skill version: `3.9.0`
7
+ - CC-Plan skill version: `3.10.1`
8
8
  - Work branch: `REQ/002-bulk-invite-import`
9
9
  - Source roadmap item: `RM-010`
10
10
  - Source roadmap version: `roadmap.v2`
@@ -43,20 +43,25 @@
43
43
  ClaudeCode / Codex 执行本计划时,必须把本文件当成任务模板合同,而不是普通 TODO 列表。
44
44
 
45
45
  - Template source: `assets/TASKS_TEMPLATE.md`
46
- - Context index first: run `cc-devflow query workflow-context --change <changeId> --change-key <changeKey> --cwd <repo-root> --data-only --no-trace --compact` before opening deep sections; use `packetOnly` plus `mustNotForget` first, verify `sourceHashes`, open `defaultOpen` refs only when needed, and reserve `deepOpen` for matching `openWhen.conditions`.
47
- - Task selection: read `planning/task-manifest.json.currentTaskId`; if empty, run the ready-task selector before choosing work.
46
+ - CLI resolver: all workflow commands must run through `.claude/skills/cc-dev/scripts/resolve-cc-devflow.sh` or `.codex/skills/cc-dev/scripts/resolve-cc-devflow.sh`; if it cannot prove `query workflow-context` and `next-change-key`, stop blocked.
47
+ - Context first: run resolved CLI `query workflow-context --change <changeId> --change-key <changeKey> --cwd <repo-root> --data-only --no-trace --compact` before opening deep sections.
48
+ - Task selection: use `scripts/select-ready-tasks.sh --tasks devflow/changes/<change-key>/task.md`.
48
49
  - Task block rule: read the full task block before coding; title-only execution is invalid.
49
- - Completion rule: after verification and review gates pass, run the completion script; do not manually edit checkbox, status, or `currentTaskId`.
50
- - Completion failure: if the script fails, fix the missing review / dependency evidence and rerun it. Do not bypass it by editing JSON or Markdown.
50
+ - Completion rule: after verification and review gates pass, run `scripts/mark-task-complete.sh --tasks devflow/changes/<change-key>/task.md --task <task-id>`.
51
+ - Runtime file ban: do not generate process files beyond this `task.md`.
51
52
 
52
53
  ```bash
53
- cc-devflow query workflow-context --change <changeId> --change-key <changeKey> --cwd <repo-root> --data-only --no-trace --compact
54
- SCRIPT_ROOT=".claude/skills/cc-do/scripts"
54
+ DEVFLOW=".claude/skills/cc-dev/scripts/resolve-cc-devflow.sh"
55
+ if [[ ! -f "$DEVFLOW" && -f ".codex/skills/cc-dev/scripts/resolve-cc-devflow.sh" ]]; then
56
+ DEVFLOW=".codex/skills/cc-dev/scripts/resolve-cc-devflow.sh"
57
+ fi
58
+ bash "$DEVFLOW" require query workflow-context next-change-key
59
+ bash "$DEVFLOW" query workflow-context --change <changeId> --change-key <changeKey> --cwd <repo-root> --data-only --no-trace --compactSCRIPT_ROOT=".claude/skills/cc-do/scripts"
55
60
  if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then
56
61
  SCRIPT_ROOT=".codex/skills/cc-do/scripts"
57
62
  fi
58
- bash "$SCRIPT_ROOT/select-ready-tasks.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json
59
- bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task <task-id>
63
+ bash "$SCRIPT_ROOT/select-ready-tasks.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/
64
+ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task <task-id>
60
65
  ```
61
66
 
62
67
  ## Phase 1: Rule Matrix
@@ -68,7 +73,7 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-b
68
73
  Read first: `design.md`, `src/invite/bulk-import.ts`
69
74
  Verification: `npm test -- src/invite/bulk-import.test.ts`
70
75
  Evidence: failing output
71
- Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T001`; do not hand-edit status.
76
+ Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task T001`; do not hand-edit status.
72
77
  Test seam: bulk invite rules and admin upload UI behavior
73
78
  Public verification path: Run the bulk invite rule and admin panel tests through their public flows
74
79
  Allowed mocks: file upload boundary / billing / seat limit boundary
@@ -81,7 +86,7 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-b
81
86
  Read first: `design.md`, `src/invite/bulk-import.test.ts`
82
87
  Verification: `npm test -- src/invite/bulk-import.test.ts`
83
88
  Evidence: passing output + Git diff
84
- Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T002`; do not hand-edit status.
89
+ Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task T002`; do not hand-edit status.
85
90
  Test seam: bulk invite rules and admin upload UI behavior
86
91
  Public verification path: Run the bulk invite rule and admin panel tests through their public flows
87
92
  Allowed mocks: file upload boundary / billing / seat limit boundary
@@ -96,7 +101,7 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-b
96
101
  Read first: `design.md`, `src/admin/BulkInvitePanel.tsx`
97
102
  Verification: `npm test -- src/admin/BulkInvitePanel.test.tsx`
98
103
  Evidence: failing output
99
- Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T003`; do not hand-edit status.
104
+ Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task T003`; do not hand-edit status.
100
105
  Test seam: bulk invite rules and admin upload UI behavior
101
106
  Public verification path: Run the bulk invite rule and admin panel tests through their public flows
102
107
  Allowed mocks: file upload boundary / billing / seat limit boundary
@@ -109,7 +114,7 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-b
109
114
  Read first: `design.md`, `src/admin/BulkInvitePanel.test.tsx`
110
115
  Verification: `npm test -- src/admin/BulkInvitePanel.test.tsx`
111
116
  Evidence: passing output + review notes
112
- Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T004`; do not hand-edit status.
117
+ Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task T004`; do not hand-edit status.
113
118
  Test seam: bulk invite rules and admin upload UI behavior
114
119
  Public verification path: Run the bulk invite rule and admin panel tests through their public flows
115
120
  Allowed mocks: file upload boundary / billing / seat limit boundary
@@ -121,12 +126,12 @@ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-b
121
126
  Goal: 为 `cc-check` 准备 bulk invite 的新鲜证据。
122
127
  TDD phase: evidence
123
128
  Files: `src/admin/BulkInvitePanel.tsx`, `src/invite/bulk-import.ts`
124
- Read first: `tasks.md`, `task-manifest.json`
129
+ Read first: `task.md`
125
130
  Verification:
126
131
  - `npm test -- src/invite/bulk-import.test.ts`
127
132
  - `npm test -- src/admin/BulkInvitePanel.test.tsx`
128
133
  Evidence: passing output + review notes
129
- Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T005`; do not hand-edit status.
134
+ Completion: after verification evidence and required review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/ --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md --task T005`; do not hand-edit status.
130
135
  Test seam: bulk invite rules and admin upload UI behavior
131
136
  Public verification path: Run the bulk invite rule and admin panel tests through their public flows
132
137
  Allowed mocks: file upload boundary / billing / seat limit boundary