cc-devflow 4.2.0 → 4.4.1

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 (559) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +64 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +212 -0
  3. package/.claude/skills/cc-act/SKILL.md +322 -0
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +64 -0
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +25 -0
  6. package/.claude/skills/cc-act/references/closure-contract.md +49 -0
  7. package/.claude/skills/cc-act/references/git-commit-guidelines.md +83 -0
  8. package/.claude/skills/cc-act/scripts/archive-requirement.sh +49 -0
  9. package/.claude/skills/cc-act/scripts/cc-act-common.sh +240 -0
  10. package/.claude/skills/cc-act/scripts/detect-ship-target.sh +82 -0
  11. package/.claude/skills/cc-act/scripts/generate-status-report.sh +83 -0
  12. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +195 -0
  13. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +315 -0
  14. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +63 -0
  15. package/.claude/skills/cc-check/CHANGELOG.md +73 -0
  16. package/.claude/skills/cc-check/PLAYBOOK.md +153 -0
  17. package/.claude/skills/cc-check/SKILL.md +345 -0
  18. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +50 -0
  19. package/.claude/skills/cc-check/references/gate-contract.md +29 -0
  20. package/.claude/skills/cc-check/references/review-contract.md +45 -0
  21. package/.claude/skills/cc-check/scripts/render-report-card.js +229 -0
  22. package/.claude/skills/cc-check/scripts/run-quality-gates.sh +86 -0
  23. package/.claude/skills/cc-check/scripts/verify-gate.sh +57 -0
  24. package/.claude/skills/cc-do/CHANGELOG.md +49 -0
  25. package/.claude/skills/cc-do/PLAYBOOK.md +119 -0
  26. package/.claude/skills/cc-do/SKILL.md +216 -0
  27. package/.claude/skills/cc-do/references/execution-recovery.md +86 -0
  28. package/.claude/skills/cc-do/references/parallel-dispatch.md +80 -0
  29. package/.claude/skills/cc-do/scripts/build-task-context.sh +184 -0
  30. package/.claude/skills/cc-do/scripts/cc-do-common.sh +79 -0
  31. package/.claude/skills/cc-do/scripts/check-task-status.sh +92 -0
  32. package/.claude/skills/cc-do/scripts/detect-file-conflicts.sh +87 -0
  33. package/.claude/skills/cc-do/scripts/mark-task-complete.sh +119 -0
  34. package/.claude/skills/cc-do/scripts/record-review-decision.sh +89 -0
  35. package/.claude/skills/cc-do/scripts/recover-workflow.sh +84 -0
  36. package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +70 -0
  37. package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +135 -0
  38. package/.claude/skills/cc-do/scripts/verify-task-gates.sh +94 -0
  39. package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +102 -0
  40. package/.claude/skills/cc-investigate/CHANGELOG.md +26 -0
  41. package/.claude/skills/cc-investigate/PLAYBOOK.md +49 -0
  42. package/.claude/skills/cc-investigate/SKILL.md +221 -0
  43. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +55 -0
  44. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +52 -0
  45. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +103 -0
  46. package/.claude/skills/cc-investigate/references/investigation-contract.md +28 -0
  47. package/.claude/skills/cc-investigate/scripts/bootstrap-analysis.sh +38 -0
  48. package/.claude/skills/cc-plan/CHANGELOG.md +99 -0
  49. package/.claude/skills/cc-plan/PLAYBOOK.md +106 -0
  50. package/.claude/skills/cc-plan/SKILL.md +325 -0
  51. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +155 -0
  52. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +98 -0
  53. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +108 -0
  54. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +79 -0
  55. package/.claude/skills/cc-plan/references/planning-contract.md +82 -0
  56. package/.claude/skills/cc-plan/scripts/bump-skill-version.sh +103 -0
  57. package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +75 -0
  58. package/.claude/skills/cc-plan/scripts/validate-scope.sh +78 -0
  59. package/.claude/skills/cc-roadmap/CHANGELOG.md +114 -0
  60. package/.claude/skills/cc-roadmap/PLAYBOOK.md +136 -0
  61. package/.claude/skills/cc-roadmap/SKILL.md +259 -0
  62. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +45 -0
  63. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +153 -0
  64. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +48 -0
  65. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +37 -0
  66. package/.claude/skills/cc-roadmap/scripts/bump-skill-version.sh +103 -0
  67. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +604 -0
  68. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/query.js +63 -0
  69. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +245 -0
  70. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +139 -0
  71. package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +109 -0
  72. package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +153 -0
  73. package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +100 -0
  74. package/.claude/skills/cc-simplify/CHANGELOG.md +10 -0
  75. package/.claude/skills/cc-simplify/SKILL.md +55 -0
  76. package/.claude/skills/cc-spec-init/CHANGELOG.md +7 -0
  77. package/.claude/skills/cc-spec-init/PLAYBOOK.md +55 -0
  78. package/.claude/skills/cc-spec-init/SKILL.md +127 -0
  79. package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +63 -0
  80. package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +25 -0
  81. package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +34 -0
  82. package/.claude/skills/cc-spec-init/references/spec-contract.md +22 -0
  83. package/.claude/skills/cc-spec-init/scripts/bootstrap-specs.sh +31 -0
  84. package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +45 -0
  85. package/CHANGELOG.md +101 -4
  86. package/README.md +120 -755
  87. package/README.zh-CN.md +119 -755
  88. package/bin/adapt.js +2 -6
  89. package/bin/cc-devflow-cli.js +72 -177
  90. package/config/distributable-skills.json +24 -0
  91. package/docs/CLAUDE.md +10 -6
  92. package/docs/commands/README.md +19 -46
  93. package/docs/commands/README.zh-CN.md +25 -48
  94. package/docs/examples/BY-ARTIFACT.md +7 -0
  95. package/docs/examples/README.md +38 -0
  96. package/docs/examples/START-HERE.md +149 -0
  97. package/docs/examples/example-bindings.json +38 -0
  98. package/docs/examples/full-design-blocked/BACKLOG.md +45 -0
  99. package/docs/examples/full-design-blocked/README.md +55 -0
  100. package/docs/examples/full-design-blocked/ROADMAP.md +53 -0
  101. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +154 -0
  102. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +146 -0
  103. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +78 -0
  104. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +52 -0
  105. package/docs/examples/full-design-blocked/roadmap-tracking.json +50 -0
  106. package/docs/examples/local-handoff/BACKLOG.md +45 -0
  107. package/docs/examples/local-handoff/README.md +56 -0
  108. package/docs/examples/local-handoff/ROADMAP.md +45 -0
  109. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +39 -0
  110. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +29 -0
  111. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +71 -0
  112. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +98 -0
  113. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +59 -0
  114. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +44 -0
  115. package/docs/examples/local-handoff/roadmap-tracking.json +48 -0
  116. package/docs/examples/pdca-loop/BACKLOG.md +46 -0
  117. package/docs/examples/pdca-loop/README.md +58 -0
  118. package/docs/examples/pdca-loop/ROADMAP.md +133 -0
  119. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +72 -0
  120. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +29 -0
  121. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +72 -0
  122. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +201 -0
  123. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +73 -0
  124. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +44 -0
  125. package/docs/examples/pdca-loop/roadmap-tracking.json +114 -0
  126. package/docs/examples/scripts/check-example-bindings.sh +116 -0
  127. package/docs/guides/getting-started.md +94 -129
  128. package/docs/guides/getting-started.zh-CN.md +103 -84
  129. package/docs/skill-runtime-migration.md +46 -0
  130. package/docs/v4.3.0-migration-guide.md +111 -0
  131. package/lib/compiler/CLAUDE.md +55 -84
  132. package/lib/compiler/__tests__/drift.test.js +1 -1
  133. package/lib/compiler/__tests__/errors.test.js +0 -1
  134. package/lib/compiler/__tests__/integration.test.js +49 -3
  135. package/lib/compiler/__tests__/manifest.test.js +0 -156
  136. package/lib/compiler/__tests__/parser.test.js +33 -104
  137. package/lib/compiler/__tests__/schemas.test.js +30 -34
  138. package/lib/compiler/__tests__/skills-registry.test.js +114 -0
  139. package/lib/compiler/__tests__/transformer.test.js +5 -9
  140. package/lib/compiler/emitters/antigravity-emitter.js +5 -213
  141. package/lib/compiler/emitters/base-emitter.js +3 -298
  142. package/lib/compiler/emitters/codex-emitter.js +4 -202
  143. package/lib/compiler/emitters/cursor-emitter.js +3 -287
  144. package/lib/compiler/emitters/qwen-emitter.js +4 -176
  145. package/lib/compiler/index.js +65 -345
  146. package/lib/compiler/manifest.js +6 -68
  147. package/lib/compiler/parser.js +31 -63
  148. package/lib/compiler/platforms.js +32 -277
  149. package/lib/compiler/resource-copier.js +176 -6
  150. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +3 -3
  151. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +14 -4
  152. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +16 -7
  153. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +10 -15
  154. package/lib/compiler/rules-emitters/base-rules-emitter.js +5 -5
  155. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +7 -12
  156. package/lib/compiler/rules-emitters/index.js +6 -3
  157. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +7 -7
  158. package/lib/compiler/schemas.js +8 -4
  159. package/lib/compiler/skills-registry.js +213 -15
  160. package/lib/compiler/transformer.js +1 -1
  161. package/lib/skill-runtime/CLAUDE.md +19 -0
  162. package/lib/skill-runtime/__tests__/autopilot.test.js +210 -0
  163. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +181 -0
  164. package/lib/skill-runtime/__tests__/delegation.test.js +97 -0
  165. package/lib/skill-runtime/__tests__/dispatch.test.js +267 -0
  166. package/lib/skill-runtime/__tests__/intent.test.js +219 -0
  167. package/lib/skill-runtime/__tests__/lifecycle.test.js +169 -0
  168. package/lib/skill-runtime/__tests__/paths.test.js +42 -0
  169. package/lib/skill-runtime/__tests__/planner.tdd.test.js +250 -0
  170. package/lib/skill-runtime/__tests__/prepare-pr.test.js +139 -0
  171. package/lib/skill-runtime/__tests__/query.test.js +284 -0
  172. package/lib/skill-runtime/__tests__/runtime.integration.test.js +279 -0
  173. package/lib/skill-runtime/__tests__/schemas.test.js +207 -0
  174. package/lib/skill-runtime/__tests__/team-state.test.js +51 -0
  175. package/lib/skill-runtime/__tests__/worker-run.test.js +253 -0
  176. package/lib/skill-runtime/__tests__/worker.test.js +56 -0
  177. package/lib/skill-runtime/artifacts.js +93 -0
  178. package/lib/skill-runtime/delegation.js +533 -0
  179. package/lib/skill-runtime/index.js +34 -0
  180. package/lib/skill-runtime/intent.js +333 -0
  181. package/lib/skill-runtime/lifecycle.js +294 -0
  182. package/lib/skill-runtime/operations/CLAUDE.md +19 -0
  183. package/lib/skill-runtime/operations/approve.js +66 -0
  184. package/lib/skill-runtime/operations/autopilot-core.js +337 -0
  185. package/lib/skill-runtime/operations/autopilot-execution.js +307 -0
  186. package/lib/skill-runtime/operations/autopilot-shared.js +48 -0
  187. package/lib/skill-runtime/operations/autopilot.js +163 -0
  188. package/lib/skill-runtime/operations/dispatch.js +454 -0
  189. package/lib/skill-runtime/operations/init.js +64 -0
  190. package/lib/{harness → skill-runtime}/operations/janitor.js +9 -6
  191. package/lib/skill-runtime/operations/plan.js +59 -0
  192. package/lib/skill-runtime/operations/prepare-pr.js +25 -0
  193. package/lib/{harness → skill-runtime}/operations/release.js +18 -5
  194. package/lib/skill-runtime/operations/resume.js +143 -0
  195. package/lib/skill-runtime/operations/snapshot.js +45 -0
  196. package/lib/skill-runtime/operations/verify.js +170 -0
  197. package/lib/skill-runtime/operations/worker-run.js +529 -0
  198. package/lib/skill-runtime/operations/worker.js +33 -0
  199. package/lib/skill-runtime/paths.js +213 -0
  200. package/lib/skill-runtime/planner.js +519 -0
  201. package/lib/skill-runtime/query.js +157 -0
  202. package/lib/skill-runtime/review.js +557 -0
  203. package/lib/skill-runtime/schemas.js +400 -0
  204. package/lib/{harness → skill-runtime}/store.js +45 -30
  205. package/lib/skill-runtime/team-state.js +122 -0
  206. package/package.json +13 -11
  207. package/.claude/CLAUDE.md +0 -125
  208. package/.claude/agents/architecture-designer.md +0 -443
  209. package/.claude/agents/bug-analyzer.md +0 -381
  210. package/.claude/agents/checklist-agent.md +0 -175
  211. package/.claude/agents/clarify-analyst.md +0 -50
  212. package/.claude/agents/code-quality-reviewer.md +0 -205
  213. package/.claude/agents/code-reviewer.md +0 -71
  214. package/.claude/agents/codex-analyzer.md +0 -39
  215. package/.claude/agents/compatibility-checker.md +0 -579
  216. package/.claude/agents/consistency-checker.md +0 -532
  217. package/.claude/agents/dev-implementer.md +0 -195
  218. package/.claude/agents/flow-researcher.md +0 -132
  219. package/.claude/agents/impact-analyzer.md +0 -440
  220. package/.claude/agents/planner.md +0 -230
  221. package/.claude/agents/prd-writer.md +0 -320
  222. package/.claude/agents/project-guidelines-generator.md +0 -1329
  223. package/.claude/agents/qa-tester.md +0 -313
  224. package/.claude/agents/release-manager.md +0 -295
  225. package/.claude/agents/security-reviewer.md +0 -314
  226. package/.claude/agents/spec-reviewer.md +0 -221
  227. package/.claude/agents/style-guide-generator.md +0 -458
  228. package/.claude/agents/tech-architect.md +0 -516
  229. package/.claude/agents/ui-designer.md +0 -485
  230. package/.claude/commands/core/architecture.md +0 -459
  231. package/.claude/commands/core/guidelines.md +0 -511
  232. package/.claude/commands/core/roadmap.md +0 -468
  233. package/.claude/commands/core/style.md +0 -83
  234. package/.claude/commands/flow/CLAUDE.md +0 -28
  235. package/.claude/commands/flow/archive.md +0 -280
  236. package/.claude/commands/flow/checklist.md +0 -18
  237. package/.claude/commands/flow/clarify.md +0 -18
  238. package/.claude/commands/flow/constitution.md +0 -82
  239. package/.claude/commands/flow/context.md +0 -150
  240. package/.claude/commands/flow/delta.md +0 -245
  241. package/.claude/commands/flow/dev.md +0 -40
  242. package/.claude/commands/flow/fix.md +0 -217
  243. package/.claude/commands/flow/ideate.md +0 -214
  244. package/.claude/commands/flow/init.md +0 -38
  245. package/.claude/commands/flow/new.md +0 -23
  246. package/.claude/commands/flow/quality.md +0 -21
  247. package/.claude/commands/flow/release.md +0 -36
  248. package/.claude/commands/flow/restart.md +0 -97
  249. package/.claude/commands/flow/spec.md +0 -36
  250. package/.claude/commands/flow/status.md +0 -64
  251. package/.claude/commands/flow/update.md +0 -111
  252. package/.claude/commands/flow/upgrade.md +0 -115
  253. package/.claude/commands/flow/verify.md +0 -37
  254. package/.claude/commands/flow/workspace.md +0 -155
  255. package/.claude/commands/util/cancel-ralph.md +0 -60
  256. package/.claude/commands/util/code-review.md +0 -58
  257. package/.claude/commands/util/git-commit.md +0 -422
  258. package/.claude/commands/util/problem-analyzer.md +0 -60
  259. package/.claude/config/quality-gates.yml +0 -305
  260. package/.claude/config/quality-rules.yml +0 -161
  261. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +0 -426
  262. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +0 -658
  263. package/.claude/docs/design/intent-driven-input-design.md +0 -380
  264. package/.claude/docs/design/prd-version-management-design.md +0 -437
  265. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +0 -117
  266. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +0 -99
  267. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +0 -188
  268. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +0 -338
  269. package/.claude/docs/guides/TEAM_MODE_GUIDE.md +0 -312
  270. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +0 -633
  271. package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +0 -156
  272. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +0 -261
  273. package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +0 -148
  274. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +0 -52
  275. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +0 -206
  276. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +0 -71
  277. package/.claude/docs/templates/DELTA_SPEC_TEMPLATE.md +0 -91
  278. package/.claude/docs/templates/DESIGN_DECISIONS_TEMPLATE.md +0 -151
  279. package/.claude/docs/templates/EPIC_TEMPLATE.md +0 -805
  280. package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +0 -80
  281. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +0 -198
  282. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +0 -57
  283. package/.claude/docs/templates/JOURNAL_TEMPLATE.md +0 -75
  284. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +0 -76
  285. package/.claude/docs/templates/PRD_TEMPLATE.md +0 -562
  286. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +0 -276
  287. package/.claude/docs/templates/REVIEW-HIGH.md +0 -57
  288. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +0 -198
  289. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +0 -310
  290. package/.claude/docs/templates/STYLE_TEMPLATE.md +0 -1266
  291. package/.claude/docs/templates/TASKS_TEMPLATE.md +0 -523
  292. package/.claude/docs/templates/TECH_DESIGN_TEMPLATE.md +0 -1019
  293. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +0 -1435
  294. package/.claude/docs/templates/_shared/CLAUDE.md +0 -36
  295. package/.claude/docs/templates/_shared/CONSTITUTION_CHECK.md +0 -125
  296. package/.claude/docs/templates/_shared/VALIDATION_CHECKLIST.md +0 -187
  297. package/.claude/docs/templates/_shared/YAML_FRONTMATTER.md +0 -164
  298. package/.claude/docs/templates/context/dev.jsonl.template +0 -6
  299. package/.claude/docs/templates/context/epic.jsonl.template +0 -5
  300. package/.claude/docs/templates/context/prd.jsonl.template +0 -4
  301. package/.claude/docs/templates/context/research.jsonl.template +0 -4
  302. package/.claude/docs/templates/context/review.jsonl.template +0 -5
  303. package/.claude/docs/templates/context/tech.jsonl.template +0 -5
  304. package/.claude/guides/agent-guides/agent-coordination-guide.md +0 -459
  305. package/.claude/guides/project-guidelines-system.md +0 -463
  306. package/.claude/guides/technical-guides/datetime-handling-guide.md +0 -563
  307. package/.claude/guides/technical-guides/git-github-guide.md +0 -642
  308. package/.claude/guides/technical-guides/test-execution-guide.md +0 -618
  309. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +0 -217
  310. package/.claude/guides/workflow-guides/flow-orchestrator.md +0 -48
  311. package/.claude/hooks/CLAUDE.md +0 -342
  312. package/.claude/hooks/checklist-gate.js +0 -397
  313. package/.claude/hooks/error-handling-reminder.sh +0 -12
  314. package/.claude/hooks/error-handling-reminder.ts +0 -459
  315. package/.claude/hooks/hooks.json +0 -15
  316. package/.claude/hooks/inject-agent-context.ts +0 -480
  317. package/.claude/hooks/inject-skill-context.ts +0 -359
  318. package/.claude/hooks/post-tool-use-tracker.sh +0 -280
  319. package/.claude/hooks/pre-tool-use-guardrail.sh +0 -36
  320. package/.claude/hooks/pre-tool-use-guardrail.ts +0 -342
  321. package/.claude/hooks/ralph-loop.ts +0 -931
  322. package/.claude/hooks/ralph-stop-hook.sh +0 -190
  323. package/.claude/hooks/skill-activation-prompt.sh +0 -36
  324. package/.claude/hooks/skill-activation-prompt.ts +0 -214
  325. package/.claude/hooks/state/skills-used-test-guard.json +0 -3
  326. package/.claude/hooks/task-completed-hook.ts +0 -593
  327. package/.claude/hooks/teammate-idle-hook.ts +0 -690
  328. package/.claude/hooks/types/team-types.d.ts +0 -238
  329. package/.claude/rules/devflow-conventions.md +0 -286
  330. package/.claude/rules/project-constitution.md +0 -1002
  331. package/.claude/rules/rationalization-library.md +0 -282
  332. package/.claude/schemas/constitution.schema.json +0 -43
  333. package/.claude/scripts/CLAUDE.md +0 -76
  334. package/.claude/scripts/analyze-upgrade-impact.sh +0 -200
  335. package/.claude/scripts/archive-requirement.sh +0 -394
  336. package/.claude/scripts/calculate-checklist-completion.sh +0 -243
  337. package/.claude/scripts/calculate-quarter.sh +0 -206
  338. package/.claude/scripts/check-dependencies.sh +0 -409
  339. package/.claude/scripts/check-prerequisites.sh +0 -232
  340. package/.claude/scripts/check-task-status.sh +0 -288
  341. package/.claude/scripts/checklist-errors.sh +0 -131
  342. package/.claude/scripts/common.sh +0 -1102
  343. package/.claude/scripts/consolidate-research.sh +0 -182
  344. package/.claude/scripts/create-requirement.sh +0 -451
  345. package/.claude/scripts/delta-parser.ts +0 -527
  346. package/.claude/scripts/detect-file-conflicts.sh +0 -151
  347. package/.claude/scripts/export-contracts.sh +0 -117
  348. package/.claude/scripts/extract-data-model.sh +0 -78
  349. package/.claude/scripts/flow-context-add.sh +0 -134
  350. package/.claude/scripts/flow-context-init.sh +0 -133
  351. package/.claude/scripts/flow-context-validate.sh +0 -144
  352. package/.claude/scripts/flow-delta-apply.sh +0 -297
  353. package/.claude/scripts/flow-delta-archive.sh +0 -71
  354. package/.claude/scripts/flow-delta-create.sh +0 -202
  355. package/.claude/scripts/flow-delta-list.sh +0 -142
  356. package/.claude/scripts/flow-delta-status.sh +0 -235
  357. package/.claude/scripts/flow-quality-full.sh +0 -215
  358. package/.claude/scripts/flow-quality-quick.sh +0 -119
  359. package/.claude/scripts/flow-workspace-init.sh +0 -117
  360. package/.claude/scripts/flow-workspace-record.sh +0 -164
  361. package/.claude/scripts/generate-clarification-questions.sh +0 -377
  362. package/.claude/scripts/generate-clarification-report.sh +0 -463
  363. package/.claude/scripts/generate-quickstart.sh +0 -146
  364. package/.claude/scripts/generate-research-tasks.sh +0 -157
  365. package/.claude/scripts/generate-status-report.sh +0 -523
  366. package/.claude/scripts/generate-tech-analysis.sh +0 -46
  367. package/.claude/scripts/get-workflow-status.sh +0 -415
  368. package/.claude/scripts/locate-requirement-in-roadmap.sh +0 -233
  369. package/.claude/scripts/manage-constitution.sh +0 -602
  370. package/.claude/scripts/mark-task-complete.sh +0 -198
  371. package/.claude/scripts/parse-task-dependencies.js +0 -334
  372. package/.claude/scripts/populate-research-tasks.sh +0 -284
  373. package/.claude/scripts/record-quality-error.sh +0 -165
  374. package/.claude/scripts/recover-workflow.sh +0 -463
  375. package/.claude/scripts/run-clarify-scan.sh +0 -601
  376. package/.claude/scripts/run-high-review.sh +0 -62
  377. package/.claude/scripts/run-problem-analysis.sh +0 -68
  378. package/.claude/scripts/run-quality-gates.sh +0 -242
  379. package/.claude/scripts/setup-epic.sh +0 -173
  380. package/.claude/scripts/setup-ralph-loop.sh +0 -155
  381. package/.claude/scripts/sync-roadmap-progress.sh +0 -300
  382. package/.claude/scripts/sync-task-marks.sh +0 -199
  383. package/.claude/scripts/team-dev-init.sh +0 -319
  384. package/.claude/scripts/team-state-recovery.sh +0 -229
  385. package/.claude/scripts/test-clarify-scan.sh +0 -515
  386. package/.claude/scripts/update-agent-context.sh +0 -806
  387. package/.claude/scripts/validate-constitution.sh +0 -567
  388. package/.claude/scripts/validate-hooks.sh +0 -487
  389. package/.claude/scripts/validate-research.sh +0 -332
  390. package/.claude/scripts/validate-scope-boundary.sh +0 -493
  391. package/.claude/scripts/verify-gate.sh +0 -269
  392. package/.claude/scripts/verify-setup.sh +0 -37
  393. package/.claude/scripts/workflow-status.ts +0 -433
  394. package/.claude/settings.json +0 -95
  395. package/.claude/skills/_reference-implementations/README.md +0 -96
  396. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +0 -302
  397. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +0 -451
  398. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +0 -307
  399. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +0 -638
  400. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +0 -275
  401. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +0 -224
  402. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +0 -213
  403. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +0 -756
  404. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +0 -336
  405. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +0 -789
  406. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +0 -235
  407. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +0 -754
  408. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +0 -399
  409. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +0 -331
  410. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +0 -872
  411. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +0 -502
  412. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +0 -767
  413. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +0 -502
  414. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +0 -501
  415. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +0 -406
  416. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +0 -364
  417. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +0 -428
  418. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +0 -418
  419. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +0 -169
  420. package/.claude/skills/domain/attention-refresh/SKILL.md +0 -170
  421. package/.claude/skills/domain/brainstorming/SKILL.md +0 -161
  422. package/.claude/skills/domain/debugging/SKILL.md +0 -221
  423. package/.claude/skills/domain/finishing-branch/SKILL.md +0 -189
  424. package/.claude/skills/domain/receiving-review/SKILL.md +0 -153
  425. package/.claude/skills/domain/tdd/SKILL.md +0 -218
  426. package/.claude/skills/domain/verification/SKILL.md +0 -158
  427. package/.claude/skills/guardrail/constitution-guardian/SKILL.md +0 -306
  428. package/.claude/skills/guardrail/tdd-enforcer/SKILL.md +0 -192
  429. package/.claude/skills/skill-rules.json +0 -359
  430. package/.claude/skills/utility/constitution-quick-ref/SKILL.md +0 -374
  431. package/.claude/skills/utility/file-standards/SKILL.md +0 -353
  432. package/.claude/skills/utility/fractal-docs/SKILL.md +0 -45
  433. package/.claude/skills/utility/journey-checker/SKILL.md +0 -199
  434. package/.claude/skills/utility/journey-checker/pressure-scenarios.md +0 -164
  435. package/.claude/skills/utility/npm-release/SKILL.md +0 -314
  436. package/.claude/skills/utility/skill-creator/LICENSE.txt +0 -202
  437. package/.claude/skills/utility/skill-creator/SKILL.md +0 -356
  438. package/.claude/skills/utility/skill-creator/references/output-patterns.md +0 -82
  439. package/.claude/skills/utility/skill-creator/references/workflows.md +0 -28
  440. package/.claude/skills/utility/skill-creator/scripts/init_skill.py +0 -303
  441. package/.claude/skills/utility/skill-creator/scripts/package_skill.py +0 -110
  442. package/.claude/skills/utility/skill-creator/scripts/quick_validate.py +0 -95
  443. package/.claude/skills/workflow/CLAUDE.md +0 -24
  444. package/.claude/skills/workflow/flow-dev/CLAUDE.md +0 -16
  445. package/.claude/skills/workflow/flow-dev/SKILL.md +0 -94
  446. package/.claude/skills/workflow/flow-dev/assets/IMPLEMENTATION_PLAN_TEMPLATE.md +0 -71
  447. package/.claude/skills/workflow/flow-dev/context.jsonl +0 -4
  448. package/.claude/skills/workflow/flow-dev/dev-implementer.jsonl +0 -8
  449. package/.claude/skills/workflow/flow-dev/scripts/entry-gate.sh +0 -116
  450. package/.claude/skills/workflow/flow-dev/scripts/exit-gate.sh +0 -101
  451. package/.claude/skills/workflow/flow-dev/scripts/task-orchestrator.sh +0 -106
  452. package/.claude/skills/workflow/flow-fix/SKILL.md +0 -105
  453. package/.claude/skills/workflow/flow-fix/context.jsonl +0 -6
  454. package/.claude/skills/workflow/flow-fix/references/bug-analyzer.md +0 -381
  455. package/.claude/skills/workflow/flow-init/SKILL.md +0 -84
  456. package/.claude/skills/workflow/flow-init/assets/BRAINSTORM_TEMPLATE.md +0 -148
  457. package/.claude/skills/workflow/flow-init/assets/INIT_FLOW_TEMPLATE.md +0 -198
  458. package/.claude/skills/workflow/flow-init/assets/RESEARCH_TEMPLATE.md +0 -276
  459. package/.claude/skills/workflow/flow-init/context.jsonl +0 -5
  460. package/.claude/skills/workflow/flow-init/references/flow-researcher.md +0 -132
  461. package/.claude/skills/workflow/flow-init/scripts/check-prerequisites.sh +0 -240
  462. package/.claude/skills/workflow/flow-init/scripts/consolidate-research.sh +0 -182
  463. package/.claude/skills/workflow/flow-init/scripts/create-requirement.sh +0 -404
  464. package/.claude/skills/workflow/flow-init/scripts/generate-research-tasks.sh +0 -157
  465. package/.claude/skills/workflow/flow-init/scripts/populate-research-tasks.sh +0 -284
  466. package/.claude/skills/workflow/flow-init/scripts/validate-research.sh +0 -340
  467. package/.claude/skills/workflow/flow-quality/SKILL.md +0 -98
  468. package/.claude/skills/workflow/flow-quality/context.jsonl +0 -6
  469. package/.claude/skills/workflow/flow-quality/references/code-quality-reviewer.md +0 -205
  470. package/.claude/skills/workflow/flow-quality/references/qa-tester.md +0 -313
  471. package/.claude/skills/workflow/flow-quality/references/security-reviewer.md +0 -314
  472. package/.claude/skills/workflow/flow-quality/references/spec-reviewer.md +0 -221
  473. package/.claude/skills/workflow/flow-release/SKILL.md +0 -49
  474. package/.claude/skills/workflow/flow-release/context.jsonl +0 -5
  475. package/.claude/skills/workflow/flow-release/references/release-manager.md +0 -295
  476. package/.claude/skills/workflow/flow-spec/CLAUDE.md +0 -17
  477. package/.claude/skills/workflow/flow-spec/SKILL.md +0 -74
  478. package/.claude/skills/workflow/flow-spec/context.jsonl +0 -5
  479. package/.claude/skills/workflow/flow-spec/scripts/entry-gate.sh +0 -194
  480. package/.claude/skills/workflow/flow-spec/scripts/exit-gate.sh +0 -244
  481. package/.claude/skills/workflow/flow-spec/scripts/parallel-orchestrator.sh +0 -205
  482. package/.claude/skills/workflow/flow-spec/scripts/team-communication.sh +0 -353
  483. package/.claude/skills/workflow/flow-spec/scripts/team-init.sh +0 -195
  484. package/.claude/skills/workflow/flow-spec/scripts/test-team-mode.sh +0 -496
  485. package/.claude/skills/workflow/flow-spec/team-config.json +0 -165
  486. package/.claude/skills/workflow/flow-verify/CLAUDE.md +0 -10
  487. package/.claude/skills/workflow/flow-verify/SKILL.md +0 -53
  488. package/.claude/skills/workflow/flow-verify/context.jsonl +0 -5
  489. package/.claude/skills/workflow.yaml +0 -219
  490. package/.claude/tests/README.md +0 -300
  491. package/.claude/tests/TODO.md +0 -69
  492. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  493. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  494. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  495. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  496. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  497. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  498. package/.claude/tests/constitution/run_all_constitution_tests.sh +0 -111
  499. package/.claude/tests/constitution/test_agent_assignment.sh +0 -207
  500. package/.claude/tests/constitution/test_article_coverage.sh +0 -201
  501. package/.claude/tests/constitution/test_template_completeness.sh +0 -150
  502. package/.claude/tests/constitution/test_version_consistency.sh +0 -120
  503. package/.claude/tests/fixtures/spec_delta_full.md +0 -16
  504. package/.claude/tests/fixtures/tasks_progress_sample.md +0 -5
  505. package/.claude/tests/run-all-tests.sh +0 -229
  506. package/.claude/tests/scripts/run.sh +0 -30
  507. package/.claude/tests/scripts/test-framework.sh +0 -128
  508. package/.claude/tests/scripts/test_check_prerequisites.sh +0 -511
  509. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +0 -504
  510. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +0 -505
  511. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +0 -506
  512. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +0 -507
  513. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +0 -508
  514. package/.claude/tests/scripts/test_check_task_status.sh +0 -499
  515. package/.claude/tests/scripts/test_common.sh +0 -244
  516. package/.claude/tests/scripts/test_generate_status_report.sh +0 -71
  517. package/.claude/tests/scripts/test_mark_task_complete.sh +0 -441
  518. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +0 -410
  519. package/.claude/tests/scripts/test_recover_workflow.sh +0 -304
  520. package/.claude/tests/scripts/test_setup_epic.sh +0 -437
  521. package/.claude/tests/scripts/test_sync_task_marks.sh +0 -196
  522. package/.claude/tests/scripts/test_validate_constitution.sh +0 -74
  523. package/.claude/tests/scripts/test_validate_research.sh +0 -462
  524. package/.claude/tests/slugify.bats +0 -82
  525. package/.claude/tests/test-framework.sh +0 -732
  526. package/.claude/tests/test_analyze_upgrade_impact.py +0 -34
  527. package/.claude/tests/test_consolidate_research.py +0 -48
  528. package/.claude/tests/test_export_contracts.py +0 -43
  529. package/.claude/tests/test_extract_data_model.py +0 -33
  530. package/.claude/tests/test_generate_quickstart.py +0 -50
  531. package/.claude/tests/test_generate_research_tasks.py +0 -52
  532. package/bin/harness.js +0 -22
  533. package/docs/commands/core-roadmap.md +0 -106
  534. package/docs/commands/core-roadmap.zh-CN.md +0 -102
  535. package/docs/commands/core-style.md +0 -53
  536. package/docs/commands/core-style.zh-CN.md +0 -53
  537. package/docs/commands/flow-init.md +0 -140
  538. package/docs/commands/flow-init.zh-CN.md +0 -169
  539. package/docs/commands/flow-new.md +0 -39
  540. package/docs/commands/flow-new.zh-CN.md +0 -39
  541. package/lib/compiler/__tests__/compile-regression.test.js +0 -103
  542. package/lib/compiler/__tests__/multi-module-emitters.test.js +0 -534
  543. package/lib/compiler/__tests__/resource-copier.test.js +0 -26
  544. package/lib/compiler/__tests__/skill-discovery.test.js +0 -72
  545. package/lib/compiler/context-expander.js +0 -179
  546. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +0 -109
  547. package/lib/compiler/rules-emitters/codex-rules-emitter.js +0 -116
  548. package/lib/compiler/skill-discovery.js +0 -68
  549. package/lib/harness/CLAUDE.md +0 -21
  550. package/lib/harness/cli.js +0 -208
  551. package/lib/harness/index.js +0 -16
  552. package/lib/harness/operations/dispatch.js +0 -285
  553. package/lib/harness/operations/init.js +0 -48
  554. package/lib/harness/operations/pack.js +0 -100
  555. package/lib/harness/operations/plan.js +0 -29
  556. package/lib/harness/operations/resume.js +0 -44
  557. package/lib/harness/operations/verify.js +0 -163
  558. package/lib/harness/planner.js +0 -141
  559. package/lib/harness/schemas.js +0 -108
@@ -0,0 +1,181 @@
1
+ /**
2
+ * [INPUT]: 依赖 child_process 调用 CLI,依赖临时仓库夹具与 .claude 模板文件。
3
+ * [OUTPUT]: 验证恢复后的多平台 CLI 会安装 .claude,并按原版策略覆盖差异文件。
4
+ * [POS]: lib/skill-runtime/__tests__ 的 CLI 分发回归测试。
5
+ * [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const os = require('os');
10
+ const path = require('path');
11
+ const { spawnSync } = require('child_process');
12
+ const matter = require('gray-matter');
13
+
14
+ const REPO_ROOT = path.resolve(__dirname, '../../..');
15
+ const CLI_BIN = path.join(REPO_ROOT, 'bin/cc-devflow-cli.js');
16
+ const TEMPLATE_ROOT = path.join(REPO_ROOT, '.claude');
17
+
18
+ function runCli(args, cwd) {
19
+ const result = spawnSync(process.execPath, [CLI_BIN, ...args], {
20
+ cwd,
21
+ encoding: 'utf8'
22
+ });
23
+
24
+ if (result.error) {
25
+ throw result.error;
26
+ }
27
+
28
+ return result;
29
+ }
30
+
31
+ function readPackageJson(repoRoot) {
32
+ const packagePath = path.join(repoRoot, 'package.json');
33
+ return JSON.parse(fs.readFileSync(packagePath, 'utf8'));
34
+ }
35
+
36
+ describe('cc-devflow cli distribution bootstrap', () => {
37
+ let repoRoot;
38
+
39
+ beforeEach(() => {
40
+ repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-cli-bootstrap-'));
41
+ fs.writeFileSync(
42
+ path.join(repoRoot, 'package.json'),
43
+ JSON.stringify(
44
+ {
45
+ name: 'tmp-repo',
46
+ version: '0.0.0',
47
+ scripts: {
48
+ test: 'node -e "process.exit(0)"'
49
+ }
50
+ },
51
+ null,
52
+ 2
53
+ )
54
+ );
55
+ });
56
+
57
+ afterEach(() => {
58
+ fs.rmSync(repoRoot, { recursive: true, force: true });
59
+ });
60
+
61
+ test('init installs .claude without mutating unrelated package scripts', () => {
62
+ const result = runCli(['init', '--dir', repoRoot], repoRoot);
63
+ expect(result.status).toBe(0);
64
+
65
+ const packageJson = readPackageJson(repoRoot);
66
+ expect(packageJson.scripts.test).toBe('node -e "process.exit(0)"');
67
+ expect(packageJson.scripts).toEqual({
68
+ test: 'node -e "process.exit(0)"'
69
+ });
70
+
71
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'skills', 'cc-roadmap', 'SKILL.md'))).toBe(true);
72
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'skills', 'cc-plan', 'SKILL.md'))).toBe(true);
73
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'skills', 'cc-investigate', 'SKILL.md'))).toBe(true);
74
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'skills', 'docs-sync'))).toBe(false);
75
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'skills', 'npm-release'))).toBe(false);
76
+ expect(fs.existsSync(path.join(repoRoot, '.claude', 'tsc-cache'))).toBe(false);
77
+ });
78
+
79
+ test('init overwrites diverged .claude files with packaged content', () => {
80
+ expect(runCli(['init', '--dir', repoRoot], repoRoot).status).toBe(0);
81
+
82
+ const targetSkill = path.join(repoRoot, '.claude', 'skills', 'cc-roadmap', 'SKILL.md');
83
+ fs.writeFileSync(targetSkill, '# local override\n');
84
+
85
+ const result = runCli(['init', '--dir', repoRoot], repoRoot);
86
+ expect(result.status).toBe(0);
87
+
88
+ expect(fs.existsSync(`${targetSkill}.new`)).toBe(false);
89
+ expect(fs.readFileSync(targetSkill, 'utf8')).toBe(
90
+ fs.readFileSync(path.join(TEMPLATE_ROOT, 'skills', 'cc-roadmap', 'SKILL.md'), 'utf8')
91
+ );
92
+ });
93
+
94
+ test('force re-initialization resets .claude to the packaged template', () => {
95
+ expect(runCli(['init', '--dir', repoRoot], repoRoot).status).toBe(0);
96
+
97
+ const targetSkill = path.join(repoRoot, '.claude', 'skills', 'cc-roadmap', 'SKILL.md');
98
+ fs.writeFileSync(targetSkill, '# local override\n');
99
+
100
+ const result = runCli(['init', '--dir', repoRoot, '--force'], repoRoot);
101
+ expect(result.status).toBe(0);
102
+
103
+ expect(fs.readFileSync(targetSkill, 'utf8')).toBe(
104
+ fs.readFileSync(path.join(TEMPLATE_ROOT, 'skills', 'cc-roadmap', 'SKILL.md'), 'utf8')
105
+ );
106
+ expect(fs.existsSync(`${targetSkill}.new`)).toBe(false);
107
+ });
108
+
109
+ test('adapt mirrors public skills into .codex/skills for Codex', () => {
110
+ expect(runCli(['init', '--dir', repoRoot], repoRoot).status).toBe(0);
111
+
112
+ const result = runCli(['adapt', '--cwd', repoRoot, '--platform', 'codex'], repoRoot);
113
+ expect(result.status).toBe(0);
114
+
115
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-devflow', 'SKILL.md'))).toBe(false);
116
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-roadmap', 'SKILL.md'))).toBe(true);
117
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-plan', 'SKILL.md'))).toBe(true);
118
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-investigate', 'SKILL.md'))).toBe(true);
119
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-do', 'SKILL.md'))).toBe(true);
120
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-check', 'SKILL.md'))).toBe(true);
121
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-act', 'SKILL.md'))).toBe(true);
122
+
123
+ const codexInvestigateSkill = fs.readFileSync(
124
+ path.join(repoRoot, '.codex', 'skills', 'cc-investigate', 'SKILL.md'),
125
+ 'utf8'
126
+ );
127
+ const parsed = matter(codexInvestigateSkill);
128
+ expect(parsed.data.reads).toContain('.codex/skills/cc-investigate/references/investigation-contract.md');
129
+ expect(parsed.data.reads).not.toContain('references/investigation-contract.md');
130
+
131
+ const codexDoSkill = matter(
132
+ fs.readFileSync(path.join(repoRoot, '.codex', 'skills', 'cc-do', 'SKILL.md'), 'utf8')
133
+ );
134
+ expect(codexDoSkill.data.writes).toEqual(
135
+ expect.arrayContaining([
136
+ expect.objectContaining({
137
+ path: 'devflow/changes/<change-key>/execution/tasks/<task-id>/checkpoint.json',
138
+ durability: 'durable',
139
+ required: true
140
+ })
141
+ ])
142
+ );
143
+ expect(codexDoSkill.data.effects).toContain('code changes');
144
+
145
+ const codexRoadmapSkill = matter(
146
+ fs.readFileSync(path.join(repoRoot, '.codex', 'skills', 'cc-roadmap', 'SKILL.md'), 'utf8')
147
+ );
148
+ expect(codexRoadmapSkill.data.writes).toEqual(
149
+ expect.arrayContaining([
150
+ expect.objectContaining({
151
+ path: 'devflow/ROADMAP.md',
152
+ durability: 'durable',
153
+ required: true
154
+ }),
155
+ expect.objectContaining({
156
+ path: 'devflow/BACKLOG.md',
157
+ durability: 'durable',
158
+ required: true
159
+ })
160
+ ])
161
+ );
162
+ });
163
+
164
+ test('adapt preserves pre-existing non-public Codex skills and does not mirror new private ones', () => {
165
+ expect(runCli(['init', '--dir', repoRoot], repoRoot).status).toBe(0);
166
+
167
+ const privateClaudeSkill = path.join(repoRoot, '.claude', 'skills', 'skill-creator');
168
+ const preservedCodexSkill = path.join(repoRoot, '.codex', 'skills', 'local-postmortem-gate');
169
+ fs.mkdirSync(privateClaudeSkill, { recursive: true });
170
+ fs.mkdirSync(preservedCodexSkill, { recursive: true });
171
+ fs.writeFileSync(path.join(privateClaudeSkill, 'SKILL.md'), '# private skill\n');
172
+ fs.writeFileSync(path.join(preservedCodexSkill, 'SKILL.md'), '# original codex skill\n');
173
+
174
+ const result = runCli(['adapt', '--cwd', repoRoot, '--platform', 'codex'], repoRoot);
175
+ expect(result.status).toBe(0);
176
+
177
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'cc-roadmap', 'SKILL.md'))).toBe(true);
178
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'local-postmortem-gate', 'SKILL.md'))).toBe(true);
179
+ expect(fs.existsSync(path.join(repoRoot, '.codex', 'skills', 'skill-creator'))).toBe(false);
180
+ });
181
+ });
@@ -0,0 +1,97 @@
1
+ const fs = require('fs');
2
+ const os = require('os');
3
+ const path = require('path');
4
+
5
+ const {
6
+ syncDelegationRuntime,
7
+ ensureWorkerWorkspace,
8
+ getWorkerStatePath,
9
+ getWorkerJournalPath,
10
+ getWorkerAssignmentPath,
11
+ getMessageBusPath,
12
+ getTeamMemoryPath,
13
+ getWorkerWorkspacePath
14
+ } = require('../delegation');
15
+ const { getTeamStatePath } = require('../team-state');
16
+
17
+ describe('syncDelegationRuntime', () => {
18
+ test('writes workspace scratch files and team-state truth without polluting devflow/changes', async () => {
19
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-delegation-'));
20
+ fs.writeFileSync(path.join(repoRoot, 'package.json'), JSON.stringify({ name: 'delegation-smoke', version: '1.0.0' }, null, 2));
21
+
22
+ const manifest = {
23
+ changeId: 'REQ-123',
24
+ goal: 'Delegate selected tasks',
25
+ createdAt: '2026-03-25T01:00:00.000Z',
26
+ updatedAt: '2026-03-25T01:01:00.000Z',
27
+ tasks: [
28
+ {
29
+ id: 'T001',
30
+ title: 'Single file direct task',
31
+ type: 'IMPL',
32
+ dependsOn: [],
33
+ touches: ['src/a.ts'],
34
+ run: ['echo direct'],
35
+ checks: [],
36
+ status: 'pending',
37
+ attempts: 0,
38
+ maxRetries: 1
39
+ },
40
+ {
41
+ id: 'T002',
42
+ title: 'Multi file delegated task',
43
+ type: 'IMPL',
44
+ dependsOn: [],
45
+ touches: ['src/a.ts', 'src/b.ts'],
46
+ run: ['echo delegated'],
47
+ checks: [],
48
+ status: 'pending',
49
+ attempts: 0,
50
+ maxRetries: 1
51
+ }
52
+ ],
53
+ metadata: {
54
+ source: 'default',
55
+ generatedBy: 'test',
56
+ planVersion: 3
57
+ }
58
+ };
59
+
60
+ const result = await syncDelegationRuntime(repoRoot, 'REQ-123', manifest);
61
+
62
+ const teamState = JSON.parse(fs.readFileSync(getTeamStatePath(repoRoot, 'REQ-123'), 'utf8'));
63
+ const workerId = teamState.team.taskAssignments.T002;
64
+ const assignment = fs.readFileSync(getWorkerAssignmentPath(repoRoot, 'REQ-123', workerId), 'utf8');
65
+ const messageBus = fs.readFileSync(getMessageBusPath(repoRoot, 'REQ-123'), 'utf8');
66
+ const teamMemory = fs.readFileSync(getTeamMemoryPath(repoRoot, 'REQ-123'), 'utf8');
67
+ const workerState = fs.readFileSync(getWorkerStatePath(repoRoot, 'REQ-123', workerId), 'utf8');
68
+ const workerJournal = fs.readFileSync(getWorkerJournalPath(repoRoot, 'REQ-123', workerId), 'utf8');
69
+ const workerWorkspace = getWorkerWorkspacePath(repoRoot, 'REQ-123', workerId);
70
+
71
+ expect(result.delegatedCount).toBe(1);
72
+ expect(assignment).toContain(`Assignment: ${workerId}`);
73
+ expect(assignment).toContain('`T002` Multi file delegated task');
74
+ expect(messageBus).toContain('queued for T002');
75
+ expect(teamMemory).toContain('Worker Count: 1');
76
+ expect(teamState.planVersion).toBe(3);
77
+ expect(workerId).toMatch(/^delegate-/);
78
+ expect(workerState).toContain('Status: `idle`');
79
+ expect(workerJournal).toContain('Assigned Tasks: T002');
80
+ expect(workerWorkspace).toContain('devflow/workspaces');
81
+ expect(fs.existsSync(path.join(repoRoot, 'devflow/changes/REQ-123-delegate-selected-tasks/execution/workers'))).toBe(false);
82
+ });
83
+
84
+ test('falls back to controller workspace when git worktree is unavailable', async () => {
85
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-no-git-'));
86
+ const worker = await ensureWorkerWorkspace(repoRoot, 'REQ-123', {
87
+ taskId: 'T001',
88
+ workerId: 'delegate-01',
89
+ role: 'dev-implementer',
90
+ route: 'delegate'
91
+ });
92
+
93
+ expect(worker.mode).toBe('fallback');
94
+ expect(worker.cwd).toBe(repoRoot);
95
+ expect(worker.reason).toBe('git-unavailable');
96
+ });
97
+ });
@@ -0,0 +1,267 @@
1
+ const fs = require('fs');
2
+ const os = require('os');
3
+ const path = require('path');
4
+
5
+ const { runDispatch } = require('../operations/dispatch');
6
+ const { runResume } = require('../operations/resume');
7
+ const {
8
+ getRuntimeStatePath,
9
+ getTaskManifestPath,
10
+ getCheckpointPath,
11
+ getEventsPath
12
+ } = require('../store');
13
+
14
+ function writeJson(filePath, value) {
15
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
16
+ fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`);
17
+ }
18
+
19
+ describe('runDispatch', () => {
20
+ test('blocks execution when the current plan version has not been approved', async () => {
21
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-dispatch-unapproved-'));
22
+ const manifestPath = getTaskManifestPath(repoRoot, 'REQ-123');
23
+
24
+ writeJson(getRuntimeStatePath(repoRoot, 'REQ-123'), {
25
+ changeId: 'REQ-123',
26
+ changeKey: 'REQ-123-block-unapproved-execution',
27
+ slug: 'block-unapproved-execution',
28
+ createdAt: '2026-03-25T01:00:00.000Z',
29
+ goal: 'Block unapproved execution',
30
+ status: 'planned',
31
+ initializedAt: '2026-03-25T01:00:00.000Z',
32
+ plannedAt: '2026-03-25T01:01:00.000Z',
33
+ approval: {
34
+ status: 'pending',
35
+ executionMode: 'delegate'
36
+ },
37
+ updatedAt: '2026-03-25T01:01:00.000Z'
38
+ });
39
+
40
+ writeJson(manifestPath, {
41
+ changeId: 'REQ-123',
42
+ goal: 'Block unapproved execution',
43
+ createdAt: '2026-03-25T01:00:00.000Z',
44
+ updatedAt: '2026-03-25T01:01:00.000Z',
45
+ tasks: [
46
+ {
47
+ id: 'T001',
48
+ title: 'Should not execute before approval',
49
+ type: 'IMPL',
50
+ dependsOn: [],
51
+ touches: ['lib/skill-runtime/operations/dispatch.js'],
52
+ run: ['echo blocked'],
53
+ checks: [],
54
+ status: 'pending',
55
+ attempts: 0,
56
+ maxRetries: 0
57
+ }
58
+ ],
59
+ metadata: {
60
+ source: 'default',
61
+ generatedBy: 'test',
62
+ planVersion: 1
63
+ }
64
+ });
65
+
66
+ const result = await runDispatch({
67
+ repoRoot,
68
+ changeId: 'REQ-123',
69
+ parallel: 1
70
+ });
71
+
72
+ const nextManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
73
+
74
+ expect(result.success).toBe(false);
75
+ expect(result.reason).toContain('cc-plan approval gate');
76
+ expect(nextManifest.tasks[0].status).toBe('pending');
77
+ });
78
+
79
+ test('rejects stale results when planVersion changes during task execution and records it in checkpoint', async () => {
80
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-dispatch-'));
81
+ const manifestPath = getTaskManifestPath(repoRoot, 'REQ-123');
82
+
83
+ writeJson(getRuntimeStatePath(repoRoot, 'REQ-123'), {
84
+ changeId: 'REQ-123',
85
+ changeKey: 'REQ-123-reject-stale-results',
86
+ slug: 'reject-stale-results',
87
+ createdAt: '2026-03-25T01:00:00.000Z',
88
+ goal: 'Reject stale results',
89
+ status: 'planned',
90
+ initializedAt: '2026-03-25T01:00:00.000Z',
91
+ plannedAt: '2026-03-25T01:01:00.000Z',
92
+ approval: {
93
+ status: 'approved',
94
+ executionMode: 'delegate',
95
+ planVersion: 1,
96
+ approvedAt: '2026-03-25T01:01:30.000Z'
97
+ },
98
+ updatedAt: '2026-03-25T01:01:00.000Z'
99
+ });
100
+
101
+ writeJson(manifestPath, {
102
+ changeId: 'REQ-123',
103
+ goal: 'Reject stale results',
104
+ createdAt: '2026-03-25T01:00:00.000Z',
105
+ updatedAt: '2026-03-25T01:01:00.000Z',
106
+ tasks: [
107
+ {
108
+ id: 'T001',
109
+ title: 'Mutate plan version mid-flight',
110
+ type: 'IMPL',
111
+ dependsOn: [],
112
+ touches: ['lib/skill-runtime/operations/dispatch.js'],
113
+ run: [
114
+ `node -e "const fs=require('fs'); const p='${manifestPath.replace(/\\/g, '\\\\')}'; const data=JSON.parse(fs.readFileSync(p,'utf8')); data.metadata.planVersion=2; fs.writeFileSync(p, JSON.stringify(data, null, 2)+'\\n');"`
115
+ ],
116
+ checks: [],
117
+ status: 'pending',
118
+ attempts: 0,
119
+ maxRetries: 0
120
+ }
121
+ ],
122
+ metadata: {
123
+ source: 'default',
124
+ generatedBy: 'test',
125
+ planVersion: 1
126
+ }
127
+ });
128
+
129
+ const result = await runDispatch({
130
+ repoRoot,
131
+ changeId: 'REQ-123',
132
+ parallel: 1
133
+ });
134
+
135
+ const nextManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
136
+ const checkpoint = JSON.parse(fs.readFileSync(getCheckpointPath(repoRoot, 'REQ-123', 'T001'), 'utf8'));
137
+ const events = fs.readFileSync(getEventsPath(repoRoot, 'REQ-123', 'T001'), 'utf8');
138
+
139
+ expect(result.success).toBe(false);
140
+ expect(nextManifest.tasks[0].status).toBe('failed');
141
+ expect(nextManifest.tasks[0].lastError).toContain('Stale result rejected');
142
+ expect(checkpoint.planVersion).toBe(1);
143
+ expect(checkpoint.error).toContain('Stale result rejected');
144
+ expect(events).toContain('task_stale_rejected');
145
+ });
146
+
147
+ test('restores unresolved work from the latest stable checkpoint on resume without creating handoff markdown', async () => {
148
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-resume-stable-'));
149
+ const changeId = 'REQ-123';
150
+ const manifestPath = getTaskManifestPath(repoRoot, changeId);
151
+
152
+ writeJson(getRuntimeStatePath(repoRoot, changeId), {
153
+ changeId,
154
+ changeKey: 'REQ-123-recover-from-stable-checkpoint',
155
+ slug: 'recover-from-stable-checkpoint',
156
+ createdAt: '2026-04-09T01:00:00.000Z',
157
+ goal: 'Recover from stable checkpoint',
158
+ status: 'in_progress',
159
+ initializedAt: '2026-04-09T01:00:00.000Z',
160
+ plannedAt: '2026-04-09T01:01:00.000Z',
161
+ approval: {
162
+ status: 'approved',
163
+ executionMode: 'delegate',
164
+ planVersion: 1,
165
+ approvedAt: '2026-04-09T01:01:30.000Z'
166
+ },
167
+ updatedAt: '2026-04-09T01:02:00.000Z'
168
+ });
169
+
170
+ writeJson(manifestPath, {
171
+ changeId,
172
+ goal: 'Recover from stable checkpoint',
173
+ createdAt: '2026-04-09T01:00:00.000Z',
174
+ updatedAt: '2026-04-09T01:02:00.000Z',
175
+ tasks: [
176
+ {
177
+ id: 'T001',
178
+ title: 'Stable checkpoint task',
179
+ type: 'TEST',
180
+ dependsOn: [],
181
+ touches: ['src/a.ts'],
182
+ run: ['node -e "process.exit(0)"'],
183
+ checks: [],
184
+ status: 'passed',
185
+ attempts: 1,
186
+ maxRetries: 0
187
+ },
188
+ {
189
+ id: 'T002',
190
+ title: 'Retry-exhausted failed task',
191
+ type: 'IMPL',
192
+ dependsOn: ['T001'],
193
+ touches: ['src/b.ts'],
194
+ run: ['node -e "process.exit(0)"'],
195
+ checks: [],
196
+ status: 'failed',
197
+ attempts: 2,
198
+ maxRetries: 1,
199
+ lastError: 'Command failed'
200
+ },
201
+ {
202
+ id: 'T003',
203
+ title: 'Task skipped by failed dependency',
204
+ type: 'IMPL',
205
+ dependsOn: ['T002'],
206
+ touches: ['src/c.ts'],
207
+ run: ['node -e "process.exit(0)"'],
208
+ checks: [],
209
+ status: 'skipped',
210
+ attempts: 0,
211
+ maxRetries: 0,
212
+ lastError: 'Blocked by failed dependency'
213
+ }
214
+ ],
215
+ metadata: {
216
+ source: 'default',
217
+ generatedBy: 'test',
218
+ planVersion: 1
219
+ }
220
+ });
221
+
222
+ writeJson(getCheckpointPath(repoRoot, changeId, 'T001'), {
223
+ changeId,
224
+ taskId: 'T001',
225
+ sessionId: 'stable-session',
226
+ planVersion: 1,
227
+ status: 'passed',
228
+ summary: 'Task passed after 1 attempt(s)',
229
+ error: '',
230
+ outputExcerpt: '',
231
+ timestamp: '2026-04-09T01:05:00.000Z',
232
+ attempt: 1
233
+ });
234
+
235
+ writeJson(getCheckpointPath(repoRoot, changeId, 'T002'), {
236
+ changeId,
237
+ taskId: 'T002',
238
+ sessionId: 'failed-session',
239
+ planVersion: 1,
240
+ status: 'failed',
241
+ summary: 'Task failed: Command failed',
242
+ error: 'Command failed',
243
+ outputExcerpt: 'Command failed',
244
+ timestamp: '2026-04-09T01:06:00.000Z',
245
+ attempt: 2
246
+ });
247
+
248
+ const result = await runResume({
249
+ repoRoot,
250
+ changeId,
251
+ parallel: 1,
252
+ fromCheckpoint: 'stable'
253
+ });
254
+
255
+ const nextManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
256
+
257
+ expect(result.success).toBe(true);
258
+ expect(result.restoredCheckpoint).toMatchObject({
259
+ taskId: 'T001',
260
+ status: 'passed'
261
+ });
262
+ expect(result.restoredTasks).toEqual(['T002', 'T003']);
263
+ expect(nextManifest.tasks.map((task) => task.status)).toEqual(['passed', 'passed', 'passed']);
264
+ expect(nextManifest.tasks[1].attempts).toBe(1);
265
+ expect(nextManifest.tasks[2].attempts).toBe(1);
266
+ });
267
+ });