cc-devflow 4.3.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 (575) 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 +61 -4
  86. package/README.md +120 -756
  87. package/README.zh-CN.md +119 -756
  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 +60 -225
  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/skill-runtime/operations/release.js +96 -0
  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 -24
  235. package/.claude/commands/flow/archive.md +0 -280
  236. package/.claude/commands/flow/constitution.md +0 -82
  237. package/.claude/commands/flow/context.md +0 -150
  238. package/.claude/commands/flow/delta.md +0 -245
  239. package/.claude/commands/flow/dev.md +0 -40
  240. package/.claude/commands/flow/fix.md +0 -217
  241. package/.claude/commands/flow/ideate.md +0 -214
  242. package/.claude/commands/flow/init.md +0 -38
  243. package/.claude/commands/flow/release.md +0 -36
  244. package/.claude/commands/flow/restart.md +0 -97
  245. package/.claude/commands/flow/spec.md +0 -36
  246. package/.claude/commands/flow/status.md +0 -64
  247. package/.claude/commands/flow/update.md +0 -111
  248. package/.claude/commands/flow/upgrade.md +0 -115
  249. package/.claude/commands/flow/verify.md +0 -37
  250. package/.claude/commands/flow/workspace.md +0 -155
  251. package/.claude/commands/util/cancel-ralph.md +0 -60
  252. package/.claude/commands/util/code-review.md +0 -58
  253. package/.claude/commands/util/git-commit.md +0 -422
  254. package/.claude/commands/util/problem-analyzer.md +0 -60
  255. package/.claude/config/quality-gates.yml +0 -305
  256. package/.claude/config/quality-rules.yml +0 -161
  257. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +0 -426
  258. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +0 -658
  259. package/.claude/docs/design/intent-driven-input-design.md +0 -380
  260. package/.claude/docs/design/prd-version-management-design.md +0 -437
  261. package/.claude/docs/examples/design-inspiration-pool.md +0 -59
  262. package/.claude/docs/examples/ui-prototype-constitution-checklist.md +0 -75
  263. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +0 -117
  264. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +0 -99
  265. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +0 -188
  266. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +0 -338
  267. package/.claude/docs/guides/TEAM_MODE_GUIDE.md +0 -312
  268. package/.claude/docs/implementation-summary-v7.md +0 -449
  269. package/.claude/docs/spec-format-guide.md +0 -349
  270. package/.claude/docs/state-consolidation-design.md +0 -323
  271. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +0 -332
  272. package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +0 -156
  273. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +0 -261
  274. package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +0 -148
  275. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +0 -52
  276. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +0 -206
  277. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +0 -71
  278. package/.claude/docs/templates/DELTA_SPEC_TEMPLATE.md +0 -91
  279. package/.claude/docs/templates/DESIGN_DECISIONS_TEMPLATE.md +0 -151
  280. package/.claude/docs/templates/DESIGN_TEMPLATE.md +0 -157
  281. package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +0 -80
  282. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +0 -198
  283. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +0 -57
  284. package/.claude/docs/templates/JOURNAL_TEMPLATE.md +0 -75
  285. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +0 -76
  286. package/.claude/docs/templates/PROPOSAL_TEMPLATE.md +0 -91
  287. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +0 -276
  288. package/.claude/docs/templates/REVIEW-HIGH.md +0 -57
  289. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +0 -198
  290. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +0 -310
  291. package/.claude/docs/templates/SPEC_TEMPLATE_DELTA.md +0 -139
  292. package/.claude/docs/templates/SPEC_TEMPLATE_PROJECT.md +0 -93
  293. package/.claude/docs/templates/STYLE_TEMPLATE.md +0 -479
  294. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +0 -373
  295. package/.claude/docs/templates/_shared/CLAUDE.md +0 -36
  296. package/.claude/docs/templates/_shared/CONSTITUTION_CHECK.md +0 -125
  297. package/.claude/docs/templates/_shared/VALIDATION_CHECKLIST.md +0 -187
  298. package/.claude/docs/templates/_shared/YAML_FRONTMATTER.md +0 -164
  299. package/.claude/docs/templates/context/dev.jsonl.template +0 -6
  300. package/.claude/docs/templates/context/epic.jsonl.template +0 -5
  301. package/.claude/docs/templates/context/prd.jsonl.template +0 -4
  302. package/.claude/docs/templates/context/research.jsonl.template +0 -4
  303. package/.claude/docs/templates/context/review.jsonl.template +0 -5
  304. package/.claude/docs/templates/context/tech.jsonl.template +0 -5
  305. package/.claude/guides/agent-guides/agent-coordination-guide.md +0 -459
  306. package/.claude/guides/project-guidelines-system.md +0 -463
  307. package/.claude/guides/technical-guides/datetime-handling-guide.md +0 -563
  308. package/.claude/guides/technical-guides/git-github-guide.md +0 -642
  309. package/.claude/guides/technical-guides/test-execution-guide.md +0 -618
  310. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +0 -217
  311. package/.claude/guides/workflow-guides/flow-orchestrator.md +0 -48
  312. package/.claude/hooks/CLAUDE.md +0 -342
  313. package/.claude/hooks/checklist-gate.js +0 -397
  314. package/.claude/hooks/error-handling-reminder.sh +0 -12
  315. package/.claude/hooks/error-handling-reminder.ts +0 -459
  316. package/.claude/hooks/hooks.json +0 -15
  317. package/.claude/hooks/inject-agent-context.ts +0 -480
  318. package/.claude/hooks/inject-skill-context.ts +0 -359
  319. package/.claude/hooks/post-tool-use-tracker.sh +0 -280
  320. package/.claude/hooks/pre-tool-use-guardrail.sh +0 -36
  321. package/.claude/hooks/pre-tool-use-guardrail.ts +0 -342
  322. package/.claude/hooks/ralph-loop.ts +0 -931
  323. package/.claude/hooks/ralph-stop-hook.sh +0 -190
  324. package/.claude/hooks/skill-activation-prompt.sh +0 -36
  325. package/.claude/hooks/skill-activation-prompt.ts +0 -214
  326. package/.claude/hooks/state/skills-used-test-guard.json +0 -3
  327. package/.claude/hooks/task-completed-hook.ts +0 -593
  328. package/.claude/hooks/teammate-idle-hook.ts +0 -690
  329. package/.claude/hooks/types/team-types.d.ts +0 -238
  330. package/.claude/rules/devflow-conventions.md +0 -286
  331. package/.claude/rules/project-constitution.md +0 -1002
  332. package/.claude/rules/rationalization-library.md +0 -282
  333. package/.claude/schemas/constitution.schema.json +0 -43
  334. package/.claude/scripts/.claude/commands/flow/export-openspec.md +0 -221
  335. package/.claude/scripts/.claude/commands/flow/import-openspec.md +0 -171
  336. package/.claude/scripts/CLAUDE.md +0 -76
  337. package/.claude/scripts/__tests__/openspec.test.js +0 -212
  338. package/.claude/scripts/analyze-upgrade-impact.sh +0 -200
  339. package/.claude/scripts/archive-requirement.sh +0 -394
  340. package/.claude/scripts/calculate-checklist-completion.sh +0 -243
  341. package/.claude/scripts/calculate-quarter.sh +0 -206
  342. package/.claude/scripts/check-dependencies.sh +0 -409
  343. package/.claude/scripts/check-prerequisites.sh +0 -232
  344. package/.claude/scripts/check-task-status.sh +0 -288
  345. package/.claude/scripts/checklist-errors.sh +0 -131
  346. package/.claude/scripts/common.sh +0 -1102
  347. package/.claude/scripts/consolidate-research.sh +0 -182
  348. package/.claude/scripts/create-requirement.sh +0 -451
  349. package/.claude/scripts/delta-parser.ts +0 -637
  350. package/.claude/scripts/detect-file-conflicts.sh +0 -151
  351. package/.claude/scripts/export-contracts.sh +0 -117
  352. package/.claude/scripts/export-openspec.js +0 -222
  353. package/.claude/scripts/extract-data-model.sh +0 -78
  354. package/.claude/scripts/flow-context-add.sh +0 -134
  355. package/.claude/scripts/flow-context-init.sh +0 -133
  356. package/.claude/scripts/flow-context-validate.sh +0 -144
  357. package/.claude/scripts/flow-delta-apply.sh +0 -297
  358. package/.claude/scripts/flow-delta-archive.sh +0 -71
  359. package/.claude/scripts/flow-delta-create.sh +0 -202
  360. package/.claude/scripts/flow-delta-list.sh +0 -142
  361. package/.claude/scripts/flow-delta-status.sh +0 -235
  362. package/.claude/scripts/flow-quality-full.sh +0 -215
  363. package/.claude/scripts/flow-quality-quick.sh +0 -119
  364. package/.claude/scripts/flow-workspace-init.sh +0 -117
  365. package/.claude/scripts/flow-workspace-record.sh +0 -164
  366. package/.claude/scripts/generate-clarification-questions.sh +0 -377
  367. package/.claude/scripts/generate-clarification-report.sh +0 -463
  368. package/.claude/scripts/generate-quickstart.sh +0 -146
  369. package/.claude/scripts/generate-research-tasks.sh +0 -157
  370. package/.claude/scripts/generate-status-report.sh +0 -523
  371. package/.claude/scripts/generate-tech-analysis.sh +0 -46
  372. package/.claude/scripts/get-workflow-status.sh +0 -415
  373. package/.claude/scripts/import-openspec.js +0 -272
  374. package/.claude/scripts/locate-requirement-in-roadmap.sh +0 -233
  375. package/.claude/scripts/manage-constitution.sh +0 -602
  376. package/.claude/scripts/mark-task-complete.sh +0 -198
  377. package/.claude/scripts/parse-task-dependencies.js +0 -334
  378. package/.claude/scripts/populate-research-tasks.sh +0 -284
  379. package/.claude/scripts/record-quality-error.sh +0 -165
  380. package/.claude/scripts/recover-workflow.sh +0 -463
  381. package/.claude/scripts/run-clarify-scan.sh +0 -601
  382. package/.claude/scripts/run-high-review.sh +0 -62
  383. package/.claude/scripts/run-problem-analysis.sh +0 -68
  384. package/.claude/scripts/run-quality-gates.sh +0 -242
  385. package/.claude/scripts/setup-epic.sh +0 -173
  386. package/.claude/scripts/setup-ralph-loop.sh +0 -155
  387. package/.claude/scripts/sync-roadmap-progress.sh +0 -300
  388. package/.claude/scripts/sync-task-marks.sh +0 -199
  389. package/.claude/scripts/team-dev-init.sh +0 -319
  390. package/.claude/scripts/team-state-recovery.sh +0 -229
  391. package/.claude/scripts/test-clarify-scan.sh +0 -515
  392. package/.claude/scripts/update-agent-context.sh +0 -806
  393. package/.claude/scripts/validate-constitution.sh +0 -567
  394. package/.claude/scripts/validate-hooks.sh +0 -487
  395. package/.claude/scripts/validate-research.sh +0 -332
  396. package/.claude/scripts/validate-scope-boundary.sh +0 -493
  397. package/.claude/scripts/validate-scope.sh +0 -200
  398. package/.claude/scripts/verify-gate.sh +0 -269
  399. package/.claude/scripts/verify-setup.sh +0 -37
  400. package/.claude/scripts/workflow-status.ts +0 -433
  401. package/.claude/settings.json +0 -95
  402. package/.claude/skills/_reference-implementations/README.md +0 -96
  403. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +0 -302
  404. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +0 -451
  405. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +0 -307
  406. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +0 -638
  407. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +0 -275
  408. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +0 -224
  409. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +0 -213
  410. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +0 -756
  411. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +0 -336
  412. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +0 -789
  413. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +0 -235
  414. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +0 -754
  415. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +0 -399
  416. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +0 -331
  417. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +0 -872
  418. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +0 -502
  419. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +0 -767
  420. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +0 -502
  421. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +0 -501
  422. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +0 -406
  423. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +0 -364
  424. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +0 -428
  425. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +0 -418
  426. package/.claude/skills/attention-refresh/SKILL.md +0 -170
  427. package/.claude/skills/brainstorming/SKILL.md +0 -161
  428. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +0 -169
  429. package/.claude/skills/constitution-guardian/SKILL.md +0 -306
  430. package/.claude/skills/constitution-quick-ref/SKILL.md +0 -374
  431. package/.claude/skills/debugging/SKILL.md +0 -221
  432. package/.claude/skills/file-standards/SKILL.md +0 -353
  433. package/.claude/skills/finishing-branch/SKILL.md +0 -189
  434. package/.claude/skills/flow-dev/CLAUDE.md +0 -16
  435. package/.claude/skills/flow-dev/SKILL.md +0 -94
  436. package/.claude/skills/flow-dev/assets/IMPLEMENTATION_PLAN_TEMPLATE.md +0 -71
  437. package/.claude/skills/flow-dev/context.jsonl +0 -4
  438. package/.claude/skills/flow-dev/dev-implementer.jsonl +0 -8
  439. package/.claude/skills/flow-dev/scripts/entry-gate.sh +0 -116
  440. package/.claude/skills/flow-dev/scripts/exit-gate.sh +0 -101
  441. package/.claude/skills/flow-dev/scripts/task-orchestrator.sh +0 -106
  442. package/.claude/skills/flow-fix/SKILL.md +0 -105
  443. package/.claude/skills/flow-fix/context.jsonl +0 -6
  444. package/.claude/skills/flow-fix/references/bug-analyzer.md +0 -381
  445. package/.claude/skills/flow-init/SKILL.md +0 -105
  446. package/.claude/skills/flow-init/assets/BRAINSTORM_TEMPLATE.md +0 -148
  447. package/.claude/skills/flow-init/assets/INIT_FLOW_TEMPLATE.md +0 -198
  448. package/.claude/skills/flow-init/assets/RESEARCH_TEMPLATE.md +0 -276
  449. package/.claude/skills/flow-init/context.jsonl +0 -5
  450. package/.claude/skills/flow-init/references/flow-researcher.md +0 -132
  451. package/.claude/skills/flow-init/scripts/check-prerequisites.sh +0 -240
  452. package/.claude/skills/flow-init/scripts/consolidate-research.sh +0 -182
  453. package/.claude/skills/flow-init/scripts/create-requirement.sh +0 -404
  454. package/.claude/skills/flow-init/scripts/generate-research-tasks.sh +0 -157
  455. package/.claude/skills/flow-init/scripts/populate-research-tasks.sh +0 -284
  456. package/.claude/skills/flow-init/scripts/validate-research.sh +0 -340
  457. package/.claude/skills/flow-quality/SKILL.md +0 -98
  458. package/.claude/skills/flow-quality/context.jsonl +0 -6
  459. package/.claude/skills/flow-quality/references/code-quality-reviewer.md +0 -205
  460. package/.claude/skills/flow-quality/references/qa-tester.md +0 -313
  461. package/.claude/skills/flow-quality/references/security-reviewer.md +0 -314
  462. package/.claude/skills/flow-quality/references/spec-reviewer.md +0 -221
  463. package/.claude/skills/flow-release/SKILL.md +0 -60
  464. package/.claude/skills/flow-release/context.jsonl +0 -5
  465. package/.claude/skills/flow-release/references/release-manager.md +0 -295
  466. package/.claude/skills/flow-spec/CLAUDE.md +0 -17
  467. package/.claude/skills/flow-spec/SKILL.md +0 -102
  468. package/.claude/skills/flow-spec/context.jsonl +0 -5
  469. package/.claude/skills/flow-spec/scripts/entry-gate.sh +0 -194
  470. package/.claude/skills/flow-spec/scripts/exit-gate.sh +0 -244
  471. package/.claude/skills/flow-spec/scripts/parallel-orchestrator.sh +0 -205
  472. package/.claude/skills/flow-spec/scripts/team-communication.sh +0 -353
  473. package/.claude/skills/flow-spec/scripts/team-init.sh +0 -195
  474. package/.claude/skills/flow-spec/scripts/test-team-mode.sh +0 -496
  475. package/.claude/skills/flow-spec/team-config.json +0 -165
  476. package/.claude/skills/flow-verify/CLAUDE.md +0 -10
  477. package/.claude/skills/flow-verify/SKILL.md +0 -53
  478. package/.claude/skills/flow-verify/context.jsonl +0 -5
  479. package/.claude/skills/fractal-docs/SKILL.md +0 -45
  480. package/.claude/skills/journey-checker/SKILL.md +0 -199
  481. package/.claude/skills/journey-checker/pressure-scenarios.md +0 -164
  482. package/.claude/skills/receiving-review/SKILL.md +0 -153
  483. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  484. package/.claude/skills/skill-creator/SKILL.md +0 -356
  485. package/.claude/skills/skill-creator/references/output-patterns.md +0 -82
  486. package/.claude/skills/skill-creator/references/workflows.md +0 -28
  487. package/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  488. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  489. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -95
  490. package/.claude/skills/skill-rules.json +0 -359
  491. package/.claude/skills/tdd/SKILL.md +0 -218
  492. package/.claude/skills/tdd-enforcer/SKILL.md +0 -192
  493. package/.claude/skills/utility/npm-release/CLAUDE.md +0 -55
  494. package/.claude/skills/utility/npm-release/SKILL.md +0 -379
  495. package/.claude/skills/utility/npm-release/references/version-decision-guide.md +0 -134
  496. package/.claude/skills/utility/npm-release/scripts/atomic-version-bump.sh +0 -95
  497. package/.claude/skills/utility/npm-release/scripts/validate-version-sync.sh +0 -82
  498. package/.claude/skills/utility/npm-release/scripts/version-decision-tree.sh +0 -44
  499. package/.claude/skills/verification/SKILL.md +0 -158
  500. package/.claude/skills/workflow.yaml +0 -219
  501. package/.claude/tests/README.md +0 -300
  502. package/.claude/tests/TODO.md +0 -69
  503. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  504. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  505. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  506. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  507. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  508. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  509. package/.claude/tests/constitution/run_all_constitution_tests.sh +0 -111
  510. package/.claude/tests/constitution/test_agent_assignment.sh +0 -207
  511. package/.claude/tests/constitution/test_article_coverage.sh +0 -201
  512. package/.claude/tests/constitution/test_template_completeness.sh +0 -150
  513. package/.claude/tests/constitution/test_version_consistency.sh +0 -120
  514. package/.claude/tests/fixtures/spec_delta_full.md +0 -16
  515. package/.claude/tests/fixtures/tasks_progress_sample.md +0 -5
  516. package/.claude/tests/run-all-tests.sh +0 -229
  517. package/.claude/tests/scripts/run.sh +0 -30
  518. package/.claude/tests/scripts/test-framework.sh +0 -128
  519. package/.claude/tests/scripts/test_check_prerequisites.sh +0 -511
  520. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +0 -504
  521. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +0 -505
  522. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +0 -506
  523. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +0 -507
  524. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +0 -508
  525. package/.claude/tests/scripts/test_check_task_status.sh +0 -499
  526. package/.claude/tests/scripts/test_common.sh +0 -244
  527. package/.claude/tests/scripts/test_generate_status_report.sh +0 -71
  528. package/.claude/tests/scripts/test_mark_task_complete.sh +0 -441
  529. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +0 -410
  530. package/.claude/tests/scripts/test_recover_workflow.sh +0 -304
  531. package/.claude/tests/scripts/test_setup_epic.sh +0 -437
  532. package/.claude/tests/scripts/test_sync_task_marks.sh +0 -196
  533. package/.claude/tests/scripts/test_validate_constitution.sh +0 -74
  534. package/.claude/tests/scripts/test_validate_research.sh +0 -462
  535. package/.claude/tests/slugify.bats +0 -82
  536. package/.claude/tests/test-framework.sh +0 -732
  537. package/.claude/tests/test_analyze_upgrade_impact.py +0 -34
  538. package/.claude/tests/test_consolidate_research.py +0 -48
  539. package/.claude/tests/test_export_contracts.py +0 -43
  540. package/.claude/tests/test_extract_data_model.py +0 -33
  541. package/.claude/tests/test_generate_quickstart.py +0 -50
  542. package/.claude/tests/test_generate_research_tasks.py +0 -52
  543. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/affected-repos.txt +0 -1
  544. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/edited-files.log +0 -2
  545. package/bin/harness.js +0 -22
  546. package/docs/commands/core-roadmap.md +0 -106
  547. package/docs/commands/core-roadmap.zh-CN.md +0 -102
  548. package/docs/commands/core-style.md +0 -53
  549. package/docs/commands/core-style.zh-CN.md +0 -53
  550. package/docs/commands/flow-init.md +0 -140
  551. package/docs/commands/flow-init.zh-CN.md +0 -169
  552. package/docs/commands/flow-new.md +0 -39
  553. package/docs/commands/flow-new.zh-CN.md +0 -39
  554. package/lib/compiler/__tests__/compile-regression.test.js +0 -103
  555. package/lib/compiler/__tests__/multi-module-emitters.test.js +0 -534
  556. package/lib/compiler/__tests__/resource-copier.test.js +0 -26
  557. package/lib/compiler/__tests__/skill-discovery.test.js +0 -72
  558. package/lib/compiler/context-expander.js +0 -179
  559. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +0 -109
  560. package/lib/compiler/rules-emitters/codex-rules-emitter.js +0 -116
  561. package/lib/compiler/skill-discovery.js +0 -68
  562. package/lib/harness/CLAUDE.md +0 -22
  563. package/lib/harness/__tests__/planner.tdd.test.js +0 -125
  564. package/lib/harness/cli.js +0 -208
  565. package/lib/harness/index.js +0 -18
  566. package/lib/harness/operations/dispatch.js +0 -298
  567. package/lib/harness/operations/init.js +0 -48
  568. package/lib/harness/operations/pack.js +0 -100
  569. package/lib/harness/operations/plan.js +0 -83
  570. package/lib/harness/operations/release.js +0 -170
  571. package/lib/harness/operations/resume.js +0 -44
  572. package/lib/harness/operations/verify.js +0 -177
  573. package/lib/harness/planner.js +0 -272
  574. package/lib/harness/query.js +0 -126
  575. package/lib/harness/schemas.js +0 -129
@@ -1,284 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2312
3
-
4
- set -euo pipefail
5
-
6
- # ============================================================================
7
- # populate-research-tasks.sh - 智能填充 tasks.json 的决策信息
8
- # ============================================================================
9
- # 功能: 从 research-summary.md 和其他研究材料中提取决策信息,
10
- # 填充 tasks.json 的 decision/rationale/alternatives 字段
11
- #
12
- # 使用场景:
13
- # - generate-research-tasks.sh 生成基础 tasks.json 后
14
- # - consolidate-research.sh 运行前
15
- # - 确保 research.md 不包含 TODO 占位符
16
- # ============================================================================
17
-
18
- usage() {
19
- cat <<'USAGE'
20
- Usage: .claude/scripts/populate-research-tasks.sh <requirement-dir>
21
-
22
- Populates tasks.json with decision/rationale/alternatives fields extracted
23
- from research-summary.md and other research materials.
24
-
25
- This script bridges the gap between generate-research-tasks.sh (which creates
26
- basic task structure) and consolidate-research.sh (which expects complete tasks).
27
-
28
- Example:
29
- .claude/scripts/populate-research-tasks.sh devflow/requirements/REQ-123
30
-
31
- USAGE
32
- }
33
-
34
- if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
35
- usage
36
- exit 0
37
- fi
38
-
39
- if [[ $# -lt 1 ]]; then
40
- echo "❌ Error: requirement directory is required." >&2
41
- usage
42
- exit 1
43
- fi
44
-
45
- REQ_DIR="$1"
46
- if [[ ! -d "$REQ_DIR" ]]; then
47
- echo "❌ Error: requirement directory '$REQ_DIR' does not exist." >&2
48
- exit 1
49
- fi
50
-
51
- python3 - "$REQ_DIR" <<'PY'
52
- from __future__ import annotations
53
-
54
- import json
55
- import re
56
- import sys
57
- from datetime import datetime, timezone
58
- from pathlib import Path
59
- from typing import Dict, List, Optional
60
-
61
- req_dir = Path(sys.argv[1]).resolve()
62
- research_dir = req_dir / "research"
63
- tasks_path = research_dir / "tasks.json"
64
- summary_path = research_dir / "research-summary.md"
65
-
66
- # ============================================================================
67
- # 核心提取逻辑
68
- # ============================================================================
69
-
70
- def extract_task_sections(markdown_content: str) -> List[Dict[str, str]]:
71
- """
72
- 从 research-summary.md 中提取任务章节信息。
73
-
74
- 期望格式:
75
- ### R001 — 输入框架构重构
76
- - **Decision**: 全面重构方案
77
- - **Rationale**:
78
- - 当前实现仅207行...
79
- - **Alternatives Considered**:
80
- - 渐进式增强...
81
- """
82
- sections = []
83
- current_section = None
84
- current_field = None
85
-
86
- # 匹配任务标题(兼容历史 RT-001):
87
- # - ### R001 — Title
88
- # - ### R001: Title
89
- # - ### R001 - Title
90
- # - ### RT-001: Title (legacy)
91
- task_header = re.compile(r"^###\s+(?P<id>R\d{3}|RT-\d{3})\s*(?:[:—-])\s*(?P<title>.+)$")
92
-
93
- # 匹配字段头(兼容是否带 bullet):
94
- # - - **Decision**: xxx
95
- # - - **Rationale**:
96
- # - - **Alternatives Considered**:
97
- field_header = re.compile(
98
- r"^(?:[-*]\s*)?\*\*(?P<label>决策|Decision|理由|Rationale|备选方案|Alternatives(?:\s+Considered)?|来源|Source)\*\*:\s*(?P<value>.*)$"
99
- )
100
-
101
- def normalize_task_id(raw: str) -> str:
102
- if raw.startswith("RT-"):
103
- return f"R{raw.split('-', 1)[1]}"
104
- return raw
105
-
106
- def normalize_list_item(line: str) -> str:
107
- line = line.strip()
108
- line = re.sub(r"^[-*]\s+", "", line)
109
- return line.strip()
110
-
111
- for line in markdown_content.splitlines():
112
- raw_line = line
113
- line = line.strip()
114
-
115
- # 检测新任务章节
116
- task_match = task_header.match(line)
117
- if task_match:
118
- if current_section:
119
- sections.append(current_section)
120
- current_field = None
121
- current_section = {
122
- "id": normalize_task_id(task_match.group("id")),
123
- "title": task_match.group("title"),
124
- "decision": "",
125
- "rationale": "",
126
- "alternatives": "",
127
- }
128
- continue
129
-
130
- if not current_section:
131
- continue
132
-
133
- # 检测字段头
134
- field_match = field_header.match(line)
135
- if field_match:
136
- label = field_match.group("label").strip().lower()
137
- value = (field_match.group("value") or "").strip()
138
-
139
- if label in {"来源", "source"}:
140
- current_field = None
141
- continue
142
- if label in {"决策", "decision"}:
143
- current_field = "decision"
144
- elif label in {"理由", "rationale"}:
145
- current_field = "rationale"
146
- else:
147
- current_field = "alternatives"
148
-
149
- if value:
150
- current_section[current_field] = value
151
- continue
152
-
153
- # 累积字段内容(支持列表项)
154
- if current_field and line:
155
- item = normalize_list_item(raw_line)
156
- if not item:
157
- continue
158
- if current_section[current_field]:
159
- current_section[current_field] += "\n" + item
160
- else:
161
- current_section[current_field] = item
162
-
163
- # 添加最后一个章节
164
- if current_section:
165
- sections.append(current_section)
166
-
167
- return sections
168
-
169
- def load_tasks_json() -> Dict:
170
- """加载现有的 tasks.json"""
171
- if not tasks_path.exists():
172
- print(f"❌ Error: {tasks_path} does not exist.", file=sys.stderr)
173
- print(f" Run generate-research-tasks.sh first.", file=sys.stderr)
174
- sys.exit(1)
175
-
176
- try:
177
- return json.loads(tasks_path.read_text(encoding="utf-8"))
178
- except json.JSONDecodeError as e:
179
- print(f"❌ Error: {tasks_path} is not valid JSON: {e}", file=sys.stderr)
180
- sys.exit(1)
181
-
182
- def load_research_summary() -> Optional[str]:
183
- """加载 research-summary.md 内容"""
184
- if not summary_path.exists():
185
- print(f"⚠️ Warning: {summary_path} does not exist.", file=sys.stderr)
186
- print(f" Will generate basic fallback content.", file=sys.stderr)
187
- return None
188
-
189
- return summary_path.read_text(encoding="utf-8")
190
-
191
- def generate_fallback_content(task: Dict) -> Dict[str, str]:
192
- """
193
- 为任务生成后备内容(如果 research-summary.md 不存在或解析失败)
194
- """
195
- task_type = task.get("type", "clarification")
196
- prompt = task.get("prompt", "")
197
-
198
- if task_type == "clarification":
199
- return {
200
- "decision": f"基于需求分析和代码库调研,明确了 {prompt} 的具体方案",
201
- "rationale": "通过分析现有代码库和需求文档,结合技术栈特点,确定了最适合的实现路径",
202
- "alternatives": "考虑了多种替代方案,包括第三方库集成、自主实现、复刻现有方案等,最终选择了与项目技术栈最契合的方案",
203
- }
204
- elif task_type == "best_practices":
205
- return {
206
- "decision": f"遵循 {prompt} 的行业最佳实践",
207
- "rationale": "结合项目实际情况和团队经验,采用成熟稳定的技术方案",
208
- "alternatives": "评估了社区主流方案和定制化方案,选择了可维护性和扩展性最佳的实现",
209
- }
210
- else:
211
- return {
212
- "decision": f"针对 {prompt} 制定了具体实施方案",
213
- "rationale": "基于需求优先级和技术可行性分析做出的决策",
214
- "alternatives": "权衡了多种技术路线的利弊后的最优选择",
215
- }
216
-
217
- # ============================================================================
218
- # 主逻辑
219
- # ============================================================================
220
-
221
- # 1. 加载 tasks.json
222
- tasks_data = load_tasks_json()
223
- tasks = tasks_data.get("tasks", [])
224
-
225
- if not tasks:
226
- print("⚠️ Warning: No tasks found in tasks.json", file=sys.stderr)
227
- sys.exit(0)
228
-
229
- # 2. 加载 research-summary.md 并提取章节
230
- summary_content = load_research_summary()
231
- extracted_sections = {}
232
-
233
- if summary_content:
234
- sections = extract_task_sections(summary_content)
235
- extracted_sections = {section["id"]: section for section in sections}
236
- print(f"📖 Extracted {len(extracted_sections)} section(s) from research-summary.md", file=sys.stderr)
237
- else:
238
- print("⚠️ Using fallback content generation", file=sys.stderr)
239
-
240
- # 3. 填充 tasks.json 的 decision/rationale/alternatives 字段
241
- updated_count = 0
242
- fallback_count = 0
243
-
244
- for task in tasks:
245
- task_id = task.get("id", "")
246
-
247
- # 如果已经有完整的 decision/rationale/alternatives,跳过
248
- has_decision = bool(task.get("decision") and task.get("decision") != "TODO - fill decision outcome")
249
- has_rationale = bool(task.get("rationale") and task.get("rationale") != "TODO - explain why this decision was chosen")
250
- has_alternatives = bool(task.get("alternatives") and task.get("alternatives") != "TODO - list evaluated alternatives")
251
-
252
- if has_decision and has_rationale and has_alternatives:
253
- continue
254
-
255
- # 尝试从提取的章节中获取信息
256
- if task_id in extracted_sections:
257
- section = extracted_sections[task_id]
258
- task["decision"] = section["decision"] or task.get("decision", "")
259
- task["rationale"] = section["rationale"] or task.get("rationale", "")
260
- task["alternatives"] = section["alternatives"] or task.get("alternatives", "")
261
- updated_count += 1
262
- print(f"✅ Updated {task_id} from research-summary.md", file=sys.stderr)
263
- else:
264
- # 生成后备内容
265
- fallback = generate_fallback_content(task)
266
- task["decision"] = fallback["decision"]
267
- task["rationale"] = fallback["rationale"]
268
- task["alternatives"] = fallback["alternatives"]
269
- fallback_count += 1
270
- print(f"⚠️ Generated fallback for {task_id} (not found in research-summary.md)", file=sys.stderr)
271
-
272
- # 4. 保存更新后的 tasks.json
273
- tasks_data["updatedAt"] = datetime.now(timezone.utc).isoformat()
274
- tasks_path.write_text(json.dumps(tasks_data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
275
-
276
- # 5. 输出统计信息
277
- total = len(tasks)
278
- print("", file=sys.stderr)
279
- print(f"✅ Populated {total} task(s):", file=sys.stderr)
280
- print(f" - {updated_count} from research-summary.md", file=sys.stderr)
281
- print(f" - {fallback_count} using fallback content", file=sys.stderr)
282
- print(f"", file=sys.stderr)
283
- print(f"Next step: Run consolidate-research.sh to generate research.md", file=sys.stderr)
284
- PY
@@ -1,340 +0,0 @@
1
- #!/usr/bin/env bash
2
- # =============================================================================
3
- # validate-research.sh - Research.md 质量验证脚本
4
- # =============================================================================
5
- # Purpose: 验证 research.md 是否符合 spec-kit Decision/Rationale/Alternatives 格式
6
- # 确保无 TODO 占位符、无空章节、格式完整
7
- #
8
- # Usage:
9
- # validate-research.sh <REQ_DIR> [--strict]
10
- #
11
- # Exit Codes:
12
- # 0 - 验证通过
13
- # 1 - 验证失败(输出具体错误)
14
- #
15
- # Constitution Compliance:
16
- # - Article X.1 (Forced Clarification): 检查 NEEDS CLARIFICATION 标记
17
- # - Article X.2 (No Speculation): 禁止推测性技术细节
18
- # - Article I.1 (Complete Implementation): 禁止 TODO/PLACEHOLDER
19
- # =============================================================================
20
-
21
- set -euo pipefail
22
-
23
- # ────────────────────────────────────────────────────────────────────────────
24
- # Configuration
25
- # ────────────────────────────────────────────────────────────────────────────
26
-
27
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
28
- REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
29
-
30
- # shellcheck source=.claude/scripts/common.sh
31
- COMMON_SH="$SCRIPT_DIR/common.sh"
32
- if [[ ! -f "$COMMON_SH" ]]; then
33
- COMMON_SH="$SCRIPT_DIR/../../../../scripts/common.sh"
34
- fi
35
- if [[ ! -f "$COMMON_SH" ]]; then
36
- echo "ERROR: common.sh not found (checked local + .claude/scripts)" >&2
37
- exit 1
38
- fi
39
- source "$COMMON_SH"
40
-
41
- STRICT_MODE=false
42
-
43
- # ────────────────────────────────────────────────────────────────────────────
44
- # Usage
45
- # ────────────────────────────────────────────────────────────────────────────
46
-
47
- usage() {
48
- cat <<'USAGE'
49
- Usage: validate-research.sh <REQ_DIR> [--strict]
50
-
51
- Validates research.md quality and structure:
52
- - Checks for mandatory sections (Research Summary, Decisions, etc.)
53
- - Validates Decision/Rationale/Alternatives blocks
54
- - Detects TODO placeholders and empty content
55
- - Verifies NEEDS CLARIFICATION markers
56
-
57
- Arguments:
58
- REQ_DIR Path to requirement directory (e.g., devflow/requirements/REQ-123)
59
- --strict Exit with code 1 if any validation fails (default: warnings only)
60
-
61
- Examples:
62
- validate-research.sh devflow/requirements/REQ-123
63
- validate-research.sh devflow/requirements/REQ-123 --strict
64
- USAGE
65
- }
66
-
67
- # ────────────────────────────────────────────────────────────────────────────
68
- # Argument Parsing
69
- # ────────────────────────────────────────────────────────────────────────────
70
-
71
- if [[ $# -lt 1 ]] || [[ "${1:-}" == "-h" ]] || [[ "${1:-}" == "--help" ]]; then
72
- usage
73
- exit 0
74
- fi
75
-
76
- REQ_DIR="$1"
77
- shift
78
-
79
- while [[ $# -gt 0 ]]; do
80
- case "$1" in
81
- --strict)
82
- STRICT_MODE=true
83
- shift
84
- ;;
85
- *)
86
- echo "❌ Unknown option: $1" >&2
87
- usage
88
- exit 1
89
- ;;
90
- esac
91
- done
92
-
93
- # ────────────────────────────────────────────────────────────────────────────
94
- # Validation Functions
95
- # ────────────────────────────────────────────────────────────────────────────
96
-
97
- validate_file_exists() {
98
- local research_md="$REQ_DIR/research/research.md"
99
-
100
- if [[ ! -f "$research_md" ]]; then
101
- echo "❌ LEVEL 1 FAILED: research.md not found at $research_md"
102
- return 1
103
- fi
104
-
105
- echo "✅ LEVEL 1 PASSED: research.md exists"
106
- return 0
107
- }
108
-
109
- validate_structure() {
110
- local research_md="$REQ_DIR/research/research.md"
111
- local errors=0
112
-
113
- echo "🔍 LEVEL 2: Validating structure..."
114
-
115
- # 必需章节检查
116
- local required_sections=(
117
- "Research Summary"
118
- "Decisions"
119
- )
120
-
121
- for section in "${required_sections[@]}"; do
122
- if ! grep -qE "^##\s+$section" "$research_md"; then
123
- echo " ❌ Missing section: ## $section"
124
- ((errors++))
125
- else
126
- echo " ✅ Found section: ## $section"
127
- fi
128
- done
129
-
130
- # 检查至少有一个 Decision block
131
- if ! grep -qE "^###\s+R[0-9]+" "$research_md"; then
132
- echo " ❌ No Decision blocks found (expected ### R001, R002, etc.)"
133
- ((errors++))
134
- else
135
- local decision_count
136
- decision_count=$(grep -cE "^###\s+R[0-9]+" "$research_md" || echo 0)
137
- echo " ✅ Found $decision_count Decision block(s)"
138
- fi
139
-
140
- if [[ $errors -eq 0 ]]; then
141
- echo "✅ LEVEL 2 PASSED: Structure valid"
142
- return 0
143
- else
144
- echo "❌ LEVEL 2 FAILED: $errors structure error(s)"
145
- return 1
146
- fi
147
- }
148
-
149
- validate_content_quality() {
150
- local research_md="$REQ_DIR/research/research.md"
151
- local errors=0
152
-
153
- echo "🔍 LEVEL 3: Validating content quality..."
154
-
155
- # 检查 TODO 占位符
156
- local todo_count
157
- todo_count=$(grep -ciE "TODO|FIXME|XXX|PLACEHOLDER" "$research_md" 2>/dev/null || echo "0")
158
- todo_count=$(echo "$todo_count" | head -1) # 只取第一行
159
- if [[ $todo_count -gt 0 ]]; then
160
- echo " ❌ Found $todo_count TODO/PLACEHOLDER marker(s):"
161
- grep -niE "TODO|FIXME|XXX|PLACEHOLDER" "$research_md" | head -5 | while IFS= read -r line; do
162
- echo " $line"
163
- done
164
- ((errors++))
165
- else
166
- echo " ✅ No TODO/PLACEHOLDER markers"
167
- fi
168
-
169
- # 检查 {{PLACEHOLDER}} 格式
170
- local placeholder_count
171
- placeholder_count=$(grep -coE '\{\{[^}]+\}\}' "$research_md" 2>/dev/null || echo "0")
172
- placeholder_count=$(echo "$placeholder_count" | head -1) # 只取第一行
173
- if [[ $placeholder_count -gt 0 ]]; then
174
- echo " ❌ Found $placeholder_count {{PLACEHOLDER}} marker(s)"
175
- grep -nE '\{\{[^}]+\}\}' "$research_md" | head -5 | while IFS= read -r line; do
176
- echo " $line"
177
- done
178
- ((errors++))
179
- else
180
- echo " ✅ No {{PLACEHOLDER}} markers"
181
- fi
182
-
183
- # 检查 Decision/Rationale/Alternatives 完整性
184
- local decision_blocks
185
- decision_blocks=$(grep -cE "^###\s+R[0-9]+" "$research_md" 2>/dev/null || echo "0")
186
- decision_blocks=$(echo "$decision_blocks" | head -1) # 只取第一行
187
-
188
- if [[ $decision_blocks -gt 0 ]]; then
189
- echo " 🔍 Checking $decision_blocks Decision block(s)..."
190
-
191
- local incomplete_blocks=0
192
- while IFS= read -r block_line; do
193
- local block_num
194
- block_num=$(echo "$block_line" | grep -oE "R[0-9]+")
195
-
196
- # 检查该 block 是否有 Decision/Rationale/Alternatives
197
- local has_decision has_rationale has_alternatives
198
- has_decision=$(grep -cE "^- Decision:|^- \*\*Decision\*\*:" "$research_md" 2>/dev/null || echo "0")
199
- has_decision=$(echo "$has_decision" | head -1)
200
- has_rationale=$(grep -cE "^- Rationale:|^- \*\*Rationale\*\*:" "$research_md" 2>/dev/null || echo "0")
201
- has_rationale=$(echo "$has_rationale" | head -1)
202
- has_alternatives=$(grep -cE "^- Alternatives considered:|^- \*\*Alternatives Considered\*\*:" "$research_md" 2>/dev/null || echo "0")
203
- has_alternatives=$(echo "$has_alternatives" | head -1)
204
-
205
- if [[ $has_decision -eq 0 ]] || [[ $has_rationale -eq 0 ]] || [[ $has_alternatives -eq 0 ]]; then
206
- echo " ❌ Block $block_num: incomplete (missing Decision/Rationale/Alternatives)"
207
- ((incomplete_blocks++))
208
- fi
209
- done < <(grep -nE "^###\s+R[0-9]+" "$research_md")
210
-
211
- if [[ $incomplete_blocks -gt 0 ]]; then
212
- echo " ❌ $incomplete_blocks block(s) incomplete"
213
- ((errors++))
214
- else
215
- echo " ✅ All Decision blocks complete"
216
- fi
217
- fi
218
-
219
- # 检查空章节
220
- if grep -qE "^##.*\n\n_No research" "$research_md"; then
221
- echo " ⚠️ Found empty sections (acceptable if research not started)"
222
- fi
223
-
224
- if [[ $errors -eq 0 ]]; then
225
- echo "✅ LEVEL 3 PASSED: Content quality valid"
226
- return 0
227
- else
228
- echo "❌ LEVEL 3 FAILED: $errors content error(s)"
229
- return 1
230
- fi
231
- }
232
-
233
- validate_constitution() {
234
- local research_md="$REQ_DIR/research/research.md"
235
- local errors=0
236
-
237
- echo "🔍 LEVEL 4: Constitution compliance check..."
238
-
239
- # Article X.1 (Forced Clarification)
240
- local needs_clarification_count
241
- needs_clarification_count=$(grep -ciE "NEEDS CLARIFICATION" "$research_md" 2>/dev/null || echo "0")
242
- needs_clarification_count=$(echo "$needs_clarification_count" | head -1) # 只取第一行
243
- if [[ $needs_clarification_count -gt 0 ]]; then
244
- echo " ✅ Article X.1: Found $needs_clarification_count NEEDS CLARIFICATION marker(s)"
245
- else
246
- echo " ℹ️ Article X.1: No unresolved questions (acceptable if research complete)"
247
- fi
248
-
249
- # Article X.2 (No Speculation) - 检查推测性语言
250
- local speculation_patterns=(
251
- "might|maybe|probably|possibly|perhaps"
252
- "could be|should be|would be"
253
- "in the future|future-proof|预留|扩展性"
254
- )
255
-
256
- for pattern in "${speculation_patterns[@]}"; do
257
- if grep -qiE "$pattern" "$research_md"; then
258
- echo " ⚠️ Article X.2: Found speculative language: '$pattern'"
259
- echo " (Review context - acceptable if explaining rationale)"
260
- fi
261
- done
262
-
263
- # Article I.1 (Complete Implementation)
264
- if grep -qiE "暂时|临时|简化版|simplified|temporary|partial" "$research_md"; then
265
- echo " ❌ Article I.1: Found partial implementation language"
266
- ((errors++))
267
- else
268
- echo " ✅ Article I.1: No partial implementation markers"
269
- fi
270
-
271
- if [[ $errors -eq 0 ]]; then
272
- echo "✅ LEVEL 4 PASSED: Constitution compliant"
273
- return 0
274
- else
275
- echo "❌ LEVEL 4 FAILED: $errors constitution violation(s)"
276
- return 1
277
- fi
278
- }
279
-
280
- # ────────────────────────────────────────────────────────────────────────────
281
- # Main Execution
282
- # ────────────────────────────────────────────────────────────────────────────
283
-
284
- main() {
285
- echo "════════════════════════════════════════════════════════════════════════"
286
- echo "Research.md Quality Validation"
287
- echo "════════════════════════════════════════════════════════════════════════"
288
- echo "REQ_DIR: $REQ_DIR"
289
- echo "MODE: $(if $STRICT_MODE; then echo "STRICT (fail on errors)"; else echo "LENIENT (warnings only)"; fi)"
290
- echo ""
291
-
292
- local total_errors=0
293
-
294
- # Run all validation levels
295
- validate_file_exists || ((total_errors++))
296
- echo ""
297
-
298
- validate_structure || ((total_errors++))
299
- echo ""
300
-
301
- validate_content_quality || ((total_errors++))
302
- echo ""
303
-
304
- validate_constitution || ((total_errors++))
305
- echo ""
306
-
307
- # ──────────────────────────────────────────────────────────────────────────
308
- # Final Report
309
- # ──────────────────────────────────────────────────────────────────────────
310
-
311
- echo "════════════════════════════════════════════════════════════════════════"
312
- if [[ $total_errors -eq 0 ]]; then
313
- echo "✅ ALL VALIDATIONS PASSED"
314
- echo "research.md is ready for /flow:spec"
315
- echo "════════════════════════════════════════════════════════════════════════"
316
- return 0
317
- else
318
- echo "❌ VALIDATION FAILED: $total_errors level(s) failed"
319
- echo ""
320
- echo "Next Steps:"
321
- echo " 1. Review errors above"
322
- echo " 2. Update research.md to fix issues"
323
- echo " 3. Re-run: validate-research.sh $REQ_DIR"
324
- echo ""
325
- echo "Common Fixes:"
326
- echo " - Remove TODO markers → Fill with actual decisions"
327
- echo " - Add missing sections → Use RESEARCH_TEMPLATE.md"
328
- echo " - Complete Decision blocks → Add Rationale + Alternatives"
329
- echo "════════════════════════════════════════════════════════════════════════"
330
-
331
- if $STRICT_MODE; then
332
- return 1
333
- else
334
- echo "⚠️ Running in LENIENT mode - returning success despite errors"
335
- return 0
336
- fi
337
- fi
338
- }
339
-
340
- main