Skip to main content
Classic 通过文件保存状态。Comet 会把 change 的阶段、执行方式和验证结果写入仓库。每次调用 /comet 都会重新读取这些文件,不依赖上一轮对话。你只要知道看哪几个文件、用哪条命令排查,就能判断进度并在中断后继续。项目级配置(.comet/config.yaml)见 Classic 配置 下文用 <classic-root> 表示当前 Classic OpenSpec 根目录:新项目默认是 docs/openspec/,保留旧布局的项目是 openspec/。实际位置由 classic.artifact_layout 决定,详见项目文件结构
不要手工改状态文件:状态守卫按失败关闭(fail closed)工作。也就是说,状态不可信时会直接拒绝执行。手工改字段通常不会“解锁”流程,反而会让任务卡住或走错目录:
  • .comet.yamlphase 只能由守卫或合法转换推进,直接 comet state set <name> phase <value> 会被硬拒绝。
  • .comet/run-state.json 等由 Comet 自动维护(machine-owned)的字段不要手工编辑,也不要手工把已归档 change 标成完成(归档通过 /comet-archive 完成)。
  • 状态异常时先按状态损坏与恢复诊断,不要手工伪造状态。
本页分为三部分,完整字段参考放在文末附录:
  • 如何查看当前进度:状态文件放在哪里、看哪些字段最直接。
  • 哪些设置需要你确认:哪些字段由你在流程节点选择,哪些字段由 Comet 自动维护。
  • 出现异常时如何排查:状态转换历史、Run state 边界和诊断命令入口。

如何查看当前进度

想知道”现在做到哪了、还差什么”,正常路径是重新调用 /comet(见恢复中断的工作);想人工核对时运行 comet status。两者都从磁盘上的状态文件重读,不猜对话历史。

状态存在三类文件

小鱼给 .comet.yaml、run-state 和 config.yaml 三层状态抽屉贴标签

.comet.yaml 告诉你当前在哪,Run state 让运行时恢复,state events 解释状态为什么变了

快速判断进度要看哪些字段

comet status/comet 的恢复路由主要看这几个字段。完整类型和允许值见文末附录。 其中 branch_status: handled 只表示你在归档前已确认立即推送或推送并创建 PR,并在归档完成时写回,它不表示 push 或 PR 已经成功。

多个 change 并行时,先选目标

.comet/current-change.json 保存你当前明确选择的 workflow 和 change,在多个 active change 并行时消除写入歧义。它不替代 .comet.yaml
  • 只有一个 active change 时可以自动归属。
  • 多个 active change 时,进入目标 change 后必须显式 select
  • 目标归档、选择文件损坏或 workflow 不匹配后,守卫会失败关闭(fail closed:宁可拒绝执行也不带错误状态继续)。
  • isolation 已设为 currentbranchworktree 时,change 还会通过 bound_branch 固定到建立隔离的分支。发生漂移时,切回原分支;只有你明确确认当前分支应接管 change 后,才运行 comet state rebind <change-name>
  • 不要手工编辑 current-change.json
选择与判断的完整命令说明见 comet state

哪些设置需要你确认

.comet.yaml 里的字段可以分成两类:一类是你在流程节点要确认的设置;另一类是 Comet 自动维护的运行记录。自动维护字段不要手改(见下一节)。

你会在这些节点做选择

这些字段大多在 change 创建时从项目配置带入默认值。如果你漏选了,守卫会在离开阶段前拦截,并把你带回对应决策点补选;不需要手工改文件。build 阶段缺 isolationbuild_modetdd_mode 的恢复路径见恢复中断的工作

进入下一阶段前会检查什么

这些约束同时存在于 comet guardcomet state transition 两个守卫层:
直接 comet state set <name> phase <value> 会被硬阻止,除非设了 COMET_FORCE_PHASE=1(仅修复用)。阶段推进只能通过 comet guard —apply 或合法 transition。
COMET_FORCE_PHASE 是排障专用开关,正常流程用不上;其它环境变量见 Classic 配置

预设升级只走合法转换

hotfix/tweak 命中升级信号(跨模块、新 API、schema 变更等)时,通过 preset-escalate 转换升级到 full:
  • 一次性设置 workflow/classic_profilefull,回退 phasedesign,清除 design_doc
  • 这是预设→full 升级的唯一合法通道——直接 set phase design 被硬阻止,set classic_profile 是 machine-owned 也被硬阻止。

哪些字段由系统维护

这类字段由 Comet 自动写入,用来记录运行过程。你不需要手动设置,也不要用 comet state set 强改。 常见字段包括:
  • bound_branch:记录这个 change 绑定的分支,用来防止你在错误分支继续执行。
  • verify_failures:连续验证失败计数。verify-fail 自增,verify-passarchive-reopen 重置为 0。达到 3 次后,下一次失败会暂停,由你决定重试上限策略。
  • archive_confirmation:verify 通过后 Comet 写 pending;你在归档前确认后才变 confirmed。真实归档命令要求 confirmed
  • .comet/run-state.jsoncurrentSteppendingartifactstrajectory:Engine 运行时自动写入,不需要手动编写,不要手工编辑。
手工改这类字段后,最常见的结果是状态和实际代码不一致。守卫会拒绝执行,或者把你带回补救流程。归档统一走 /comet-archive,不要手工把 change 标记成已完成。

出现异常时如何排查

先区分两种情形:会话中断、上下文压缩、换设备属于正常中断,直接 /comet 恢复;只有在 .comet.yaml 缺失、格式异常、路由不对或证据文件找不到时,再用 comet statuscomet doctor 诊断。完整流程见状态损坏与恢复

查看状态转换历史

Classic 状态转换共用同一套语义。成功的 comet state transitioncomet guard --apply 和归档更新都会追加一行 JSON 到:
每条记录包含: phase 为什么改变、上一次转换发生了什么,从这里查。可用的 transition 事件与命令见 comet state自动推进机制

区分工作流状态和运行细节

.comet.yaml 保存用户可理解的工作流状态。Engine 运行细节放在 .comet/run-state.json。两者通过 run_id 链接。 详见Skill 与 Engine(进阶)

常用诊断命令

Engine 层细节(currentSteppendingtrajectory)通常只在排障时查看。常用入口是两条命令:
  • comet status——看活跃 change 的 phase、验证结果、声明的证据是否真的在磁盘上(runtime_eval),以及下一步提示。
  • comet doctor——检查安装、环境、Skill 完整性和每个 change 的 .comet.yaml 是否有效。
两条命令的详细用法和常见症状见状态损坏与恢复

附录:.comet.yaml 字段速查(参考)

每个活跃 change 的 .comet.yaml 包含以下字段。上文已经说明哪些由你确认、哪些由系统维护;下表用于快速查值域和含义。

工作流与阶段

执行方式

验证与分支

路径引用

时间与归档

继续阅读

最后修改于 2026年9月4日