# SM Flow Execution Hardening PRD ## 问题陈述 `sm-flow` 已经定义了较完整的阶段、规则和 reference 文件,但在真实项目执行中,代理仍然会把它当成“有帮助的流程建议”,而不是“必须逐阶段满足的执行协议”。结果是: - Phase 0 没有形成入口摘要和已知影响区域。 - Phase 0.5 没有及时初始化和维护 `devflow/` 项目档案。 - Phase 1 没有显式声明 skill 或 fallback,Draft / Committed OpenSpec 的边界不稳定。 - Phase 1.5 被跳过,导致 proposal / design / research / specs / tasks 之间的一致性缺口直到用户 review 才暴露。 - Phase 2 虽然收集了证据,但没有以结构化问题池和 one-at-a-time 的方式稳定执行。 - Phase 2.5 被跳过,架构链路和接口影响没有提前暴露。 - Phase 2.9 缺少强制自检,无法可靠发现 cross-artifact 遗漏。 这说明当前痛点不是缺少理念,而是缺少“执行时自检”和“阶段切换门禁”的产品化机制。 ## 解决方案 为 `sm-flow` 增加一轮“执行硬化”需求,目标是让代理在实际使用中更难偏离阶段协议。重点不是新增更多解释,而是把现有规则压缩成更可执行、更可检查、更可暴露偏差的约束,例如: - 每个阶段结束必须有简短 checklist / checkpoint。 - 未显式声明 skill 或 fallback 视为该阶段未完成。 - Phase 2 先生成问题池,再按 one-at-a-time 消费。 - Phase 1.5 / 2.9 引入更明确的 cross-artifact diff 检查。 - `micro` 明确只能压缩产物,不得跳过关键 gate。 - devflow 产物默认在过程内同步更新,而不是拖到 Phase 4 补写。 ## 用户故事 1. 作为使用 `sm-flow` 的开发者,我希望代理在进入下一阶段前自动暴露“已满足/未满足”的条件,这样我能尽早发现流程偏差。 2. 作为使用 `sm-flow` 的开发者,我希望 `micro` 模式仍然保留关键 gate,这样小改动不会因为“看起来简单”而漏掉重要检查。 3. 作为使用 `sm-flow` 的开发者,我希望 Phase 2 先形成问题池,再逐个提问,这样既符合 human-in-the-loop 约束,也能避免只问了少数问题就错误收尾。 4. 作为使用 `sm-flow` 的开发者,我希望 Phase 1.5 和 2.9 能可靠检查 proposal / design / specs / tasks / evidence / decisions 的一致性,这样问题能在 apply 前暴露,而不是等我 review。 ## 实现决策 - 决策:本轮先把“执行硬化”提炼成需求,而不是直接进入文档改造。 - 原因:当前已掌握足够多的真实使用反馈,需要先明确问题边界和验收标准,再决定是否开新 OpenSpec change。 - 影响:下一步可以更顺畅地进入 `sm-flow` 的正式改造,而不是边讨论边补规则。 - 决策:把重点放在 phase gate、自检、问题池和一致性检查,而不是继续扩展 `sm-flow` 的理念层说明。 - 原因:复盘显示失真主要来自执行习惯和缺少检查,而不是原则方向错误。 - 影响:后续改动应优先落在 `SKILL.md`、`phase-contracts.md` 和模板/检查清单,而不是重写 workflow 长文。 ## 测试决策 - 好测试应该通过审查 `sm-flow` 协议文本和执行产物,验证代理是否被强制带到正确的阶段检查点。 - 必须覆盖: - `micro` 模式下 gate 不可跳过 - Phase 2 问题池与 one-at-a-time 提问 - skill/fallback 显式声明要求 - Phase 1.5 / 2.9 cross-artifact 检查 - devflow 过程内同步更新 - 不测试: - 业务代码实现结果 - OpenSpec CLI 本身的功能正确性 ## 非目标 - 不在本轮定义新的业务流程。 - 不在本轮替换 OpenSpec-first / Devflow-assisted 主设计。 - 不要求为所有小改动增加更重的文档负担。 ## 补充说明 - 这轮需求直接来源于一次真实项目执行复盘,因此它比理念讨论更贴近代理实际失真模式。 - 如果后续进入 OpenSpec,建议 change 名可沿用 `sm-flow-execution-hardening`。