cc-devflow 4.3.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +70 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +212 -0
  3. package/.claude/skills/cc-act/SKILL.md +330 -0
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +68 -0
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +29 -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 +245 -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 +200 -0
  13. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +328 -0
  14. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +63 -0
  15. package/.claude/skills/cc-check/CHANGELOG.md +78 -0
  16. package/.claude/skills/cc-check/PLAYBOOK.md +153 -0
  17. package/.claude/skills/cc-check/SKILL.md +353 -0
  18. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +53 -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 +54 -0
  25. package/.claude/skills/cc-do/PLAYBOOK.md +119 -0
  26. package/.claude/skills/cc-do/SKILL.md +224 -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 +31 -0
  41. package/.claude/skills/cc-investigate/PLAYBOOK.md +49 -0
  42. package/.claude/skills/cc-investigate/SKILL.md +229 -0
  43. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +56 -0
  44. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +53 -0
  45. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +106 -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 +104 -0
  49. package/.claude/skills/cc-plan/PLAYBOOK.md +106 -0
  50. package/.claude/skills/cc-plan/SKILL.md +333 -0
  51. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +156 -0
  52. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +99 -0
  53. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +111 -0
  54. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +80 -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 +119 -0
  60. package/.claude/skills/cc-roadmap/PLAYBOOK.md +136 -0
  61. package/.claude/skills/cc-roadmap/SKILL.md +267 -0
  62. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +46 -0
  63. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +154 -0
  64. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +51 -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 +12 -0
  77. package/.claude/skills/cc-spec-init/PLAYBOOK.md +55 -0
  78. package/.claude/skills/cc-spec-init/SKILL.md +135 -0
  79. package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +64 -0
  80. package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +28 -0
  81. package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +35 -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 +80 -4
  86. package/README.md +148 -741
  87. package/README.zh-CN.md +146 -740
  88. package/bin/adapt.js +2 -6
  89. package/bin/cc-devflow-cli.js +287 -166
  90. package/config/distributable-skills.json +24 -0
  91. package/config/schema/cc-devflow-config.schema.json +45 -0
  92. package/config/user-config.template.yml +16 -0
  93. package/docs/CLAUDE.md +10 -6
  94. package/docs/commands/README.md +19 -46
  95. package/docs/commands/README.zh-CN.md +25 -48
  96. package/docs/examples/BY-ARTIFACT.md +7 -0
  97. package/docs/examples/README.md +38 -0
  98. package/docs/examples/START-HERE.md +149 -0
  99. package/docs/examples/example-bindings.json +38 -0
  100. package/docs/examples/full-design-blocked/BACKLOG.md +45 -0
  101. package/docs/examples/full-design-blocked/README.md +55 -0
  102. package/docs/examples/full-design-blocked/ROADMAP.md +53 -0
  103. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +154 -0
  104. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +146 -0
  105. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +78 -0
  106. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +52 -0
  107. package/docs/examples/full-design-blocked/roadmap-tracking.json +50 -0
  108. package/docs/examples/local-handoff/BACKLOG.md +45 -0
  109. package/docs/examples/local-handoff/README.md +56 -0
  110. package/docs/examples/local-handoff/ROADMAP.md +45 -0
  111. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +39 -0
  112. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +29 -0
  113. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +71 -0
  114. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +98 -0
  115. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +59 -0
  116. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +44 -0
  117. package/docs/examples/local-handoff/roadmap-tracking.json +48 -0
  118. package/docs/examples/pdca-loop/BACKLOG.md +46 -0
  119. package/docs/examples/pdca-loop/README.md +58 -0
  120. package/docs/examples/pdca-loop/ROADMAP.md +133 -0
  121. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +72 -0
  122. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +29 -0
  123. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +72 -0
  124. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +201 -0
  125. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +73 -0
  126. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +44 -0
  127. package/docs/examples/pdca-loop/roadmap-tracking.json +114 -0
  128. package/docs/examples/scripts/check-example-bindings.sh +116 -0
  129. package/docs/guides/getting-started.md +94 -129
  130. package/docs/guides/getting-started.zh-CN.md +103 -84
  131. package/docs/skill-runtime-migration.md +46 -0
  132. package/docs/v4.3.0-migration-guide.md +60 -225
  133. package/lib/compiler/CLAUDE.md +55 -84
  134. package/lib/compiler/__tests__/drift.test.js +1 -1
  135. package/lib/compiler/__tests__/errors.test.js +0 -1
  136. package/lib/compiler/__tests__/integration.test.js +49 -3
  137. package/lib/compiler/__tests__/manifest.test.js +0 -156
  138. package/lib/compiler/__tests__/parser.test.js +33 -104
  139. package/lib/compiler/__tests__/schemas.test.js +30 -34
  140. package/lib/compiler/__tests__/skills-registry.test.js +114 -0
  141. package/lib/compiler/__tests__/transformer.test.js +5 -9
  142. package/lib/compiler/emitters/antigravity-emitter.js +5 -213
  143. package/lib/compiler/emitters/base-emitter.js +3 -298
  144. package/lib/compiler/emitters/codex-emitter.js +4 -202
  145. package/lib/compiler/emitters/cursor-emitter.js +3 -287
  146. package/lib/compiler/emitters/qwen-emitter.js +4 -176
  147. package/lib/compiler/index.js +65 -345
  148. package/lib/compiler/manifest.js +6 -68
  149. package/lib/compiler/parser.js +31 -63
  150. package/lib/compiler/platforms.js +32 -277
  151. package/lib/compiler/resource-copier.js +176 -6
  152. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +3 -3
  153. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +14 -4
  154. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +16 -7
  155. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +10 -15
  156. package/lib/compiler/rules-emitters/base-rules-emitter.js +5 -5
  157. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +7 -12
  158. package/lib/compiler/rules-emitters/index.js +6 -3
  159. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +7 -7
  160. package/lib/compiler/schemas.js +8 -4
  161. package/lib/compiler/skills-registry.js +213 -15
  162. package/lib/compiler/transformer.js +1 -1
  163. package/lib/skill-runtime/CLAUDE.md +19 -0
  164. package/lib/skill-runtime/__tests__/autopilot.test.js +210 -0
  165. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +291 -0
  166. package/lib/skill-runtime/__tests__/config.test.js +161 -0
  167. package/lib/skill-runtime/__tests__/delegation.test.js +97 -0
  168. package/lib/skill-runtime/__tests__/dispatch.test.js +267 -0
  169. package/lib/skill-runtime/__tests__/intent.test.js +219 -0
  170. package/lib/skill-runtime/__tests__/lifecycle.test.js +169 -0
  171. package/lib/skill-runtime/__tests__/paths.test.js +42 -0
  172. package/lib/skill-runtime/__tests__/planner.tdd.test.js +250 -0
  173. package/lib/skill-runtime/__tests__/prepare-pr.test.js +139 -0
  174. package/lib/skill-runtime/__tests__/query.test.js +284 -0
  175. package/lib/skill-runtime/__tests__/runtime.integration.test.js +281 -0
  176. package/lib/skill-runtime/__tests__/schemas.test.js +207 -0
  177. package/lib/skill-runtime/__tests__/team-state.test.js +51 -0
  178. package/lib/skill-runtime/__tests__/worker-run.test.js +253 -0
  179. package/lib/skill-runtime/__tests__/worker.test.js +56 -0
  180. package/lib/skill-runtime/artifacts.js +93 -0
  181. package/lib/skill-runtime/config.js +379 -0
  182. package/lib/skill-runtime/delegation.js +533 -0
  183. package/lib/skill-runtime/index.js +36 -0
  184. package/lib/skill-runtime/intent.js +333 -0
  185. package/lib/skill-runtime/lifecycle.js +294 -0
  186. package/lib/skill-runtime/operations/CLAUDE.md +19 -0
  187. package/lib/skill-runtime/operations/approve.js +66 -0
  188. package/lib/skill-runtime/operations/autopilot-core.js +337 -0
  189. package/lib/skill-runtime/operations/autopilot-execution.js +307 -0
  190. package/lib/skill-runtime/operations/autopilot-shared.js +48 -0
  191. package/lib/skill-runtime/operations/autopilot.js +163 -0
  192. package/lib/skill-runtime/operations/dispatch.js +454 -0
  193. package/lib/skill-runtime/operations/init.js +64 -0
  194. package/lib/{harness → skill-runtime}/operations/janitor.js +9 -6
  195. package/lib/skill-runtime/operations/plan.js +59 -0
  196. package/lib/skill-runtime/operations/prepare-pr.js +25 -0
  197. package/lib/skill-runtime/operations/release.js +96 -0
  198. package/lib/skill-runtime/operations/resume.js +143 -0
  199. package/lib/skill-runtime/operations/snapshot.js +45 -0
  200. package/lib/skill-runtime/operations/verify.js +170 -0
  201. package/lib/skill-runtime/operations/worker-run.js +529 -0
  202. package/lib/skill-runtime/operations/worker.js +33 -0
  203. package/lib/skill-runtime/paths.js +213 -0
  204. package/lib/skill-runtime/planner.js +519 -0
  205. package/lib/skill-runtime/query.js +157 -0
  206. package/lib/skill-runtime/review.js +557 -0
  207. package/lib/skill-runtime/schemas.js +400 -0
  208. package/lib/{harness → skill-runtime}/store.js +45 -30
  209. package/lib/skill-runtime/team-state.js +122 -0
  210. package/package.json +13 -11
  211. package/.claude/CLAUDE.md +0 -125
  212. package/.claude/agents/architecture-designer.md +0 -443
  213. package/.claude/agents/bug-analyzer.md +0 -381
  214. package/.claude/agents/checklist-agent.md +0 -175
  215. package/.claude/agents/clarify-analyst.md +0 -50
  216. package/.claude/agents/code-quality-reviewer.md +0 -205
  217. package/.claude/agents/code-reviewer.md +0 -71
  218. package/.claude/agents/codex-analyzer.md +0 -39
  219. package/.claude/agents/compatibility-checker.md +0 -579
  220. package/.claude/agents/consistency-checker.md +0 -532
  221. package/.claude/agents/dev-implementer.md +0 -195
  222. package/.claude/agents/flow-researcher.md +0 -132
  223. package/.claude/agents/impact-analyzer.md +0 -440
  224. package/.claude/agents/planner.md +0 -230
  225. package/.claude/agents/prd-writer.md +0 -320
  226. package/.claude/agents/project-guidelines-generator.md +0 -1329
  227. package/.claude/agents/qa-tester.md +0 -313
  228. package/.claude/agents/release-manager.md +0 -295
  229. package/.claude/agents/security-reviewer.md +0 -314
  230. package/.claude/agents/spec-reviewer.md +0 -221
  231. package/.claude/agents/style-guide-generator.md +0 -458
  232. package/.claude/agents/tech-architect.md +0 -516
  233. package/.claude/agents/ui-designer.md +0 -485
  234. package/.claude/commands/core/architecture.md +0 -459
  235. package/.claude/commands/core/guidelines.md +0 -511
  236. package/.claude/commands/core/roadmap.md +0 -468
  237. package/.claude/commands/core/style.md +0 -83
  238. package/.claude/commands/flow/CLAUDE.md +0 -24
  239. package/.claude/commands/flow/archive.md +0 -280
  240. package/.claude/commands/flow/constitution.md +0 -82
  241. package/.claude/commands/flow/context.md +0 -150
  242. package/.claude/commands/flow/delta.md +0 -245
  243. package/.claude/commands/flow/dev.md +0 -40
  244. package/.claude/commands/flow/fix.md +0 -217
  245. package/.claude/commands/flow/ideate.md +0 -214
  246. package/.claude/commands/flow/init.md +0 -38
  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/examples/design-inspiration-pool.md +0 -59
  266. package/.claude/docs/examples/ui-prototype-constitution-checklist.md +0 -75
  267. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +0 -117
  268. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +0 -99
  269. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +0 -188
  270. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +0 -338
  271. package/.claude/docs/guides/TEAM_MODE_GUIDE.md +0 -312
  272. package/.claude/docs/implementation-summary-v7.md +0 -449
  273. package/.claude/docs/spec-format-guide.md +0 -349
  274. package/.claude/docs/state-consolidation-design.md +0 -323
  275. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +0 -332
  276. package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +0 -156
  277. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +0 -261
  278. package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +0 -148
  279. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +0 -52
  280. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +0 -206
  281. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +0 -71
  282. package/.claude/docs/templates/DELTA_SPEC_TEMPLATE.md +0 -91
  283. package/.claude/docs/templates/DESIGN_DECISIONS_TEMPLATE.md +0 -151
  284. package/.claude/docs/templates/DESIGN_TEMPLATE.md +0 -157
  285. package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +0 -80
  286. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +0 -198
  287. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +0 -57
  288. package/.claude/docs/templates/JOURNAL_TEMPLATE.md +0 -75
  289. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +0 -76
  290. package/.claude/docs/templates/PROPOSAL_TEMPLATE.md +0 -91
  291. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +0 -276
  292. package/.claude/docs/templates/REVIEW-HIGH.md +0 -57
  293. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +0 -198
  294. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +0 -310
  295. package/.claude/docs/templates/SPEC_TEMPLATE_DELTA.md +0 -139
  296. package/.claude/docs/templates/SPEC_TEMPLATE_PROJECT.md +0 -93
  297. package/.claude/docs/templates/STYLE_TEMPLATE.md +0 -479
  298. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +0 -373
  299. package/.claude/docs/templates/_shared/CLAUDE.md +0 -36
  300. package/.claude/docs/templates/_shared/CONSTITUTION_CHECK.md +0 -125
  301. package/.claude/docs/templates/_shared/VALIDATION_CHECKLIST.md +0 -187
  302. package/.claude/docs/templates/_shared/YAML_FRONTMATTER.md +0 -164
  303. package/.claude/docs/templates/context/dev.jsonl.template +0 -6
  304. package/.claude/docs/templates/context/epic.jsonl.template +0 -5
  305. package/.claude/docs/templates/context/prd.jsonl.template +0 -4
  306. package/.claude/docs/templates/context/research.jsonl.template +0 -4
  307. package/.claude/docs/templates/context/review.jsonl.template +0 -5
  308. package/.claude/docs/templates/context/tech.jsonl.template +0 -5
  309. package/.claude/guides/agent-guides/agent-coordination-guide.md +0 -459
  310. package/.claude/guides/project-guidelines-system.md +0 -463
  311. package/.claude/guides/technical-guides/datetime-handling-guide.md +0 -563
  312. package/.claude/guides/technical-guides/git-github-guide.md +0 -642
  313. package/.claude/guides/technical-guides/test-execution-guide.md +0 -618
  314. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +0 -217
  315. package/.claude/guides/workflow-guides/flow-orchestrator.md +0 -48
  316. package/.claude/hooks/CLAUDE.md +0 -342
  317. package/.claude/hooks/checklist-gate.js +0 -397
  318. package/.claude/hooks/error-handling-reminder.sh +0 -12
  319. package/.claude/hooks/error-handling-reminder.ts +0 -459
  320. package/.claude/hooks/hooks.json +0 -15
  321. package/.claude/hooks/inject-agent-context.ts +0 -480
  322. package/.claude/hooks/inject-skill-context.ts +0 -359
  323. package/.claude/hooks/post-tool-use-tracker.sh +0 -280
  324. package/.claude/hooks/pre-tool-use-guardrail.sh +0 -36
  325. package/.claude/hooks/pre-tool-use-guardrail.ts +0 -342
  326. package/.claude/hooks/ralph-loop.ts +0 -931
  327. package/.claude/hooks/ralph-stop-hook.sh +0 -190
  328. package/.claude/hooks/skill-activation-prompt.sh +0 -36
  329. package/.claude/hooks/skill-activation-prompt.ts +0 -214
  330. package/.claude/hooks/state/skills-used-test-guard.json +0 -3
  331. package/.claude/hooks/task-completed-hook.ts +0 -593
  332. package/.claude/hooks/teammate-idle-hook.ts +0 -690
  333. package/.claude/hooks/types/team-types.d.ts +0 -238
  334. package/.claude/rules/devflow-conventions.md +0 -286
  335. package/.claude/rules/project-constitution.md +0 -1002
  336. package/.claude/rules/rationalization-library.md +0 -282
  337. package/.claude/schemas/constitution.schema.json +0 -43
  338. package/.claude/scripts/.claude/commands/flow/export-openspec.md +0 -221
  339. package/.claude/scripts/.claude/commands/flow/import-openspec.md +0 -171
  340. package/.claude/scripts/CLAUDE.md +0 -76
  341. package/.claude/scripts/__tests__/openspec.test.js +0 -212
  342. package/.claude/scripts/analyze-upgrade-impact.sh +0 -200
  343. package/.claude/scripts/archive-requirement.sh +0 -394
  344. package/.claude/scripts/calculate-checklist-completion.sh +0 -243
  345. package/.claude/scripts/calculate-quarter.sh +0 -206
  346. package/.claude/scripts/check-dependencies.sh +0 -409
  347. package/.claude/scripts/check-prerequisites.sh +0 -232
  348. package/.claude/scripts/check-task-status.sh +0 -288
  349. package/.claude/scripts/checklist-errors.sh +0 -131
  350. package/.claude/scripts/common.sh +0 -1102
  351. package/.claude/scripts/consolidate-research.sh +0 -182
  352. package/.claude/scripts/create-requirement.sh +0 -451
  353. package/.claude/scripts/delta-parser.ts +0 -637
  354. package/.claude/scripts/detect-file-conflicts.sh +0 -151
  355. package/.claude/scripts/export-contracts.sh +0 -117
  356. package/.claude/scripts/export-openspec.js +0 -222
  357. package/.claude/scripts/extract-data-model.sh +0 -78
  358. package/.claude/scripts/flow-context-add.sh +0 -134
  359. package/.claude/scripts/flow-context-init.sh +0 -133
  360. package/.claude/scripts/flow-context-validate.sh +0 -144
  361. package/.claude/scripts/flow-delta-apply.sh +0 -297
  362. package/.claude/scripts/flow-delta-archive.sh +0 -71
  363. package/.claude/scripts/flow-delta-create.sh +0 -202
  364. package/.claude/scripts/flow-delta-list.sh +0 -142
  365. package/.claude/scripts/flow-delta-status.sh +0 -235
  366. package/.claude/scripts/flow-quality-full.sh +0 -215
  367. package/.claude/scripts/flow-quality-quick.sh +0 -119
  368. package/.claude/scripts/flow-workspace-init.sh +0 -117
  369. package/.claude/scripts/flow-workspace-record.sh +0 -164
  370. package/.claude/scripts/generate-clarification-questions.sh +0 -377
  371. package/.claude/scripts/generate-clarification-report.sh +0 -463
  372. package/.claude/scripts/generate-quickstart.sh +0 -146
  373. package/.claude/scripts/generate-research-tasks.sh +0 -157
  374. package/.claude/scripts/generate-status-report.sh +0 -523
  375. package/.claude/scripts/generate-tech-analysis.sh +0 -46
  376. package/.claude/scripts/get-workflow-status.sh +0 -415
  377. package/.claude/scripts/import-openspec.js +0 -272
  378. package/.claude/scripts/locate-requirement-in-roadmap.sh +0 -233
  379. package/.claude/scripts/manage-constitution.sh +0 -602
  380. package/.claude/scripts/mark-task-complete.sh +0 -198
  381. package/.claude/scripts/parse-task-dependencies.js +0 -334
  382. package/.claude/scripts/populate-research-tasks.sh +0 -284
  383. package/.claude/scripts/record-quality-error.sh +0 -165
  384. package/.claude/scripts/recover-workflow.sh +0 -463
  385. package/.claude/scripts/run-clarify-scan.sh +0 -601
  386. package/.claude/scripts/run-high-review.sh +0 -62
  387. package/.claude/scripts/run-problem-analysis.sh +0 -68
  388. package/.claude/scripts/run-quality-gates.sh +0 -242
  389. package/.claude/scripts/setup-epic.sh +0 -173
  390. package/.claude/scripts/setup-ralph-loop.sh +0 -155
  391. package/.claude/scripts/sync-roadmap-progress.sh +0 -300
  392. package/.claude/scripts/sync-task-marks.sh +0 -199
  393. package/.claude/scripts/team-dev-init.sh +0 -319
  394. package/.claude/scripts/team-state-recovery.sh +0 -229
  395. package/.claude/scripts/test-clarify-scan.sh +0 -515
  396. package/.claude/scripts/update-agent-context.sh +0 -806
  397. package/.claude/scripts/validate-constitution.sh +0 -567
  398. package/.claude/scripts/validate-hooks.sh +0 -487
  399. package/.claude/scripts/validate-research.sh +0 -332
  400. package/.claude/scripts/validate-scope-boundary.sh +0 -493
  401. package/.claude/scripts/validate-scope.sh +0 -200
  402. package/.claude/scripts/verify-gate.sh +0 -269
  403. package/.claude/scripts/verify-setup.sh +0 -37
  404. package/.claude/scripts/workflow-status.ts +0 -433
  405. package/.claude/settings.json +0 -95
  406. package/.claude/skills/_reference-implementations/README.md +0 -96
  407. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +0 -302
  408. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +0 -451
  409. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +0 -307
  410. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +0 -638
  411. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +0 -275
  412. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +0 -224
  413. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +0 -213
  414. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +0 -756
  415. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +0 -336
  416. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +0 -789
  417. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +0 -235
  418. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +0 -754
  419. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +0 -399
  420. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +0 -331
  421. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +0 -872
  422. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +0 -502
  423. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +0 -767
  424. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +0 -502
  425. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +0 -501
  426. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +0 -406
  427. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +0 -364
  428. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +0 -428
  429. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +0 -418
  430. package/.claude/skills/attention-refresh/SKILL.md +0 -170
  431. package/.claude/skills/brainstorming/SKILL.md +0 -161
  432. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +0 -169
  433. package/.claude/skills/constitution-guardian/SKILL.md +0 -306
  434. package/.claude/skills/constitution-quick-ref/SKILL.md +0 -374
  435. package/.claude/skills/debugging/SKILL.md +0 -221
  436. package/.claude/skills/file-standards/SKILL.md +0 -353
  437. package/.claude/skills/finishing-branch/SKILL.md +0 -189
  438. package/.claude/skills/flow-dev/CLAUDE.md +0 -16
  439. package/.claude/skills/flow-dev/SKILL.md +0 -94
  440. package/.claude/skills/flow-dev/assets/IMPLEMENTATION_PLAN_TEMPLATE.md +0 -71
  441. package/.claude/skills/flow-dev/context.jsonl +0 -4
  442. package/.claude/skills/flow-dev/dev-implementer.jsonl +0 -8
  443. package/.claude/skills/flow-dev/scripts/entry-gate.sh +0 -116
  444. package/.claude/skills/flow-dev/scripts/exit-gate.sh +0 -101
  445. package/.claude/skills/flow-dev/scripts/task-orchestrator.sh +0 -106
  446. package/.claude/skills/flow-fix/SKILL.md +0 -105
  447. package/.claude/skills/flow-fix/context.jsonl +0 -6
  448. package/.claude/skills/flow-fix/references/bug-analyzer.md +0 -381
  449. package/.claude/skills/flow-init/SKILL.md +0 -105
  450. package/.claude/skills/flow-init/assets/BRAINSTORM_TEMPLATE.md +0 -148
  451. package/.claude/skills/flow-init/assets/INIT_FLOW_TEMPLATE.md +0 -198
  452. package/.claude/skills/flow-init/assets/RESEARCH_TEMPLATE.md +0 -276
  453. package/.claude/skills/flow-init/context.jsonl +0 -5
  454. package/.claude/skills/flow-init/references/flow-researcher.md +0 -132
  455. package/.claude/skills/flow-init/scripts/check-prerequisites.sh +0 -240
  456. package/.claude/skills/flow-init/scripts/consolidate-research.sh +0 -182
  457. package/.claude/skills/flow-init/scripts/create-requirement.sh +0 -404
  458. package/.claude/skills/flow-init/scripts/generate-research-tasks.sh +0 -157
  459. package/.claude/skills/flow-init/scripts/populate-research-tasks.sh +0 -284
  460. package/.claude/skills/flow-init/scripts/validate-research.sh +0 -340
  461. package/.claude/skills/flow-quality/SKILL.md +0 -98
  462. package/.claude/skills/flow-quality/context.jsonl +0 -6
  463. package/.claude/skills/flow-quality/references/code-quality-reviewer.md +0 -205
  464. package/.claude/skills/flow-quality/references/qa-tester.md +0 -313
  465. package/.claude/skills/flow-quality/references/security-reviewer.md +0 -314
  466. package/.claude/skills/flow-quality/references/spec-reviewer.md +0 -221
  467. package/.claude/skills/flow-release/SKILL.md +0 -60
  468. package/.claude/skills/flow-release/context.jsonl +0 -5
  469. package/.claude/skills/flow-release/references/release-manager.md +0 -295
  470. package/.claude/skills/flow-spec/CLAUDE.md +0 -17
  471. package/.claude/skills/flow-spec/SKILL.md +0 -102
  472. package/.claude/skills/flow-spec/context.jsonl +0 -5
  473. package/.claude/skills/flow-spec/scripts/entry-gate.sh +0 -194
  474. package/.claude/skills/flow-spec/scripts/exit-gate.sh +0 -244
  475. package/.claude/skills/flow-spec/scripts/parallel-orchestrator.sh +0 -205
  476. package/.claude/skills/flow-spec/scripts/team-communication.sh +0 -353
  477. package/.claude/skills/flow-spec/scripts/team-init.sh +0 -195
  478. package/.claude/skills/flow-spec/scripts/test-team-mode.sh +0 -496
  479. package/.claude/skills/flow-spec/team-config.json +0 -165
  480. package/.claude/skills/flow-verify/CLAUDE.md +0 -10
  481. package/.claude/skills/flow-verify/SKILL.md +0 -53
  482. package/.claude/skills/flow-verify/context.jsonl +0 -5
  483. package/.claude/skills/fractal-docs/SKILL.md +0 -45
  484. package/.claude/skills/journey-checker/SKILL.md +0 -199
  485. package/.claude/skills/journey-checker/pressure-scenarios.md +0 -164
  486. package/.claude/skills/receiving-review/SKILL.md +0 -153
  487. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  488. package/.claude/skills/skill-creator/SKILL.md +0 -356
  489. package/.claude/skills/skill-creator/references/output-patterns.md +0 -82
  490. package/.claude/skills/skill-creator/references/workflows.md +0 -28
  491. package/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  492. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  493. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -95
  494. package/.claude/skills/skill-rules.json +0 -359
  495. package/.claude/skills/tdd/SKILL.md +0 -218
  496. package/.claude/skills/tdd-enforcer/SKILL.md +0 -192
  497. package/.claude/skills/utility/npm-release/CLAUDE.md +0 -55
  498. package/.claude/skills/utility/npm-release/SKILL.md +0 -379
  499. package/.claude/skills/utility/npm-release/references/version-decision-guide.md +0 -134
  500. package/.claude/skills/utility/npm-release/scripts/atomic-version-bump.sh +0 -95
  501. package/.claude/skills/utility/npm-release/scripts/validate-version-sync.sh +0 -82
  502. package/.claude/skills/utility/npm-release/scripts/version-decision-tree.sh +0 -44
  503. package/.claude/skills/verification/SKILL.md +0 -158
  504. package/.claude/skills/workflow.yaml +0 -219
  505. package/.claude/tests/README.md +0 -300
  506. package/.claude/tests/TODO.md +0 -69
  507. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  508. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  509. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  510. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  511. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  512. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  513. package/.claude/tests/constitution/run_all_constitution_tests.sh +0 -111
  514. package/.claude/tests/constitution/test_agent_assignment.sh +0 -207
  515. package/.claude/tests/constitution/test_article_coverage.sh +0 -201
  516. package/.claude/tests/constitution/test_template_completeness.sh +0 -150
  517. package/.claude/tests/constitution/test_version_consistency.sh +0 -120
  518. package/.claude/tests/fixtures/spec_delta_full.md +0 -16
  519. package/.claude/tests/fixtures/tasks_progress_sample.md +0 -5
  520. package/.claude/tests/run-all-tests.sh +0 -229
  521. package/.claude/tests/scripts/run.sh +0 -30
  522. package/.claude/tests/scripts/test-framework.sh +0 -128
  523. package/.claude/tests/scripts/test_check_prerequisites.sh +0 -511
  524. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +0 -504
  525. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +0 -505
  526. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +0 -506
  527. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +0 -507
  528. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +0 -508
  529. package/.claude/tests/scripts/test_check_task_status.sh +0 -499
  530. package/.claude/tests/scripts/test_common.sh +0 -244
  531. package/.claude/tests/scripts/test_generate_status_report.sh +0 -71
  532. package/.claude/tests/scripts/test_mark_task_complete.sh +0 -441
  533. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +0 -410
  534. package/.claude/tests/scripts/test_recover_workflow.sh +0 -304
  535. package/.claude/tests/scripts/test_setup_epic.sh +0 -437
  536. package/.claude/tests/scripts/test_sync_task_marks.sh +0 -196
  537. package/.claude/tests/scripts/test_validate_constitution.sh +0 -74
  538. package/.claude/tests/scripts/test_validate_research.sh +0 -462
  539. package/.claude/tests/slugify.bats +0 -82
  540. package/.claude/tests/test-framework.sh +0 -732
  541. package/.claude/tests/test_analyze_upgrade_impact.py +0 -34
  542. package/.claude/tests/test_consolidate_research.py +0 -48
  543. package/.claude/tests/test_export_contracts.py +0 -43
  544. package/.claude/tests/test_extract_data_model.py +0 -33
  545. package/.claude/tests/test_generate_quickstart.py +0 -50
  546. package/.claude/tests/test_generate_research_tasks.py +0 -52
  547. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/affected-repos.txt +0 -1
  548. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/edited-files.log +0 -2
  549. package/bin/harness.js +0 -22
  550. package/docs/commands/core-roadmap.md +0 -106
  551. package/docs/commands/core-roadmap.zh-CN.md +0 -102
  552. package/docs/commands/core-style.md +0 -53
  553. package/docs/commands/core-style.zh-CN.md +0 -53
  554. package/docs/commands/flow-init.md +0 -140
  555. package/docs/commands/flow-init.zh-CN.md +0 -169
  556. package/docs/commands/flow-new.md +0 -39
  557. package/docs/commands/flow-new.zh-CN.md +0 -39
  558. package/lib/compiler/__tests__/compile-regression.test.js +0 -103
  559. package/lib/compiler/__tests__/multi-module-emitters.test.js +0 -534
  560. package/lib/compiler/__tests__/resource-copier.test.js +0 -26
  561. package/lib/compiler/__tests__/skill-discovery.test.js +0 -72
  562. package/lib/compiler/context-expander.js +0 -179
  563. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +0 -109
  564. package/lib/compiler/rules-emitters/codex-rules-emitter.js +0 -116
  565. package/lib/compiler/skill-discovery.js +0 -68
  566. package/lib/harness/CLAUDE.md +0 -22
  567. package/lib/harness/__tests__/planner.tdd.test.js +0 -125
  568. package/lib/harness/cli.js +0 -208
  569. package/lib/harness/index.js +0 -18
  570. package/lib/harness/operations/dispatch.js +0 -298
  571. package/lib/harness/operations/init.js +0 -48
  572. package/lib/harness/operations/pack.js +0 -100
  573. package/lib/harness/operations/plan.js +0 -83
  574. package/lib/harness/operations/release.js +0 -170
  575. package/lib/harness/operations/resume.js +0 -44
  576. package/lib/harness/operations/verify.js +0 -177
  577. package/lib/harness/planner.js +0 -272
  578. package/lib/harness/query.js +0 -126
  579. 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