Based on real execution review (lookup-knowledge-integration), discovered that constraints are "soft" - rules are clear but lack enforcement mechanism. Core problem: Agent can skip stages despite explicit rules saying "must not skip" Changes: 1. Commit phase: add verifiable checkpoint - File completeness check: proposal ≥50 words, design ≥1 data structure, specs ≥3 requirements, tasks ≥5 items - Consistency check: proposal concepts → design mapping, design decisions → tasks implementation - Gate file: create .committed after passing all checks 2. Apply phase: add pre-gate check - Hard constraint: check .committed file existence - If missing: report, list gaps, ask user to fix or explicitly skip - Block implementation based on incomplete OpenSpec 3. Archive phase: add mandatory execution order - 5-step checklist: devflow files → index → .archive-ready → report → archive - Self-check: verify Step 1-3 before Step 4 - Prevent "handoff first, devflow forgotten" issue New gate files: - .committed: created by commit phase, checked by apply phase - .archive-ready: created by archive Step 3 Expected impact: - Commit skip rate: -100% (explicit checklist prevents fuzzy pass) - Apply on incomplete OpenSpec: -100% (gate blocks) - Archive devflow omission: -100% (mandatory order) Design principles: - Verifiability: "executable state" → "≥50 words + ≥1 structure + ≥3 requirements" - Gate files: soft judgment → file existence check - Mandatory order: advisory "should do" → 5-step checklist "must do" Complexity: +80 lines (phase-contracts.md +40, archive-rules.md +40) Approach: turn soft constraints into hard checks, no new stages Relation to v4.1: - v4.1: solve "insufficient research causes rework" (quality issue) - v4.2: solve "lack of enforcement causes stage skipping" (process issue) Docs: - phase-contracts.md: enhanced commit + apply phases - archive-rules.md: added mandatory execution order at top - workflow.md: added v4.2 evolution chapter - phase-contracts-v4.2-changelog.md: detailed change log - sm-flow-optimization-suggestions.md: source review
9.3 KiB
SM Flow Phase Contracts v4.2 更新日志
更新日期: 2026-06-24
更新原因: 基于"lookup-knowledge-integration"执行复盘
更新方案: 增强执行机制,引入可验证 checkpoint
更新概览
核心目标: 解决"约束是软性的"问题,增加可执行的检查机制
更新范围:
- ✅ commit 阶段:增加文件完整性和一致性检查清单
- ✅ apply 阶段:增加前置门控(.committed 文件检查)
- ✅ archive 阶段:增加强制执行顺序(5 步 checklist)
文本增量: +80 行
核心问题诊断
问题根源:约束是"软性"的,缺少执行机制
| 问题 | 现象 | 影响 | 根本原因 |
|---|---|---|---|
| Commit 检查缺标准 | 不知道如何判断"通过 commit 检查" | agent 跳过 commit 直接进入 apply | 只说"检查是否可执行",没说具体检查什么 |
| Apply 缺前置门控 | 用户说"修复"就直接开始实现 | 可能基于不完整的 OpenSpec | 进入条件是软性描述,没有文件检查 |
| Archive 无 Checklist | 先创建 handoff,忘记 devflow | 归档流程不完整 | 没有强制执行顺序 |
详细修改
1. Commit 阶段 — 增加可验证 Checkpoint
修改位置: phase-contracts.md 第 208-221 行
新增内容:
文件完整性检查(必须全部通过)
proposal.md存在,包含问题描述(至少 50 字)、建议方案(至少 100 字)、范围/非目标design.md存在,包含架构设计(文字或图)、数据结构定义(至少 1 个)、关键决策记录(至少 2 条)specs/目录存在,至少 1 个 functional-spec.md 包含 ≥3 个 requirementtasks.md存在,包含 ≥5 个可执行子任务,每个任务有验收标准
一致性检查(必须通过)
- proposal 中的核心概念在 design 中有对应设计
- design 中的关键决策在 tasks 中有对应实现任务
- tasks 的验收标准可验证(不是"正确实现""完成功能"这类模糊描述)
标记文件
检查通过后,创建 openspec/changes/{slug}/.committed 文件标记为 Committed OpenSpec
目的:
- 提供明确的"可执行状态"判断标准
- 强制 agent 完成所有检查项
- 通过
.committed文件提供下游门控依据
2. Apply 阶段 — 增加前置门控检查
修改位置: phase-contracts.md 第 233-244 行
新增内容:
前置门控检查(硬约束)
- 检查
openspec/changes/{slug}/.committed文件是否存在 - 如不存在,执行以下流程:
- 汇报:Draft OpenSpec 未通过 commit 检查
- 列出缺失的 checkpoint 项(文件完整性、一致性检查)
- 询问用户:是否补做 commit 检查,或明确跳过(需显式确认)
目的:
- 强制 apply 依赖 Committed OpenSpec
- 阻止基于不完整 OpenSpec 的实现
- 提供补救路径(补做 commit 或显式跳过)
3. Archive 阶段 — 增加强制执行顺序
修改位置: archive-rules.md 第 5-41 行
新增章节: Archive 强制执行顺序
Step 1: 创建 devflow 档案(必需)
- 创建
brief.md(从 proposal.md 提取) - 创建
evidence.md(从 decisions.md 提取) - 创建
decisions.md(整理为最终版) - 创建
acceptance.md(记录验证情况)
Step 2: 更新索引(必需)
- 在
devflow/index.md末尾追加或更新一行
Step 3: 标记 OpenSpec(必需)
- 创建
openspec/changes/{slug}/.archive-ready文件
Step 4: 向用户汇报(必需)
- 列出创建的 devflow 档案文件路径(验证文件实际存在)
- 汇报验证情况(按类型分类)
- 列出剩余风险
- 询问:是否现在归档 OpenSpec?
Step 5: 用户确认后执行 OpenSpec Archive(可选)
- 调用
openspec-archive-change - 记录 archive 结果
自检: 在执行 Step 4 前,检查 Step 1-3 是否都完成。
目的:
- 强制 devflow 档案优先(不再先创建 handoff)
- 提供明确的执行顺序,避免遗漏
- 通过
.archive-ready文件标记完成状态
新增门控文件
| 文件 | 创建时机 | 用途 |
|---|---|---|
.committed |
commit 阶段退出时 | apply 阶段前置门控 |
.archive-ready |
archive Step 3 | 标记归档准备就绪 |
预期效果
量化指标
| 指标 | v4.1 | v4.2 目标 | 改善 |
|---|---|---|---|
| Commit 阶段跳过率 | 高(无明确标准) | 0%(有 checklist) | -100% |
| Apply 基于不完整 OpenSpec | 可能发生 | 0%(门控阻止) | -100% |
| Archive 遗漏 devflow | 可能发生 | 0%(强制顺序) | -100% |
质量提升
Commit 阶段:
- ✅ 明确什么叫"可执行状态"
- ✅ agent 无法跳过检查清单
- ✅ 提供
.committed文件作为凭证
Apply 阶段:
- ✅ 强制检查
.committed文件存在 - ✅ 阻止基于不完整 OpenSpec 的实现
- ✅ 提供补救路径
Archive 阶段:
- ✅ 强制 devflow 优先(不再先创建 handoff)
- ✅ 5 步 checklist 避免遗漏
- ✅ 自检机制确保完整性
与 v4.1 的关系
| 版本 | 核心改进 | 解决问题 |
|---|---|---|
| v4.1 | Pre-apply Research Checkpoint | apply 阶段前置调研不足,导致返工 |
| v4.2 | 可验证 Checkpoint + 门控文件 | 约束是软性的,agent 容易跳过阶段 |
互补关系:
- v4.1 解决"调研不充分导致返工"
- v4.2 解决"缺少执行机制导致跳过阶段"
设计原则
1. 可验证性
Before: "检查 OpenSpec 是否可执行"(模糊)
After: "proposal ≥50字、design ≥1个数据结构、specs ≥3个 requirement"(具体)
2. 门控文件
Before: 软性描述"已通过 commit"
After: 硬性检查 .committed 文件存在
3. 强制顺序
Before: 建议性"应该先 devflow 后 handoff"
After: 5 步 checklist,不得跳过或重排
复杂度评估
本次修改复杂度: 低-中等
- 文本增量: +80 行(phase-contracts.md +40 行,archive-rules.md +40 行)
- 概念增加: 2 个门控文件(.committed, .archive-ready)
- 规则增强: 3 个阶段的检查清单
整体复杂度: 高(但更可靠)
- 总行数: ~700 行 → ~780 行(+11%)
- 门控数: 6 个 → 8 个(+commit 文件完整性 + apply 前置门控)
- 强制清单: +3 个(commit 文件完整性、commit 一致性、archive 5 步)
权衡:
- ✅ 收益: 彻底解决"跳过阶段"问题
- ⚠️ 成本: 增加 80 行文本,agent 需检查更多项
适用场景
✅ 所有场景(无例外)
v4.2 的改进是执行机制层面的,不涉及业务逻辑:
- 无论 micro/standard/complex,都需要 commit 检查
- 无论需求大小,都需要 apply 前置门控
- 无论项目规模,都需要 archive 强制顺序
快速模式
快速模式可以简化产物(如 tasks 只需 3 个子任务),但不能跳过门控:
- ✅ 仍需 commit 检查(即使 tasks 数量少)
- ✅ 仍需 apply 前置门控
- ✅ 仍需 archive 强制顺序
实施验证
验证计划
下次完整执行 sm-flow 时,检查:
-
Commit 阶段:
- agent 是否执行了文件完整性检查?
- agent 是否执行了一致性检查?
- agent 是否创建了
.committed文件?
-
Apply 阶段:
- agent 是否检查了
.committed文件存在? - 如不存在,agent 是否汇报并询问用户?
- agent 是否检查了
-
Archive 阶段:
- agent 是否按 5 步顺序执行?
- agent 是否在 Step 4 前自检了 Step 1-3?
- agent 是否创建了
.archive-ready文件?
成功标准
- ✅ 无未经检查的 commit → apply 跳转
- ✅ 无基于不完整 OpenSpec 的实现
- ✅ 无先创建 handoff 后补 devflow 的情况
后续演进方向
v5.0 候选特性(观察 3+ 次执行后决定)
如果 v4.2 执行良好,但仍有问题,考虑:
-
流程状态文件
.sm-flow-state- 记录当前阶段、已完成阶段、时间戳
- 支持断点续做
-
更多门控文件
.context-done(context 阶段完成).grill-done(grill 阶段完成).apply-done(apply 阶段完成)
-
违规自检机制
- 每个阶段退出前,自动检查是否违反 6 条硬约束
-
进度可视化
- 每次开始时,汇报进度条(9 个阶段的完成情况)
判断依据: 如果 v4.2 后仍频繁出现跳过阶段,再引入更重的机制。
相关文档
- 执行复盘:
skill-workbench/docs/sm-flow/sm-flow-optimization-suggestions.md - 修改文件:
.agents/skills/sm-flow/references/phase-contracts.md.agents/skills/sm-flow/references/archive-rules.md
总结
v4.2 的核心理念: 把"软性约束"变成"硬性检查"
| 改进点 | Before | After |
|---|---|---|
| Commit 标准 | "可执行状态"(模糊) | 文件完整性 + 一致性检查清单 |
| Apply 门控 | "已通过 commit"(软性) | 检查 .committed 文件存在(硬性) |
| Archive 顺序 | "应该先 devflow"(建议) | 5 步强制顺序 + 自检 |
预期效果: 彻底解决"agent 跳过阶段"问题,提升流程可靠性。