@rpamis/comet 0.4.0-beta.3 → 0.4.0-beta.4

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 (508) hide show
  1. package/README.md +10 -0
  2. package/assets/manifest.json +2 -1
  3. package/assets/skills/comet/SKILL.md +25 -1
  4. package/assets/skills/comet/reference/comet-yaml-fields.md +5 -2
  5. package/assets/skills/comet/reference/context-recovery.md +10 -0
  6. package/assets/skills/comet/reference/scripts.md +47 -15
  7. package/assets/skills/comet/rules/comet-phase-guard.en.md +8 -0
  8. package/assets/skills/comet/rules/comet-phase-guard.md +9 -1
  9. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  10. package/assets/skills/comet/scripts/comet-runtime.mjs +1387 -424
  11. package/assets/skills/comet-archive/SKILL.md +24 -11
  12. package/assets/skills/comet-build/SKILL.md +42 -25
  13. package/assets/skills/comet-design/SKILL.md +1 -0
  14. package/assets/skills/comet-hotfix/SKILL.md +3 -1
  15. package/assets/skills/comet-open/SKILL.md +11 -1
  16. package/assets/skills/comet-tweak/SKILL.md +3 -1
  17. package/assets/skills/comet-verify/SKILL.md +29 -20
  18. package/assets/skills-zh/comet/SKILL.md +25 -1
  19. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +5 -2
  20. package/assets/skills-zh/comet/reference/context-recovery.md +10 -0
  21. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  22. package/assets/skills-zh/comet-archive/SKILL.md +24 -11
  23. package/assets/skills-zh/comet-build/SKILL.md +42 -25
  24. package/assets/skills-zh/comet-design/SKILL.md +1 -0
  25. package/assets/skills-zh/comet-hotfix/SKILL.md +3 -1
  26. package/assets/skills-zh/comet-open/SKILL.md +11 -1
  27. package/assets/skills-zh/comet-tweak/SKILL.md +3 -1
  28. package/assets/skills-zh/comet-verify/SKILL.md +30 -21
  29. package/dist/app/cli/comet-banner.d.ts +25 -0
  30. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  31. package/dist/app/cli/comet-banner.js +265 -0
  32. package/dist/app/cli/comet-banner.js.map +1 -0
  33. package/dist/app/cli/index.js +36 -2
  34. package/dist/app/cli/index.js.map +1 -1
  35. package/dist/app/commands/classic.d.ts +4 -0
  36. package/dist/app/commands/classic.d.ts.map +1 -0
  37. package/dist/app/commands/classic.js +11 -0
  38. package/dist/app/commands/classic.js.map +1 -0
  39. package/dist/app/commands/doctor.d.ts.map +1 -1
  40. package/dist/app/commands/doctor.js +39 -24
  41. package/dist/app/commands/doctor.js.map +1 -1
  42. package/dist/app/commands/eval.d.ts.map +1 -1
  43. package/dist/app/commands/eval.js +57 -20
  44. package/dist/app/commands/eval.js.map +1 -1
  45. package/dist/app/commands/i18n.d.ts +1 -1
  46. package/dist/app/commands/i18n.d.ts.map +1 -1
  47. package/dist/app/commands/i18n.js +12 -4
  48. package/dist/app/commands/i18n.js.map +1 -1
  49. package/dist/app/commands/init.d.ts.map +1 -1
  50. package/dist/app/commands/init.js +16 -13
  51. package/dist/app/commands/init.js.map +1 -1
  52. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  53. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  54. package/dist/app/commands/project-scope-selection.js +33 -0
  55. package/dist/app/commands/project-scope-selection.js.map +1 -0
  56. package/dist/app/commands/resume-probe.d.ts +11 -0
  57. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  58. package/dist/app/commands/resume-probe.js +63 -0
  59. package/dist/app/commands/resume-probe.js.map +1 -0
  60. package/dist/app/commands/status.d.ts +31 -0
  61. package/dist/app/commands/status.d.ts.map +1 -1
  62. package/dist/app/commands/status.js +109 -20
  63. package/dist/app/commands/status.js.map +1 -1
  64. package/dist/app/commands/uninstall.d.ts +2 -0
  65. package/dist/app/commands/uninstall.d.ts.map +1 -1
  66. package/dist/app/commands/uninstall.js +217 -40
  67. package/dist/app/commands/uninstall.js.map +1 -1
  68. package/dist/app/commands/update.d.ts +6 -0
  69. package/dist/app/commands/update.d.ts.map +1 -1
  70. package/dist/app/commands/update.js +361 -68
  71. package/dist/app/commands/update.js.map +1 -1
  72. package/dist/config/repository-layout.json +4 -2
  73. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  74. package/dist/domains/bundle/bundle-platform.js +3 -1
  75. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  76. package/dist/domains/bundle/eval-manifest-runtime.d.ts +6 -0
  77. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  78. package/dist/domains/bundle/eval-manifest-runtime.js +58 -0
  79. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  80. package/dist/domains/bundle/types.d.ts +1 -1
  81. package/dist/domains/bundle/types.d.ts.map +1 -1
  82. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  83. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  84. package/dist/domains/comet-classic/classic-archive.js +35 -38
  85. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  86. package/dist/domains/comet-classic/classic-cli.d.ts +1 -1
  87. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  88. package/dist/domains/comet-classic/classic-cli.js +3 -0
  89. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  90. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  91. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  92. package/dist/domains/comet-classic/classic-command-checks.js +97 -0
  93. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  94. package/dist/domains/comet-classic/classic-current-change.d.ts +19 -0
  95. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  96. package/dist/domains/comet-classic/classic-current-change.js +132 -0
  97. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  98. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  99. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  100. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  101. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  102. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  103. package/dist/domains/comet-classic/classic-evidence.js +4 -0
  104. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  105. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  106. package/dist/domains/comet-classic/classic-guard.js +68 -69
  107. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  108. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  109. package/dist/domains/comet-classic/classic-hook-guard.js +66 -23
  110. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  111. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  112. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  113. package/dist/domains/comet-classic/classic-project-config.js +40 -0
  114. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  115. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  116. package/dist/domains/comet-classic/classic-resolver.js +3 -3
  117. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  118. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  119. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  120. package/dist/domains/comet-classic/classic-resume-probe-command.js +58 -0
  121. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  122. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  123. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  124. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  125. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  126. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  127. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  128. package/dist/domains/comet-classic/classic-resume-probe.js +386 -0
  129. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  130. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  131. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  132. package/dist/domains/comet-classic/classic-runtime-run.js +38 -0
  133. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  134. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  135. package/dist/domains/comet-classic/classic-state-command.js +128 -12
  136. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  137. package/dist/domains/comet-classic/classic-state.d.ts +3 -1
  138. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  139. package/dist/domains/comet-classic/classic-state.js +4 -0
  140. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  141. package/dist/domains/comet-classic/classic-store.d.ts +4 -1
  142. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  143. package/dist/domains/comet-classic/classic-store.js +4 -3
  144. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  145. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  146. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  147. package/dist/domains/comet-classic/classic-transitions.js +20 -1
  148. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  149. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  150. package/dist/domains/comet-classic/classic-validate-command.js +1 -0
  151. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  152. package/dist/domains/comet-classic/index.d.ts +3 -0
  153. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  154. package/dist/domains/comet-classic/index.js +3 -0
  155. package/dist/domains/comet-classic/index.js.map +1 -1
  156. package/dist/domains/dashboard/collector.js +10 -2
  157. package/dist/domains/dashboard/collector.js.map +1 -1
  158. package/dist/domains/dashboard/web/assets/{index-CjU3VXVu.js → index-CIvN-PL8.js} +11 -11
  159. package/dist/domains/dashboard/web/assets/{index-BcO3_QlT.css → index-DcyRPBnT.css} +1 -1
  160. package/dist/domains/dashboard/web/index.html +2 -2
  161. package/dist/domains/engine/types.d.ts +1 -1
  162. package/dist/domains/engine/types.d.ts.map +1 -1
  163. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  164. package/dist/domains/integrations/openspec.js +6 -6
  165. package/dist/domains/integrations/openspec.js.map +1 -1
  166. package/dist/domains/skill/find.d.ts.map +1 -1
  167. package/dist/domains/skill/find.js +1 -6
  168. package/dist/domains/skill/find.js.map +1 -1
  169. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  170. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  171. package/dist/domains/skill/managed-markdown.js +126 -0
  172. package/dist/domains/skill/managed-markdown.js.map +1 -0
  173. package/dist/domains/skill/platform-install.d.ts +4 -3
  174. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  175. package/dist/domains/skill/platform-install.js +96 -26
  176. package/dist/domains/skill/platform-install.js.map +1 -1
  177. package/dist/domains/skill/project-instructions.d.ts +22 -0
  178. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  179. package/dist/domains/skill/project-instructions.js +61 -0
  180. package/dist/domains/skill/project-instructions.js.map +1 -0
  181. package/dist/domains/skill/uninstall.d.ts +3 -1
  182. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  183. package/dist/domains/skill/uninstall.js +86 -39
  184. package/dist/domains/skill/uninstall.js.map +1 -1
  185. package/dist/platform/install/detect.d.ts +2 -1
  186. package/dist/platform/install/detect.d.ts.map +1 -1
  187. package/dist/platform/install/detect.js +10 -1
  188. package/dist/platform/install/detect.js.map +1 -1
  189. package/dist/platform/install/platforms.d.ts +5 -1
  190. package/dist/platform/install/platforms.d.ts.map +1 -1
  191. package/dist/platform/install/platforms.js +21 -4
  192. package/dist/platform/install/platforms.js.map +1 -1
  193. package/dist/platform/install/project-registry.d.ts +37 -0
  194. package/dist/platform/install/project-registry.d.ts.map +1 -0
  195. package/dist/platform/install/project-registry.js +205 -0
  196. package/dist/platform/install/project-registry.js.map +1 -0
  197. package/eval/.env +28 -0
  198. package/eval/.env.example +52 -0
  199. package/eval/CLAUDE.md +43 -0
  200. package/eval/README.md +538 -0
  201. package/eval/langsmith/.env.example +16 -0
  202. package/eval/langsmith/README.md +93 -0
  203. package/eval/langsmith/skills/README.md +5 -0
  204. package/eval/langsmith/tasks/README.md +5 -0
  205. package/eval/langsmith/tests/conftest.py +187 -0
  206. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  207. package/eval/langsmith/treatments/README.md +5 -0
  208. package/eval/local/README.md +80 -0
  209. package/eval/local/regression_baseline.json +13 -0
  210. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  211. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  212. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  213. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  214. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  215. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  216. package/eval/local/report-style-demo.html +867 -0
  217. package/eval/local/scripts/compare_baselines.py +1018 -0
  218. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  219. package/eval/local/scripts/regression_check.py +171 -0
  220. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  221. package/eval/local/scripts/rescore_rubric.py +120 -0
  222. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  223. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  224. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  225. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  226. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  227. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  228. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  229. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  230. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  231. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  232. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  233. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  234. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  235. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  236. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  237. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  238. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  239. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  240. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  241. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  242. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  243. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  244. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  245. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  246. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  247. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  248. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  249. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  250. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  251. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  252. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  253. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  254. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  255. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  256. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  257. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  258. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  259. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  260. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  261. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  262. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  263. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  264. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  265. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  266. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  267. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  268. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  269. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  270. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  271. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  272. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  273. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  274. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  275. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  276. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  277. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  278. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  279. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  280. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  281. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  282. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  283. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  284. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  285. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  286. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  287. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  288. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  289. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  290. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  291. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  292. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  293. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  294. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  295. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  296. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  297. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  298. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  299. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  300. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  301. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  302. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  303. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  304. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  305. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  306. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  307. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  308. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  309. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  310. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  311. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  312. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  313. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  314. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  315. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  316. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  317. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  318. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  319. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  320. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  321. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  322. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  323. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  324. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  325. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  326. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  327. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  328. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  329. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  330. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  331. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  332. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +2 -0
  333. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  334. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  335. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  336. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +28 -0
  337. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  338. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  339. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  340. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  341. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  342. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +39 -0
  343. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  344. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  345. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  346. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  347. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  348. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  349. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  350. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  351. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  352. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  353. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  354. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  355. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +28 -0
  356. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  357. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  358. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  359. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  360. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  361. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  362. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +50 -0
  363. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  364. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  365. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  366. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  367. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  368. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +28 -0
  369. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  370. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  371. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  372. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  373. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  374. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +53 -0
  375. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  376. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  377. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  378. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  379. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  380. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +28 -0
  381. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  382. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  383. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  384. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  385. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  386. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  387. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  388. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  389. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  390. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  391. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  392. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +20 -0
  393. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  394. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  395. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  396. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  397. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  398. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  399. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  400. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  401. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  402. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  403. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  404. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  405. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  406. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  407. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  408. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  409. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  410. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  411. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +39 -0
  412. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  413. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  414. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  415. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  416. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  417. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  418. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  419. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  420. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  421. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  422. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  423. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +39 -0
  424. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  425. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  426. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  427. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  428. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  429. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +39 -0
  430. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  431. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  432. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  433. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  434. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  435. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +2 -0
  436. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  437. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  438. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +36 -0
  439. package/eval/local/tasks/index.yaml +155 -0
  440. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +5 -0
  441. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  442. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  443. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  444. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +2 -0
  445. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  446. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  447. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  448. package/eval/local/tests/conftest.py +1148 -0
  449. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  450. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  451. package/eval/local/tests/scaffold/test_conftest_helpers.py +534 -0
  452. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  453. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  454. package/eval/local/tests/scaffold/test_logging.py +243 -0
  455. package/eval/local/tests/scaffold/test_manifests.py +132 -0
  456. package/eval/local/tests/scaffold/test_profiles.py +866 -0
  457. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  458. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  459. package/eval/local/tests/scaffold/test_sample_quality.py +211 -0
  460. package/eval/local/tests/scaffold/test_tasks.py +168 -0
  461. package/eval/local/tests/scaffold/test_treatments.py +244 -0
  462. package/eval/local/tests/scaffold/test_utils.py +139 -0
  463. package/eval/local/tests/tasks/test_tasks.py +445 -0
  464. package/eval/local/tests/tasks/test_validation_scripts.py +143 -0
  465. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  466. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  467. package/eval/local/treatments/common/control.yaml +4 -0
  468. package/eval/pyproject.toml +41 -0
  469. package/eval/report-html-config.json +6 -0
  470. package/eval/scaffold/__init__.py +67 -0
  471. package/eval/scaffold/python/__init__.py +95 -0
  472. package/eval/scaffold/python/attribution.py +43 -0
  473. package/eval/scaffold/python/evidence.py +38 -0
  474. package/eval/scaffold/python/external_data_handler.py +18 -0
  475. package/eval/scaffold/python/generic_llm_judge.py +235 -0
  476. package/eval/scaffold/python/judge_config.py +168 -0
  477. package/eval/scaffold/python/llm_judge.py +191 -0
  478. package/eval/scaffold/python/logging.py +705 -0
  479. package/eval/scaffold/python/manifests.py +129 -0
  480. package/eval/scaffold/python/paper_charts.py +25 -0
  481. package/eval/scaffold/python/pass_at_k.py +107 -0
  482. package/eval/scaffold/python/paths.py +56 -0
  483. package/eval/scaffold/python/profiles.py +127 -0
  484. package/eval/scaffold/python/report_outputs.py +1391 -0
  485. package/eval/scaffold/python/sample_quality.py +339 -0
  486. package/eval/scaffold/python/schema.py +39 -0
  487. package/eval/scaffold/python/skill_parser.py +469 -0
  488. package/eval/scaffold/python/tasks.py +330 -0
  489. package/eval/scaffold/python/treatments.py +271 -0
  490. package/eval/scaffold/python/utils.py +366 -0
  491. package/eval/scaffold/python/validation/__init__.py +21 -0
  492. package/eval/scaffold/python/validation/authoring_rubric.py +326 -0
  493. package/eval/scaffold/python/validation/comet_workflow.py +187 -0
  494. package/eval/scaffold/python/validation/core.py +264 -0
  495. package/eval/scaffold/python/validation/dataset.py +337 -0
  496. package/eval/scaffold/python/validation/docker.py +106 -0
  497. package/eval/scaffold/python/validation/evaluator.py +549 -0
  498. package/eval/scaffold/python/validation/generic_rubric.py +169 -0
  499. package/eval/scaffold/python/validation/rubric.py +740 -0
  500. package/eval/scaffold/python/validation/runner.py +237 -0
  501. package/eval/scaffold/python/validation/scripts.py +58 -0
  502. package/eval/scaffold/python/validation/tracing.py +313 -0
  503. package/eval/scaffold/shell/common.sh +126 -0
  504. package/eval/scaffold/shell/docker.sh +482 -0
  505. package/eval/scaffold/shell/run-claude-loop.sh +181 -0
  506. package/eval/scaffold/shell/setup.sh +259 -0
  507. package/eval/simulator-instruction.md +9 -0
  508. package/package.json +24 -2
@@ -0,0 +1,260 @@
1
+ ---
2
+ name: comet-design
3
+ description: "Use when full Comet change 已完成 open 阶段但缺少 Superpowers Design Doc,或 design 阶段需要从 OpenSpec 交接包恢复。"
4
+ ---
5
+
6
+ # Comet 阶段 2:深度设计(Design)
7
+
8
+ ## 前置条件
9
+
10
+ - 活跃 change 已存在(proposal.md、design.md、tasks.md)
11
+ - 无 Design Doc(`docs/superpowers/specs/` 下无对应文件)
12
+
13
+ > 职责边界:open 阶段的 `design.md` 给出**高层方案框架**(架构决策方向、方案选型、数据流);design 阶段的 Design Doc 是对它的**深度技术细化**(详细实现设计、技术风险、测试策略、边界条件),是深化而非替代或重写。
14
+
15
+ ## 步骤
16
+
17
+ ### 0. 入口状态验证(Entry Check)
18
+
19
+ 按 `comet/reference/scripts.md` 定位脚本(定位 `comet-env.mjs`),然后执行入口验证;从任意入口恢复时先按 `comet/reference/context-recovery.md` 运行恢复检查:
20
+
21
+ ```bash
22
+ node "$COMET_STATE" check <name> design
23
+ ```
24
+
25
+ 验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
26
+
27
+ **幂等性**:所有 design 阶段操作可以安全重试。如果 `handoff_context` 和 `handoff_hash` 已存在,先确认它们与当前产物一致再决定是否重新生成。
28
+
29
+ ### 1a. 生成 OpenSpec → Superpowers 交接包
30
+
31
+ **必须由脚本生成,不允许 agent 临场手写 summary 代替。**
32
+
33
+ ```bash
34
+ node "$COMET_HANDOFF" <change-name> design --write
35
+ ```
36
+
37
+ 脚本会根据 change `.comet.yaml` 的 `context_compression` 快照生成并记录交接包。
38
+
39
+ 默认 `context_compression: off` 时生成:
40
+
41
+ ```text
42
+ openspec/changes/<name>/.comet/handoff/design-context.json
43
+ openspec/changes/<name>/.comet/handoff/design-context.md
44
+ ```
45
+
46
+ 启用 beta(项目 `.comet/config.yaml` 中 `context_compression: beta`,创建 change 时快照进入 `.comet.yaml`)时生成:
47
+
48
+ ```text
49
+ openspec/changes/<name>/.comet/handoff/spec-context.json
50
+ openspec/changes/<name>/.comet/handoff/spec-context.md
51
+ ```
52
+
53
+ 并在 `.comet.yaml` 写入:
54
+
55
+ ```yaml
56
+ handoff_context: openspec/changes/<name>/.comet/handoff/design-context.json
57
+ handoff_hash: <sha256>
58
+ ```
59
+
60
+ 默认交接包是 **compact 可追溯摘录**,不是 agent summary:
61
+ - `design-context.json`:机器索引,包含 change、phase、canonical spec、source paths、hash
62
+ - `design-context.md`:供 Superpowers 阅读的上下文,包含脚本标记、source path、line range、sha256、确定性摘录
63
+ - 超出摘录预算时标记 `[TRUNCATED]`,并保留 Full source 路径
64
+
65
+ beta 交接包是 **结构化 spec projection**,用于减少 OpenSpec 原文 token 占用但避免实现漂移:
66
+ - `spec-context.json`:机器索引,包含 change、phase、mode=beta、source paths、context_hash、files 角色
67
+ - `spec-context.md`:供 Superpowers 阅读的紧凑上下文,verbatim 投影 delta spec 文件并按 hash 引用支撑产物
68
+ - OpenSpec delta spec 仍是 canonical spec;projection 缺失或过期时必须重新生成或读取源 spec,不得用 agent summary 替代
69
+
70
+ 如确实需要全文上下文,可显式运行:
71
+
72
+ ```bash
73
+ node "$COMET_HANDOFF" <change-name> design --write --full
74
+ ```
75
+
76
+ 交接包来源来自 OpenSpec open 阶段产物:
77
+ - `proposal.md`:目标、动机、范围、非目标
78
+ - `design.md`:高层架构决策、方案约束
79
+ - `tasks.md`:初始任务边界
80
+ - `specs/*/spec.md`:delta 能力规格
81
+
82
+ ### 1b. 执行 Brainstorming(带上下文)
83
+
84
+ **立即执行:** 使用 Skill 工具加载 Superpowers `brainstorming` 技能。禁止跳过此步骤。
85
+
86
+ 技能加载时,ARGUMENTS 必须包含:
87
+
88
+ ```text
89
+ Language: 使用触发本次工作流的用户请求语言输出
90
+ ```
91
+
92
+ 技能加载后,按其指引使用以下上下文:
93
+
94
+ ```text
95
+ Change: <change-name>
96
+ OpenSpec Context Pack: openspec/changes/<name>/.comet/handoff/design-context.md
97
+ Machine handoff: openspec/changes/<name>/.comet/handoff/design-context.json
98
+
99
+ 如 context_compression: beta,则使用:
100
+ OpenSpec Context Pack: openspec/changes/<name>/.comet/handoff/spec-context.md
101
+ Machine handoff: openspec/changes/<name>/.comet/handoff/spec-context.json
102
+
103
+ OpenSpec 产物是上游事实源,但不得用“跳过重复上下文探索”削弱 Superpowers `brainstorming` 的澄清流程。
104
+ 你的任务是基于交接包做深度技术设计:实现方案、技术风险、测试策略、边界条件。
105
+ 如发现目标、范围、非目标、验收场景或关键约束仍不清楚,必须先继续提问并形成设计方案,不得只进行一轮问答就创建 Design Doc。
106
+ 不要重写 proposal/spec;如发现 OpenSpec delta spec 缺少验收场景,只能提出 Spec Patch,并回写 OpenSpec delta spec;不要在 Design Doc 中创建第二份需求 spec。Spec Patch 仅限于补充验收场景、修正歧义描述或添加边界条件,不得大幅重写 delta spec 的结构或范围——如需大幅修改,应标记为设计发现并回到 brainstorming 确认。
107
+
108
+ Design Doc frontmatter 必须最小化,只包含:
109
+ ---
110
+ comet_change: <change-name>
111
+ role: technical-design
112
+ canonical_spec: openspec
113
+ ---
114
+
115
+ 按 Superpowers `brainstorming` 技能原流程推进:澄清问题、2-3 个方案、分段确认设计。不得提前写入 Design Doc。
116
+ ```
117
+
118
+ 禁止在未加载该技能的情况下继续。
119
+
120
+ 如 Superpowers `brainstorming` 技能不可用,停止流程并提示安装或启用 Superpowers 技能,不要用普通对话替代该步骤。
121
+
122
+ 技能加载后,按其指引产出设计方案(以对话形式呈现):
123
+ - 技术方案:架构、数据流、关键技术选型与风险
124
+ - 测试策略
125
+ - 需求/范围缺口与需回写的 Spec Patch
126
+ - 如需补充验收场景,标明将回写的 delta spec 变更
127
+
128
+ brainstorming 阶段不写入 Design Doc 文件,仅产出设计方案供 Step 1c 用户确认。确认后才创建 `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` 并回写 delta spec。
129
+
130
+ 但为了上下文压缩恢复,brainstorming 过程中必须增量更新 `brainstorm-summary.md`。每轮澄清或方案迭代后,只要产生新的已确认事实、关键约束、候选方案、取舍/风险、测试策略或 Spec Patch 候选,就更新该文件;未确认内容必须标注为“待确认”或“候选”。该文件是恢复检查点,不是 Design Doc,也不得替代 Step 1c 的用户确认。
131
+
132
+ ### 1c. 用户确认设计方案(阻塞点)
133
+
134
+ brainstorming 产出设计方案后,**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户明确确认设计方案**。不得在用户确认前创建最终 Design Doc、写入 `design_doc`、运行 design guard,或进入 `/comet-build`。
135
+
136
+ 暂停时只展示必要摘要:
137
+ - 采用的技术方案
138
+ - 关键取舍与风险
139
+ - 测试策略
140
+ - 如有 Spec Patch,列出将回写的 delta spec 变更
141
+
142
+ 用户明确确认后,才继续 Step 2。若用户要求调整,继续 brainstorming 迭代,直到用户确认。
143
+
144
+
145
+ ### 1d. Brainstorming 检查点定稿
146
+
147
+ 用户确认设计方案后,在创建 Design Doc 前,创建或更新已增量维护的检查点文件,将其定稿为确认后的设计方案摘要:
148
+
149
+ ```bash
150
+ mkdir -p openspec/changes/<name>/.comet/handoff
151
+ ```
152
+
153
+ `openspec/changes/<name>/.comet/handoff/brainstorm-summary.md` 结构:
154
+
155
+ ```markdown
156
+ # Brainstorm Summary
157
+
158
+ - Change: <change-name>
159
+ - Date: <YYYY-MM-DD>
160
+
161
+ ## 确认的技术方案
162
+
163
+ <用户确认的方案摘要>
164
+
165
+ ## 关键取舍与风险
166
+
167
+ <主要取舍和风险>
168
+
169
+ ## 测试策略
170
+
171
+ <测试方法概述>
172
+
173
+ ## Spec Patch
174
+
175
+ <将回写的 delta spec 变更,无则写"无">
176
+ ```
177
+
178
+ **上下文压缩说明**:每次增量更新 `brainstorm-summary.md` 后,都是相对安全的压缩恢复点。Brainstorming 完成后,如上下文窗口紧张,应优先在此处进行压缩。压缩后重新加载以下文件继续 Step 2:
179
+ - `openspec/changes/<name>/.comet/handoff/brainstorm-summary.md`
180
+ - `openspec/changes/<name>/.comet/handoff/design-context.md`(或 beta 模式的 `spec-context.md`)
181
+ - `openspec/changes/<name>/.comet/handoff/design-context.json`(或 beta 模式的 `spec-context.json`)
182
+
183
+ ### 1e. 主动式上下文压缩
184
+
185
+ 完成 Step 1d 并确认 `brainstorm-summary.md` 已写入后,进入 Design Doc 创建前的主动式上下文压缩。此时 OpenSpec 交接包、brainstorming 决策和待确认项都已落盘,应主动释放前面读取 Spec 和 brainstorming 消耗的上下文,为 Step 2 及后续 Build 阶段保留窗口。
186
+
187
+ 执行规则:
188
+ - 如果当前平台提供原生上下文压缩/清理机制(例如宿主 Agent 的 compact/compaction 命令、工具或 UI 操作),必须在这里触发一次主动压缩;不要尝试用 shell 脚本伪造压缩命令。
189
+ - 压缩恢复提示必须包含 change 名称、当前步骤(Design Step 2)、以及上方三类需重新加载的 handoff 文件。
190
+ - 如果当前平台无法由 agent 程序化触发压缩,必须暂停并提示用户在宿主平台执行手动压缩;用户确认无法压缩或要求继续时,才继续 Step 2。
191
+
192
+ ### 2. 创建 Design Doc
193
+
194
+ 基于 brainstorming 对话的完整上下文(仍在主 session 中),创建 Design Doc。
195
+
196
+ Design Doc frontmatter 必须最小化:
197
+
198
+ ```yaml
199
+ ---
200
+ comet_change: <change-name>
201
+ role: technical-design
202
+ canonical_spec: openspec
203
+ ---
204
+ ```
205
+
206
+ 将 Design Doc 写入 `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`。
207
+ 如需回写 delta spec(Spec Patch),同时编辑对应的 `specs/*/spec.md`。
208
+
209
+ **上下文压缩恢复**:若上下文已被压缩,从 `brainstorm-summary.md` + handoff 上下文恢复。若用户尚未确认设计方案,回到 Step 1b/1c 继续 brainstorming;若用户已确认,继续创建 Design Doc。brainstorm-summary.md 是压缩恢复的落盘点,不是 Design Doc 的唯一输入——创建时应尽可能利用恢复后的完整上下文。
210
+
211
+ ### 3. 更新 Comet 状态
212
+
213
+ 先记录 design_doc 路径。如果 Spec Patch 回写了 delta spec(新增或修改了 `specs/*/spec.md`),必须重新生成 handoff 以更新 hash:
214
+
215
+ ```bash
216
+ # 记录 design_doc 路径
217
+ node "$COMET_STATE" set <name> design_doc docs/superpowers/specs/YYYY-MM-DD-topic-design.md
218
+
219
+ # 如有 delta spec 变更,重新生成 handoff(更新 hash)
220
+ node "$COMET_HANDOFF" <change-name> design --write
221
+
222
+ # 阶段守卫推进 phase 到下一阶段
223
+ node "$COMET_GUARD" <change-name> design --apply
224
+ ```
225
+
226
+ 如果没有 delta spec 变更,跳过 handoff 重新生成步骤。状态文件自动更新,无需手动编辑其他字段。
227
+
228
+ ## 退出条件
229
+
230
+ - Design Doc 已创建并保存
231
+ - Design Doc frontmatter 包含 `comet_change`、`role: technical-design`、`canonical_spec: openspec`
232
+ - `handoff_context` 和 `handoff_hash` 已写入 `.comet.yaml`(由 guard 强制校验)
233
+ - `handoff_hash` 与当前 OpenSpec open 阶段产物一致(由 guard 强制校验)
234
+ - `design-context.md` 或 beta `spec-context.md` 必须是脚本生成,且包含 source path、mode、sha256 等可追溯标记(由 guard 强制校验)
235
+ - beta 模式下,`spec-context.json` 必须结构合法且引用当前源文件(由 guard 强制校验)
236
+ - 如有新能力或补充验收场景,OpenSpec delta spec 已创建/更新
237
+ - `design_doc` 已写入 `.comet.yaml`
238
+ - **阶段守卫**:运行 `node "$COMET_GUARD" <change-name> design --apply`,全部 PASS 后由守卫推进到 `phase: build`(此步骤更新 `phase` 字段,与 `auto_transition` 无关)
239
+
240
+ 退出前必须使用 `--apply`:
241
+
242
+ ```bash
243
+ node "$COMET_GUARD" <change-name> design --apply
244
+ ```
245
+
246
+ ## 上下文压缩恢复
247
+
248
+ 按 `comet/reference/context-recovery.md` 执行,phase 参数为 `design`。
249
+
250
+ ## 自动衔接下一阶段
251
+
252
+ 按 `comet/reference/auto-transition.md` 执行。关键命令:
253
+
254
+ ```bash
255
+ node "$COMET_STATE" next <change-name>
256
+ ```
257
+
258
+ - `NEXT: auto` → 调用 `SKILL` 指向的 skill 进入下一阶段
259
+ - `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
260
+ - `NEXT: done` → 流程已完成,无需继续
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: comet-hotfix
3
+ description: "Use when 用户要修复已有行为 bug,且不新增 capability、不需要完整设计;也用于恢复 hotfix workflow。"
4
+ ---
5
+
6
+ # Comet 预设路径:Hotfix
7
+
8
+ 快速 bug fix 工作流:open → build → verify → archive。跳过 brainstorming 和完整 plan,适用于行为修复、不涉及新 capability 设计的场景。
9
+
10
+ **适用条件**(必须全部满足):
11
+ 1. 修复已有功能的 bug,不新增 capability
12
+ 2. 不涉及接口变更或架构调整
13
+ 3. 改动范围可预估(文件数仅作提示,不作为硬性升级条件,见下方升级判定)
14
+
15
+ **不适用**:如修复过程命中质变信号(见「升级判定」章节),由用户决定是否升级为完整 `/comet` 流程。
16
+
17
+ ---
18
+
19
+ ## 流程(预设流程,6 步)
20
+
21
+ ### 0. 输出语言约束
22
+
23
+ 精简版 OpenSpec 产物必须使用触发本次工作流的用户请求语言。
24
+
25
+ 执行链路:open → build → verify → archive。Hotfix 为每个阶段提供默认决策:精简开启、直接构建、按规模验证、验证通过后进入归档前最终确认。
26
+
27
+ 开始前按 `comet/reference/scripts.md` 定位 Comet 脚本(定位 `comet-env.mjs`);从任意入口恢复时先按 `comet/reference/context-recovery.md` 确认 phase/workflow。
28
+
29
+ ### 1. 快速开启(预设 open)
30
+
31
+ 复用 Comet open 能力创建 change,但使用 hotfix 默认值:不执行 `openspec-explore` 长探索,直接进入精简 change 创建。
32
+
33
+ **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。禁止跳过此步骤。
34
+
35
+ 技能加载后,按其指引创建精简版产物:
36
+ - `proposal.md` — 问题描述 + 根因分析 + 修复目标(无需方案对比)
37
+ - `design.md` — 修复方案(1 个即可,无需多方案对比)
38
+ - `tasks.md` — 修复任务清单
39
+ - **无需 delta spec**(除非修复改变了已有 spec 的验收场景)
40
+
41
+ 初始化 Comet 状态文件:
42
+
43
+ ```bash
44
+ node "$COMET_STATE" init <name> hotfix
45
+ ```
46
+
47
+ 初始化后验证状态:
48
+
49
+ ```bash
50
+ node "$COMET_STATE" check <name> open
51
+ ```
52
+
53
+ 阶段守卫完成 open → build 过渡:
54
+
55
+ ```bash
56
+ node "$COMET_GUARD" <change-name> open --apply
57
+ ```
58
+
59
+ 检查 `auto_transition` 决定是否继续:
60
+
61
+ ```bash
62
+ node "$COMET_STATE" next <name>
63
+ ```
64
+
65
+ - `NEXT: auto` → 继续 Step 2
66
+ - `NEXT: manual` → 暂停,按 `HINT` 提示用户手动运行 `/<SKILL>`
67
+
68
+ ### 2. 直接构建(预设 build)
69
+
70
+ 使用 hotfix 默认值:`build_mode: direct`,`review_mode: off`(hotfix/tweak 跳过 review_mode 选择——guard 不要求预设工作流选择此项)。跳过 Superpowers `brainstorming` 和 `writing-plans`(除非任务 > 3 个;若超过 3 个任务,转入 `/comet-build` 的计划与执行方式选择——注意这不触发 full workflow 升级,仅切换执行方式)。
71
+
72
+ 继续或开始修改前,按 `comet/reference/dirty-worktree.md` 协议处理未提交改动。若归因后发现修复命中质变信号或文件数 tripwire,按本文件「升级判定」处理。
73
+
74
+ **立即执行:** 按 tasks.md 逐个执行任务:
75
+
76
+ 1. 读取 `openspec/changes/<name>/tasks.md`,获取未完成任务列表
77
+ 2. 对每个未完成任务:
78
+ - 根据任务描述修改代码
79
+ - 运行项目格式化命令(如 `mvn spotless:apply`、`npm run format` 等)
80
+ - 运行相关测试确认通过
81
+ - 将 tasks.md 中对应 `- [ ]` 勾选为 `- [x]`
82
+ - 提交代码,commit message 格式:`fix: <简述修复>`
83
+ 3. 全部任务完成后,显式运行项目相关测试和构建命令
84
+
85
+ 执行 hotfix 期间,只要运行程序、测试、构建或手动验证时出现崩溃、异常行为、测试失败或构建失败,必须使用 Skill 工具加载 Superpowers `systematic-debugging` 技能。在完成根因调查前,不得提出或实施源码修复。
86
+
87
+ 具体调查、最小失败测试、修复验证和保持当前 change 验证闭环的要求,按 `comet/reference/debug-gate.md` 执行。
88
+
89
+ **如修复影响已有 spec 验收场景**:
90
+ - 在 `openspec/changes/<name>/specs/<capability>/spec.md` 创建 delta spec
91
+ - 仅包含 `## MODIFIED Requirements` 部分
92
+
93
+ ### 3. 根因消除检查
94
+
95
+ **在运行 build guard 之前执行**,确保修复确实消除了问题根因:
96
+
97
+ 1. 读取 proposal.md 中的 bug 描述和根因
98
+ 2. 搜索验证问题代码不再存在
99
+ 3. 如根因未消除,回到 Step 2 继续修复(此时仍在 build 阶段,无需状态回退)
100
+
101
+ **升级判定信号**:
102
+ - 根因消除检查发现深层架构问题 → 命中质变信号,按「升级判定」章节暂停交用户决定
103
+ - 修复需要额外接口变更 → 命中质变信号(引入新的 public API),按「升级判定」章节暂停交用户决定
104
+
105
+ 根因确认消除后,运行阶段守卫完成 build → verify 过渡:
106
+
107
+ ```bash
108
+ node "$COMET_GUARD" <change-name> build --apply
109
+ ```
110
+
111
+ 状态文件自动更新为 `phase: verify`、`verify_result: pending`,然后进入验证。
112
+
113
+ ### 4. 验证(预设 verify)
114
+
115
+ 复用 `/comet-verify`,由 comet-verify 的规模评估决定轻量或完整验证。
116
+
117
+ **立即执行:** 使用 Skill 工具加载 `comet-verify` 技能。禁止跳过此步骤。
118
+
119
+ 无 delta spec 的小范围 hotfix 通常满足轻量验证条件(≤ 3 tasks、改动文件数低于 scale 阈值),comet-verify 的规模评估会选择轻量验证路径(6 项快速检查;默认 `review_mode: off` 时不自动派发代码审查)。若用户希望增加审查,可在验证前运行 `node "$COMET_STATE" set <name> review_mode standard` 或 `thorough`。若 hotfix 创建了 delta spec,则根据 comet-verify 的规模评估规则进入完整验证路径。
120
+
121
+ 验证通过后,按 `/comet-verify` 的规则将 `.comet.yaml` 的 `verify_result` 记录为 `pass`,归档前不得跳过该状态。验证通过后仍必须进入 `/comet-archive` 的归档前最终确认,不得自动运行归档脚本。
122
+
123
+ ### 5. 归档(预设 archive)
124
+
125
+ 复用 `/comet-archive`。归档前必须满足 `.comet.yaml` 中 `verify_result: pass`,并等待 `/comet-archive` 的归档前最终确认。
126
+
127
+ **立即执行:** 使用 Skill 工具加载 `comet-archive` 技能进行归档。禁止跳过此步骤。
128
+ 如有 delta spec,按 comet-archive 规则同步到 main spec,并处理关联 Design Doc 与 Plan 的归档标注。
129
+
130
+ ---
131
+
132
+ ## 连续执行模式
133
+
134
+ <IMPORTANT>
135
+ Hotfix 流程默认 **一次性连续执行**。调用 `/comet-hotfix` 后,agent 在 hotfix 自有步骤间自动推进,不主动停顿。**例外**:若 `auto_transition: false`,则在每个 phase 边界(build/verify/archive 之间)停下,由用户手动运行下一阶段命令——此时连续执行降级为逐阶段手动推进,详见下方「自动衔接下一阶段」。但无论 `auto_transition` 取何值,以下情况都必须暂停等待用户确认:
136
+
137
+ 1. 遇到升级判定信号(见「升级判定」章节),**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确选择**:继续 hotfix 流程,还是升级为完整 `/comet` 流程
138
+ 2. 任务超过 3 个转入 `/comet-build` 时的工作区隔离和执行方式选择
139
+ 3. 验证阶段(comet-verify)的验证失败决策和分支处理决策
140
+ 4. 归档前最终确认(comet-archive 执行归档脚本前)
141
+
142
+ 执行顺序:快速开启 → 直接构建 → 根因消除检查 → 验证 → 归档 → 完成
143
+
144
+ 每个阶段完成后立即进入下一阶段。阶段内部仍必须按上文要求调用对应 Comet/OpenSpec/Superpowers skill,被调用的 skill 如有自己的用户决策点,按该 skill 规则执行。
145
+ </IMPORTANT>
146
+
147
+ ---
148
+
149
+ ## 升级判定
150
+
151
+ hotfix 的升级判定只决定是否从预设流程转为 full;文件数不自动升级,`comet-state scale` 只决定验证轻重。
152
+
153
+ 若由 `/comet` 入口传入 intent frame,hotfix 在 build 前只复核 `risk_signal` 和升级信号:新增 capability、public API、schema 变更、跨模块协调或深层架构问题。命中时进入现有升级决策点;不得重新实现入口意图识别。
154
+
155
+ 持续检查以下质变信号:跨模块协调修改、需要新增 capability、数据库 schema 变更、引入新的 public API、触及深层架构问题(hotfix 语境下多在根因消除检查时暴露)。命中任一信号时,agent **不得自行升级或自行判定可继续**。
156
+
157
+ 文件数 tripwire 仅作提示:改动文件数超过提示阈值(如 > 4 个文件)时,也交给用户决定继续 hotfix 还是升级 full;文件数多不等于质变。bug 修复通常聚焦在 1-3 个文件,超过阈值说明改动面偏大、值得让用户复核是否仍属预设范围。
158
+
159
+ 命中质变信号或文件数 tripwire 时,**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户明确选择**。不得直接进入 `/comet-design`,不得自动补充 Design Doc。
160
+
161
+ 用户选择升级(选项 B)后,使用状态机合法的升级通道,单条命令完成预设流程 → full 转换并回退到 design 阶段:
162
+
163
+ ```bash
164
+ node "$COMET_STATE" transition <name> preset-escalate
165
+ ```
166
+
167
+ 该命令原子地把 `workflow`/`classic_profile` 置为 `full`、`phase` 回退到 `design`、清空 `design_doc`(满足 comet-design 入口要求)。然后在当前 change 基础上补充 Design Doc:**立即使用 Skill 工具加载 `comet-design` skill**,后续正常走完整流程。
168
+
169
+ 用户选择继续(选项 A)时,继续 hotfix 流程,并记录用户确认继续的原因。
170
+
171
+ ---
172
+
173
+ ## 退出条件
174
+
175
+ - Bug 已修复,测试通过
176
+ - change 已归档
177
+ - 如有 spec 变更,已同步到 main spec
178
+ - **阶段守卫**:build → verify 前运行 `node "$COMET_GUARD" <change-name> build --apply`,verify → archive 前按 `/comet-verify` 规则运行 `node "$COMET_GUARD" <change-name> verify --apply`
179
+
180
+ ## 自动衔接下一阶段
181
+
182
+ 按 `comet/reference/auto-transition.md` 执行。关键命令:
183
+
184
+ ```bash
185
+ node "$COMET_STATE" next <name>
186
+ ```
187
+
188
+ - `NEXT: auto` → 调用 `SKILL` 指向的 skill 继续 hotfix 流程(`phase: build` 返回 `comet-hotfix`,`verify` 返回 `comet-verify`,`archive` 返回 `comet-archive`)
189
+ - `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
190
+ - `NEXT: done` → 流程已完成,无需继续
@@ -0,0 +1,210 @@
1
+ ---
2
+ name: comet-open
3
+ description: "Use when Comet 需要创建新的 OpenSpec change,或 active change 缺少 proposal/design/tasks/.comet.yaml 初始化产物。"
4
+ ---
5
+
6
+ # Comet 阶段 1:开启(Open)
7
+
8
+ ## 前置条件
9
+
10
+ - 无活跃 change,或用户希望创建新 change
11
+
12
+ ## 步骤
13
+
14
+ ### 0. 输出语言约束
15
+
16
+ 传递给 OpenSpec 的所有提问和产物要求都必须包含输出语言约束:使用触发本次工作流的用户请求语言。恢复已有 change 且产物已有明确主语言时,除非用户明确要求切换,否则保持该语言。
17
+
18
+ ### 1. 探索想法与需求澄清
19
+
20
+ **立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过此步骤。
21
+
22
+ 技能加载后,按其指引探索问题空间,但不得把一次问答视为足够澄清。必须围绕下列内容继续提问、对齐并形成澄清摘要:
23
+ - 目标:用户真正要解决的问题和期望结果
24
+ - 非目标:本次明确不做的内容
25
+ - 范围边界:涉及/不涉及的模块、用户、平台或数据
26
+ - 关键未知项:仍不确定的假设、风险或依赖
27
+ - 验收场景草案:至少覆盖核心成功场景和关键边界场景
28
+
29
+ 澄清摘要必须包含:目标、非目标、范围边界、关键未知项、验收场景草案。
30
+
31
+ ### 1a. PRD 拆分预检(阻塞点)
32
+
33
+ 当用户输入是大型 PRD、路线图、完整产品方案,或澄清摘要显示包含多个独立能力、模块、用户路径或里程碑时,必须在创建 OpenSpec artifacts 前评估是否需要拆分为多个 change。
34
+
35
+ 拆分预检必须基于已澄清的信息,输出候选拆分清单。每个候选拆分项必须包含:
36
+ - 建议 change 名称
37
+ - 目标与范围边界
38
+ - 明确非目标
39
+ - 依赖关系或推荐执行顺序
40
+ - 对应的核心验收场景
41
+
42
+ 满足任一条件时,应推荐拆分:
43
+ - PRD 包含多个可独立设计、构建、验证、归档的 capability
44
+ - 涉及多个模块或用户路径,且其中一部分可独立交付
45
+ - 存在明显分阶段里程碑
46
+ - 预计会产生多个 delta spec 或超过 3 个大任务
47
+ - 任一部分失败或延期不应阻塞其他部分进入后续阶段
48
+
49
+ 如推荐拆分,必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户选择。
50
+
51
+ 用户选择必须包含:
52
+ - 「创建多个 OpenSpec changes」— 按候选拆分逐个创建独立 change
53
+ - 「保持为一个 change」— 继续单 change 流程,并在 proposal/design/tasks 中记录不拆分原因
54
+ - 「调整拆分方案后继续」— 用户说明调整方向后,重新输出候选拆分清单并再次确认
55
+
56
+ 每个被接受的拆分项都必须通过 `/comet-open` 创建独立 change,不得直接调用 `/opsx:new`。`/comet-open` 负责同时创建 OpenSpec artifacts 和 `.comet.yaml`,确保每个 change 都进入 Comet 状态机。
57
+
58
+ 不得在用户完成 PRD 拆分选择前创建 proposal.md、design.md 或 tasks.md。若用户选择创建多个 change,当前 `/comet-open` 调用只负责完成拆分确认与调度,随后按用户确认的顺序分别进入每个拆分项的 `/comet-open`。
59
+
60
+ 批量拆分模式下,进入每个拆分项的 `/comet-open` 时必须明确标注「已确认拆分项」并携带该拆分项的目标、范围、非目标和验收场景。已确认拆分项默认跳过 PRD 拆分预检,除非该拆分项本身仍明显包含多个独立 capability。
61
+
62
+ 批量拆分模式下,单个拆分项完成 open 阶段后不得自动流转到 `/comet-design`。拆分完毕后必须暂停询问用户开始哪一个 change;用户选择后,只推进该 change 进入 `/comet-design`,其他 change 保持 active,稍后通过 `/comet` 恢复。
63
+
64
+ 最小断点恢复规则:不新增专用批量状态文件。若批量拆分过程中断,恢复时先检查已创建的 active changes;已存在且包含 `.comet.yaml` 的拆分项不得重复创建,未创建的拆分项按用户已确认的拆分清单继续通过 `/comet-open` 创建。若对话中已确认的拆分清单不可恢复,必须重新向用户确认拆分清单后再继续。
65
+
66
+ ### 1b. 需求澄清完成确认(阻塞点)
67
+
68
+ 创建 OpenSpec artifacts 前,必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户确认需求澄清完成。
69
+
70
+ 暂停时必须展示澄清摘要:目标、非目标、范围边界、关键未知项、验收场景草案。
71
+
72
+ 不得在用户确认需求澄清完成前创建 proposal.md、design.md 或 tasks.md,也不得使用 Skill 工具加载 `openspec-propose` 技能一次性生成全部 artifacts。
73
+
74
+ ### 1c. Change 名称确认(阻塞点)
75
+
76
+ 创建 change 目录(`openspec new change`)前,必须按 `comet/reference/decision-point.md` 的协议暂停,让用户决定 change 名称。不得自动生成或静默推断 change 名称。
77
+
78
+ OpenSpec change 名称必须是 **kebab-case 英文**(小写字母、数字、连字符;如 `refine-requirements-doc`)。中文或其他不合规名称无效。
79
+
80
+ 暂停时必须展示:
81
+ - 基于已确认澄清摘要派生的 **2-3 个推荐 kebab-case 英文名**,每个附一行说明其隐含范围
82
+ - 一个让用户 **自行输入名称** 的明确选项
83
+ - 提示:**若用户输入中文(或任何非 kebab-case 文本),会被转换为合规的 kebab-case 英文名**,转换结果必须回显给用户确认后才能使用
84
+
85
+ 决策选项必须包含:
86
+ - 选择某个推荐名称
87
+ - 「自行输入名称」——接收用户输入;若已是合规 kebab-case 英文则直接使用;若为中文或其他不合规形式,则转换为合规 kebab-case 英文并回显转换后的名称,确认后再继续
88
+
89
+ 不得在用户确认最终 change 名称前运行 `openspec new change` 或创建 `.comet.yaml`。若选定/转换后的名称与已有 change 冲突,必须报告冲突并请用户另选名称。
90
+
91
+ ### 2. 创建 Change 结构 + 初始化状态
92
+
93
+ **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。禁止跳过此步骤。
94
+
95
+ 完整 `/comet` 流程默认不得使用 Skill 工具加载 `openspec-propose` 技能;只有用户明确要求一次性生成提案和 artifacts 时才允许加载。
96
+
97
+ 技能加载后,按其指引创建 change 骨架,但当 Step 1b 的已确认澄清摘要已存在于对话上下文时,覆盖其"STOP and wait for user direction"行为。
98
+
99
+ 如果用户已确认澄清摘要(Step 1b),直接使用该摘要填充产物内容。如果不存在澄清摘要(边缘情况),回退到技能的默认行为,询问用户。
100
+
101
+ change 骨架创建后,按以下标准产物循环逐个生成 `proposal`、`design`、`tasks`:
102
+
103
+ **标准产物循环**(对每个 `artifact-id`:`proposal` → `design` → `tasks`):
104
+
105
+ 1. 刷新状态:`openspec status --change "<name>" --json`
106
+ 2. 获取产物指令:
107
+
108
+ ```bash
109
+ openspec instructions proposal --change "<name>" --json
110
+ openspec instructions design --change "<name>" --json
111
+ openspec instructions tasks --change "<name>" --json
112
+ ```
113
+
114
+ 3. 对返回的 JSON 指令载荷,必须:
115
+ - 读取 `dependencies` 中列出的每个已完成依赖产物
116
+ - 以 `template` 作为产物结构
117
+ - 遵循 `instruction` 的指引
118
+ - 将 `context` 和 `rules` 作为约束条件应用,**不得复制到 artifact 内容中**
119
+ - 写入 `resolvedOutputPath`
120
+ - 验证输出文件存在且非空
121
+ 4. 每创建一个 artifact 后,重新运行 `openspec status --change "<name>" --json` 确认状态,然后继续下一个 artifact
122
+
123
+ **失败处理**:如果 `openspec instructions` 失败、返回无效 JSON、报告未满足的 `dependencies`、或未提供可用的 `resolvedOutputPath`,必须立即停止 artifact 创建并报告 OpenSpec 错误。不得回退为硬编码文档结构,因为那样会绕过项目规则。
124
+
125
+ **命名与范围守卫**:change name 必须使用 Step 1c 中用户确认的 kebab-case 英文名,不得自动生成、推断或使用非 kebab-case(如中文)名称。变更范围必须与用户描述一致,不得自行扩大或缩小。
126
+
127
+ 确认以下产物已创建:
128
+
129
+ ```
130
+ openspec/changes/<name>/
131
+ ├── .openspec.yaml
132
+ ├── .comet.yaml
133
+ ├── proposal.md # Why + What:问题、目标、范围
134
+ ├── design.md # How(高层框架):架构决策、方案选型(深度技术设计在 design 阶段 Design Doc 细化)
135
+ └── tasks.md # 任务清单(勾选框)
136
+ ```
137
+
138
+ 创建 `.comet.yaml` 状态文件:
139
+
140
+ 先按 `comet/reference/scripts.md` 定位脚本(定位 `comet-env.mjs`),然后初始化状态:
141
+
142
+ ```bash
143
+ node "$COMET_STATE" init <name> full
144
+ ```
145
+
146
+ ### 3. 入口状态验证
147
+
148
+ 验证状态机已正确初始化:
149
+
150
+ ```bash
151
+ node "$COMET_STATE" check <name> open
152
+ ```
153
+
154
+ 验证通过后继续 Step 4。验证失败时脚本会输出具体失败原因。
155
+
156
+ **幂等性**:open 阶段所有操作可安全重复执行。如 `.comet.yaml` 已处于 `phase: open` 且三个产物文件均已存在,跳过已完成步骤,从第一个缺失步骤继续。
157
+
158
+ ### 4. 内容完整性检查
159
+
160
+ 确认三个文档内容完整:
161
+ - **proposal.md**:问题背景、目标、范围、非目标
162
+ - **design.md**:高层架构决策、方案选型、数据流
163
+ - **tasks.md**:任务列表,每个任务有明确描述
164
+
165
+ **文件存在性验证**:逐个确认三个文件路径存在且非空。任一文件缺失或为空时,不得进入 Step 5 或执行阶段守卫,必须回到创建步骤补充。
166
+
167
+ ### 5. 用户审视确认(阻塞点)
168
+
169
+ 三个文档创建完成且内容完整性检查通过后,**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户确认**。不得在用户确认前执行阶段守卫或自动流转。
170
+
171
+ 用户确认问题必须以单选题形式呈现,包含以下摘要和选项:
172
+
173
+ **摘要内容**:
174
+ - **proposal.md**:问题背景、目标、范围
175
+ - **design.md**:高层架构决策、方案选型
176
+ - **tasks.md**:任务数量和关键任务描述
177
+
178
+ **选项**:
179
+ - 「确认,继续下一阶段」— 产物符合预期,执行阶段守卫流转
180
+ - 「需要调整」— 附带调整说明,修改后重新请求确认
181
+
182
+ 用户选择「确认」后继续执行退出条件。用户选择「需要调整」时,按其说明修改对应文件,然后重新请求确认。
183
+
184
+ ## 退出条件
185
+
186
+ - proposal.md、design.md、tasks.md 均已创建且内容完整
187
+ - **用户已确认** proposal、design、tasks 内容符合预期
188
+ - **阶段守卫**:运行 `node "$COMET_GUARD" <change-name> open --apply`,全部 PASS 后由守卫推进到下一阶段(此步骤更新 `phase` 字段,与 `auto_transition` 无关)
189
+
190
+ 退出前必须使用 `--apply`,否则 `.comet.yaml` 仍停留在 `phase: open`,下一阶段入口检查会失败。
191
+
192
+ ```bash
193
+ node "$COMET_GUARD" <change-name> open --apply
194
+ ```
195
+
196
+ 完整流程会自动更新为 `phase: design`;hotfix/tweak 预设会自动更新为 `phase: build`。
197
+
198
+ ## 自动衔接下一阶段
199
+
200
+ 按 `comet/reference/auto-transition.md` 执行。关键命令:
201
+
202
+ ```bash
203
+ node "$COMET_STATE" next <change-name>
204
+ ```
205
+
206
+ - `NEXT: auto` → 调用 `SKILL` 指向的 skill 进入下一阶段
207
+ - `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
208
+ - `NEXT: done` → 流程已完成,无需继续
209
+
210
+ hotfix/tweak 预设由对应预设 Skill 控制后续流转(phase 直接进入 build),其 `next` 会返回对应预设 Skill。