Files
git-learn/openspec/changes/sm-flow-execution-hardening/design.md
T

5.1 KiB

Context

这次 change 处理的是 sm-flow 的执行稳定性,而不是流程理念重构。已有文档已经定义了阶段顺序、Phase 2.9、接口影响、实现期冲突分类和 devflow 索引,但真实使用表明,规则如果没有变成“阶段切换前必须显式满足的条件”,就会在执行中被代理惯性绕开。

受影响的主要文件位于:

  • .agents/skills/sm-flow/SKILL.md
  • .agents/skills/sm-flow/references/phase-contracts.md
  • .agents/skills/sm-flow/references/fallbacks.md
  • .agents/skills/sm-flow/references/templates.md
  • skill-workbench/docs/sm-flow/workflow.md

这次改造的规则落点也需要明确分层:

  • SKILL.md 承载短而硬的总规则和 gate。
  • phase-contracts.md 承载逐阶段进入、动作、退出和 checkpoint。
  • fallbacks.md 承载 capability 不可用时的降级协议与记录要求。
  • templates.md 只在确有必要时提供轻量字段提示,不承载主逻辑。
  • workflow.md 只解释设计与演进背景,不重复执行细则或承担执行真理源职责。

Design

1. Phase checkpoints as executable gates

为每个关键阶段引入最小 checkpoint,要求代理在阶段结束时显式汇报:

  1. 当前阶段名称。
  2. 本阶段调用的 skill / 本地 SKILL.md / fallback。
  3. 本阶段产物。
  4. 已满足的退出条件。
  5. 未满足但仍阻塞下一阶段的问题。

这个 checkpoint 不是替代现有 phase-contracts.md,而是把长契约压缩成执行中更容易遵守的门禁动作。 本次设计只要求这些 checkpoint 具备明确字段和动作,不要求新增统一模板或统一展示格式。

2. Skill/fallback declaration becomes a completion condition

现有规则要求进入某些阶段时说明 skill 或 fallback,但执行中容易被忽略。硬化后:

  • 若本阶段未显式声明使用的能力来源,则阶段不得视为完成。
  • 若发生 fallback,必须同时记录:目标 skill、不可用原因、采用的 fallback 协议、降级风险。

3. Phase 2 uses a question pool

现有规则强调 one-at-a-time,但没有约束问题覆盖面。硬化后,Phase 2 先生成问题池,再逐个消费:

  • 问题池至少覆盖术语、边界、验收。
  • 对复杂任务,可继续覆盖权限、上下游触发、前端返回结构、兼容性、生命周期等。
  • user-interview 问题仍然一次只问一个,但问题池必须先暴露计划覆盖面。

这样既保留 human-in-the-loop 约束,也降低“只问了几个问题就误以为够了”的风险。

4. Cross-artifact alignment becomes explicit

Phase 1.5 和 2.9 需要明确检查的对齐关系:

  • brief/prd -> proposal
  • proposal -> design
  • design -> specs
  • specs -> tasks
  • evidence/decisions -> OpenSpec 回写状态

如果任何链路出现信息缺失、术语不一致、能力未落到 spec、spec 未落到 task,都必须在进入下一阶段前暴露。

5. Micro mode preserves gates

micro 继续允许合并产物,但明确禁止跳过:

  • Phase 0.5 最小上下文检查
  • Phase 2 最小澄清
  • Phase 2.9 commit gate
  • Phase 4 轻量归档

这次 change 不增加 micro 的文档负担,而是把“不能跳哪些 gate”写得更硬。

6. Devflow updates happen during the flow

devflow 不再被视为“最后补文档”。设计上要求:

  • Phase 0 写入口摘要到 brief.md
  • Phase 2 写 evidence / decisions
  • Phase 2.5 写架构审计摘要
  • Phase 2.9 写 commit gate 结果
  • Phase 4 只做汇总和归档收尾

这样 Phase 4 变成收敛,而不是返工。

7. Rule placement avoids duplication drift

本次 change 的一个隐含架构约束是避免同一规则在多个层面双份维护:

  • 如果某条规则属于执行门禁,应优先落在 SKILL.md 或 phase-contracts.md。
  • 如果某条规则属于 capability 降级,应优先落在 fallbacks.md。
  • workflow.md 可以解释为什么这样设计,但不应再逐条复制执行细则。
  • templates.md 保持可选和轻量,否则会把“协议硬化”扩大成“格式标准化”。

这能降低 v3.1 之后再次出现“规则已经写了,但代理仍然执行漂移”的维护风险。

Risks / Trade-offs

  • 更强的 checkpoint 会增加少量流程显式成本,但可以换来更低的遗漏率。
  • 问题池可能让 Phase 2 看起来更正式,但如果不先暴露覆盖面,one-at-a-time 容易退化成随机追问。
  • 更硬的 cross-artifact 检查会让 change 前期更慢,但比在 apply 前后由用户兜底更可靠。
  • 如果把同一规则同时写进协议、模板和案例说明,后续维护面会再次变大,因此这轮需要严格控制规则落点。

Validation

需要通过文档与 OpenSpec 产物验证以下结果:

  • sm-flow 明确要求阶段 checkpoint。
  • micro 明确禁止跳过关键 gate。
  • Phase 2 明确先形成问题池,再一次一问推进。
  • Phase 1.5 / 2.9 明确 cross-artifact 检查链路。
  • devflow 的过程内同步更新要求被写入协议。
  • 不要求代理额外输出统一格式的阶段汇报示例。