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

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 (199) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +11 -4
  3. package/assets/manifest.json +1 -1
  4. package/assets/skills/comet/SKILL.md +30 -28
  5. package/assets/skills/comet/reference/auto-transition.md +1 -1
  6. package/assets/skills/comet/reference/comet-yaml-fields.md +8 -4
  7. package/assets/skills/comet/reference/context-recovery.md +2 -2
  8. package/assets/skills/comet/reference/decision-point.md +11 -0
  9. package/assets/skills/comet/reference/subagent-dispatch.md +6 -5
  10. package/assets/skills/comet/rules/comet-phase-guard.en.md +23 -28
  11. package/assets/skills/comet/rules/comet-phase-guard.md +22 -28
  12. package/assets/skills/comet/scripts/comet-runtime.mjs +682 -309
  13. package/assets/skills/comet-any/SKILL.md +1 -1
  14. package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
  15. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
  16. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -0
  17. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +5 -4
  18. package/assets/skills/comet-archive/SKILL.md +33 -13
  19. package/assets/skills/comet-build/SKILL.md +37 -29
  20. package/assets/skills/comet-design/SKILL.md +23 -22
  21. package/assets/skills/comet-hotfix/SKILL.md +46 -31
  22. package/assets/skills/comet-open/SKILL.md +97 -58
  23. package/assets/skills/comet-tweak/SKILL.md +34 -19
  24. package/assets/skills/comet-verify/SKILL.md +37 -59
  25. package/assets/skills-zh/comet/SKILL.md +30 -28
  26. package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
  27. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +8 -4
  28. package/assets/skills-zh/comet/reference/context-recovery.md +2 -2
  29. package/assets/skills-zh/comet/reference/decision-point.md +11 -0
  30. package/assets/skills-zh/comet/reference/subagent-dispatch.md +6 -5
  31. package/assets/skills-zh/comet-any/SKILL.md +1 -1
  32. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
  33. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
  34. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -0
  35. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +5 -4
  36. package/assets/skills-zh/comet-archive/SKILL.md +33 -13
  37. package/assets/skills-zh/comet-build/SKILL.md +37 -29
  38. package/assets/skills-zh/comet-design/SKILL.md +23 -22
  39. package/assets/skills-zh/comet-hotfix/SKILL.md +45 -30
  40. package/assets/skills-zh/comet-open/SKILL.md +96 -57
  41. package/assets/skills-zh/comet-tweak/SKILL.md +33 -18
  42. package/assets/skills-zh/comet-verify/SKILL.md +37 -59
  43. package/dist/app/commands/doctor.d.ts.map +1 -1
  44. package/dist/app/commands/doctor.js +62 -15
  45. package/dist/app/commands/doctor.js.map +1 -1
  46. package/dist/app/commands/init.d.ts +1 -1
  47. package/dist/app/commands/init.d.ts.map +1 -1
  48. package/dist/app/commands/init.js +58 -14
  49. package/dist/app/commands/init.js.map +1 -1
  50. package/dist/app/commands/status.d.ts +1 -0
  51. package/dist/app/commands/status.d.ts.map +1 -1
  52. package/dist/app/commands/status.js +10 -0
  53. package/dist/app/commands/status.js.map +1 -1
  54. package/dist/app/commands/uninstall.d.ts +3 -0
  55. package/dist/app/commands/uninstall.d.ts.map +1 -1
  56. package/dist/app/commands/uninstall.js +70 -36
  57. package/dist/app/commands/uninstall.js.map +1 -1
  58. package/dist/app/commands/update.d.ts.map +1 -1
  59. package/dist/app/commands/update.js +213 -34
  60. package/dist/app/commands/update.js.map +1 -1
  61. package/dist/domains/bundle/bundle-platform.d.ts +1 -0
  62. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  63. package/dist/domains/bundle/bundle-platform.js +6 -2
  64. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  65. package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
  66. package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
  67. package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
  68. package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
  69. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
  70. package/dist/domains/comet-classic/classic-current-change.js +37 -20
  71. package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
  72. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  73. package/dist/domains/comet-classic/classic-guard.js +50 -16
  74. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  75. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  76. package/dist/domains/comet-classic/classic-hook-guard.js +138 -21
  77. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  78. package/dist/domains/comet-classic/classic-resolver.js +1 -1
  79. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  80. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  81. package/dist/domains/comet-classic/classic-state-command.js +113 -14
  82. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  83. package/dist/domains/comet-classic/classic-state-events.d.ts +1 -1
  84. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -1
  85. package/dist/domains/comet-classic/classic-state.d.ts +4 -2
  86. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  87. package/dist/domains/comet-classic/classic-state.js +16 -1
  88. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  89. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  90. package/dist/domains/comet-classic/classic-transitions.js +17 -2
  91. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  92. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  93. package/dist/domains/comet-classic/classic-validate-command.js +13 -1
  94. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  95. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  96. package/dist/domains/dashboard/web/assets/arc-TGVUG2WN.js +1 -0
  97. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-ASHmiHoP.js +36 -0
  98. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-CwASxBKe.js +132 -0
  99. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-BU8z_WNk.js +10 -0
  100. package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +1 -0
  101. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-CBGlUx4_.js +1 -0
  102. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-CS-iGcFz.js +1 -0
  103. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-BUtCVJat.js +1 -0
  104. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-C94tj_pf.js +206 -0
  105. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-BFOKcpdG.js +231 -0
  106. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-Dmx8B-st.js +15 -0
  107. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-DYV00CNn.js +1 -0
  108. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-DMJJyQnw.js +1 -0
  109. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +1 -0
  110. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +1 -0
  111. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-P4nE2rea.js +1 -0
  112. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-C-R1HXDv.js +166 -0
  113. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  114. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-BH8d-C9z.js +4 -0
  115. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  116. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-DpXTgQIH.js +43 -0
  117. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-DSiFJzSw.js +10 -0
  118. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DULMkben.js +3 -0
  119. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-Pi8m_NO9.js +24 -0
  120. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-BSe6bCWm.js +24 -0
  121. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-zb-FEcbq.js +85 -0
  122. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-Dr-Gk0z2.js +162 -0
  123. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-qs6Zb2A6.js +292 -0
  124. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-BQ314orT.js +106 -0
  125. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  126. package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +1 -0
  127. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  128. package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +24 -0
  129. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  130. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-O0bQp98A.js +2 -0
  131. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  132. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-BPC7wbKh.js +70 -0
  133. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-ohViOd4b.js +139 -0
  134. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-CHleNdbG.js +89 -0
  135. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  136. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  137. package/dist/domains/dashboard/web/assets/linear-CyqiW--Q.js +1 -0
  138. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  139. package/dist/domains/dashboard/web/assets/mermaid.core-qS9XvtaK.js +301 -0
  140. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-oaGkqO9l.js +96 -0
  141. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  142. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-CPcB-AFh.js +30 -0
  143. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  144. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-LFy52Qtj.js +7 -0
  145. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BdjeaYP_.js +84 -0
  146. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-DDJ4styL.js +40 -0
  147. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-BL5bFNoz.js +162 -0
  148. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-BNUfikui.js +1 -0
  149. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +1 -0
  150. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA--ps2uu6L.js +120 -0
  151. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-C2q8q26c.js +34 -0
  152. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-BUH9gXqd.js +78 -0
  153. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-B-DielEy.js +7 -0
  154. package/dist/domains/dashboard/web/index.html +16 -16
  155. package/dist/domains/factory/package.d.ts.map +1 -1
  156. package/dist/domains/factory/package.js +20 -6
  157. package/dist/domains/factory/package.js.map +1 -1
  158. package/dist/domains/integrations/openspec.d.ts +4 -1
  159. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  160. package/dist/domains/integrations/openspec.js +56 -4
  161. package/dist/domains/integrations/openspec.js.map +1 -1
  162. package/dist/domains/skill/find.d.ts.map +1 -1
  163. package/dist/domains/skill/find.js +7 -1
  164. package/dist/domains/skill/find.js.map +1 -1
  165. package/dist/domains/skill/json-object.d.ts +13 -0
  166. package/dist/domains/skill/json-object.d.ts.map +1 -0
  167. package/dist/domains/skill/json-object.js +24 -0
  168. package/dist/domains/skill/json-object.js.map +1 -0
  169. package/dist/domains/skill/platform-inspect.d.ts +9 -0
  170. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  171. package/dist/domains/skill/platform-inspect.js +149 -0
  172. package/dist/domains/skill/platform-inspect.js.map +1 -0
  173. package/dist/domains/skill/platform-install.d.ts +16 -6
  174. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  175. package/dist/domains/skill/platform-install.js +277 -144
  176. package/dist/domains/skill/platform-install.js.map +1 -1
  177. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  178. package/dist/domains/skill/uninstall.js +204 -141
  179. package/dist/domains/skill/uninstall.js.map +1 -1
  180. package/dist/platform/fs/file-system.d.ts +3 -3
  181. package/dist/platform/fs/file-system.d.ts.map +1 -1
  182. package/dist/platform/fs/file-system.js +21 -11
  183. package/dist/platform/fs/file-system.js.map +1 -1
  184. package/dist/platform/install/platforms.d.ts +4 -0
  185. package/dist/platform/install/platforms.d.ts.map +1 -1
  186. package/dist/platform/install/platforms.js +2 -0
  187. package/dist/platform/install/platforms.js.map +1 -1
  188. package/dist/platform/install/project-registry.d.ts +1 -0
  189. package/dist/platform/install/project-registry.d.ts.map +1 -1
  190. package/dist/platform/install/project-registry.js +9 -1
  191. package/dist/platform/install/project-registry.js.map +1 -1
  192. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  193. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  194. package/dist/platform/install/skill-root-owner.js +68 -0
  195. package/dist/platform/install/skill-root-owner.js.map +1 -0
  196. package/package.json +6 -1
  197. package/dist/domains/dashboard/web/assets/index-CIvN-PL8.js +0 -22
  198. package/dist/domains/dashboard/web/assets/index-DcyRPBnT.css +0 -1
  199. package/eval/.env +0 -28
@@ -4,6 +4,17 @@
4
4
 
5
5
  本协议由所有包含用户决策点的 comet 子 skill 共享。凡标注为“阻塞点”或“用户决策点”的步骤,都必须按本协议处理。
6
6
 
7
+ ## 先判断是否真的需要用户决策
8
+
9
+ 区分用户决策点、自动处理与停止条件:
10
+
11
+ - **用户决策点**:存在两个或更多均合法、会改变范围、行为、风险承担或不可逆结果的选项,必须由用户选择
12
+ - **自动处理**:只有一个安全且在当前请求范围内的下一步,例如修复明确失败、补齐可验证状态、重试幂等检查或按已持久化配置继续;直接执行并报告,不得制造确认
13
+ - **停止条件**:依赖缺失、状态损坏、路径越界或外部命令不可用,导致当前没有合法下一步;报告阻塞原因和恢复条件,不得伪造选项
14
+ - **手动衔接**:`NEXT: manual` 只是交还控制权,不是新的用户决策点;输出 `HINT` 后结束当前调用,不再询问“是否继续”
15
+
16
+ 只有第一类使用本协议。相邻且可同时回答的选择必须合并;已经持久化且仍有效的选择不得重复询问。展示选项前先检查平台能力和状态,只展示真实可执行的选项;若某字段只剩一个合法值,说明原因后直接采用,不为它单独创建停顿点。
17
+
7
18
  ## 核心规则
8
19
 
9
20
  - 决策点是阻塞点。到达决策点时必须暂停,等待用户明确选择后才能继续
@@ -11,9 +11,10 @@
11
11
  > 仅在以下情况才停止并等待用户输入:
12
12
  > - 任务处于 **BLOCKED** 状态(`review_mode: standard` 下风险任务 1 轮 review-fix 或最终轻量复查仍未通过,或 `review_mode: thorough` 下任务级/最终审查 2 轮审查-修复仍未通过)
13
13
  > - 存在无法从仓库、计划或既有上下文消除的真实歧义
14
- > - 平台没有真实后台 agent 调度能力,需要用户改选 `executing-plans`
15
14
  > - 用户**明确**要求暂停
16
15
  >
16
+ > 后台调度能力在执行中失效属于运行停止条件,不自动构成新的用户决策点:退出派发循环并返回 `/comet-build` Step 2 的同一个联合决策,移除 `subagent-driven-development`。若只剩一个合法执行方式,说明原因后直接采用;仍有多个合法方式时才等待用户重新选择。
17
+ >
17
18
  > 此规则适用于整个派发循环,而非单个任务。
18
19
 
19
20
  ## 开始前
@@ -34,14 +35,14 @@
34
35
  - **Claude Code**:对每个 implementer,以及 `review_mode` 要求的 task reviewer、修复 agent 和 final reviewer 使用 `Agent` 工具并设置 `run_in_background: true`。禁止内联执行 task,禁止错误进入需要预先创建 team 的团队模式。
35
36
  - **其他平台**:使用平台等效的后台 agent / Task / 多 agent 派发机制。
36
37
  - **禁止**跨 task 或角色复用 implementer、reviewer 或修复 agent。每个 agent 拥有全新的隔离上下文,并且只接收当前角色所需的单个 task 上下文。
37
- - 若平台无真实后台派发能力,不得继续;暂停并等待用户改选 `build_mode: executing-plans`。
38
+ - 若真实后台派发能力在执行中失效,不得继续派发或由主会话代写实现;返回 `/comet-build` Step 2 的同一个联合决策并移除不可用模式。不得另设“是否改用 executing-plans”的停顿点;只剩一个合法模式时直接采用。
38
39
 
39
40
  ### 1. 派发 Prompt 与回报契约
40
41
 
41
42
  每个 implementer 或修复 agent prompt 必须包含:
42
43
 
43
44
  - 当前单个 task 的完整文本、架构背景和依赖上下文
44
- - `Language: 使用 "$COMET_BASH" "$COMET_STATE" get <name> language 读取到的 Comet 配置产物语言输出`
45
+ - `Language: 使用 comet state get <name> language 读取到的 Comet 配置产物语言输出`
45
46
  - 允许修改的文件范围和禁止修改的范围
46
47
  - 必须执行的测试命令和提交要求
47
48
  - 修复 agent 还必须收到对应 reviewer 的完整反馈
@@ -142,8 +143,8 @@ Comet 不读取、不写入、也不要求任何 Superpowers `subagent-driven-de
142
143
  4. 运行定向验证:
143
144
 
144
145
  ```bash
145
- node "$COMET_STATE" task-checkoff "$PLAN_FILE" "$PLAN_TASK_TEXT"
146
- node "$COMET_STATE" task-checkoff "openspec/changes/<name>/tasks.md" "$OPENSPEC_TASK_TEXT"
146
+ comet state task-checkoff <plan-file> <plan-task-text>
147
+ comet state task-checkoff openspec/changes/<name>/tasks.md <openspec-task-text>
147
148
  ```
148
149
 
149
150
  仅在对应映射存在时运行第二条。脚本会要求任务文本恰好出现一次且该项已勾选;验证失败时不得进入下一个 task。
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: comet-any
3
- description: "Use when 用户想定制 Comet 五阶段 Skill、创建 workflow Skill、整理已有 Skill,或用 Workflow Node / Skill Binding / Output Schema 编排 Skill。"
3
+ description: "仅在用户明确调用 /comet-any,或明确要求定制 Comet 五阶段流程、创建或升级由 Comet Creator 管理的 workflow Skill 时使用;不要用于一般 Skill 的编写、整理或评审。"
4
4
  ---
5
5
 
6
6
  # Comet Any - Skill Creator
@@ -62,21 +62,26 @@ Decision Core 应建模 Auto 区不处理的三件事:(1) **语义化当前节
62
62
  - 若状态显示某 Node 已完成但预期 artifact 缺失,视为未完成并重新进入。
63
63
  - 若用户在某个 Node 中途恢复但话题变了,确认是继续当前 Node 还是开始新的。
64
64
 
65
- ### 决策点(必须暂停)
65
+ ### 决策分类与决策点
66
+
67
+ 先分类再行动:有两个或以上会改变范围、行为、风险接受或不可逆结果的合法选项才是用户决策;唯一安全下一步直接执行;缺少依赖、状态损坏或无法继续的 guard 失败是停止条件;`NEXT: manual` 只是交还控制权。只有第一类必须暂停。
66
68
 
67
69
  | 情况 | 处理 |
68
70
  |------|------|
69
- | 首次调用,无 workflow 状态 | 初始化状态,在开始第一个 Node 前与用户确认主题/范围 |
70
- | 用户输入在两个 Node 间有歧义 | 询问用户指哪个 Node;不要猜测 |
71
+ | 首次调用且主题/范围明确 | 自动初始化状态并进入第一个 Node;不得为了确认已知信息而停顿 |
72
+ | 主题、范围或目标 Node 存在两个以上互斥且合法的解释 | 合并为一个问题,让用户选择;不要猜测 |
71
73
  | Node 需要用户确认输出才能推进 | 记录 evidence 后停下;等待明确确认 |
72
- | Node guard 失败且原因不明 | 展示 guard 输出,询问用户如何继续 |
74
+ | WARNING/偏差接受或不可逆发布存在真实取舍 | 只展示当前可执行选项,并记录用户选择 |
75
+
76
+ Node guard 失败时先自动读取证据并执行唯一安全修复;若缺少依赖或状态损坏导致无法继续,报告停止条件和恢复要求。只有恢复方式存在多个会改变范围或风险的合法选项时,才升级为上表中的用户决策。
73
77
 
74
78
  ### Red Flags
75
79
 
76
80
  | Agent 想法 | 实际风险 |
77
81
  |-----------|---------|
78
- | "用户提到了主题,所以研究隐式确认" | 提到 ≠ 确认。在第一个 Node 边界暂停并确认范围。 |
82
+ | "首次调用都应该再确认一次" | 清晰输入不需要重复批准;只有互斥解释仍会改变范围时才询问。 |
79
83
  | "脚本返回 NEXT: auto,应该立即加载下一个 Skill" | `NEXT: auto` 表示 Node 完成,不是跳过确认。检查下一个 Node 是否有决策点。 |
84
+ | "guard 失败,所以让用户决定怎么办" | 先自动诊断并执行唯一安全修复;无合法动作时报告停止条件,不要发明选项。 |
80
85
  | "看起来和上次一样的话题,从上次断点继续" | 始终重新读取状态。对话记忆在上下文压缩后不可靠。 |
81
86
  | "Exit Check 通过了,所以工作够好了" | Exit Check 是机械的。你的职责是判断检查之外的质量——稀疏笔记、浅层分析、缺失视角,脚本抓不到。 |
82
87
  ```
@@ -4,8 +4,7 @@
4
4
 
5
5
  ## 职责
6
6
 
7
- 设计用户在 Skill 中必须停顿选择的位置,以及跨设备断点恢复方式。停顿点必须是明确的用户选择,
8
- 不能被默认推荐、历史偏好或自动推进绕过。
7
+ 设计用户在 Skill 中真正必须选择的位置,以及跨设备断点恢复方式。必须先区分四类情况:用户决策、自动处理、停止条件和手动衔接。只有存在两个或以上会改变范围、行为、风险接受或不可逆结果的合法选项时,才创建用户停顿点;单一安全动作直接执行,缺少依赖或状态损坏只报告停止条件,手动衔接只交还控制权。真正的用户决策不能被默认推荐、历史偏好或自动推进绕过。
9
8
 
10
9
  必须覆盖:
11
10
 
@@ -16,11 +15,10 @@
16
15
 
17
16
  读取主会话提供的通用输入,尤其关注:
18
17
 
19
- - Skill Creator 方案确认页中的 `confirm-generate`、`revise-proposal`、`cancel`。
20
- - eval 工作量选择 `skip / quick / full eval`,以及当前 draft hash 的 eval evidence 缺失或过期时的阻塞恢复。
21
- - 安装前人工批准。
22
- - unresolved、ambiguous、capability gap、executable disclosure 等阻塞点。
23
- - runner 恢复状态和跨设备恢复入口。
18
+ - Skill Creator 方案确认页中的 `confirm-generate`、`revise-proposal`、`cancel`:这是会改变生成结果的用户决策。
19
+ - eval 工作量选择 `skip / quick / full eval` 和安装前人工批准:只有确实存在多个合法选项时才是用户决策。
20
+ - 当前 draft hash 的 eval evidence 缺失或过期、unresolved、ambiguous、capability gap、executable disclosure:逐项判断是可自动修复、无路可走的停止条件,还是确有多个恢复选项的用户决策;不得统一写成停顿点。
21
+ - runner 恢复状态和跨设备恢复入口:复用仍有效的持久化选择,不得在恢复时重复询问。
24
22
 
25
23
  使用文件交接:主会话提供路径,不粘贴大段全文。不要继承主会话历史;只使用本 brief、通用输入、
26
24
  workflow protocol 和已有草稿。
@@ -35,21 +33,23 @@ model: <必须显式指定 model>
35
33
  prompt:
36
34
  你是停顿点作者 subagent。
37
35
  先读取本 brief、通用输入路径、workflow protocol 路径、Skill 草稿路径和报告文件路径。
38
- 开始前先提出问题:如果用户选择项、阻塞恢复或跨设备状态不清楚,先返回 NEEDS_CONTEXT。
39
- 不要猜测或自行补全缺失停顿点。
36
+ 开始前先把候选节点分类为用户决策、自动处理、停止条件或手动衔接。如果分类所需事实缺失,先返回 NEEDS_CONTEXT。
37
+ 不要猜测缺失选择,也不要把自动修复、guard 失败、能力缺口、单一合法动作或手动衔接伪装成用户停顿点。
40
38
  只产出 decision-points 和 recovery 草稿,不写 Bundle state,不执行候选脚本。
41
39
  把完整停顿点草稿写入报告文件路径,并只返回 15 行以内状态摘要。
42
40
  ```
43
41
 
44
42
  ## 输出要求
45
43
 
46
- 返回停顿点草稿,说明:
44
+ 返回草稿时先列分类表,再说明真正的用户停顿点:
47
45
 
46
+ - 每个候选节点属于用户决策、自动处理、停止条件还是手动衔接,以及判定依据。
48
47
  - 每个停顿点的触发条件。
49
48
  - 用户可选择项。
50
49
  - 每个选择会进入哪个阶段。
51
50
  - 停顿点证据写入哪里。
52
- - 恢复时如何显示当前阶段、阻塞原因、建议下一步和可选项。
51
+ - 自动处理如何直接推进;停止条件如何报告恢复条件而不发明选项。
52
+ - 恢复时如何显示当前阶段、阻塞原因、建议下一步和真实可选项,并复用已持久化选择。
53
53
 
54
54
  停顿点必须适配当前 workflow protocol,不得只列 Comet 原始停顿点。
55
55
 
@@ -58,8 +58,10 @@ prompt:
58
58
  返回前逐项检查:
59
59
 
60
60
  - 每个用户停顿点都有触发条件、选项、下一阶段和证据位置。
61
+ - 每个停顿点至少有两个当前可执行的合法选项;相邻且可同时回答的选择已合并,单一合法值不会制造停顿。
62
+ - guard 失败、确定性重试、状态对账、能力缺口和 `NEXT: manual` 已按实际情况归入自动处理、停止条件或手动衔接,而不是默认询问用户。
61
63
  - 默认推荐、历史偏好和自动推进都不能绕过必须停顿点。
62
- - 恢复摘要能显示当前阶段、阻塞原因、建议下一步和可选项。
64
+ - 恢复摘要能显示当前阶段、阻塞原因、建议下一步和真实可选项,且不会重复询问仍有效的选择。
63
65
  - 跨设备恢复不依赖当前会话记忆。
64
66
  - 停顿点适配当前组合 Skill,不只是照列 Comet 原始停顿点。
65
67
 
@@ -61,6 +61,8 @@ prompt:
61
61
  - 阶段推进没有通过脚本输出 `NEXT:` 和 `SKILL:` 表达。
62
62
  - workflow protocol 声明的 `requiredSkillCalls` 没有在对应Node Skill 中明确要求加载,或 subagent 槽位没有要求子代理任务提示加载该 Skill。
63
63
  - 用户停顿点缺失,或停顿点可被默认值绕过。
64
+ - 把确定性修复、guard 失败、状态对账、能力缺口、单一合法动作或 `NEXT: manual` 默认写成用户停顿点;或把可同时回答的相邻选择拆成连续确认。
65
+ - entry Skill 的 frontmatter description 没有说明它是托管 workflow 的入口/恢复路由,或 internal Node Skill 的 description 允许普通任务直接触发而未限定为显式调用或 entry/runtime 路由。
64
66
  - 中文 Skill 混入英文流程句。
65
67
  - 嵌套 Skill 调用使用 provider 前缀。
66
68
  - 用户可见 `SKILL.md` 泄漏生成审计章节、source hash 或内部 metadata。
@@ -20,7 +20,7 @@
20
20
 
21
21
  - **语义化当前节点检测** — 如何判断用户在哪个 Node,而非只跑脚本。建模 comet 的 Step 0(从用户消息检测意图,检查 Node 顺序,处理"属于前序/后序 Node"的冲突)+ Step 1(读状态,文件优先于过期状态)。
22
22
  - **Resume 与 drift 规则** — 上下文恢复时怎么办(从头重新检测,永远不信任对话历史),状态说 DONE 但 artifact 缺失时怎么办,用户在 Node 中途换话题时怎么办。
23
- - **决策点**必须暂停等用户确认的情况的显式表格(首次调用确认范围、Node 歧义、用户确认、guard 失败)。
23
+ - **决策分类与决策点**先区分用户决策、自动处理、停止条件和手动衔接,再只为真正需要用户选择的情况建表。清晰的首次调用、可确定修复的 guard 失败、单一合法下一步和 `NEXT: manual` 都不得制造确认点。
24
24
  - **Red flags** — "agent 想法 → 实际风险"模式,抓自欺(如"用户提到了主题所以研究已确认" → 提到 ≠ 确认)。
25
25
 
26
26
  没有这四个子节的 Decision Core 是 stub,不是 Decision Core。entry 是每次调用最先读取的文件——它决定了 Skill 感觉"智能"还是"机械"。
@@ -48,10 +48,10 @@ model: <必须显式指定 model>
48
48
  prompt:
49
49
  你是 workflow entry 作者 subagent。
50
50
  先读取本 brief、通用输入路径、脚本契约路径、workflow protocol 路径和报告文件路径。
51
- 开始前先提出问题:如果启动路由、恢复路径、当前阶段判定或用户停顿点不清楚,先返回 NEEDS_CONTEXT。
51
+ 开始前先分类用户决策、自动处理、停止条件和手动衔接;如果启动路由、恢复路径、当前阶段判定或真正的用户选择不清楚,先返回 NEEDS_CONTEXT。
52
52
  不要猜测或自行补全缺失流程。
53
53
  只写 entry SKILL.md 草稿,不写 internal Node Skill,不写 Bundle state,不执行候选脚本。
54
- Decision Core 必须包含四个子节:### 自动节点检测(Step 0 意图检测 + Step 1 状态读取 + Resume 规则)、### 决策点(显式暂停表格)、### Red Flags(agent 想法 → 实际风险表格)。没有这些子节的 Decision Core 是 stub。
54
+ Decision Core 必须包含四个子节:### 自动节点检测(Step 0 意图检测 + Step 1 状态读取 + Resume 规则)、### 决策分类与决策点(只列真正的用户选择)、### Red Flags(agent 想法 → 实际风险表格)。不得把 guard 失败、确定性修复、单一合法动作或手动衔接列为用户决策。没有这些子节的 Decision Core 是 stub。
55
55
  把完整 entry 草稿写入报告文件路径,并只返回 15 行以内状态摘要。
56
56
  ```
57
57
 
@@ -64,7 +64,7 @@ entry 草稿必须体现:
64
64
  - 只有脚本输出 `NEXT: auto` 和 `SKILL: <node-skill>` 后,才加载这一个 Node Skill。
65
65
  - 阶段路线只能作为参考表,不能使用“立即执行”或“必须加载”这类执行指令。
66
66
  - 对 `/comet` 定制,entry 必须列出必调槽位 Skill,但只能作为阶段内义务说明,不能变成 entry 立即执行清单。
67
- - 用户停顿点、恢复路径和参考文件清楚可见。
67
+ - 用户决策、自动处理、停止条件、手动衔接、恢复路径和参考文件清楚可见;只有至少两个真实合法选项时才停顿,相邻选择应合并。
68
68
  - 对 `/comet` 定制,说明保留 open / design / build / verify / archive 主路径和阶段守卫。
69
69
 
70
70
  禁止:
@@ -83,6 +83,7 @@ entry 草稿必须体现:
83
83
  - entry 没有立即加载Node Skill 的清单。
84
84
  - 阶段路线是参考,不是执行步骤。
85
85
  - 自动推进引用脚本输出的 `NEXT:` 和 `SKILL:`。
86
+ - 清晰首次调用直接初始化;guard 失败先自动诊断或报告停止条件;`NEXT: manual` 只交还控制权;以上情况均不伪造用户决策。
86
87
  - 中文用户可见文案没有混入英文流程句。
87
88
 
88
89
  ## 必须返回的 claim
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: comet-archive
3
- description: "Use when Comet change 验证已通过,需要用户确认归档、合并 delta spec,或恢复 archive 阶段。"
3
+ description: "仅在用户明确调用 /comet-archive,或由 Comet Skill/runtime 路由到 archive 阶段时使用;确认归档、合并 delta spec 并完成分支收尾。"
4
4
  ---
5
5
 
6
6
  # Comet 阶段 5:归档(Archive)
@@ -8,7 +8,7 @@ description: "Use when Comet change 验证已通过,需要用户确认归档
8
8
  ## 前置条件
9
9
 
10
10
  - 验证已通过(阶段 4 完成)
11
- - 分支已处理
11
+ - 归档提交和分支处理尚未完成(`branch_status: pending`)
12
12
  - `openspec/changes/<name>/.comet.yaml` 中 `verify_result: pass`
13
13
 
14
14
  ## 步骤
@@ -28,6 +28,8 @@ comet state check <name> archive
28
28
 
29
29
  验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
30
30
 
31
+ 若上述 `select` / `check` 输出 `BLOCKED`,且原因是 `bound_branch` 与当前分支不一致,立即按 `comet/reference/decision-point.md` 暂停,让用户单选:切回绑定分支后重新运行入口验证,或在用户明确确认当前分支应接管该 change 后运行 `comet state rebind <change-name>` 并重新入口验证。不得自行切换分支,不得自行换绑。
32
+
31
33
  ### 1. 归档前最终确认(阻塞点)
32
34
 
33
35
  入口验证通过后,**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户确认是否立即归档**。不得在用户确认前运行 `comet archive "<change-name>"`。
@@ -35,7 +37,7 @@ comet state check <name> archive
35
37
  确认前必须向用户展示简短摘要:
36
38
  - change 名称
37
39
  - 验证报告路径和结论
38
- - 分支处理状态
40
+ - 当前分支/工作区和未提交改动归因摘要
39
41
  - 本次归档将执行的不可逆动作:按 OpenSpec delta 语义合并主 spec、标注 design doc / plan、移动 change 到 archive 目录
40
42
 
41
43
  用户确认问题必须以单选题形式呈现,包含以下选项:
@@ -70,11 +72,6 @@ comet archive "<change-name>"
70
72
  如脚本返回非零退出码,报告错误并停止。
71
73
  如脚本返回零退出码,归档完成。
72
74
 
73
- 归档成功后清理当前执行上下文;该命令幂等:
74
-
75
- ```bash
76
- comet state clear-selection
77
- ```
78
75
  脚本摘要中的 `X/Y steps succeeded` 以真实执行步骤计数,不会因 delta spec 同步或文档标注重复累计。
79
76
 
80
77
  脚本会调用 OpenSpec 归档能力按 `ADDED/MODIFIED/REMOVED/RENAMED` 语义合并主 spec,并在归档后校验主 spec 中没有残留 delta-only section 标题。
@@ -88,31 +85,54 @@ Spec 生命周期在此完成:
88
85
  brainstorming → delta spec → 实施 → 验证 → 主 spec 合并 → design doc 标注 → 归档
89
86
  ```
90
87
 
91
- ### 4. 提交归档改动
88
+ ### 4. 精确提交归档改动
92
89
 
93
90
  归档脚本只移动文件和合并 spec,不会自动提交。归档完成后工作区会有以下未提交改动:
94
91
  - change 目录从 `openspec/changes/<name>/` 移动到 `openspec/changes/archive/YYYY-MM-DD-<name>/`
95
92
  - 主 spec 按 delta 语义合并的内容
96
93
  - design doc / plan 的归档元数据标注
97
94
 
98
- **必须提示用户提交这些归档改动**,否则归档成果会停留在工作区。展示待提交文件后建议执行:
95
+ 归档后先读取 `git status --short`,并以归档前的 dirty-worktree 归因记录为基线。只允许暂存可归因于当前 change 的路径:原 active change 路径、脚本输出的实际 archive 路径、被本次 delta 更新的 main specs,以及当前 Design Doc/Plan 的归档元数据。存在无法归因的路径时停止并请求用户处理。
96
+
97
+ 使用显式 pathspec 暂存核对后的路径,再检查 staged diff;不得使用全仓库暂存,也不得把用户已有改动混入归档提交:
99
98
 
100
99
  ```bash
101
- git add -A
100
+ git add -- <逐项核对后的归档路径...>
101
+ git diff --cached --stat
102
102
  git commit -m "chore: archive <change-name>"
103
103
  ```
104
104
 
105
- 如分支处理(阶段 4)选择尚未合并到主分支,提交后按所选方式(合并 / PR / 保持分支)一并收尾。
105
+ 提交失败或 staged diff 含无关路径时停止,不得继续分支处理。
106
+
107
+ ### 5. 归档提交后的分支处理
108
+
109
+ 归档提交成功后,先读取 `comet state get <change-name> isolation`,按隔离方式分流:
110
+
111
+ - `isolation !== current`:**立即执行:** 使用 Skill 工具加载 Superpowers `finishing-a-development-branch` 技能。该步骤必须位于归档与归档提交之后,确保最终分支/PR 包含 spec 合并和归档元数据。如该技能不可用,停止流程并提示安装或启用;不得把 `branch_status` 标记为完成。技能加载后,按 `comet/reference/decision-point.md` 暂停让用户选择:本地合并到主分支、推送并创建 PR、保持当前分支稍后处理。
112
+ - `isolation === current`:跳过 Superpowers `finishing-a-development-branch`。按 `comet/reference/decision-point.md` 暂停让用户二选一:推送当前分支,或暂不推送并保留本地状态。
113
+
114
+ 归档已经完成,因此这里不提供“丢弃工作”选项。只有用户选择的操作成功完成、明确选择保持分支,或在 `current` 模式下明确选择暂不推送后,才运行:
115
+
116
+ ```bash
117
+ comet state set <change-name> branch_status handled
118
+ comet guard <change-name> archive
119
+ comet state clear-selection
120
+ ```
121
+
122
+ archive guard 必须同时确认归档产物完整且 `branch_status: handled`;失败时流程仍未完成。
106
123
 
107
124
  ## 退出条件
108
125
 
109
126
  - 归档脚本执行成功(退出码 0)
110
127
  - 归档目录 `openspec/changes/archive/YYYY-MM-DD-<change-name>/` 存在
111
128
  - 归档后的 `.comet.yaml` 中 `archived: true`
129
+ - 归档改动已通过精确 pathspec 提交
130
+ - 用户选择的分支处理已完成,归档状态中的 `branch_status: handled`
131
+ - `comet guard <change-name> archive` 通过
112
132
 
113
133
  归档脚本会把 `openspec/changes/<name>/` 移动到 `openspec/changes/archive/YYYY-MM-DD-<name>/`。
114
134
 
115
- > **WARNING**: 归档成功后**不要再对原 change 名运行** `comet guard <change-name> archive`,因为原活跃目录已经不存在。误调会导致 guard 报错"change directory not found"。归档完整性以脚本退出码和归档目录状态为准。
135
+ `comet guard <change-name> archive` 会按原 change 名解析实际归档目录;不要手工拼接日期目录名。
116
136
 
117
137
  ## 完成
118
138
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: comet-build
3
- description: "Use when full Comet change 已完成 design 阶段,需要创建/恢复实施计划、选择执行方式或继续 build 阶段任务。"
3
+ description: "仅在用户明确调用 /comet-build,或由 Comet Skill/runtime 路由到 full workflow 的 build 阶段时使用;创建或恢复实施计划并执行任务。"
4
4
  ---
5
5
 
6
6
  # Comet 阶段 3:计划与构建(Build)
@@ -23,7 +23,9 @@ comet state check <name> build
23
23
 
24
24
  验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
25
25
 
26
- **幂等性**:build 阶段所有操作可安全重复执行。读取 `.comet.yaml` `phase` 字段确认仍在 build 阶段,读取 plan 文件头的 `base-ref`,再用 `grep -n '\- \[ \]' tasks.md | head -1` 找到第一个未勾选任务继续执行。已提交的任务不得重复提交。
26
+ 若上述 `select` / `check` 输出 `BLOCKED`,且原因是 `bound_branch` 与当前分支不一致,立即按 `comet/reference/decision-point.md` 暂停,让用户单选:切回绑定分支后重新运行入口验证,或在用户明确确认当前分支应接管该 change 后运行 `comet state rebind <change-name>` 并重新入口验证。不得自行切换分支,不得自行换绑。
27
+
28
+ **幂等性**:build 阶段所有操作可安全重复执行。读取 `.comet.yaml` 的 `phase` 字段确认仍在 build 阶段,读取 plan 文件头的 `base-ref`,再按文档顺序解析 tasks.md 的复选框,从第一个未勾选任务继续执行。已提交的任务不得重复提交。
27
29
 
28
30
  ### 1. 制定计划(Subagent Offload)
29
31
 
@@ -65,7 +67,7 @@ Subagent 完成后:
65
67
  - 若返回有效文件路径且文件存在,记录为 plan
66
68
  - 若 subagent 失败或返回路径无效,在主 session 内联加载 Superpowers `writing-plans` 技能创建计划(降级回退)
67
69
 
68
- ### 2. 更新计划状态并提供 plan-ready 暂停点
70
+ ### 2. 更新计划状态并联合确认工作方式
69
71
 
70
72
  先记录 plan 路径:
71
73
 
@@ -75,16 +77,18 @@ comet state set <name> plan docs/superpowers/plans/YYYY-MM-DD-feature.md
75
77
 
76
78
  无需手动更新 phase,阶段守卫(guard `--apply`)会在退出条件满足后推进 `phase` 字段。
77
79
 
78
- 计划写入后,立即提供一个新的用户决策点:
80
+ 展示联合决策前先检查当前平台能力:确认 `using-git-worktrees` 是否可用、是否存在真实后台 subagent/Task/multi-agent 调度能力,以及当前仓库能否安全创建分支。只展示当前真实可执行的隔离与执行选项;某个字段只剩一个合法值时说明原因并直接采用,不为单选项制造额外停顿。
81
+
82
+ 计划写入后只提供**一个联合决策点**,一次收集:是否现在继续、可用的工作区隔离、可用的执行方式、TDD 模式和代码审查模式。选择 `branch` 时,分支名也必须在 Step 2 的同一个联合决策中确认或由用户覆盖。不得先询问“继续/暂停”,继续后又创建第二个配置或命名阻塞点。
79
83
 
80
84
  | 选项 | 行为 | 说明 |
81
85
  |------|------|------|
82
- | A | 继续执行 | 保持在当前模型中,进入 Step 3 选择工作区隔离、执行方式、TDD 模式和代码审查模式 |
86
+ | A | 继续执行并提交配置 | 在同一次回复中选择 Step 3 的隔离、执行、TDD 和审查配置;如选择 branch,同时提交分支名 |
83
87
  | B | 暂停切换模型 | 记录 `build_pause: plan-ready`,本次 `/comet-build` 停止,用户稍后可从 `/comet` 或 `/comet-build` 恢复 |
84
88
 
85
- 这是用户决策点。**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户明确选择**,不得自动继续,也不得把暂停写入 `build_mode`。
89
+ 这是用户决策点。**必须按 `comet/reference/decision-point.md` 的协议一次性展示计划摘要、暂停选项和 Step 3 全部可执行配置**。用户选择继续时,必须在同一回复中给出所有配置以及条件性的分支名;不得自动选择,也不得把暂停写入 `build_mode`。
86
90
 
87
- 用户选择继续时:
91
+ 用户选择继续并给出完整配置时:
88
92
 
89
93
  ```bash
90
94
  comet state set <name> build_pause null
@@ -98,28 +102,30 @@ comet state set <name> build_pause plan-ready
98
102
 
99
103
  设置 `build_pause: plan-ready` 后,当前调用停止。不要选择 `isolation` 或 `build_mode`,不要加载执行技能。
100
104
 
101
- ### 3. 选择工作方式
105
+ ### 3. 应用已确认的工作方式
102
106
 
103
- 如果恢复时检测到 `build_pause: plan-ready` 且 `plan` 文件存在,不要重新运行 `writing-plans`。先告知用户当前停在 plan-ready 暂停点;用户确认继续后,设置:
107
+ 如果恢复时检测到 `build_pause: plan-ready` 且 `plan` 文件存在,不要重新运行 `writing-plans`。重新发起 Step 2 的同一个联合决策;只有用户同时给出完整配置后才清除暂停:
104
108
 
105
109
  ```bash
106
110
  comet state set <name> build_pause null
107
111
  ```
108
112
 
109
- 然后继续本步骤选择工作区隔离、执行方式、TDD 模式和代码审查模式。
113
+ 然后应用本步骤中的工作区隔离、执行方式、TDD 模式和代码审查模式。
110
114
 
111
- 计划已写入当前分支。在开始执行前,**一次性询问用户**选择工作区隔离方式、执行方式、TDD 模式和代码审查模式:
115
+ 计划已写入当前分支。以下配置必须由 Step 2 的联合决策一次性确认:
112
116
 
113
117
  **工作区隔离**:
114
118
 
115
119
  | 选项 | 方式 | 说明 |
116
120
  |------|------|------|
117
- | A | 创建分支 | 在当前仓库创建新分支,简单快速 |
118
- | B | 创建 Worktree | 隔离工作区,完全独立,适合并行开发 |
121
+ | A | 当前分支直接工作 | 不创建新分支,如实绑定当前 Git 分支 |
122
+ | B | 创建分支 | 在当前仓库创建新分支,简单快速 |
123
+ | C | 创建 Worktree | 隔离工作区,完全独立,适合并行开发 |
119
124
 
120
125
  **推荐规则**:
121
- - 变更涉及 3 个文件 → 推荐 A
122
- - 需要并行开发、当前分支有未提交工作 → 推荐 B
126
+ - 用户明确希望沿用当前分支,或当前分支本身就是该 change 的目标分支 → 推荐 A
127
+ - 变更涉及 ≤ 3 个文件且当前分支干净 → 推荐 B
128
+ - 需要并行开发、当前分支有未提交工作 → 推荐 C
123
129
 
124
130
  **执行方式**:
125
131
 
@@ -133,24 +139,24 @@ comet state set <name> build_pause null
133
139
  - 任务数 ≤ 2 且无跨模块依赖 → 推荐 B
134
140
  - 来自 hotfix 路径 → 推荐 B
135
141
 
136
- 这是用户决策点。**必须按 `comet/reference/decision-point.md` 的协议暂停并等待用户明确选择隔离方式、执行方式、TDD 模式和代码审查模式**,不得根据推荐规则自行选择 `branch` 或 `worktree`,也不得根据推荐规则自行选择执行方式、TDD 模式或代码审查模式。推荐规则只能用于说明建议,不能替代用户确认。
142
+ 这些表格是 Step 2 联合决策的一部分,不再单独暂停。先移除能力预检判定为不可执行的选项;在剩余多个合法选项时,不得根据推荐规则自行选择 `current`、`branch` 或 `worktree`,也不得自行选择执行方式、TDD 模式或代码审查模式。推荐规则只能用于说明建议,不能替代用户确认。
137
143
 
138
144
  用户选择后,更新 `isolation`、执行方式、TDD 模式和代码审查模式相关字段:
139
145
 
140
146
  ```bash
141
- comet state set <name> isolation <branch|worktree>
147
+ comet state set <name> isolation <current|branch|worktree>
142
148
  ```
143
149
 
144
150
  - 若用户选择 `executing-plans`:运行 `comet state set <name> subagent_dispatch null`,再运行 `comet state set <name> build_mode executing-plans`
145
151
  - 若用户选择 `subagent-driven-development`:先确认当前平台存在可调用的真实后台 subagent / Task / multi-agent 调度能力;确认后先运行 `comet state set <name> subagent_dispatch confirmed`,再运行 `comet state set <name> build_mode subagent-driven-development`
146
- - 若无法确认真实后台调度能力,不得写入 `build_mode: subagent-driven-development`;必须暂停等待用户改选 `executing-plans`
152
+ - 若无法确认真实后台调度能力,不得展示或写入 `build_mode: subagent-driven-development`。恢复状态若已记录该模式但能力不可用,回到 Step 2 的同一个联合决策并只展示可执行模式;不得另设“改选 executing-plans”停顿点
147
153
 
148
154
  **TDD 模式**:
149
155
 
150
156
  | 选项 | 含义 | 适用场景 |
151
157
  |------|------|---------|
152
158
  | `tdd` | 每个任务先写失败测试再写实现 | 推荐。变更涉及业务逻辑、新功能、API |
153
- | `direct` | 直接实现,不强制 TDD 流程 | 变更不需要测试覆盖,或用户选择跳过测试直接写代码。hotfix/tweak 预设默认使用 `direct` |
159
+ | `direct` | 实现优先,不强制逐任务 Red-Green-Refactor | 仍需运行相关测试并为 bug 修复保留回归证据;hotfix/tweak 预设默认使用 `direct` |
154
160
 
155
161
  运行 `comet state set <name> tdd_mode <tdd|direct>`
156
162
 
@@ -164,7 +170,7 @@ comet state set <name> isolation <branch|worktree>
164
170
 
165
171
  运行 `comet state set <name> review_mode <off|standard|thorough>`
166
172
 
167
- `isolation` 是脚本级硬约束。full workflow 初始化时可以为 `null`,但只允许存在到本步骤之前。若保持 `null`,`build → verify` 的 guard 和 `comet state transition build-complete` 都会失败。
173
+ `isolation` 是脚本级硬约束。full workflow 初始化时可以为 `null`,但只允许存在到本步骤之前。若保持 `null`,`build → verify` 的 guard 和 `comet state transition build-complete` 都会失败。full workflow 允许 `current`、`branch` 或 `worktree`,但 `current` 必须通过用户在 Step 2 显式选择后写入,不得静默默认。
168
174
 
169
175
  `subagent_dispatch` 是脚本级硬约束。`build_mode: subagent-driven-development` 离开 build 阶段前必须同时满足 `subagent_dispatch: confirmed`,否则 `comet guard build --apply` 和 `comet state transition build-complete` 都会失败。
170
176
 
@@ -183,18 +189,20 @@ comet state set <name> build_mode direct
183
189
 
184
190
  **执行隔离**:
185
191
 
186
- - **branch**:根据 workflow 类型和当前日期推荐分支名,然后让用户确认或输入自定义名称。这是用户决策点——**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确确认或覆盖分支名**,不得跳过此步骤直接创建分支。
192
+ - **current**:不创建新分支或 worktree,直接在当前 Git 分支执行。立即运行 `comet state set <name> isolation current`;该命令会把当前分支写入 `bound_branch`。如果当前是 detached HEAD,必须停止并让用户先切回真实分支,因为没有可审计的绑定分支。
193
+
194
+ - **branch**:使用 Step 2 已确认的分支名,不得再次暂停。若旧状态恢复时缺少该次联合决策中的分支名,重新进入 Step 2 的同一个联合决策;不得创建第二个独立分支命名决策点。
187
195
 
188
196
  分支命名规范:
189
197
  - 读取 `.comet.yaml` 的 `workflow` 字段确定前缀
190
198
  - `workflow: full` → 推荐 `feature/YYYYMMDD/<change-name>`
191
199
  - `workflow: hotfix` → 推荐 `hotfix/YYYYMMDD/<change-name>`
192
200
  - `workflow: tweak` → 推荐 `tweak/YYYYMMDD/<change-name>`
193
- - 日期取运行时 `date +%Y%m%d` 的结果
201
+ - 日期取当前运行环境日期并格式化为 `YYYYMMDD`,不得依赖某一种 shell 的日期命令
194
202
 
195
203
  示例:如果 change 名称为 `fix-login-bug`,今天是 2026-06-09,则推荐 `feature/20260609/fix-login-bug`
196
204
 
197
- 用户确认或提供自定义分支名后,执行 `git checkout -b <branch-name>`,后续工作在新分支上进行。
205
+ 分支名由 Step 2 确认后,立即执行 `git checkout -b <branch-name>`,然后运行 `comet state set <name> isolation branch`,把新分支写入 `bound_branch`。后续工作在新分支上进行。
198
206
 
199
207
  - **worktree**:必须使用 Skill 工具加载 Superpowers `using-git-worktrees` 技能创建隔离工作区。禁止用普通 shell 命令或原生工具绕过该技能;如该技能不可用,停止流程并提示安装或启用 Superpowers 技能。
200
208
 
@@ -205,7 +213,7 @@ git add docs/superpowers/plans/YYYY-MM-DD-feature.md
205
213
  git commit -m "chore: add implementation plan"
206
214
  ```
207
215
 
208
- 进入最终执行分支或 worktree 后,必须在该实际工作区重新绑定当前 change。branch 切换会使入口绑定失效,新 worktree 也不会继承原工作区的本地选择文件:
216
+ 进入最终执行分支或 worktree 后,必须在该实际工作区重新绑定当前 change。branch 模式已在切换后通过 `isolation branch` 绑定;worktree 模式必须在新工作区运行 `comet state set <name> isolation worktree`,把 worktree 的当前分支写入 `bound_branch`。新 worktree 不会继承原工作区的本地选择文件,因此还必须选择当前 change:
209
217
 
210
218
  ```bash
211
219
  comet state select <change-name>
@@ -217,7 +225,7 @@ comet state select <change-name>
217
225
 
218
226
  - `build_mode: executing-plans`:**立即执行:** 使用 Skill 工具加载 Superpowers `executing-plans` 技能。禁止跳过此步骤。若该技能不可用,停止流程并提示安装或启用对应技能,不要用普通对话替代该步骤。技能加载后,ARGUMENTS 必须包含与 Step 1 相同的 Language 约束:`Language: 使用 comet state get <name> language 读取到的 Comet 配置产物语言输出`。按计划执行。
219
227
  - `build_mode: subagent-driven-development`:主会话只负责协调,禁止直接编写实现代码。**立即执行:** 使用 Skill 工具加载 Superpowers `subagent-driven-development` 技能。技能加载后,读取 `comet/reference/subagent-dispatch.md` 获取 Comet 专属扩展(真实后台调度、任务隔离、勾选验证、TDD 约束、连续执行、上下文恢复),与技能工作流配合应用。若两者发生冲突,以更具体的 Comet 扩展为准。
220
- - 如果当前平台没有真实后台 agent 调度能力,必须暂停并等待用户选择改用主窗口执行。用户选择改用主窗口执行后,必须先运行 `comet state set <name> build_mode executing-plans`,再按 `build_mode: executing-plans` 分支加载 Superpowers `executing-plans` 技能。用户未明确选择前,不得继续执行任务。
228
+ - 如果执行前复检发现后台调度能力已失效,不得直接在主窗口执行,也不得创建新的二次决策;返回 Step 2 的同一个联合决策,移除不可用模式。用户在该联合决策中选择主窗口执行后,先运行 `comet state set <name> build_mode executing-plans`,再按对应分支继续。
221
229
 
222
230
  **TDD 模式执行约束**:
223
231
 
@@ -237,7 +245,7 @@ comet state select <change-name>
237
245
 
238
246
  要求(适用于 `standard` 和 `thorough`):
239
247
  - `requesting-code-review` 技能必须在 `comet guard <change-name> build --apply` 之前加载
240
- - 若 `requesting-code-review` 技能不可用,跳过 review gate 但必须在 tasks.md 中记录 `<!-- review skipped: skill unavailable -->`,并继续 guard 流转
248
+ - 若 `requesting-code-review` 技能不可用且当前为 `standard` `thorough`,必须停止并请用户选择:安装/启用后重试,或明确切换为 `review_mode: off` 并记录原因。用户未明确切换前不得跳过 review gate 或继续 guard
241
249
  - CRITICAL review 发现(安全漏洞、数据丢失风险、构建/测试失败)必须先修复,不得带入 verify
242
250
  - 非 CRITICAL review 发现如选择接受,必须在 tasks.md、commit body、验证报告草稿或其他持久产物中记录接受原因和影响范围
243
251
 
@@ -275,7 +283,7 @@ comet state select <change-name>
275
283
 
276
284
  Build 是最长阶段,可能跨越大量任务。为支持上下文压缩后断点恢复:
277
285
 
278
- - **每完成一个 task**:按当前执行分支和 `review_mode` 完成验收后再勾选对应任务并提交。`subagent-driven-development` 在 `off` 时不派发每任务 reviewer;`standard` 下仅当任务命中风险信号时派发;`thorough` 下每个任务都派发每任务 reviewer。所有模式都必须按任务唯一文本完成定向检查。可用 `grep -c '\- \[ \]' tasks.md` 检查剩余未勾选数,无需重新读取整个文件
286
+ - **每完成一个 task**:按当前执行分支和 `review_mode` 完成验收后再勾选对应任务并提交。`subagent-driven-development` 在 `off` 时不派发每任务 reviewer;`standard` 下仅当任务命中风险信号时派发;`thorough` 下每个任务都派发每任务 reviewer。所有模式都必须按任务唯一文本完成定向检查。通过解析 tasks.md 复选框统计剩余任务,无需反复读取与当前任务无关的正文
279
287
  - **上下文压缩后恢复**:按 `comet/reference/context-recovery.md` 执行,phase 参数为 `build`。
280
288
  - **用户手动修改恢复**:按 `comet/reference/dirty-worktree.md` 协议处理未提交改动。该协议定义了检查步骤、归因分类和禁令。build 阶段的特殊处理:
281
289
  1. 归因后,若 diff 暗示计划或 spec 已变化,按 Step 4「Spec 增量更新」分级处理
@@ -286,7 +294,7 @@ Build 是最长阶段,可能跨越大量任务。为支持上下文压缩后
286
294
  - tasks.md 全部勾选
287
295
  - 代码已提交
288
296
  - 已显式运行项目对应的构建/测试命令并通过(不要只依赖 guard 自动猜测)
289
- - `isolation` 已写为 `branch` 或 `worktree`
297
+ - `isolation` 已写为 `current`、`branch` 或 `worktree`
290
298
  - `build_mode` 已写为 `subagent-driven-development`、`executing-plans` 或带显式 override 的 `direct`;若为 `subagent-driven-development`,`subagent_dispatch` 必须为 `confirmed`
291
299
  - `tdd_mode` 已写为 `tdd` 或 `direct`
292
300
  - `review_mode` 已写为 `off`、`standard` 或 `thorough`
@@ -320,5 +328,5 @@ comet state next <change-name>
320
328
  ```
321
329
 
322
330
  - `NEXT: auto` → 调用 `SKILL` 指向的 skill 进入下一阶段
323
- - `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
331
+ - `NEXT: manual` → 不调用下一 skill,按 `HINT` 交还控制权并结束当前调用;不再创建确认点
324
332
  - `NEXT: done` → 流程已完成,无需继续