跳转到主要内容
实际开发中,需求变化、代码不满意、验证失败都是常态。Comet 的工作流不是只能向前走——它提供了多条合法的修改和回退路径。本页讲清楚每个场景该怎么操作。

先理解:phase 不能手动改

.comet.yamlphase 是 machine-owned。你不能直接 set phase build 回退——会被状态机硬拒绝。回退只能通过合法的 transition 事件,每个事件都有守卫检查。 唯一的手动逃逸口是 COMET_FORCE_PHASE=1(仅修复用,会输出 WARNING):
COMET_FORCE_PHASE=1 node "$COMET_STATE" set <name> phase verify
正常工作流不要用这个,用下面的合法路径。

可用的 transition 事件

事件方向触发场景
open-complete向前 open→designopen 产物完成
design-complete向前 design→buildDesign Doc 完成
build-complete向前 build→verify代码完成
verify-pass向前 verify→archive验证通过
verify-fail回退 verify→build验证不通过,用户选修复
preset-escalate回退 build→designhotfix/tweak 范围扩大
archive-reopen回退 archive→verify归档前想重新验证
archived终态归档完成
三个回退事件是关键。

场景一:build 阶段中途改 spec

delta spec 在 build 阶段是活文档,可以随时修改。按改动规模分三档:
规模触发怎么做改 phase 吗
缺验收场景、边界情况直接编辑 delta spec + 追加 tasks.md,提交时备注原因
接口变化、新组件、数据流变化暂停确认 → 加载 brainstorming 更新 Design Doc + delta spec
全新 capability暂停确认 → /comet-open 开新 change新 change 从 open 开始
小和中档修改不回退 phase——它们在 build 阶段原地处理。只有大档(开新 change)才会另起一个完整的 open→design→build 流程。full workflow 没有 build→design 的直接回退,设计问题在 build 阶段通过 brainstorming 原地更新 Design Doc 解决。

50% 阈值

新增任务超过初始 tasks.md 的 50% 时,视为超出原始计划范围,必须暂停让你选择:拆新 change 或继续在当前 change。

delta spec 什么时候同步到 main spec

永远不在 build 阶段同步。 所有 delta→main spec 合并统一在 archive 阶段完成。build 阶段只编辑 delta spec,不碰 main spec。

场景二:写了代码不满意,想回 build 重来

如果已经在 verify 阶段但想改代码:

verify-fail 回退

验证不通过或你想主动回 build 修复:
node "$COMET_STATE" transition <change-name> verify-fail
保留什么:
字段verify-fail 后
branch_status保留(不重置)
verification_report保留
verify_result改为 fail
phase改为 build
这意味着如果第一次 verify 已经处理过分支,回到 build 修复后重新 verify 时,分支处理可以跳过(直接 set branch_status handled)。

场景三:验证通过但归档前想重新检查

verify 通过后进入 archive,但你在归档前确认时发现还想改:
node "$COMET_STATE" transition <change-name> archive-reopen
保留什么:
字段archive-reopen 后
branch_status保留
verify_result改为 pending
phase改为 verify
verified_at改为 null
然后进入 /comet-verify 重新验证。如果发现问题,再 verify-fail 回 build。

场景四:hotfix/tweak 做到一半发现要深度设计

hotfix 或 tweak 执行过程中命中升级信号,你想升级到 full:
node "$COMET_STATE" transition <change-name> preset-escalate
原子操作:设 workflow/classic_profilefullphase 回退到 design、清空 design_doc。然后加载 comet-design 补 Design Doc,走完整流程。
preset-escalate 只对 hotfix/tweak 有效,full workflow 不能用。这是 preset→full 升级的唯一合法通道

场景五:design 阶段修改了 delta spec

design 阶段 brainstorming 时可能需要写 Spec Patch(补充验收场景、修正描述、加边界用例)。写完后必须重新生成 handoff 更新 hash:
node "$COMET_HANDOFF" <change-name> design --write
否则 guard 在离开 design 时会发现 hash 漂移而 FATAL。

场景六:恢复时发现工作区有未提交改动

每次 /comet 恢复时,如果工作区有未提交改动,按 dirty-worktree 协议处理:
归因处理
属于当前 change折叠进当前任务,不重复编辑
不属于当前 change(用户改动)暂停询问:折叠进当前 change / 拆新 change / 保留不动 / 授权丢弃
来源不确定暂停,报告文件列表和推理,不推进 phase
未提交改动只代表代码事实,不会自动推进 phase 或勾选 tasks.md。必须完成归因、验证、同步文档、过 guard 后才推进。

场景七:build_pause 卡住了

build_pause: plan-ready 是计划生成后的暂停点。恢复时:
状态恢复行为
isolation/build_mode 已设但 build_pause 还在stale pause,自动清除,继续执行
isolation/build_mode 未设回到 plan-ready 恢复点让你选择(不重新生成计划)
plan 文件缺失回到 /comet-build 处理损坏或重新生成
所有任务已完成清除 build_pause,走 guard 到 verify

回退路径速查

你想做的操作到哪个阶段保留
改 delta spec(小改)直接编辑,不回退build(不变)全部
改 Design Doc(中改)暂停 + brainstorming 原地更新build(不变)全部
改代码verify-fail → buildbuildbranch_status, verification_report
归档前重新验证archive-reopenverifybranch_status
hotfix/tweak 升级 fullpreset-escalatedesign无(清空 design_doc)
修复紧急状态COMET_FORCE_PHASE=1 set phase任意无(WARNING)

完整回退关系图

红色(verify/archive)是有回退出口的阶段。绿色(build)是可以原地改 spec 的阶段。

常见问题

不能。phase 是 machine-owned,直接改会被拒绝。用 transition 事件回退,或用 COMET_FORCE_PHASE=1(仅修复,会 WARNING)。
不能直接回。full workflow 的设计问题在 build 阶段通过 brainstorming 原地更新 Design Doc 解决,不回退 phase。只有 hotfix/tweak 能用 preset-escalate 回 design。
没有。verify-fail 保留 branch_status 和 verification_report。这意味着第一次 verify 如果已经处理过分支,修复后重新 verify 不用再做分支处理。
不要。delta→main spec 合并统一在 archive 阶段完成。build 阶段只编辑 delta spec。

下一步