@rpamis/comet 0.3.6 → 0.3.7
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.
- package/LICENSE +21 -21
- package/README.md +175 -63
- package/assets/manifest.json +11 -1
- package/assets/skills/comet/SKILL.md +44 -16
- package/assets/skills/comet/reference/dirty-worktree.md +1 -0
- package/assets/skills/comet/rules/comet-phase-guard.md +90 -0
- package/assets/skills/comet/scripts/comet-archive.sh +71 -55
- package/assets/skills/comet/scripts/comet-guard.sh +174 -18
- package/assets/skills/comet/scripts/comet-handoff.sh +133 -6
- package/assets/skills/comet/scripts/comet-hook-guard.sh +260 -0
- package/assets/skills/comet/scripts/comet-state.sh +300 -25
- package/assets/skills/comet/scripts/comet-yaml-validate.sh +24 -1
- package/assets/skills/comet-archive/SKILL.md +43 -10
- package/assets/skills/comet-build/SKILL.md +117 -22
- package/assets/skills/comet-design/SKILL.md +119 -13
- package/assets/skills/comet-hotfix/SKILL.md +51 -9
- package/assets/skills/comet-open/SKILL.md +86 -13
- package/assets/skills/comet-tweak/SKILL.md +33 -8
- package/assets/skills/comet-verify/SKILL.md +48 -9
- package/assets/skills-zh/comet/SKILL.md +47 -16
- package/assets/skills-zh/comet/reference/dirty-worktree.md +2 -1
- package/assets/skills-zh/comet-archive/SKILL.md +44 -11
- package/assets/skills-zh/comet-build/SKILL.md +120 -25
- package/assets/skills-zh/comet-design/SKILL.md +123 -16
- package/assets/skills-zh/comet-hotfix/SKILL.md +47 -9
- package/assets/skills-zh/comet-open/SKILL.md +87 -14
- package/assets/skills-zh/comet-tweak/SKILL.md +29 -8
- package/assets/skills-zh/comet-verify/SKILL.md +49 -12
- package/bin/comet.js +3 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +22 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +5 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +64 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +60 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/core/codegraph.d.ts +9 -0
- package/dist/core/codegraph.d.ts.map +1 -0
- package/dist/core/codegraph.js +96 -0
- package/dist/core/codegraph.js.map +1 -0
- package/dist/core/platforms.d.ts +10 -0
- package/dist/core/platforms.d.ts.map +1 -1
- package/dist/core/platforms.js +163 -15
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/skills.d.ts +34 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +360 -1
- package/dist/core/skills.js.map +1 -1
- package/package.json +3 -1
- package/scripts/postinstall.js +44 -44
|
@@ -20,6 +20,10 @@ Superpowers 负责 HOW — 技术设计、计划、执行、收尾
|
|
|
20
20
|
|
|
21
21
|
agent 做决策只需读本节,参考附录按需查阅。
|
|
22
22
|
|
|
23
|
+
### 输出语言规则
|
|
24
|
+
|
|
25
|
+
以触发本次工作流的用户请求语言作为默认输出语言。恢复已有 change 时,如果现有产物有明确主语言,除非用户明确要求切换,否则保持该语言。
|
|
26
|
+
|
|
23
27
|
### 阶段自动检测
|
|
24
28
|
|
|
25
29
|
**Step 0: 活跃 Change 发现与意图判定**
|
|
@@ -53,19 +57,22 @@ agent 做决策只需读本节,参考附录按需查阅。
|
|
|
53
57
|
**断点恢复规则**:
|
|
54
58
|
- 每次恢复上下文时,先重新执行 Step 0 和 Step 1,不依赖对话历史判断阶段
|
|
55
59
|
- 只要存在 active change 且工作区有未提交改动,必须按 `comet/reference/dirty-worktree.md` 协议处理。该协议定义了检查步骤、归因分类和禁令,本文件不重复
|
|
56
|
-
- 若 `phase: build`,先检查 `build_pause`、`plan`、`build_mode` 和 `isolation
|
|
57
|
-
- 若 `build_pause: plan-ready`
|
|
60
|
+
- 若 `phase: build`,先检查 `build_pause`、`plan`、`build_mode` 和 `isolation`(详见下方):
|
|
61
|
+
- 若 `build_pause: plan-ready` 但 `isolation` 和 `build_mode` 已经设置,则视为 stale pause:先输出 `[COMET] 检测到 stale pause(build_pause=plan-ready 但 isolation/build_mode 已设置),自动清除并继续`,再运行 `"$COMET_BASH" "$COMET_STATE" set <name> build_pause null`,然后读取 tasks.md 的下一个未勾选任务并按 `build_mode` 恢复执行
|
|
62
|
+
- 若 `build_pause: plan-ready` 且 plan 文件存在,但 `isolation` 或 `build_mode` 尚未设置,回到 `/comet-build` 的 plan-ready 恢复点,提示用户继续选择隔离方式和执行方式,不重新生成 plan
|
|
58
63
|
- 若 `build_pause: plan-ready` 但 plan 文件缺失,回到 `/comet-build` 处理状态损坏或重新生成 plan
|
|
59
|
-
- 若 `build_mode` 或 `
|
|
60
|
-
- 若均已设置,读取 tasks.md
|
|
64
|
+
- 若 `build_mode`、`isolation` 或 `tdd_mode` 未设置,回到 `/comet-build` 对应步骤补充后再执行
|
|
65
|
+
- 若均已设置,读取 tasks.md 的下一个未勾选任务,并按 `build_mode` 恢复执行:
|
|
66
|
+
- 若 `build_mode: subagent-driven-development`,不得在主窗口直接执行任务;必须回到 `/comet-build` 的后台 subagent 调度规则,由主窗口只做协调
|
|
67
|
+
- 其他执行方式按 `/comet-build` 的对应规则继续
|
|
61
68
|
- 若 `phase: verify` 且 `verify_result: fail`,进入验证失败决策阻塞点:暂停并询问用户修复或接受偏差;用户选择修复后才运行 `"$COMET_BASH" "$COMET_STATE" transition <name> verify-fail` 并调用 `/comet-build`
|
|
62
69
|
- 若 `phase: open` 但 proposal/design/tasks 已完整,先运行 `"$COMET_BASH" "$COMET_GUARD" <change-name> open --apply` 修正状态,再继续判定
|
|
63
|
-
- 若 `phase: archive`,只允许调用 `/comet-archive
|
|
70
|
+
- 若 `phase: archive`,只允许调用 `/comet-archive`;`/comet-archive` 必须先等待归档前最终确认,归档成功后 change 会移动到 archive 目录,不再对原活跃目录运行 guard
|
|
64
71
|
|
|
65
72
|
**Step 2: 阶段判定**(按顺序,命中即停)
|
|
66
73
|
|
|
67
74
|
1. `archived: true` 或 change 已移入 archive → 流程已完成
|
|
68
|
-
2. `verify_result: pass` 且 `archived` 不是 `true` → `/comet-archive
|
|
75
|
+
2. `verify_result: pass` 且 `archived` 不是 `true` → `/comet-archive`(先进行归档前最终确认)
|
|
69
76
|
3. `verify_result: fail` → 进入验证失败决策阻塞点(暂停询问修复或接受偏差;用户选择修复后才 `verify-fail` 并 `/comet-build`)
|
|
70
77
|
4. `phase: verify` 或 tasks.md 全部勾选 → `/comet-verify`
|
|
71
78
|
5. `phase: build` 或已有 Design Doc 但计划/执行未完成 → 优先按 workflow 路由:`hotfix` → `/comet-hotfix`,`tweak` → `/comet-tweak`,`full` → `/comet-build`
|
|
@@ -89,6 +96,8 @@ agent 做决策只需读本节,参考附录按需查阅。
|
|
|
89
96
|
- 涉及多个模块的协调修改
|
|
90
97
|
- 需要新增测试用例 **5+**
|
|
91
98
|
- 涉及配置项的新增或删除(非值修改)
|
|
99
|
+
- 需要新增 capability
|
|
100
|
+
- 需要 delta spec(影响了已有规格)
|
|
92
101
|
|
|
93
102
|
### 错误处理速查
|
|
94
103
|
|
|
@@ -107,9 +116,11 @@ agent 做决策只需读本节,参考附录按需查阅。
|
|
|
107
116
|
|
|
108
117
|
流转链:open → design → build → verify → archive
|
|
109
118
|
|
|
110
|
-
**连续执行要求**:从检测到的阶段开始,agent
|
|
119
|
+
**连续执行要求**:从检测到的阶段开始,agent 自动推进后续阶段。但**自动推进仅适用于没有用户决策的衔接点**。遇到用户决策点时,**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确回复**,不得用推荐规则、默认值或历史偏好代替用户确认,也不得仅输出文字提示后继续执行。
|
|
120
|
+
|
|
121
|
+
**阶段推进与自动衔接的区分**:每个子 skill 退出前都会运行阶段守卫 `--apply` 推进 `.comet.yaml` 的 `phase` 字段——这一步**始终发生**,与 `auto_transition` 无关。之后子 skill 运行 `"$COMET_BASH" "$COMET_STATE" next <name>` 解析下一步:`auto_transition` 不为 `false` 时输出 `NEXT: auto`(自动调用下一 skill),为 `false` 时输出 `NEXT: manual`(不调用下一 skill,提示用户手动运行)。因此 `auto_transition` **只控制是否自动调用下一个 skill,不影响 phase 推进**。无论 `auto_transition` 取何值,下方的用户决策点都必须阻塞等待。
|
|
111
122
|
|
|
112
|
-
**决策点是阻塞点**:只要到达下列任一节点,当前 `/comet`
|
|
123
|
+
**决策点是阻塞点**:只要到达下列任一节点,当前 `/comet` 调用必须停住,**使用当前平台可用的用户输入/确认机制等待用户选择**。若当前平台没有结构化提问工具,则必须在对话中提出明确选项并停止流程,等待用户回复后才能继续。用户明确选择后才能写入对应状态字段、执行对应操作,随后再继续自动流转。
|
|
113
124
|
|
|
114
125
|
需要用户参与的节点(仅在这些节点暂停):
|
|
115
126
|
1. open 阶段 proposal/design/tasks 审视确认
|
|
@@ -117,16 +128,18 @@ agent 做决策只需读本节,参考附录按需查阅。
|
|
|
117
128
|
3. build 阶段 plan-ready 暂停选择,以及随后选择工作方式(隔离方式 + 执行方式)
|
|
118
129
|
4. verify 不通过时决定修复或接受偏差(含 Spec 漂移处理方式选择)
|
|
119
130
|
5. finishing-branch 选择分支处理方式
|
|
120
|
-
6.
|
|
121
|
-
7.
|
|
131
|
+
6. archive 阶段执行归档脚本前的最终确认
|
|
132
|
+
7. 遇到升级条件(hotfix/tweak → 完整流程)
|
|
133
|
+
8. build 阶段范围扩张需重新设计或拆分新 change
|
|
134
|
+
9. open 阶段大型 PRD 需确认拆分为多个 change
|
|
122
135
|
|
|
123
|
-
agent
|
|
136
|
+
agent 不应跳过这些决策点;其他明确无歧义的阶段衔接必须自动继续推进,不得中途退出。到达决策点时,**禁止跳过用户确认或自动选择——必须通过当前平台可用的用户输入/确认机制明确获取用户选择后才能继续**。
|
|
124
137
|
|
|
125
138
|
**红旗清单** — 以下想法出现时立即停止并检查:
|
|
126
139
|
|
|
127
140
|
| Agent 心理 | 实际风险 |
|
|
128
141
|
|-----------|---------|
|
|
129
|
-
| "用户应该会同意这个方案" |
|
|
142
|
+
| "用户应该会同意这个方案" | 不能替用户决策,必须等待用户明确选择 |
|
|
130
143
|
| "这只是个小改动,不需要确认" | 决策点无大小之分,阻塞点必须等待 |
|
|
131
144
|
| "用户之前选过 A,这次也选 A" | 历史偏好不能替代当前确认 |
|
|
132
145
|
| "我已经解释了方案,用户没反对" | 没反对 ≠ 同意,必须用工具获取明确选择 |
|
|
@@ -176,6 +189,8 @@ plan: docs/superpowers/plans/YYYY-MM-DD-feature.md
|
|
|
176
189
|
base_ref: a1b2c3d4e5f6...
|
|
177
190
|
build_mode: subagent-driven-development
|
|
178
191
|
build_pause: null
|
|
192
|
+
subagent_dispatch: confirmed
|
|
193
|
+
tdd_mode: tdd
|
|
179
194
|
isolation: branch
|
|
180
195
|
verify_mode: light
|
|
181
196
|
verify_result: pending
|
|
@@ -195,8 +210,11 @@ archived: false
|
|
|
195
210
|
| `base_ref` | init 时记录的 git commit SHA,用于 scale 评估。无 plan 时作为改动文件数统计基准 |
|
|
196
211
|
| `build_mode` | 已选择的执行方式,可为空 |
|
|
197
212
|
| `build_pause` | build 阶段内部暂停点。`null` 表示无暂停,`plan-ready` 表示 plan 已生成,用户选择切换模型后暂停 |
|
|
213
|
+
| `subagent_dispatch` | `null` 或 `confirmed`。仅当已确认当前平台存在真实后台 subagent / Task / multi-agent 调度能力时,`build_mode: subagent-driven-development` 才能写入并用于离开 build 阶段 |
|
|
214
|
+
| `tdd_mode` | `tdd` 或 `direct`。full workflow 离开 build 阶段前必须已选择。`tdd` 强制每个任务先写失败测试再实现;`direct` 不强制 TDD。hotfix/tweak 默认 `direct` |
|
|
198
215
|
| `isolation` | `branch` 或 `worktree`,工作区隔离方式。full 初始化可为 `null`,但只允许持续到 `/comet-build` Step 3 前;hotfix/tweak 默认 `branch` |
|
|
199
216
|
| `verify_mode` | `light` 或 `full`,可为空 |
|
|
217
|
+
| `auto_transition` | `true` 或 `false`。只控制阶段守卫推进 phase 后是否自动调用下一个 skill;`false` 时由 `comet-state next` 输出 `manual`,暂停下一 skill 调用,但不阻止 phase 字段更新 |
|
|
200
218
|
| `verify_result` | `pending`、`pass` 或 `fail` |
|
|
201
219
|
| `verification_report` | 验证报告文件路径,verify 通过前必须指向已存在文件 |
|
|
202
220
|
| `branch_status` | `pending` 或 `handled`,分支处理完成后设为 `handled` |
|
|
@@ -215,13 +233,15 @@ archived: false
|
|
|
215
233
|
状态机硬约束:
|
|
216
234
|
- `build → verify` 前,`isolation` 必须是 `branch` 或 `worktree`
|
|
217
235
|
- `build → verify` 前,`build_mode` 必须已选择
|
|
236
|
+
- `build_mode: subagent-driven-development` 必须同时有 `subagent_dispatch: confirmed`
|
|
237
|
+
- full workflow 离开 build 阶段前 `tdd_mode` 必须已选择为 `tdd` 或 `direct`
|
|
218
238
|
- `build_mode: direct` 默认只允许 `hotfix` / `tweak`;full workflow 需要 `direct_override: true`
|
|
219
239
|
- `build_pause` 不是执行方式,不得写入 `build_mode`
|
|
220
240
|
- 这些约束同时存在于 `comet-guard.sh build --apply` 和 `comet-state.sh transition <name> build-complete`
|
|
221
241
|
|
|
222
242
|
### 脚本定位
|
|
223
243
|
|
|
224
|
-
Comet 脚本随 skill 包分发在 `comet/scripts/` 下。**不硬编码路径** —
|
|
244
|
+
Comet 脚本随 skill 包分发在 `comet/scripts/` 下。**不硬编码路径** — 定位一次,缓存到环境变量。此块为标准样板,在每个子 skill 中独立重复以确保可独立加载;修改时必须保持所有文件同步(样板版本: `v2`,变更时更新此版本号便于定位需要同步的文件):
|
|
225
245
|
|
|
226
246
|
```bash
|
|
227
247
|
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
@@ -256,6 +276,14 @@ fi
|
|
|
256
276
|
"$COMET_BASH" "$COMET_STATE" transition <archive-name> archived
|
|
257
277
|
```
|
|
258
278
|
|
|
279
|
+
**解析下一步**:阶段守卫推进 phase 后,用 `next` 子命令解析是否自动调用下一个 skill:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
"$COMET_BASH" "$COMET_STATE" next <change-name>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
输出 `NEXT: auto|manual|done` + `SKILL: <skill-name>`(`done` 时省略)+ `HINT`(仅 `manual` 时)。`auto_transition: false` 时输出 `manual`,只暂停下一 skill 调用,不影响已发生的 phase 推进。
|
|
286
|
+
|
|
259
287
|
**归档脚本**:一键完成归档全部步骤:
|
|
260
288
|
|
|
261
289
|
```bash
|
|
@@ -279,21 +307,24 @@ openspec/ # OpenSpec — WHAT
|
|
|
279
307
|
│ │ ├── .comet/handoff/ # 脚本生成的阶段交接包
|
|
280
308
|
│ │ └── tasks.md # 任务清单
|
|
281
309
|
│ └── archive/YYYY-MM-DD-<name>/ # 已归档
|
|
282
|
-
└── specs/<capability>/spec.md # 主 specs
|
|
310
|
+
└── specs/<capability>/spec.md # 主 specs(归档时按 OpenSpec delta 语义合并)
|
|
283
311
|
|
|
284
312
|
docs/superpowers/ # Superpowers — HOW
|
|
285
313
|
├── specs/YYYY-MM-DD-<topic>-design.md # 设计文档(技术 RFC,归档时标注状态)
|
|
286
314
|
└── plans/YYYY-MM-DD-<feature>.md # 实施计划(文件头含 change 关联元数据)
|
|
315
|
+
|
|
316
|
+
.comet/
|
|
317
|
+
└── config.yaml # Comet 项目配置(context_compression 默认 off,可设 beta)
|
|
287
318
|
```
|
|
288
319
|
|
|
289
320
|
### 最佳实践
|
|
290
321
|
|
|
291
322
|
1. **brainstorming 不可跳过** — 每次变更必须经过深度设计(hotfix 和 tweak 除外)
|
|
292
323
|
2. **delta spec 是活文档** — 阶段 3 期间可自由修改,归档时同步
|
|
293
|
-
3. **交接包由脚本生成** — OpenSpec → Superpowers 的上下文必须通过 `comet-handoff.sh` 生成 compact
|
|
324
|
+
3. **交接包由脚本生成** — OpenSpec → Superpowers 的上下文必须通过 `comet-handoff.sh` 生成 compact 可追溯摘录(需要全文时用 `--full`),并由 guard 校验 source/hash/mode
|
|
294
325
|
4. **保持 tasks.md 同步** — 完成一个勾一个
|
|
295
326
|
5. **频繁提交** — 每个任务一次提交,message 体现设计意图
|
|
296
|
-
6.
|
|
327
|
+
6. **先验证再确认归档** — `/comet-verify` 通过后进入 `/comet-archive`,但运行归档脚本前必须等待用户最终确认
|
|
297
328
|
7. **增量更新分级** — 小编辑、中重 brainstorming、大新 change
|
|
298
329
|
8. **Plan 必须关联 change** — 文件头包含 `change:` 和 `design-doc:` 元数据
|
|
299
330
|
9. **归档闭环** — design doc 和 plan 必须标注 `archived-with` 状态
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
规范路径:`comet/reference/dirty-worktree.md`
|
|
4
4
|
|
|
5
|
-
本协议由所有涉及代码修改的 comet 子 skill 共享。当 agent
|
|
5
|
+
本协议由所有涉及代码修改的 comet 子 skill 共享。当 agent 恢复上下文或继续执行时,必须按本协议处理未提交的工作区改动。各子 skill 可在本协议基础上定义阶段特例(如 verify 阶段对实现改动的特殊处理),详见对应子 skill 文件。本文件不重复阶段特例。
|
|
6
6
|
|
|
7
7
|
## 1. 检查步骤
|
|
8
8
|
|
|
@@ -20,6 +20,7 @@ git ls-files --others --exclude-standard
|
|
|
20
20
|
## 2. 核心规则
|
|
21
21
|
|
|
22
22
|
- 用户可能不会说明自己改了哪里。只要存在 dirty worktree(包括 Git 状态里显示为 `??` 的新建文件),就先假设改动可能来自用户或混合来源
|
|
23
|
+
- **构建产物排除**:`??` 文件若匹配 `.gitignore` 中的模式(如 `node_modules/`、`dist/`、`__pycache__/`、`*.o`、`target/`、`build/` 等),自动跳过归因,不视为用户改动
|
|
23
24
|
- dirty worktree 只代表代码事实,不会自动推进 `.comet.yaml` 的 `phase` 或勾选 `tasks.md`;只有完成归因、验证、同步必要文档,并通过对应阶段 guard 后,才允许推进 Comet 状态
|
|
24
25
|
|
|
25
26
|
## 3. 归因分类
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: comet-archive
|
|
3
|
-
description: "Comet 阶段 5:归档。用 /comet-archive
|
|
3
|
+
description: "Comet 阶段 5:归档。用 /comet-archive 调用。按 OpenSpec delta 语义合并主 spec,归档 change。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Comet 阶段 5:归档(Archive)
|
|
@@ -13,7 +13,11 @@ description: "Comet 阶段 5:归档。用 /comet-archive 调用。同步 delta
|
|
|
13
13
|
|
|
14
14
|
## 步骤
|
|
15
15
|
|
|
16
|
-
### 0.
|
|
16
|
+
### 0. 输出语言约束
|
|
17
|
+
|
|
18
|
+
归档摘要和生命周期闭环说明必须使用触发本次工作流的用户请求语言。
|
|
19
|
+
|
|
20
|
+
### 0b. 入口状态验证(Entry Check)
|
|
17
21
|
|
|
18
22
|
执行入口验证:
|
|
19
23
|
|
|
@@ -29,7 +33,24 @@ fi
|
|
|
29
33
|
|
|
30
34
|
验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
|
|
31
35
|
|
|
32
|
-
### 1.
|
|
36
|
+
### 1. 归档前最终确认(阻塞点)
|
|
37
|
+
|
|
38
|
+
入口验证通过后,**必须使用当前平台可用的用户输入/确认机制暂停并等待用户确认是否立即归档**。不得在用户确认前运行 `"$COMET_BASH" "$COMET_ARCHIVE" "<change-name>"`。若当前平台没有结构化提问工具,则在对话中提出同等单选问题并停止流程,等待用户回复后才能继续。
|
|
39
|
+
|
|
40
|
+
确认前必须向用户展示简短摘要:
|
|
41
|
+
- change 名称
|
|
42
|
+
- 验证报告路径和结论
|
|
43
|
+
- 分支处理状态
|
|
44
|
+
- 本次归档将执行的不可逆动作:按 OpenSpec delta 语义合并主 spec、标注 design doc / plan、移动 change 到 archive 目录
|
|
45
|
+
|
|
46
|
+
用户确认问题必须以单选题形式呈现,包含以下选项:
|
|
47
|
+
- 「确认归档」— 立即执行归档脚本,完成 spec 合并和 change 移动
|
|
48
|
+
- 「需要调整或重新验证」— 不执行归档;运行 `"$COMET_BASH" "$COMET_STATE" transition <change-name> archive-reopen` 回到 `phase: verify`,再调用 `/comet-verify`。若验证阶段确认需要修复,再按 `/comet-verify` 的验证失败决策回到 `/comet-build`
|
|
49
|
+
- 「暂不归档」— 不执行归档,保留当前 `phase: archive` 状态,等待用户稍后再次调用 `/comet-archive`
|
|
50
|
+
|
|
51
|
+
只有用户选择「确认归档」后,才允许继续 Step 2。用户选择「需要调整或重新验证」后,必须先执行 `archive-reopen` 状态回退,不得手动编辑 `.comet.yaml`。
|
|
52
|
+
|
|
53
|
+
### 2. 执行归档
|
|
33
54
|
|
|
34
55
|
运行归档脚本,自动完成以下全部步骤:
|
|
35
56
|
|
|
@@ -39,25 +60,25 @@ fi
|
|
|
39
60
|
|
|
40
61
|
脚本自动执行:
|
|
41
62
|
1. 入口状态验证(phase=archive, verify_result=pass, archived=false)
|
|
42
|
-
2.
|
|
43
|
-
3.
|
|
44
|
-
4.
|
|
45
|
-
5.
|
|
63
|
+
2. Design doc 前置元数据标注(archived-with, status)
|
|
64
|
+
3. Plan 前置元数据标注(archived-with)
|
|
65
|
+
4. 调用 OpenSpec archive 按 delta 语义合并主 spec 并移动 change 到归档目录
|
|
66
|
+
5. 校验主 spec 未残留 delta-only section 标题
|
|
46
67
|
6. 通过 `comet-state transition <archive-name> archived` 更新 `archived: true`
|
|
47
68
|
|
|
48
69
|
如脚本返回非零退出码,报告错误并停止。
|
|
49
70
|
如脚本返回零退出码,归档完成。
|
|
50
71
|
脚本摘要中的 `X/Y steps succeeded` 以真实执行步骤计数,不会因 delta spec 同步或文档标注重复累计。
|
|
51
72
|
|
|
52
|
-
|
|
73
|
+
脚本会调用 OpenSpec 归档能力按 `ADDED/MODIFIED/REMOVED/RENAMED` 语义合并主 spec,并在归档后校验主 spec 中没有残留 delta-only section 标题。
|
|
53
74
|
|
|
54
75
|
如需预览而不实际执行,使用 `--dry-run` 参数。
|
|
55
76
|
|
|
56
|
-
###
|
|
77
|
+
### 3. 生命周期闭环
|
|
57
78
|
|
|
58
79
|
Spec 生命周期在此完成:
|
|
59
80
|
```
|
|
60
|
-
brainstorming → delta spec → 实施 → 验证 → 主 spec
|
|
81
|
+
brainstorming → delta spec → 实施 → 验证 → 主 spec 合并 → design doc 标注 → 归档
|
|
61
82
|
```
|
|
62
83
|
|
|
63
84
|
## 退出条件
|
|
@@ -66,8 +87,20 @@ brainstorming → delta spec → 实施 → 验证 → 主 spec 覆盖 → desig
|
|
|
66
87
|
- 归档目录 `openspec/changes/archive/YYYY-MM-DD-<change-name>/` 存在
|
|
67
88
|
- 归档后的 `.comet.yaml` 中 `archived: true`
|
|
68
89
|
|
|
69
|
-
归档脚本会把 `openspec/changes/<name>/` 移动到 `openspec/changes/archive/YYYY-MM-DD-<name
|
|
90
|
+
归档脚本会把 `openspec/changes/<name>/` 移动到 `openspec/changes/archive/YYYY-MM-DD-<name>/`。
|
|
91
|
+
|
|
92
|
+
> **WARNING**: 归档成功后**不要再对原 change 名运行** `"$COMET_BASH" "$COMET_GUARD" <change-name> archive`,因为原活跃目录已经不存在。误调会导致 guard 报错"change directory not found"。归档完整性以脚本退出码和归档目录状态为准。
|
|
70
93
|
|
|
71
94
|
## 完成
|
|
72
95
|
|
|
73
96
|
Comet 流程全部完成。如需开始新工作,调用 `/comet` 或 `/comet-open`。
|
|
97
|
+
|
|
98
|
+
## 上下文压缩恢复
|
|
99
|
+
|
|
100
|
+
归档阶段在执行过程中可能触发上下文压缩。恢复时先运行:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
"$COMET_BASH" "$COMET_STATE" check <change-name> archive --recover
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
脚本输出结构化恢复上下文(归档状态、已完成步骤)。按 Recovery action 判断下一步。若 `archived: true` 且归档目录存在,归档已完成,无需再次执行归档操作。
|
|
@@ -28,13 +28,22 @@ fi
|
|
|
28
28
|
|
|
29
29
|
验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
|
|
30
30
|
|
|
31
|
-
**幂等性**:build 阶段所有操作可安全重复执行。读取 `.comet.yaml` 的 `phase` 字段确认仍在 build 阶段,读取 plan 文件头的 `base-ref
|
|
31
|
+
**幂等性**:build 阶段所有操作可安全重复执行。读取 `.comet.yaml` 的 `phase` 字段确认仍在 build 阶段,读取 plan 文件头的 `base-ref`,再用 `grep -n '\- \[ \]' tasks.md | head -1` 找到第一个未勾选任务继续执行。已提交的任务不得重复提交。
|
|
32
32
|
|
|
33
|
-
### 1.
|
|
33
|
+
### 1. 制定计划(Subagent Offload)
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
通过 subagent 创建实施计划,避免 planning skill 占用主 session 上下文。计划文件和执行反馈必须使用触发本次工作流的用户请求语言。
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
**Subagent 指令**:
|
|
38
|
+
|
|
39
|
+
你是实施计划专家。基于以下输入创建实施计划:
|
|
40
|
+
|
|
41
|
+
1. **立即执行:** 使用 Skill 工具加载 Superpowers `writing-plans` 技能。禁止跳过此步骤。技能加载后,ARGUMENTS 必须包含:`Language: 使用触发本次工作流的用户请求语言输出`
|
|
42
|
+
2. 读取 Design Doc(`docs/superpowers/specs/` 下的技术设计文档)
|
|
43
|
+
3. 读取 `openspec/changes/<name>/tasks.md`(任务边界)
|
|
44
|
+
4. 按技能指引创建计划
|
|
45
|
+
|
|
46
|
+
计划要求:
|
|
38
47
|
- 保存至 `docs/superpowers/plans/YYYY-MM-DD-<feature>.md`
|
|
39
48
|
- 引用设计文档,拆分为可执行任务
|
|
40
49
|
- **Plan 文件头必须包含关联元数据**:
|
|
@@ -53,6 +62,14 @@ base-ref: <git rev-parse HEAD before implementation>
|
|
|
53
62
|
git rev-parse HEAD
|
|
54
63
|
```
|
|
55
64
|
|
|
65
|
+
将计划写入文件后,返回文件路径。
|
|
66
|
+
|
|
67
|
+
**执行 subagent**:使用当前平台的 subagent 调度机制派发上述任务。
|
|
68
|
+
|
|
69
|
+
Subagent 完成后:
|
|
70
|
+
- 若返回有效文件路径且文件存在,记录为 plan
|
|
71
|
+
- 若 subagent 失败或返回路径无效,在主 session 内联加载 Superpowers `writing-plans` 技能创建计划(降级回退)
|
|
72
|
+
|
|
56
73
|
### 2. 更新计划状态并提供 plan-ready 暂停点
|
|
57
74
|
|
|
58
75
|
先记录 plan 路径:
|
|
@@ -61,7 +78,7 @@ git rev-parse HEAD
|
|
|
61
78
|
"$COMET_BASH" "$COMET_STATE" set <name> plan docs/superpowers/plans/YYYY-MM-DD-feature.md
|
|
62
79
|
```
|
|
63
80
|
|
|
64
|
-
无需手动更新 phase
|
|
81
|
+
无需手动更新 phase,阶段守卫(guard `--apply`)会在退出条件满足后推进 `phase` 字段。
|
|
65
82
|
|
|
66
83
|
计划写入后,立即提供一个新的用户决策点:
|
|
67
84
|
|
|
@@ -70,7 +87,7 @@ git rev-parse HEAD
|
|
|
70
87
|
| A | 继续执行 | 保持在当前模型中,进入 Step 3 选择工作区隔离和执行方式 |
|
|
71
88
|
| B | 暂停切换模型 | 记录 `build_pause: plan-ready`,本次 `/comet-build` 停止,用户稍后可从 `/comet` 或 `/comet-build` 恢复 |
|
|
72
89
|
|
|
73
|
-
|
|
90
|
+
这是用户决策点。**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确选择**,不得自动继续,也不得把暂停写入 `build_mode`。若当前平台没有结构化提问工具,则在对话中提出同等选项并停止流程,等待用户回复后才能继续。
|
|
74
91
|
|
|
75
92
|
用户选择继续时:
|
|
76
93
|
|
|
@@ -121,17 +138,33 @@ git rev-parse HEAD
|
|
|
121
138
|
- 任务数 ≤ 2 且无跨模块依赖 → 推荐 B
|
|
122
139
|
- 来自 hotfix 路径 → 推荐 B
|
|
123
140
|
|
|
124
|
-
|
|
141
|
+
这是用户决策点。**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确选择隔离方式、执行方式和 TDD 模式**,不得根据推荐规则自行选择 `branch` 或 `worktree`,也不得根据推荐规则自行选择执行方式或 TDD 模式。推荐规则只能用于说明建议,不能替代用户确认。若当前平台没有结构化提问工具,则在对话中提出同等选项并停止流程,等待用户回复后才能继续。
|
|
125
142
|
|
|
126
|
-
用户选择后,更新 `isolation
|
|
143
|
+
用户选择后,更新 `isolation`、执行方式和 TDD 模式相关字段:
|
|
127
144
|
|
|
128
145
|
```bash
|
|
129
146
|
"$COMET_BASH" "$COMET_STATE" set <name> isolation <branch|worktree>
|
|
130
|
-
"$COMET_BASH" "$COMET_STATE" set <name> build_mode <subagent-driven-development|executing-plans|direct>
|
|
131
147
|
```
|
|
132
148
|
|
|
149
|
+
- 若用户选择 `executing-plans`:运行 `"$COMET_BASH" "$COMET_STATE" set <name> subagent_dispatch null`,再运行 `"$COMET_BASH" "$COMET_STATE" set <name> build_mode executing-plans`
|
|
150
|
+
- 若用户选择 `subagent-driven-development`:先确认当前平台存在可调用的真实后台 subagent / Task / multi-agent 调度能力;确认后先运行 `"$COMET_BASH" "$COMET_STATE" set <name> subagent_dispatch confirmed`,再运行 `"$COMET_BASH" "$COMET_STATE" set <name> build_mode subagent-driven-development`
|
|
151
|
+
- 若无法确认真实后台调度能力,不得写入 `build_mode: subagent-driven-development`;必须暂停等待用户改选 `executing-plans`
|
|
152
|
+
|
|
153
|
+
**TDD 模式**:
|
|
154
|
+
|
|
155
|
+
| 选项 | 含义 | 适用场景 |
|
|
156
|
+
|------|------|---------|
|
|
157
|
+
| `tdd` | 每个任务先写失败测试再写实现 | 推荐。变更涉及业务逻辑、新功能、API |
|
|
158
|
+
| `direct` | 直接实现,不强制 TDD 流程 | 变更不需要测试覆盖,或用户选择跳过测试直接写代码。hotfix/tweak preset 默认使用 `direct` |
|
|
159
|
+
|
|
160
|
+
运行 `"$COMET_BASH" "$COMET_STATE" set <name> tdd_mode <tdd|direct>`
|
|
161
|
+
|
|
133
162
|
`isolation` 是脚本级硬约束。full workflow 初始化时可以为 `null`,但只允许存在到本步骤之前。若保持 `null`,`build → verify` 的 guard 和 `comet-state transition build-complete` 都会失败。
|
|
134
163
|
|
|
164
|
+
`subagent_dispatch` 是脚本级硬约束。`build_mode: subagent-driven-development` 离开 build 阶段前必须同时满足 `subagent_dispatch: confirmed`,否则 `comet-guard.sh build --apply` 和 `comet-state transition build-complete` 都会失败。
|
|
165
|
+
|
|
166
|
+
`tdd_mode` 是脚本级硬约束。full workflow 离开 build 阶段前 `tdd_mode` 必须已选择为 `tdd` 或 `direct`,否则 `comet-guard.sh build --apply` 和 `comet-state transition build-complete` 都会失败。
|
|
167
|
+
|
|
135
168
|
`build_mode` 默认仅 hotfix/tweak preset 使用 `direct`。full workflow 不得默认使用 `direct`。只有用户明确要求跳过计划执行技能,且你已记录显式 override 时,才允许:
|
|
136
169
|
|
|
137
170
|
```bash
|
|
@@ -143,20 +176,67 @@ git rev-parse HEAD
|
|
|
143
176
|
|
|
144
177
|
**执行隔离**:
|
|
145
178
|
|
|
146
|
-
- **branch
|
|
179
|
+
- **branch**:根据 workflow 类型和当前日期推荐分支名,然后让用户确认或输入自定义名称。这是用户决策点——**必须使用当前平台可用的用户输入/确认机制暂停并等待用户明确确认或覆盖分支名**,不得跳过此步骤直接创建分支。
|
|
180
|
+
|
|
181
|
+
分支命名规范:
|
|
182
|
+
- 读取 `.comet.yaml` 的 `workflow` 字段确定前缀
|
|
183
|
+
- `workflow: full` → 推荐 `feature/YYYYMMDD/<change-name>`
|
|
184
|
+
- `workflow: hotfix` → 推荐 `hotfix/YYYYMMDD/<change-name>`
|
|
185
|
+
- `workflow: tweak` → 推荐 `tweak/YYYYMMDD/<change-name>`
|
|
186
|
+
- 日期取运行时 `date +%Y%m%d` 的结果
|
|
187
|
+
|
|
188
|
+
示例:如果 change 名称为 `fix-login-bug`,今天是 2026-06-09,则推荐 `feature/20260609/fix-login-bug`
|
|
189
|
+
|
|
190
|
+
用户确认或提供自定义分支名后,执行 `git checkout -b <branch-name>`,后续工作在新分支上进行。
|
|
191
|
+
|
|
147
192
|
- **worktree**:必须使用 Skill 工具加载 Superpowers `using-git-worktrees` 技能创建隔离工作区。禁止用普通 shell 命令或原生工具绕过该技能;如该技能不可用,停止流程并提示安装或启用 Superpowers 技能。
|
|
148
193
|
|
|
149
|
-
创建隔离后,确认计划文件可访问(分支方式天然可访问;worktree
|
|
194
|
+
创建隔离后,确认计划文件可访问(分支方式天然可访问;worktree 方式需确认计划已提交)。若 worktree 模式下计划文件尚未提交,先提交计划文件再创建 worktree:
|
|
150
195
|
|
|
151
|
-
|
|
196
|
+
```bash
|
|
197
|
+
git add docs/superpowers/plans/YYYY-MM-DD-feature.md
|
|
198
|
+
git commit -m "chore: add implementation plan"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**执行计划**:必须按 `build_mode` 的真实运行位置处理。
|
|
152
202
|
|
|
153
|
-
|
|
203
|
+
- `build_mode: executing-plans`:**立即执行:** 使用 Skill 工具加载 Superpowers `executing-plans` 技能。禁止跳过此步骤。若该技能不可用,停止流程并提示安装或启用对应技能,不要用普通对话替代该步骤。技能加载后,ARGUMENTS 必须包含与 Step 1 相同的 Language 约束:`Language: 使用触发本次工作流的用户请求语言输出`。按计划执行。
|
|
204
|
+
- `build_mode: subagent-driven-development`:主窗口只负责协调,不得把 `subagent-driven-development` 当作当前主窗口的执行技能直接运行;必须使用已确认的当前平台真实后台 subagent / Task / multi-agent 调度能力,把下一个未完成任务派发到后台 subagent。派发每个 subagent 时,必须在 prompt 中明确要求:技能加载后 ARGUMENTS 必须包含与 Step 1 相同的 Language 约束:`Language: 使用触发本次工作流的用户请求语言输出`;任务完成并通过验证后,立即勾选 `docs/superpowers/plans/<plan-file>.md` 中对应的计划任务;若该计划任务映射到 `openspec/changes/<name>/tasks.md` 中的任务,也同步将该 OpenSpec 任务从 `- [ ]` 改为 `- [x]`;若 plan 新增了 OpenSpec 中没有的一步,只勾选 plan 中对应任务即可。不得只更新内置 Todo 或对话内 checklist。后台 subagent 需要自行加载 Superpowers `subagent-driven-development` 相关执行流程,并按其指引完成实现、检查和提交。
|
|
205
|
+
- 如果当前平台没有真实后台 subagent / Task / multi-agent 调度能力,必须暂停并等待用户选择改用主窗口执行。用户选择改用主窗口执行后,必须先运行 `"$COMET_BASH" "$COMET_STATE" set <name> build_mode executing-plans`,再按 `build_mode: executing-plans` 分支加载 Superpowers `executing-plans` 技能。用户未明确选择前,不得继续执行任务。
|
|
154
206
|
|
|
155
|
-
|
|
207
|
+
执行开始后,按所选分支完成:
|
|
156
208
|
- 按计划执行任务
|
|
157
|
-
- 完成 tasks.md
|
|
209
|
+
- 完成 Superpowers plan 对应任务勾选;若任务映射到 OpenSpec tasks.md,也勾选对应 OpenSpec 任务(`- [ ]` → `- [x]`)
|
|
158
210
|
- 每个任务完成后提交代码
|
|
159
211
|
|
|
212
|
+
**TDD 模式执行约束**:
|
|
213
|
+
|
|
214
|
+
若 `tdd_mode: tdd`:
|
|
215
|
+
- `build_mode: executing-plans`:加载执行技能后、执行第一个任务前,**立即执行:** 使用 Skill 工具加载 Superpowers `test-driven-development` 技能一次。禁止跳过此步骤。技能加载后,从第一个未勾选任务开始,对每个任务遵循已加载的 TDD Red-Green-Refactor 循环执行。不得跳过失败测试验证阶段。后续任务不再重新加载该技能,直接遵循已加载流程。若上下文压缩后恢复,重新运行本步骤加载 TDD 技能一次,然后从第一个未勾选任务继续。
|
|
216
|
+
- `build_mode: subagent-driven-development`:派发每个 subagent 时,必须在 prompt 中注入 TDD 硬约束:**"You MUST follow TDD: for each task, write a failing test first, watch it fail, then write minimal code to pass. No production code without a failing test first."**。同一个 prompt 还必须包含上述 OpenSpec tasks.md 与 Superpowers plan 持久化勾选要求。不得依赖 implementer-prompt.md 的条件触发,必须在派发 prompt 中显式写出。
|
|
217
|
+
|
|
218
|
+
若 `tdd_mode: direct`:按正常流程执行,不强制 TDD。
|
|
219
|
+
|
|
220
|
+
**`executing-plans` review gate**:
|
|
221
|
+
|
|
222
|
+
当 `build_mode` 为 `executing-plans` 时,在所有计划任务完成后、运行 build → verify 阶段守卫前,必须使用 Skill 工具加载 Superpowers `requesting-code-review` 技能并至少请求一次代码审查。
|
|
223
|
+
|
|
224
|
+
要求:
|
|
225
|
+
- `requesting-code-review` 技能必须在 `"$COMET_BASH" "$COMET_GUARD" <change-name> build --apply` 之前加载
|
|
226
|
+
- 若 `requesting-code-review` 技能不可用,跳过 review gate 但必须在 tasks.md 中记录 `<!-- review skipped: skill unavailable -->`,并继续 guard 流转
|
|
227
|
+
- CRITICAL review 发现(安全漏洞、数据丢失风险、构建/测试失败)必须先修复,不得带入 verify
|
|
228
|
+
- 非 CRITICAL review 发现如选择接受,必须在 tasks.md、commit body、验证报告草稿或其他持久产物中记录接受原因和影响范围
|
|
229
|
+
|
|
230
|
+
### 3b. 执行中异常调试(Debug Gate)
|
|
231
|
+
|
|
232
|
+
执行任务期间,只要运行程序、测试、构建或手动验证时出现崩溃、异常行为、测试失败或构建失败,必须使用 Skill 工具加载 Superpowers `systematic-debugging` 技能。在完成根因调查前,不得提出或实施源码修复。
|
|
233
|
+
|
|
234
|
+
按 `systematic-debugging` 的四阶段流程处理:
|
|
235
|
+
- 先复现并定位根因,读取完整错误、检查近期变更、追踪数据流
|
|
236
|
+
- 若根因指向源码 bug,先补充能复现该崩溃/异常的最小失败测试,再修改源码
|
|
237
|
+
- 修复后运行该失败测试、相关测试和项目构建/验证命令,确认全部通过
|
|
238
|
+
- 将测试、源码修复和 tasks.md 勾选保留在当前 change 内;不得通过另起一个“写测试用例”的 change 来替代当前 change 的验证闭环
|
|
239
|
+
|
|
160
240
|
### 4. Spec 增量更新
|
|
161
241
|
|
|
162
242
|
实施过程中发现初版 spec 不完整时,按变更规模分级处理:
|
|
@@ -164,13 +244,17 @@ git rev-parse HEAD
|
|
|
164
244
|
| 规模 | 触发条件 | 做法 |
|
|
165
245
|
|------|---------|------|
|
|
166
246
|
| 小 | 遗漏验收场景、边界条件 | 直接编辑 delta spec + design.md,追加 tasks.md 任务 |
|
|
167
|
-
| 中 | 接口变更、新增组件、数据流变化 |
|
|
168
|
-
| 大 | 全新 capability 需求 |
|
|
247
|
+
| 中 | 接口变更、新增组件、数据流变化 | **使用当前平台可用的用户输入/确认机制暂停并等待用户确认后**,必须使用 Skill 工具加载 Superpowers `brainstorming` 更新 Design Doc + delta spec |
|
|
248
|
+
| 大 | 全新 capability 需求 | **必须使用当前平台可用的用户输入/确认机制暂停并等待用户确认拆分**;用户确认后,通过 `/comet-open` 创建独立 change |
|
|
169
249
|
|
|
170
|
-
**50% 阈值判定**:以 tasks.md
|
|
250
|
+
**50% 阈值判定**:以 tasks.md 初始任务总数为基准,若新增任务数超过该总数的一半,视为超出原计划范围,**必须使用当前平台可用的用户输入/确认机制暂停并等待用户决定是否拆分为新 change**。若当前平台没有结构化提问工具,则在对话中提出拆分选项并停止流程,等待用户回复后才能继续。
|
|
171
251
|
|
|
172
252
|
创建独立 change 时必须调用 `/comet-open`,不得直接调用 `/opsx:new`。`/comet-open` 会同时创建 OpenSpec 产物和 `.comet.yaml`,避免新 change 脱离 Comet 状态机。
|
|
173
253
|
|
|
254
|
+
**用户选择必须包含**:
|
|
255
|
+
- 「拆分为新 change」— 通过 `/comet-open` 创建独立 change
|
|
256
|
+
- 「继续在当前 change 内完成」— 记录范围扩展决策,更新 tasks.md 和 delta spec 后继续
|
|
257
|
+
|
|
174
258
|
**原则**:
|
|
175
259
|
- delta spec 是活文档,本阶段期间随时可修改
|
|
176
260
|
- 每次更新应提交,commit message 说明变更原因
|
|
@@ -181,7 +265,7 @@ git rev-parse HEAD
|
|
|
181
265
|
|
|
182
266
|
Build 是最长阶段,可能跨越大量任务。为支持上下文压缩后断点恢复:
|
|
183
267
|
|
|
184
|
-
- **每完成一个 task**:立即勾选 tasks.md
|
|
268
|
+
- **每完成一个 task**:立即勾选 Superpowers plan 中的对应任务;若任务映射到 OpenSpec tasks.md,也勾选对应 OpenSpec 任务;然后提交代码,确保 `.comet.yaml` 和文件状态持久化。用 `grep -c '\- \[ \]' tasks.md` 检查剩余未勾选数,无需重新读取整个文件
|
|
185
269
|
- **上下文压缩后恢复**:先运行 `"$COMET_BASH" "$COMET_STATE" check <change-name> build --recover`,脚本输出结构化恢复上下文(isolation/build_mode 状态、plan 路径、任务完成进度、恢复动作)。根据 Recovery action 决定下一步。
|
|
186
270
|
- **用户手动修改恢复**:按 `comet/reference/dirty-worktree.md` 协议处理未提交改动。该协议定义了检查步骤、归因分类和禁令。build 阶段的特殊处理:
|
|
187
271
|
1. 归因后,若 diff 暗示计划或 spec 已变化,按 Step 4「Spec 增量更新」分级处理
|
|
@@ -193,8 +277,10 @@ Build 是最长阶段,可能跨越大量任务。为支持上下文压缩后
|
|
|
193
277
|
- 代码已提交
|
|
194
278
|
- 已显式运行项目对应的构建/测试命令并通过(不要只依赖 guard 自动猜测)
|
|
195
279
|
- `isolation` 已写为 `branch` 或 `worktree`
|
|
196
|
-
- `build_mode` 已写为 `subagent-driven-development`、`executing-plans` 或带显式 override 的 `direct`
|
|
197
|
-
-
|
|
280
|
+
- `build_mode` 已写为 `subagent-driven-development`、`executing-plans` 或带显式 override 的 `direct`;若为 `subagent-driven-development`,`subagent_dispatch` 必须为 `confirmed`
|
|
281
|
+
- `tdd_mode` 已写为 `tdd` 或 `direct`
|
|
282
|
+
- 若 `build_mode` 为 `executing-plans`,已使用 Skill 工具加载 Superpowers `requesting-code-review` 技能并至少请求一次代码审查,且 CRITICAL review 发现已修复或非 CRITICAL review 发现已记录接受理由
|
|
283
|
+
- **阶段守卫**:运行 `"$COMET_BASH" "$COMET_GUARD" <change-name> build --apply`,全部 PASS 后由守卫推进到 `phase: verify`(此步骤更新 `phase` 字段,与 `auto_transition` 无关)
|
|
198
284
|
|
|
199
285
|
Guard 会优先读取项目配置中的命令:
|
|
200
286
|
|
|
@@ -206,7 +292,7 @@ verify_command: <verify command>
|
|
|
206
292
|
配置位置可为 change 的 `.comet.yaml`,也可为仓库根目录的 `.comet.yaml` / `comet.yaml` / `.comet.yml` / `comet.yml`。
|
|
207
293
|
未配置时才回退到 `npm run build`、Maven 或 Cargo 的默认探测。构建失败时 guard 会打印失败命令输出,作为排查证据。
|
|
208
294
|
|
|
209
|
-
|
|
295
|
+
退出前运行阶段守卫推进 phase(此步骤与 `auto_transition` 无关):
|
|
210
296
|
|
|
211
297
|
```bash
|
|
212
298
|
"$COMET_BASH" "$COMET_GUARD" <change-name> build --apply
|
|
@@ -214,8 +300,17 @@ verify_command: <verify command>
|
|
|
214
300
|
|
|
215
301
|
状态文件自动更新为 `phase: verify`、`verify_result: pending`。
|
|
216
302
|
|
|
217
|
-
##
|
|
303
|
+
## 自动衔接下一阶段
|
|
218
304
|
|
|
219
|
-
|
|
305
|
+
> **术语区分**:上面的「阶段守卫推进」由 guard `--apply` 完成,更新 `.comet.yaml` 的 `phase` 字段——这一步**始终发生**,与 `auto_transition` 无关。本节的「自动衔接」只决定**是否自动调用下一个 skill**,由 `auto_transition` 控制。
|
|
306
|
+
|
|
307
|
+
退出条件满足且阶段守卫推进 phase 后,运行:
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
"$COMET_BASH" "$COMET_STATE" next <change-name>
|
|
311
|
+
```
|
|
220
312
|
|
|
221
|
-
|
|
313
|
+
脚本根据 `phase`、`workflow`、`auto_transition` 输出确定性的下一步:
|
|
314
|
+
- `NEXT: auto` → 调用 `SKILL` 指向的 skill 进入下一阶段
|
|
315
|
+
- `NEXT: manual` → 不要调用下一 skill,按 `HINT` 提示用户手动运行 `/<SKILL>`
|
|
316
|
+
- `NEXT: done` → 流程已完成,无需继续
|