emdash/cuddly-rockets-rhyme-d5jo4 #1
@@ -2,6 +2,49 @@
|
||||
|
||||
archive 阶段的目标是把 OpenSpec 产物、实现结果和过程日志转化为持久、可读、可复用的项目记忆。sm-flow 在 clarify → apply 期间只维护 `decisions.md` 作为过程日志,archive 阶段从中提取完整 devflow 档案。
|
||||
|
||||
## Archive 强制执行顺序
|
||||
|
||||
Archive 阶段必须按以下顺序执行,不得跳过或重排:
|
||||
|
||||
### Step 1: 创建 devflow 档案(必需)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/brief.md`
|
||||
(从 proposal.md 提取:背景、目标、范围、非目标)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/evidence.md`
|
||||
(从 decisions.md 提取:evidence-driven 记录)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/decisions.md`
|
||||
(整理为最终版:关键决策、权衡、风险)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/acceptance.md`
|
||||
(记录:静态验证、脚本验证、浏览器/人工验证、未验证)
|
||||
|
||||
### Step 2: 更新索引(必需)
|
||||
|
||||
- [ ] 在 `devflow/index.md` 末尾追加或更新一行:
|
||||
`| YYYY-MM-DD | slug | 领域 | 关键词 | openspec/changes/xxx | archived |`
|
||||
|
||||
### 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 是否都完成。
|
||||
|
||||
---
|
||||
|
||||
## 目录规则
|
||||
|
||||
项目档案路径:
|
||||
|
||||
@@ -82,6 +82,10 @@
|
||||
- 优先使用 `grill-with-docs`。
|
||||
- 进入 grill 时先建立一个 question pool,并记录到 `decisions.md`:
|
||||
- 默认至少覆盖术语、边界、验收三个维度。
|
||||
- **技术实现维度**(新增):当 proposal 提到参考实现、或涉及项目现有基础设施时,增加技术澄清问题:
|
||||
- 参考实现的具体文件路径是什么?
|
||||
- 项目现有的 [请求结构/MQ/缓存/加密/工具类] 标准是什么?
|
||||
- 有哪些技术点需要先调研或新建?
|
||||
- 如果变更涉及多模块、接口、权限、下游消费者、响应结构或生命周期规则,先把这些维度补进问题池。
|
||||
- 逐项标记每个问题的模式:
|
||||
- `evidence-driven`:问题能通过代码、文档、测试、OpenSpec 或既有 ADR 证明;代理先查证,再向用户汇报证据、结论和是否需要确认。
|
||||
@@ -203,7 +207,16 @@
|
||||
|
||||
**退出条件**:
|
||||
- Draft OpenSpec 已达到可执行状态,并记录为 Committed OpenSpec。
|
||||
- apply 所需的 proposal、design、specs 和 tasks 均存在且一致;commit checkpoint 必须验证文件实际存在于磁盘,如果任一文件不存在,commit 失败,返回 specify 补写。
|
||||
- **文件完整性检查**(必须全部通过):
|
||||
- [ ] `proposal.md` 存在,包含问题描述(至少 50 字)、建议方案(至少 100 字)、范围/非目标
|
||||
- [ ] `design.md` 存在,包含架构设计(文字或图)、数据结构定义(至少 1 个)、关键决策记录(至少 2 条)
|
||||
- [ ] `specs/` 目录存在,至少 1 个 functional-spec.md 包含 ≥3 个 requirement
|
||||
- [ ] `tasks.md` 存在,包含 ≥5 个可执行子任务,每个任务有验收标准
|
||||
- **一致性检查**(必须通过):
|
||||
- [ ] proposal 中的核心概念在 design 中有对应设计
|
||||
- [ ] design 中的关键决策在 tasks 中有对应实现任务
|
||||
- [ ] tasks 的验收标准可验证(不是"正确实现""完成功能"这类模糊描述)
|
||||
- **标记文件**:检查通过后,创建 `openspec/changes/{slug}/.committed` 文件标记为 Committed OpenSpec
|
||||
- 所有 preflight 风险已消除或明确记录为已接受。
|
||||
|
||||
**输出**:
|
||||
@@ -219,6 +232,12 @@
|
||||
|
||||
**进入条件**:
|
||||
- `openspec/changes/{slug}/` 中 proposal/design/specs/tasks 已通过 commit,成为 Committed OpenSpec。
|
||||
- **前置门控检查**(硬约束):
|
||||
- 检查 `openspec/changes/{slug}/.committed` 文件是否存在
|
||||
- 如不存在,执行以下流程:
|
||||
1. 汇报:Draft OpenSpec 未通过 commit 检查
|
||||
2. 列出缺失的 checkpoint 项(文件完整性、一致性检查)
|
||||
3. 询问用户:是否补做 commit 检查,或明确跳过(需显式确认)
|
||||
- commit 后已获得用户明确的 apply 授权,除非用户在启动时要求"全自动执行"。
|
||||
- devflow 与 OpenSpec 没有未解决冲突。
|
||||
- 没有未解决的 user-interview 问题、未判级接口影响、未汇报 evidence-driven 结论或未接受架构风险。
|
||||
@@ -226,22 +245,63 @@
|
||||
**显式子 skill**:`openspec-apply-change`;遇到 bug/不确定行为时显式调用 `diagnose`;需要测试驱动时显式调用 `tdd`。进入本阶段必须调用指定子 skill,不得静默跳过。
|
||||
|
||||
**动作**:
|
||||
|
||||
### Pre-apply Checkpoint(15-20 分钟)
|
||||
|
||||
**触发条件**:当 OpenSpec 涉及以下任一情况时必须执行
|
||||
- design 或 tasks 中提到"参考 XXX 实现"
|
||||
- 需要调用项目现有基础设施(MQ/统一请求结构/工具类等)
|
||||
- 技术栈不熟悉或第一次在该项目实现类似功能
|
||||
|
||||
**执行步骤**:
|
||||
1. **完整阅读所有参考实现**(约 10 分钟)
|
||||
- 从 OpenSpec design 或 tasks 中定位参考实现文件
|
||||
- 如果路径不明确,通过 Grep 搜索关键类名或模式
|
||||
- 逐行理解关键逻辑,提取可复用代码片段和模式
|
||||
|
||||
2. **Grep 关键技术栈**(约 5 分钟)
|
||||
- 请求/响应结构模式(如 `RequestMsg`、`ResponseMsg`、DTO 规范)
|
||||
- 消息队列模式(如 `@KafkaListener`、`@YkMsg`、发送模板)
|
||||
- 统一工具类(如 `XxxUtil`、`XxxHelper`、加密/验签工具)
|
||||
- 异常处理和日志记录标准
|
||||
|
||||
3. **形成技术栈清单并写入 decisions.md**
|
||||
- 项目使用的请求/响应结构标准
|
||||
- MQ 消息定义和发送标准
|
||||
- Consumer 标准位置和写法
|
||||
- 加密/验签/工具类的标准用法
|
||||
- 识别需要新建的工具类或基础设施
|
||||
|
||||
**输出要求**:
|
||||
- 技术栈清单已写入 `decisions.md` 的 "Pre-apply Research" 章节 ✅
|
||||
- 已列出所有参考实现的文件路径 ✅
|
||||
- 已识别需要新建的工具类/基础设施 ✅
|
||||
|
||||
**快速模式**:micro 分档可缩短为 5-10 分钟快速扫描,但仍需形成清单。
|
||||
|
||||
### 实现过程
|
||||
|
||||
- 优先调用 `openspec-apply-change`。
|
||||
- 执行依据是 OpenSpec specs/tasks;devflow 只能作为上下文参考。
|
||||
- 按 OpenSpec tasks 的纵向切片实现。
|
||||
- **分步实现**:建议按 Controller → Service → MQ/异步组件 → Consumer/下游 顺序,每完成一层验证后再继续。
|
||||
- 进入实现前先汇报本阶段的 capability 来源、当前 task 进度和本轮要推进的切片;否则 apply 不算真正开始。
|
||||
- **首模块完成后对齐检查**:完成第一个接口/模块后,对比 OpenSpec design/tasks,标记"已完成/TODO";核心功能(加密/验签/核心业务逻辑)不允许空实现或纯 TODO 注释。
|
||||
- 当用户质疑、用户要求修改、代码检查、测试失败或运行行为与 OpenSpec 冲突时,做三类判断:
|
||||
- OpenSpec 不准(规格遗漏、边界未覆盖、验收口径缺失)→ 暂停 apply,修正 OpenSpec 后重新提交。
|
||||
- 代码偏离(实现没按 OpenSpec 做)→ 修正代码,不改 OpenSpec。
|
||||
- 不确定根因、涉及设计方向、用户改变目标或范围 → 暂停并等待用户确认。
|
||||
- 判断结果、证据、用户确认和 OpenSpec 回写状态必须记录到 `decisions.md`。
|
||||
- **快速失败**:连续返工 ≥ 2 次时,暂停并重新执行 pre-apply checkpoint 或向用户汇报。
|
||||
- 当用户要求、行为复杂或回归风险高时使用 TDD。
|
||||
- 当测试失败、行为意外或原因不确定时使用 diagnose。
|
||||
- 如果 diagnose 发现根因是 OpenSpec 不准确,先修正 OpenSpec,再继续 apply。
|
||||
- 修改文件前遵守仓库指令,例如 `AGENTS.md`。
|
||||
|
||||
**退出条件**:
|
||||
- 已完成 pre-apply checkpoint(如触发条件满足),技术栈清单已写入 `decisions.md` ✅
|
||||
- OpenSpec tasks 已完成,或剩余 tasks 已明确记录。
|
||||
- 核心功能已实现或明确标注"待联调",无纯 TODO 占位 ✅
|
||||
- 所有实现期冲突已分类并处理;没有未确认的规格遗漏、设计冲突或用户变更。
|
||||
- 已运行验证,或记录了未验证原因。
|
||||
- 已列出已知限制。
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
# SM Flow Phase Contracts v4.1 更新日志
|
||||
|
||||
> 更新日期: 2026-06-23
|
||||
> 更新原因: 基于"山东商客意向单同步接口"执行复盘
|
||||
> 更新方案: 方案 B(简化版)
|
||||
|
||||
---
|
||||
|
||||
## 更新概览
|
||||
|
||||
**核心目标**: 减少 apply 阶段的返工次数(从 4-5 次降低到 0-1 次)
|
||||
|
||||
**更新范围**:
|
||||
- ✅ grill 阶段:增加技术实现维度
|
||||
- ✅ apply 阶段:增加 Pre-apply Checkpoint
|
||||
|
||||
**文本增量**: +55 行(从 281 行 → 336 行,+20%)
|
||||
|
||||
---
|
||||
|
||||
## 详细修改
|
||||
|
||||
### 1. grill 阶段 — 增加技术实现维度
|
||||
|
||||
**修改位置**: `phase-contracts.md` 第 85-88 行
|
||||
|
||||
**新增内容**:
|
||||
```markdown
|
||||
- **技术实现维度**(新增):当 proposal 提到参考实现、或涉及项目现有基础设施时,增加技术澄清问题:
|
||||
- 参考实现的具体文件路径是什么?
|
||||
- 项目现有的 [请求结构/MQ/缓存/加密/工具类] 标准是什么?
|
||||
- 有哪些技术点需要先调研或新建?
|
||||
```
|
||||
|
||||
**目的**: 在 grill 阶段就识别技术调研需求,避免 apply 时才发现技术栈不熟悉。
|
||||
|
||||
---
|
||||
|
||||
### 2. apply 阶段 — 增加 Pre-apply Checkpoint
|
||||
|
||||
**修改位置**: `phase-contracts.md` 第 234-265 行
|
||||
|
||||
**新增章节**: Pre-apply Checkpoint(15-20 分钟)
|
||||
|
||||
#### 触发条件(3 条)
|
||||
- design 或 tasks 中提到"参考 XXX 实现"
|
||||
- 需要调用项目现有基础设施(MQ/统一请求结构/工具类等)
|
||||
- 技术栈不熟悉或第一次在该项目实现类似功能
|
||||
|
||||
#### 执行步骤(3 步)
|
||||
1. **完整阅读所有参考实现**(约 10 分钟)
|
||||
- 从 OpenSpec design 或 tasks 中定位参考实现文件
|
||||
- 如果路径不明确,通过 Grep 搜索关键类名或模式
|
||||
- 逐行理解关键逻辑,提取可复用代码片段和模式
|
||||
|
||||
2. **Grep 关键技术栈**(约 5 分钟)
|
||||
- 请求/响应结构模式
|
||||
- 消息队列模式
|
||||
- 统一工具类
|
||||
- 异常处理和日志记录标准
|
||||
|
||||
3. **形成技术栈清单并写入 decisions.md**
|
||||
- 项目使用的请求/响应结构标准
|
||||
- MQ 消息定义和发送标准
|
||||
- Consumer 标准位置和写法
|
||||
- 加密/验签/工具类的标准用法
|
||||
- 识别需要新建的工具类或基础设施
|
||||
|
||||
#### 输出要求(3 条)
|
||||
- ✅ 技术栈清单已写入 `decisions.md` 的 "Pre-apply Research" 章节
|
||||
- ✅ 已列出所有参考实现的文件路径
|
||||
- ✅ 已识别需要新建的工具类/基础设施
|
||||
|
||||
#### 快速模式支持
|
||||
- micro 分档可缩短为 5-10 分钟快速扫描,但仍需形成清单
|
||||
|
||||
---
|
||||
|
||||
### 3. apply 阶段 — 实现过程增强
|
||||
|
||||
**修改位置**: `phase-contracts.md` 第 267-284 行
|
||||
|
||||
**新增要求**:
|
||||
- **分步实现**:建议按 Controller → Service → MQ/异步组件 → Consumer/下游 顺序
|
||||
- **首模块完成后对齐检查**:完成第一个接口/模块后,对比 OpenSpec design/tasks,标记"已完成/TODO";核心功能不允许空实现或纯 TODO 注释
|
||||
- **快速失败**:连续返工 ≥ 2 次时,暂停并重新执行 pre-apply checkpoint 或向用户汇报
|
||||
|
||||
---
|
||||
|
||||
### 4. apply 阶段 — 退出条件增强
|
||||
|
||||
**修改位置**: `phase-contracts.md` 第 286-292 行
|
||||
|
||||
**新增退出条件**:
|
||||
- ✅ 已完成 pre-apply checkpoint(如触发条件满足),技术栈清单已写入 `decisions.md`
|
||||
- ✅ 核心功能已实现或明确标注"待联调",无纯 TODO 占位
|
||||
|
||||
---
|
||||
|
||||
## 简化对比
|
||||
|
||||
### 与完整方案对比
|
||||
|
||||
| 维度 | 完整方案 | 简化方案 B | 差异 |
|
||||
|------|----------|-----------|------|
|
||||
| 文本增量 | +100 行 | +55 行 | -45% |
|
||||
| 子阶段数 | 3 个(Phase 1/2/3) | 1 个(Pre-apply Checkpoint) | -67% |
|
||||
| 强制规则 | 9 条 | 5 条 | -44% |
|
||||
| 检查清单 | 2 个详细清单 | 1 个简化清单 | -50% |
|
||||
| 时间分档 | 3 档(15/20/30 分钟) | 1 档(15-20 分钟) | -67% |
|
||||
|
||||
### 保留核心价值
|
||||
|
||||
✅ **保留**(解决返工问题):
|
||||
- 前置调研(最重要)
|
||||
- 技术栈清单(防止想当然)
|
||||
- 核心功能不能空实现(保证质量)
|
||||
- 快速失败机制
|
||||
|
||||
❌ **简化**(去掉过度约束):
|
||||
- 严格的执行顺序
|
||||
- 频繁的检查点
|
||||
- 详细的操作指南模板
|
||||
|
||||
---
|
||||
|
||||
## 预期效果
|
||||
|
||||
### 量化指标
|
||||
|
||||
| 指标 | 当前 | 目标 | 改善 |
|
||||
|------|------|------|------|
|
||||
| 返工次数 | 4-5 次 | 0-1 次 | -80% |
|
||||
| 核心功能空实现率 | 高(3/3 核心功能) | 0% | -100% |
|
||||
| 实现时间(含返工) | 2 小时 | 1.5 小时 | -25% |
|
||||
| 前置调研时间 | 0 分钟 | 15-20 分钟 | +20 分钟 |
|
||||
|
||||
### ROI 分析
|
||||
|
||||
```
|
||||
投入: 15-20 分钟调研
|
||||
回报: 节省 60 分钟返工 + 避免核心功能遗漏
|
||||
ROI = (60 - 20) / 20 = 200%
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 适用场景
|
||||
|
||||
### ✅ 强烈推荐
|
||||
|
||||
- 中等及以上规模需求(3+ 接口或涉及多模块)
|
||||
- 涉及项目现有基础设施(MQ/统一请求结构/工具类)
|
||||
- 第一次在该项目实现类似功能
|
||||
- 设计文档提到"参考 XXX 实现"
|
||||
|
||||
### 🟡 可选执行
|
||||
|
||||
- micro 分档的简单需求(可缩短为 5-10 分钟)
|
||||
- 纯数据处理或工具脚本(技术栈熟悉)
|
||||
|
||||
### ❌ 不推荐
|
||||
|
||||
- 紧急热修复(时间紧急)
|
||||
- 一次性脚本(不涉及项目标准)
|
||||
|
||||
---
|
||||
|
||||
## 后续优化方向
|
||||
|
||||
### 短期(1-2 个需求后)
|
||||
|
||||
- 收集数据:实际调研时间、返工次数、遗漏率
|
||||
- 验证效果:是否达到预期 ROI
|
||||
- 调整参数:时间要求、触发条件
|
||||
|
||||
### 中期(观察 5+ 个需求后)
|
||||
|
||||
如果效果显著,考虑升级为完整方案:
|
||||
- 增加 Alignment Checkpoint(每模块对齐检查)
|
||||
- 增加详细的技术栈清单模板
|
||||
- 增加分步实现的每步验证要求
|
||||
|
||||
### 长期(跨项目验证后)
|
||||
|
||||
- 提取通用技术栈清单模板(Java/Go/Python 等)
|
||||
- 建立参考实现库(常见模式的最佳实践)
|
||||
- 自动化部分调研步骤(Grep 脚本、清单生成)
|
||||
|
||||
---
|
||||
|
||||
## 实施检查清单
|
||||
|
||||
### 立即验证
|
||||
|
||||
- [ ] `phase-contracts.md` 文件已更新
|
||||
- [ ] grill 阶段增加了技术实现维度
|
||||
- [ ] apply 阶段增加了 Pre-apply Checkpoint
|
||||
- [ ] apply 退出条件增加了 2 条新检查
|
||||
- [ ] 文件语法无误,可以正常解析
|
||||
|
||||
### 下次执行验证
|
||||
|
||||
- [ ] agent 是否正确识别触发条件
|
||||
- [ ] agent 是否执行了完整的 3 步调研
|
||||
- [ ] 技术栈清单是否写入 decisions.md
|
||||
- [ ] 是否有效减少了返工次数
|
||||
- [ ] 核心功能是否避免了空实现
|
||||
|
||||
---
|
||||
|
||||
## 附录:复盘案例链接
|
||||
|
||||
- 原始复盘文档: `skill-workbench/docs/sm-flow/sm-flow-execution-review-shandong-intent-sync.md`
|
||||
- 修改前版本: phase-contracts.md (commit: 待补充)
|
||||
- 修改后版本: phase-contracts.md (commit: 待补充)
|
||||
@@ -0,0 +1,307 @@
|
||||
# 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 个 requirement
|
||||
- [ ] `tasks.md` 存在,包含 ≥5 个可执行子任务,每个任务有验收标准
|
||||
|
||||
#### 一致性检查(必须通过)
|
||||
|
||||
- [ ] proposal 中的核心概念在 design 中有对应设计
|
||||
- [ ] design 中的关键决策在 tasks 中有对应实现任务
|
||||
- [ ] tasks 的验收标准可验证(不是"正确实现""完成功能"这类模糊描述)
|
||||
|
||||
#### 标记文件
|
||||
|
||||
检查通过后,创建 `openspec/changes/{slug}/.committed` 文件标记为 Committed OpenSpec
|
||||
|
||||
**目的**:
|
||||
- 提供明确的"可执行状态"判断标准
|
||||
- 强制 agent 完成所有检查项
|
||||
- 通过 `.committed` 文件提供下游门控依据
|
||||
|
||||
---
|
||||
|
||||
### 2. Apply 阶段 — 增加前置门控检查
|
||||
|
||||
**修改位置**: `phase-contracts.md` 第 233-244 行
|
||||
|
||||
**新增内容**:
|
||||
|
||||
#### 前置门控检查(硬约束)
|
||||
|
||||
1. 检查 `openspec/changes/{slug}/.committed` 文件是否存在
|
||||
2. 如不存在,执行以下流程:
|
||||
- 汇报: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 时,检查:
|
||||
|
||||
1. **Commit 阶段**:
|
||||
- [ ] agent 是否执行了文件完整性检查?
|
||||
- [ ] agent 是否执行了一致性检查?
|
||||
- [ ] agent 是否创建了 `.committed` 文件?
|
||||
|
||||
2. **Apply 阶段**:
|
||||
- [ ] agent 是否检查了 `.committed` 文件存在?
|
||||
- [ ] 如不存在,agent 是否汇报并询问用户?
|
||||
|
||||
3. **Archive 阶段**:
|
||||
- [ ] agent 是否按 5 步顺序执行?
|
||||
- [ ] agent 是否在 Step 4 前自检了 Step 1-3?
|
||||
- [ ] agent 是否创建了 `.archive-ready` 文件?
|
||||
|
||||
### 成功标准
|
||||
|
||||
- ✅ 无未经检查的 commit → apply 跳转
|
||||
- ✅ 无基于不完整 OpenSpec 的实现
|
||||
- ✅ 无先创建 handoff 后补 devflow 的情况
|
||||
|
||||
---
|
||||
|
||||
## 后续演进方向
|
||||
|
||||
### v5.0 候选特性(观察 3+ 次执行后决定)
|
||||
|
||||
如果 v4.2 执行良好,但仍有问题,考虑:
|
||||
|
||||
1. **流程状态文件** `.sm-flow-state`
|
||||
- 记录当前阶段、已完成阶段、时间戳
|
||||
- 支持断点续做
|
||||
|
||||
2. **更多门控文件**
|
||||
- `.context-done`(context 阶段完成)
|
||||
- `.grill-done`(grill 阶段完成)
|
||||
- `.apply-done`(apply 阶段完成)
|
||||
|
||||
3. **违规自检机制**
|
||||
- 每个阶段退出前,自动检查是否违反 6 条硬约束
|
||||
|
||||
4. **进度可视化**
|
||||
- 每次开始时,汇报进度条(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 跳过阶段"问题,提升流程可靠性。
|
||||
@@ -0,0 +1,293 @@
|
||||
# SM Flow 执行复盘 - 山东商客意向单同步接口
|
||||
|
||||
> 项目: yingke-platform
|
||||
> 需求: 385 山东公司商机信息同步接口
|
||||
> 执行日期: 2026-06-23
|
||||
> 复盘人: Claude Code
|
||||
|
||||
---
|
||||
|
||||
## 执行概况
|
||||
|
||||
- **需求规模**: 中等(3个接口 + Kafka消费 + 数据库变更)
|
||||
- **总耗时**: 约 2 小时(含多次返工)
|
||||
- **返工次数**: 4-5 次重大返工
|
||||
- **最终状态**: 核心代码完成,但验签/解密/查询接口未实现
|
||||
|
||||
---
|
||||
|
||||
## 发现的问题
|
||||
|
||||
### 1. 前置调研不足,导致多次返工
|
||||
|
||||
#### 问题表现
|
||||
|
||||
| 返工点 | 初次实现(错误) | 返工后(正确) | 浪费时间 |
|
||||
|--------|------------------|----------------|----------|
|
||||
| RequestMsg 结构 | 自创 `SyncIntentOrderReq/Resp` | 使用项目标准 `RequestMsg<T>` | 15 分钟 |
|
||||
| Kafka 发送方式 | `SendMessageTunnel` + `TaskTypeEnum` | `ykMqTemplate` + `@YkMsg` | 20 分钟 |
|
||||
| Consumer 模块位置 | order-service 模块 | web 模块(参考案例位置) | 10 分钟 |
|
||||
| 透传字段结构 | Map → DTO → 最终平铺 | 应一次到位平铺到 Msg | 15 分钟 |
|
||||
|
||||
**根本原因**: apply 阶段直接开始写代码,没有充分调研现有代码模式。
|
||||
|
||||
#### 改进建议
|
||||
|
||||
**在 apply 阶段前增加强制调研步骤**(pre-apply research checkpoint):
|
||||
|
||||
1. **阅读所有参考实现**(设计文档中明确提到的)
|
||||
- 完整阅读参考代码,而不是凭想象
|
||||
- 提取关键模式:请求结构、Kafka 使用、模块划分
|
||||
|
||||
2. **Grep 关键技术栈**
|
||||
```bash
|
||||
grep -r "@YkMsg" --include="*.java"
|
||||
grep -r "ykMqTemplate" --include="*.java"
|
||||
grep -r "RequestMsg<" --include="*.java"
|
||||
```
|
||||
|
||||
3. **形成"技术栈清单"文档**(临时产物)
|
||||
```markdown
|
||||
- 项目使用 RequestMsg<T> 作为统一请求包装
|
||||
- Kafka 消息使用 @YkMsg + MsgData + ykMqTemplate.sendAsync()
|
||||
- Consumer 统一放在 web 模块的 manager/stream/consumer
|
||||
```
|
||||
|
||||
4. **调研时间要求**: 不少于 15 分钟,复杂需求可延长至 30 分钟
|
||||
|
||||
---
|
||||
|
||||
### 2. 设计文档与实现偏离,缺少一致性检查
|
||||
|
||||
#### 问题表现
|
||||
|
||||
| 设计文档要求 | 实际实现 | 偏离程度 |
|
||||
|--------------|----------|----------|
|
||||
| Controller 层 SM3 验签 | 只有 TODO 注释 | ❌ 核心功能缺失 |
|
||||
| Service 层 AES256-GCM 解密 | 只有 TODO 注释 | ❌ 核心功能缺失 |
|
||||
| queryIntentOrder 调用一体化客服 | 空实现 | ❌ 核心功能缺失 |
|
||||
| syncIntentOrder 同步调用 | 改为 Kafka 异步 | ⚠️ 架构差异(可能合理) |
|
||||
|
||||
**根本原因**: apply 阶段没有"设计-实现对齐检查点"。
|
||||
|
||||
#### 改进建议
|
||||
|
||||
**在 apply 阶段中增加对齐检查点**(alignment checkpoint):
|
||||
|
||||
1. **每完成 1 个接口/模块,立即对比设计文档**
|
||||
- 逐条核对设计文档的任务清单
|
||||
- 标记"已完成/部分完成/TODO"
|
||||
|
||||
2. **核心功能不允许"TODO 占位"直接通过**
|
||||
- 加密/解密、验签、核心业务逻辑必须实现或明确标注"待联调"
|
||||
- 区分"框架完整但待联调"(✅) vs "空实现"(❌)
|
||||
|
||||
3. **架构差异必须显式记录并询问用户**
|
||||
- 设计说同步,实现改异步 → 必须记录原因并确认
|
||||
- 创建 `decisions.md` 记录所有偏离设计的架构决策
|
||||
|
||||
---
|
||||
|
||||
### 3. 分步验证不足,一次写太多代码
|
||||
|
||||
#### 问题表现
|
||||
|
||||
- 一次性写完 Controller + Service + Kafka + Consumer,然后发现 RequestMsg 结构错了
|
||||
- 没有"写一点 → 编译 → 确认方向"的小步迭代
|
||||
|
||||
#### 改进建议
|
||||
|
||||
**强制分步验证**(incremental validation):
|
||||
|
||||
1. **Controller 层先行**
|
||||
- 只写 Controller + 最小 Service 骨架
|
||||
- 确认请求/响应结构正确
|
||||
- 编译通过后再继续
|
||||
|
||||
2. **Kafka 发送独立验证**
|
||||
- 写完发送逻辑,先打印 JSON 确认消息格式
|
||||
- 再写 Consumer
|
||||
|
||||
3. **Consumer 最后实现**
|
||||
- 基于已确认的消息格式实现
|
||||
|
||||
---
|
||||
|
||||
### 4. 参考案例利用不充分
|
||||
|
||||
#### 问题表现
|
||||
|
||||
- 设计文档明确提到"参考 AddIntentOrderOutSystemDealTunnel"
|
||||
- 但实际执行时,直到用户提醒才去看参考实现
|
||||
- 之前都在凭想象写,导致返工
|
||||
|
||||
#### 改进建议
|
||||
|
||||
**强制参考案例优先**(reference-first approach):
|
||||
|
||||
1. **grill 阶段就应该找出所有参考案例**
|
||||
- 不要只记录"参考 XXX",而是实际阅读并提取模式
|
||||
|
||||
2. **apply 前必须完整阅读参考实现**
|
||||
- 不是"扫一眼",而是逐行理解关键逻辑
|
||||
- 提取可复用的代码片段
|
||||
|
||||
3. **参考案例模式提取清单**(临时文档)
|
||||
```markdown
|
||||
## AddIntentOrderOutSystemDealTunnel 关键模式
|
||||
|
||||
1. Consumer 方法签名: `public void onXXX(XXXMsg msgBO)`
|
||||
2. 调用链: msg → AES加密 → OnlineOpportunityApi → 回填状态
|
||||
3. 异常处理: try-catch → updateStatus(EXCEPTION) → throw
|
||||
4. 成功判断: isSyncSuccess() 三层校验
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. grill 阶段澄清不够深入
|
||||
|
||||
#### 问题表现
|
||||
|
||||
- grill 阶段问了业务问题(省份校验、透传字段),但没有问技术实现问题
|
||||
- 导致后续实现时才发现技术栈不熟悉
|
||||
|
||||
#### 改进建议
|
||||
|
||||
**grill 阶段增加技术实现澄清**:
|
||||
|
||||
除了业务澄清,还应该包括:
|
||||
|
||||
1. **技术栈确认问题**
|
||||
- "项目现有的 Kafka 消息怎么定义和发送?"
|
||||
- "RequestMsg/ResponseMsg 的标准用法是什么?"
|
||||
- "类似接口的 Controller/Service 是怎么写的?"
|
||||
|
||||
2. **参考实现确认**
|
||||
- "设计文档提到的参考实现是哪些文件?"
|
||||
- "这些参考实现的核心模式是什么?"
|
||||
|
||||
3. **技术风险识别**
|
||||
- "有哪些技术点我不熟悉,需要先调研?"
|
||||
|
||||
---
|
||||
|
||||
## 改造建议汇总
|
||||
|
||||
### 方案 A: 在现有 9 阶段中增强(保守)
|
||||
|
||||
```
|
||||
clarify → context → propose → grill+ → specify → audit → commit → pre-apply+ → apply+ → archive
|
||||
↑ ↑ ↑
|
||||
增加技术澄清 增加调研 增加检查点
|
||||
```
|
||||
|
||||
**修改点**:
|
||||
|
||||
1. **grill 阶段**:增加技术实现澄清问题模板
|
||||
2. **apply 阶段前**:增加 pre-apply research checkpoint(15-30分钟)
|
||||
3. **apply 阶段中**:增加 alignment checkpoint(每完成1个模块对比设计文档)
|
||||
|
||||
### 方案 B: 新增独立调研阶段(激进)
|
||||
|
||||
```
|
||||
clarify → context → propose → grill → research → specify → audit → commit → apply → archive
|
||||
↑
|
||||
新增独立调研阶段
|
||||
```
|
||||
|
||||
**新阶段 research**:
|
||||
|
||||
- **输入**: proposal + 参考实现列表
|
||||
- **输出**: 技术栈清单 + 参考模式提取 + 风险评估
|
||||
- **时间**: 15-30 分钟
|
||||
- **产物**: `research.md`(临时文档,archive 时删除)
|
||||
|
||||
**research.md 结构**:
|
||||
|
||||
```markdown
|
||||
# 技术调研 - [需求名称]
|
||||
|
||||
## 参考实现分析
|
||||
|
||||
### AddIntentOrderOutSystemDealTunnel
|
||||
- 文件位置: web/manager/stream/consumer/...
|
||||
- 关键模式:
|
||||
- Consumer 定义: @YkMqConsumer + MsgData 子类
|
||||
- 调用链: ...
|
||||
|
||||
## 技术栈清单
|
||||
|
||||
- 请求结构: RequestMsg<T> / ResponseMsg<T>
|
||||
- Kafka: @YkMsg + ykMqTemplate.sendAsync()
|
||||
- 加密: AESUtil.encryptAES() (AES-128 ECB)
|
||||
|
||||
## 风险点
|
||||
|
||||
- AES256-GCM 工具类不存在,需要新建
|
||||
- 验签逻辑没有现成拦截器,需要在 Service 层实现
|
||||
```
|
||||
|
||||
### 推荐方案
|
||||
|
||||
**方案 A**(渐进增强):
|
||||
|
||||
1. 对现有流程影响小
|
||||
2. 实施成本低
|
||||
3. 可以立即生效
|
||||
|
||||
**具体实施**:
|
||||
|
||||
- 修改 `phase-contracts.md` 的 grill 和 apply 阶段规范
|
||||
- 增加 checkpoint 描述
|
||||
- 更新 question pool 增加技术澄清问题
|
||||
|
||||
---
|
||||
|
||||
## 其他建议
|
||||
|
||||
### 1. 增加"快速失败"机制
|
||||
|
||||
当发现以下情况,立即暂停并询问用户:
|
||||
|
||||
- 需要创建的类/接口在参考实现中有类似的(防止重复造轮)
|
||||
- 实现方式与设计文档明显偏离
|
||||
- 连续返工超过 2 次(说明方向可能错了)
|
||||
|
||||
### 2. 产物可观测性增强
|
||||
|
||||
在 apply 阶段,定期输出:
|
||||
|
||||
```markdown
|
||||
## 实现进度(每 30 分钟更新)
|
||||
|
||||
✅ Controller 层(已完成)
|
||||
- ShandongSyncController.syncIntentOrder
|
||||
- 请求结构使用 RequestMsg<ShandongIntentOrderData>
|
||||
|
||||
🚧 Service 层(进行中)
|
||||
- ShandongSyncService 接口完成
|
||||
- 实现类 70% 完成
|
||||
- ⚠️ 验签解密未实现(TODO)
|
||||
|
||||
⏳ Kafka 层(待开始)
|
||||
```
|
||||
|
||||
### 3. 设计文档质量要求
|
||||
|
||||
设计文档应该包含:
|
||||
|
||||
- ✅ 参考实现的具体文件路径(而不是只说"参考 XXX")
|
||||
- ✅ 关键技术栈的使用示例(而不是只说"使用 Kafka")
|
||||
- ✅ 数据流图(清晰展示同步/异步边界)
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
**核心问题**: apply 阶段"想当然"开始写代码,缺少充分调研和分步验证。
|
||||
|
||||
**解决方向**: 在 apply 前增加强制调研步骤,在 apply 中增加对齐检查点。
|
||||
|
||||
**预期效果**: 返工次数从 4-5 次降低到 0-1 次,实现质量与设计文档一致性提升。
|
||||
|
||||
**立即可做**: 修改 `phase-contracts.md` 的 grill 和 apply 阶段规范即可生效。
|
||||
@@ -0,0 +1,504 @@
|
||||
# SM Flow Skill - 使用情况分析与优化建议
|
||||
|
||||
## 执行概况
|
||||
|
||||
**项目**: lookup-knowledge-integration
|
||||
**执行日期**: 2026-06-24
|
||||
**执行模式**: 手动跳阶段(用户直接要求"修复问题")
|
||||
|
||||
### 实际执行的阶段
|
||||
|
||||
1. ❌ **Clarify** - 跳过(用户直接给了 handoff 文档)
|
||||
2. ❌ **Context** - 跳过(未读取 devflow 历史)
|
||||
3. ❌ **Propose** - 跳过(OpenSpec 已存在)
|
||||
4. ❌ **Grill** - 跳过(未进行澄清)
|
||||
5. ❌ **Specify** - 跳过(OpenSpec 已完整)
|
||||
6. ❌ **Audit** - 跳过(未进行架构审计)
|
||||
7. ❌ **Commit** - **跳过(关键遗漏)**
|
||||
8. ✅ **Apply** - 执行(实现代码)
|
||||
9. ⚠️ **Archive** - 部分执行(先创建 handoff,后补 devflow)
|
||||
|
||||
---
|
||||
|
||||
## 做得好的地方 ✅
|
||||
|
||||
### 1. Archive 规则详细且可执行
|
||||
|
||||
**优点**:
|
||||
- `archive-rules.md` 提供了清晰的提取映射表
|
||||
- 目录结构规范(devflow/projects/YYYY-MM-DD-{slug}/)
|
||||
- 产物分档(micro/standard/complex)明确
|
||||
- 索引维护规则具体
|
||||
|
||||
**证据**:被提醒后,我能快速创建符合规范的 devflow 档案
|
||||
|
||||
### 2. 硬约束明确
|
||||
|
||||
**优点**:
|
||||
- 6 条核心规则写在 SKILL.md 顶部,醒目
|
||||
- 规则表述清晰(不得跳过 context/grill/commit)
|
||||
|
||||
**问题**:虽然规则清晰,但缺少执行机制(见后续建议)
|
||||
|
||||
### 3. Phase 契约结构清晰
|
||||
|
||||
**优点**:
|
||||
- `phase-contracts.md` 定义了进入/退出条件
|
||||
- 每个阶段的职责明确
|
||||
|
||||
---
|
||||
|
||||
## 关键问题 ❌
|
||||
|
||||
### 问题 1: Commit 检查缺少可执行标准
|
||||
|
||||
**现象**:
|
||||
- 我不知道如何判断"通过 commit 检查"
|
||||
- phase-contracts.md 说了要做 commit,但没说具体怎么判断
|
||||
|
||||
**影响**:
|
||||
- 我直接跳过 commit,进入 apply
|
||||
- 违反了硬约束规则 4:"不得跳过 commit"
|
||||
|
||||
**根本原因**:
|
||||
```
|
||||
phase-contracts.md:
|
||||
"Commit 阶段:检查 Draft OpenSpec 是否达到可执行状态"
|
||||
|
||||
但没有说:
|
||||
- 什么叫"可执行状态"?
|
||||
- 需要检查哪些文件?
|
||||
- 每个文件的必需内容是什么?
|
||||
- 如何标记"已通过"?
|
||||
```
|
||||
|
||||
### 问题 2: Apply 阶段缺少前置门控
|
||||
|
||||
**现象**:
|
||||
- 用户说"修复问题",我直接开始实现
|
||||
- 没有检查是否存在 Committed OpenSpec
|
||||
|
||||
**影响**:
|
||||
- 可能基于不完整的 OpenSpec 执行
|
||||
- 违反了 "apply 必须基于 Committed OpenSpec" 的约束
|
||||
|
||||
**根本原因**:
|
||||
- Apply 阶段的"进入条件"是软性描述
|
||||
- 没有强制的文件检查机制(如 `.committed` 文件)
|
||||
|
||||
### 问题 3: Archive 阶段缺少 Checklist
|
||||
|
||||
**现象**:
|
||||
- 我先创建了 handoff 文档
|
||||
- 忘记了 devflow 才是核心记忆层
|
||||
- 被提醒后才补创建 devflow 档案
|
||||
|
||||
**影响**:
|
||||
- 归档流程不完整
|
||||
- 需要用户纠正
|
||||
|
||||
**根本原因**:
|
||||
- archive-rules.md 有详细说明,但没有强制执行顺序
|
||||
- 我容易按"直觉"操作,而不是按"规范"操作
|
||||
|
||||
### 问题 4: 缺少流程状态追踪
|
||||
|
||||
**现象**:
|
||||
- 我不知道当前在哪个阶段
|
||||
- 每次执行都像"全新开始"
|
||||
|
||||
**影响**:
|
||||
- 容易跳过中间阶段
|
||||
- 无法断点续做
|
||||
|
||||
---
|
||||
|
||||
## 优化建议(按优先级)
|
||||
|
||||
### High Priority(立即修复)
|
||||
|
||||
#### 建议 1: Commit 检查增加可执行 Checkpoint
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Commit 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Commit 阶段退出条件
|
||||
|
||||
必须完成以下 checkpoint:
|
||||
|
||||
### 文件完整性检查
|
||||
- [ ] `proposal.md` 存在且包含:
|
||||
- 问题描述(至少 50 字)
|
||||
- 建议方案(至少 100 字)
|
||||
- 范围/非范围
|
||||
|
||||
- [ ] `design.md` 存在且包含:
|
||||
- 架构设计(文字或图)
|
||||
- 数据结构定义(至少 1 个)
|
||||
- 关键决策记录(至少 2 条)
|
||||
|
||||
- [ ] `specs/functional-specs.md` 存在且包含:
|
||||
- 至少 3 个 requirement
|
||||
- 每个 requirement 有 scenario
|
||||
|
||||
- [ ] `tasks.md` 存在且包含:
|
||||
- 至少 5 个可执行子任务
|
||||
- 每个任务有验收标准
|
||||
|
||||
### 一致性检查
|
||||
- [ ] proposal 中的核心概念在 design 中有对应设计
|
||||
- [ ] design 中的关键决策在 tasks 中有对应实现任务
|
||||
- [ ] tasks 的验收标准可验证(不是"正确实现"这种模糊描述)
|
||||
|
||||
### 标记
|
||||
通过后创建 `.committed` 文件:
|
||||
```bash
|
||||
echo "committed at $(date)" > openspec/changes/{slug}/.committed
|
||||
```
|
||||
|
||||
**执行指令**:
|
||||
在 apply 阶段入口,必须先执行此检查。
|
||||
```
|
||||
|
||||
#### 建议 2: Apply 阶段增加前置门控
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Apply 阶段
|
||||
|
||||
**修改"进入条件"**:
|
||||
```markdown
|
||||
## Apply 阶段进入条件
|
||||
|
||||
**硬约束**:
|
||||
1. 必须存在 `.committed` 文件
|
||||
2. 如果不存在,执行以下流程:
|
||||
a. 汇报:Draft OpenSpec 未通过 commit 检查
|
||||
b. 列出缺失的 checkpoint
|
||||
c. 询问用户:是否补做 commit 检查,或明确跳过(需显式确认)
|
||||
|
||||
**检查代码**:
|
||||
```bash
|
||||
if [ ! -f "openspec/changes/{slug}/.committed" ]; then
|
||||
echo "错误:Draft OpenSpec 未通过 commit 检查"
|
||||
echo "请先完成 commit 阶段,或显式确认跳过"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
```
|
||||
|
||||
#### 建议 3: Archive 阶段增加强制 Checklist
|
||||
|
||||
**位置**:`references/archive-rules.md` 顶部
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Archive 阶段强制执行顺序
|
||||
|
||||
**按以下顺序执行,不得跳过或重排**:
|
||||
|
||||
### Step 1: 创建 devflow 档案(必需)
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/brief.md`
|
||||
(从 proposal.md 提取:背景、目标、范围、非目标)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/decisions.md`
|
||||
(从 decisions.md 整理:关键决策、权衡、风险)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/acceptance.md`
|
||||
(记录:静态验证、脚本验证、人工验证、未验证)
|
||||
|
||||
### Step 2: 更新索引(必需)
|
||||
- [ ] 在 `devflow/index.md` 末尾追加一行:
|
||||
`| YYYY-MM-DD | slug | 领域 | 关键词 | OpenSpec路径 | archived |`
|
||||
|
||||
### Step 3: 标记 OpenSpec(必需)
|
||||
- [ ] 创建 `openspec/changes/{slug}/.completed` 文件
|
||||
|
||||
### Step 4: 创建 Handoff(可选)
|
||||
- [ ] 创建 `handoff/YYYY-MM-DD-{slug}.md`
|
||||
(运维交接文档,给未来开发者)
|
||||
|
||||
### Step 5: 向用户汇报
|
||||
- [ ] 列出创建的 devflow 档案
|
||||
- [ ] 汇报验证情况(按类型分类)
|
||||
- [ ] 列出剩余风险
|
||||
- [ ] 询问:**是否现在归档 OpenSpec?**
|
||||
|
||||
**自检**:在执行 Step 5 前,检查 Step 1-4 是否都完成。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Medium Priority(下个版本)
|
||||
|
||||
#### 建议 4: 增加流程状态文件
|
||||
|
||||
**目标**:让我知道当前在哪个阶段
|
||||
|
||||
**实现**:在 OpenSpec 目录维护 `.sm-flow-state` 文件
|
||||
|
||||
```json
|
||||
{
|
||||
"change": "lookup-knowledge-integration",
|
||||
"currentPhase": "apply",
|
||||
"completed": ["clarify", "context", "propose", "grill", "specify", "audit", "commit"],
|
||||
"nextPhase": "archive",
|
||||
"committed": true,
|
||||
"timestamps": {
|
||||
"commit": "2026-06-24T10:00:00Z",
|
||||
"apply_start": "2026-06-24T10:05:00Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**使用方式**:
|
||||
- 每个阶段开始时:读取此文件,确认前置阶段已完成
|
||||
- 每个阶段结束时:更新此文件,标记当前阶段完成
|
||||
- 用户下次调用时:直接从 `nextPhase` 继续
|
||||
|
||||
**集成到 SKILL.md**:
|
||||
```markdown
|
||||
## 执行前检查
|
||||
|
||||
1. 读取 `.sm-flow-state` 文件
|
||||
2. 确认当前阶段的前置阶段已完成
|
||||
3. 如有缺失,汇报并询问是否补做
|
||||
```
|
||||
|
||||
#### 建议 5: Context 阶段增加必读清单
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Context 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Context 阶段必读文件
|
||||
|
||||
按顺序读取(即使文件不存在也要尝试):
|
||||
|
||||
1. **devflow/index.md** - 项目索引
|
||||
- 查找相关领域的历史项目
|
||||
- 识别可能相关的关键词
|
||||
|
||||
2. **devflow/glossary/CONTEXT.md** - 术语表
|
||||
- 提取项目术语和业务规则
|
||||
|
||||
3. **相关项目的 decisions.md** - 历史决策
|
||||
- 从 index.md 中识别的相关项目
|
||||
- 读取其决策,避免重复或冲突
|
||||
|
||||
4. **devflow/compound/*.md** - 可复用知识
|
||||
- 查找可复用的设计模式、经验
|
||||
|
||||
**如果文件不存在**:
|
||||
- 记录"无历史上下文"
|
||||
- 在 proposal.md 中标注"首次相关实现"
|
||||
- 继续执行
|
||||
```
|
||||
|
||||
#### 建议 6: 增加"违规自检"机制
|
||||
|
||||
**目标**:每个阶段结束前,自动检查是否违反硬约束
|
||||
|
||||
**实现**:在每个阶段的退出条件后增加"自检清单"
|
||||
|
||||
```markdown
|
||||
## [阶段名] 退出前自检
|
||||
|
||||
检查以下硬约束是否违反:
|
||||
|
||||
- [ ] 是否跳过了 context?
|
||||
检查:是否读取了 devflow/index.md?
|
||||
|
||||
- [ ] 是否跳过了 grill?
|
||||
检查:decisions.md 中是否记录了至少 3 个澄清问题?
|
||||
|
||||
- [ ] 是否跳过了 commit?
|
||||
检查:是否存在 .committed 文件?
|
||||
|
||||
- [ ] apply 是否基于 Committed OpenSpec?
|
||||
检查:apply 开始前是否读取了 OpenSpec 文件?
|
||||
|
||||
- [ ] 遇到冲突是否先分类?
|
||||
检查:冲突记录是否标记了类型(规格遗漏/实现偏差)?
|
||||
|
||||
- [ ] 是否调用了所有必需的子 skill?
|
||||
检查:阶段定义中要求的 skill 是否都调用了?
|
||||
|
||||
如有违规项,停止执行并汇报。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Low Priority(可选增强)
|
||||
|
||||
#### 建议 7: Grill 阶段增加 Question Pool 模板
|
||||
|
||||
**目标**:帮助我提出高质量的澄清问题
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Grill 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Grill Question Pool 模板
|
||||
|
||||
必须覆盖至少 3 个维度:
|
||||
|
||||
### 维度 1: 范围边界
|
||||
模板问题:
|
||||
- "Out of scope 里的 X 功能,为什么不在这次做?有什么依赖或风险?"
|
||||
- "如果用户要求 Y,这个方案能扩展支持吗?需要改动多少?"
|
||||
- "边界场景 Z 应该怎么处理?报错还是降级?"
|
||||
|
||||
### 维度 2: 技术风险
|
||||
模板问题:
|
||||
- "如果依赖的 A 服务挂了,这个方案有降级策略吗?"
|
||||
- "为什么选择技术方案 B 而不是 C?主要考虑什么?"
|
||||
- "数据量增长到 N 倍,性能瓶颈在哪里?"
|
||||
|
||||
### 维度 3: 用户验证
|
||||
模板问题:
|
||||
- "这个方案解决的核心痛点是什么?有真实场景吗?"
|
||||
- "有没有现成的替代方案?为什么不用?"
|
||||
- "如果上线后发现不符合预期,回滚成本多大?"
|
||||
|
||||
### 维度 4: 实现可行性
|
||||
模板问题:
|
||||
- "最复杂的部分是什么?有没有技术预研?"
|
||||
- "需要改动哪些核心模块?影响面多大?"
|
||||
- "有没有类似的历史实现可以参考?"
|
||||
```
|
||||
|
||||
#### 建议 8: 增加"快速模式"明确定义
|
||||
|
||||
**当前问题**:`operating-rules.md` 提到快速模式,但没说具体怎么做
|
||||
|
||||
**建议**:明确快速模式的简化规则
|
||||
|
||||
```markdown
|
||||
## 快速模式
|
||||
|
||||
### 触发条件
|
||||
满足以下所有条件时,可使用快速模式:
|
||||
- 变更小于 5 个文件
|
||||
- 无架构变更
|
||||
- 无数据库迁移
|
||||
- 用户明确要求"快速"
|
||||
|
||||
### 简化规则
|
||||
1. Grill 阶段:至少 1 个问题(而非 3 个)
|
||||
2. Specify 阶段:tasks.md 可简化为 3 个子任务
|
||||
3. Audit 阶段:可跳过(标注"快速模式跳过审计")
|
||||
4. Archive 阶段:使用 micro 分档(brief/decisions/acceptance)
|
||||
|
||||
### 不得简化
|
||||
- Context 阶段:仍需读取 devflow
|
||||
- Commit 阶段:仍需检查 OpenSpec 完整性
|
||||
- Apply 阶段:仍需基于 Committed OpenSpec
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 执行机制优化建议
|
||||
|
||||
### 当前问题:约束是"软性"的
|
||||
|
||||
**现象**:
|
||||
- 规则写得很清楚:"不得跳过 commit"
|
||||
- 但我仍然能跳过,没有强制机制
|
||||
|
||||
**根本原因**:
|
||||
- 规则是"描述性"的(说应该做什么)
|
||||
- 缺少"执行性"的机制(强制检查、文件依赖)
|
||||
|
||||
### 解决方案:引入"门控文件"
|
||||
|
||||
**设计**:
|
||||
```
|
||||
每个阶段完成后,创建一个标记文件:
|
||||
- .context-done
|
||||
- .grill-done
|
||||
- .commit-done (即 .committed)
|
||||
- .apply-done
|
||||
- .archive-done
|
||||
|
||||
下一个阶段开始前,检查前置文件是否存在。
|
||||
```
|
||||
|
||||
**示例**:Apply 阶段入口检查
|
||||
```bash
|
||||
if [ ! -f ".committed" ]; then
|
||||
echo "错误:Commit 阶段未完成"
|
||||
echo "缺失文件:.committed"
|
||||
echo "请先完成 commit 阶段,或显式跳过(需用户确认)"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**好处**:
|
||||
1. 强制执行顺序(无法跳过)
|
||||
2. 可视化进度(ls 就能看到哪些阶段完成了)
|
||||
3. 支持断点续做(下次执行自动识别位置)
|
||||
|
||||
---
|
||||
|
||||
## 用户体验优化
|
||||
|
||||
### 当前问题:用户不知道"现在在哪"
|
||||
|
||||
**场景**:
|
||||
- 用户说"继续"
|
||||
- 我不知道该从哪个阶段继续
|
||||
|
||||
**建议**:每次开始时,主动汇报状态
|
||||
|
||||
```
|
||||
开始执行 SM Flow...
|
||||
|
||||
当前状态:
|
||||
✅ Context 已完成
|
||||
✅ Propose 已完成
|
||||
⏸️ Grill 未开始 ← 当前阶段
|
||||
|
||||
下一步:执行 Grill 阶段(人类对齐澄清)
|
||||
预计耗时:5-10 分钟
|
||||
```
|
||||
|
||||
### 建议:增加"进度条"
|
||||
|
||||
```
|
||||
SM Flow 进度:
|
||||
[✅] Clarify
|
||||
[✅] Context
|
||||
[✅] Propose
|
||||
[⏸️] Grill ← 当前
|
||||
[ ] Specify
|
||||
[ ] Audit
|
||||
[ ] Commit
|
||||
[ ] Apply
|
||||
[ ] Archive
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
### 核心问题
|
||||
1. **Commit 检查缺少可执行标准**(导致容易跳过)
|
||||
2. **Apply 阶段缺少前置门控**(没有强制检查 .committed)
|
||||
3. **Archive 阶段缺少 Checklist**(容易遗漏 devflow)
|
||||
4. **缺少流程状态追踪**(不知道当前在哪)
|
||||
|
||||
### 优先修复(High Priority)
|
||||
- ✅ Commit 检查增加 Checkpoint
|
||||
- ✅ Apply 增加前置门控
|
||||
- ✅ Archive 增加 Checklist
|
||||
|
||||
这三个修复后,绝大多数"跳过阶段"问题都能解决。
|
||||
|
||||
### 框架本身很好
|
||||
- 架构清晰(9 个阶段、4 层架构)
|
||||
- 规则明确(6 条硬约束)
|
||||
- 文档详细(phase-contracts, archive-rules)
|
||||
|
||||
**问题不是"约束不够",而是"执行机制不够明确"。**
|
||||
|
||||
增加可验证的 checkpoint 和门控文件后,我就很难"偷懒"了。
|
||||
@@ -819,3 +819,299 @@ v4:
|
||||
### 后续观察项
|
||||
|
||||
问题 1 和 2 暂不改协议,如果多次验证中反复出现再考虑加约束。问题 3 需要在下次 specify 阶段验证:spec scenario 是否自然地描述用户行为而非实现细节。
|
||||
|
||||
## v4.1:Apply 阶段前置调研增强(2026-06-23)
|
||||
|
||||
### 背景
|
||||
|
||||
基于"山东商客意向单同步接口"的执行复盘(`skill-workbench/docs/sm-flow/sm-flow-execution-review-shandong-intent-sync.md`),发现 apply 阶段存在严重的返工问题:
|
||||
|
||||
- **返工次数**:4-5 次重大返工
|
||||
- **核心问题**:apply 阶段"想当然"开始写代码,缺少充分调研和分步验证
|
||||
- **主要表现**:
|
||||
- 参考实现利用不充分(设计文档提到参考实现,但直到用户提醒才去看)
|
||||
- 技术栈不熟悉(RequestMsg 结构、Kafka 发送方式、Consumer 位置全部返工)
|
||||
- 设计-实现偏离(验签/解密/查询接口只有 TODO 注释)
|
||||
|
||||
### 核心改进:Pre-apply Checkpoint
|
||||
|
||||
在 apply 阶段开始前增加强制性调研检查点(方案 B 简化版):
|
||||
|
||||
#### 修改 1:grill 阶段增加技术实现维度
|
||||
|
||||
在 question pool 中新增"技术实现维度":
|
||||
|
||||
```markdown
|
||||
**技术实现维度**(新增):当 proposal 提到参考实现、或涉及项目现有基础设施时,增加技术澄清问题:
|
||||
- 参考实现的具体文件路径是什么?
|
||||
- 项目现有的 [请求结构/MQ/缓存/加密/工具类] 标准是什么?
|
||||
- 有哪些技术点需要先调研或新建?
|
||||
```
|
||||
|
||||
**目的**:在 grill 阶段就识别技术调研需求,避免 apply 时才发现技术栈不熟悉。
|
||||
|
||||
#### 修改 2:apply 阶段增加 Pre-apply Checkpoint
|
||||
|
||||
在 apply 阶段开始前增加 15-20 分钟的强制调研步骤:
|
||||
|
||||
**触发条件**(3 条):
|
||||
- design 或 tasks 中提到"参考 XXX 实现"
|
||||
- 需要调用项目现有基础设施(MQ/统一请求结构/工具类等)
|
||||
- 技术栈不熟悉或第一次在该项目实现类似功能
|
||||
|
||||
**执行步骤**(3 步):
|
||||
1. **完整阅读所有参考实现**(约 10 分钟)
|
||||
- 从 OpenSpec design 或 tasks 中定位参考实现文件
|
||||
- 如果路径不明确,通过 Grep 搜索关键类名或模式
|
||||
- 逐行理解关键逻辑,提取可复用代码片段和模式
|
||||
|
||||
2. **Grep 关键技术栈**(约 5 分钟)
|
||||
- 请求/响应结构模式
|
||||
- 消息队列模式
|
||||
- 统一工具类
|
||||
- 异常处理和日志记录标准
|
||||
|
||||
3. **形成技术栈清单并写入 decisions.md**
|
||||
- 项目使用的请求/响应结构标准
|
||||
- MQ 消息定义和发送标准
|
||||
- Consumer 标准位置和写法
|
||||
- 加密/验签/工具类的标准用法
|
||||
- 识别需要新建的工具类或基础设施
|
||||
|
||||
**输出要求**(3 条):
|
||||
- ✅ 技术栈清单已写入 `decisions.md` 的 "Pre-apply Research" 章节
|
||||
- ✅ 已列出所有参考实现的文件路径
|
||||
- ✅ 已识别需要新建的工具类/基础设施
|
||||
|
||||
**快速模式支持**:micro 分档可缩短为 5-10 分钟快速扫描,但仍需形成清单。
|
||||
|
||||
#### 修改 3:apply 实现过程增强
|
||||
|
||||
**分步实现**:建议按 Controller → Service → MQ/异步组件 → Consumer/下游 顺序,每完成一层验证后再继续。
|
||||
|
||||
**首模块完成后对齐检查**:完成第一个接口/模块后,对比 OpenSpec design/tasks,标记"已完成/TODO";核心功能(加密/验签/核心业务逻辑)不允许空实现或纯 TODO 注释。
|
||||
|
||||
**快速失败**:连续返工 ≥ 2 次时,暂停并重新执行 pre-apply checkpoint 或向用户汇报。
|
||||
|
||||
#### 修改 4:apply 退出条件增强
|
||||
|
||||
新增退出条件:
|
||||
- ✅ 已完成 pre-apply checkpoint(如触发条件满足),技术栈清单已写入 `decisions.md`
|
||||
- ✅ 核心功能已实现或明确标注"待联调",无纯 TODO 占位
|
||||
|
||||
### 预期效果
|
||||
|
||||
| 指标 | 当前 | 目标 | 改善 |
|
||||
|------|------|------|------|
|
||||
| 返工次数 | 4-5 次 | 0-1 次 | -80% |
|
||||
| 核心功能空实现率 | 高(3/3 核心功能) | 0% | -100% |
|
||||
| 实现时间(含返工) | 2 小时 | 1.5 小时 | -25% |
|
||||
| 前置调研时间 | 0 分钟 | 15-20 分钟 | +20 分钟 |
|
||||
|
||||
**ROI 分析**:
|
||||
```
|
||||
投入:15-20 分钟调研
|
||||
回报:节省 60 分钟返工 + 避免核心功能遗漏
|
||||
ROI = (60 - 20) / 20 = 200%
|
||||
```
|
||||
|
||||
### 复杂度评估
|
||||
|
||||
**本次修改复杂度**:中等
|
||||
- 文本增量:+55 行(从 281 行 → 336 行,+20%)
|
||||
- 概念层级:+1 层(apply 内部增加 Pre-apply Checkpoint 子阶段)
|
||||
- 强制规则:+5 条(pre-apply 触发条件、执行步骤、输出要求)
|
||||
|
||||
**整体复杂度**:高(但合理)
|
||||
- 总行数:606 行 → ~700 行(+15%)
|
||||
- 阶段数:9 个(不变)
|
||||
- 门控数:4 个 → 6 个(+propose checkpoint, +pre-apply checkpoint)
|
||||
|
||||
**简化设计**:
|
||||
- 采用方案 B(简化版),相比完整方案减少 45% 文本量和 44% 规则数
|
||||
- 保留核心价值(前置调研、技术栈清单、核心功能质量保证)
|
||||
- 去掉过度约束(严格执行顺序、频繁检查点、详细操作模板)
|
||||
|
||||
### 适用场景
|
||||
|
||||
✅ **强烈推荐**:
|
||||
- 中等及以上规模需求(3+ 接口或涉及多模块)
|
||||
- 涉及项目现有基础设施(MQ/统一请求结构/工具类)
|
||||
- 第一次在该项目实现类似功能
|
||||
- 设计文档提到"参考 XXX 实现"
|
||||
|
||||
🟡 **可选执行**:
|
||||
- micro 分档的简单需求(可缩短为 5-10 分钟)
|
||||
- 纯数据处理或工具脚本(技术栈熟悉)
|
||||
|
||||
❌ **不推荐**:
|
||||
- 紧急热修复(时间紧急)
|
||||
- 一次性脚本(不涉及项目标准)
|
||||
|
||||
### 相关文档
|
||||
|
||||
- 执行复盘:`skill-workbench/docs/sm-flow/sm-flow-execution-review-shandong-intent-sync.md`
|
||||
- 更新日志:`skill-workbench/docs/sm-flow/phase-contracts-v4.1-changelog.md`
|
||||
- 修改文件:`.agents/skills/sm-flow/references/phase-contracts.md`
|
||||
|
||||
## v4.2:可验证 Checkpoint 与执行机制增强(2026-06-24)
|
||||
|
||||
### 背景
|
||||
|
||||
基于"lookup-knowledge-integration"的执行复盘(`skill-workbench/docs/sm-flow/sm-flow-optimization-suggestions.md`),发现一个结构性问题:
|
||||
|
||||
**约束是"软性"的,缺少执行机制**
|
||||
|
||||
- **规则清楚但可绕过**:6 条硬约束写得很清楚"不得跳过 commit",但 agent 仍然能跳过
|
||||
- **标准模糊无法判断**:commit 阶段说"检查是否可执行",但不知道具体检查什么
|
||||
- **流程无强制顺序**:archive 建议"先 devflow 后 handoff",但 agent 可能先创建 handoff
|
||||
|
||||
**核心认知**:规则是"描述性"的(说应该做什么),缺少"执行性"的机制(强制检查、文件依赖)。
|
||||
|
||||
### 核心改进:从软性约束到硬性检查
|
||||
|
||||
v4.2 不增加新阶段或新规则,而是**把现有约束变成可验证的 checkpoint**:
|
||||
|
||||
| 改进点 | Before(v4.1) | After(v4.2) |
|
||||
|--------|---------------|--------------|
|
||||
| Commit 标准 | "检查是否可执行"(模糊) | 文件完整性 + 一致性检查清单(具体) |
|
||||
| Apply 门控 | "已通过 commit"(软性) | 检查 `.committed` 文件存在(硬性) |
|
||||
| Archive 顺序 | "应该先 devflow"(建议) | 5 步强制顺序 + 自检(必须) |
|
||||
|
||||
### 详细修改
|
||||
|
||||
#### 修改 1:Commit 阶段增加可验证 Checkpoint
|
||||
|
||||
**文件完整性检查**(必须全部通过):
|
||||
- [ ] `proposal.md` 存在,包含问题描述(≥50字)、建议方案(≥100字)、范围/非目标
|
||||
- [ ] `design.md` 存在,包含架构设计、数据结构(≥1个)、关键决策(≥2条)
|
||||
- [ ] `specs/` 目录存在,至少 1 个 functional-spec.md 包含 ≥3 个 requirement
|
||||
- [ ] `tasks.md` 存在,包含 ≥5 个可执行子任务,每个任务有验收标准
|
||||
|
||||
**一致性检查**(必须通过):
|
||||
- [ ] proposal 核心概念 → design 有对应设计
|
||||
- [ ] design 关键决策 → tasks 有对应实现
|
||||
- [ ] tasks 验收标准可验证(非"正确实现"这类模糊描述)
|
||||
|
||||
**标记文件**:检查通过后,创建 `openspec/changes/{slug}/.committed` 文件
|
||||
|
||||
#### 修改 2:Apply 阶段增加前置门控
|
||||
|
||||
**前置门控检查**(硬约束):
|
||||
1. 检查 `openspec/changes/{slug}/.committed` 文件是否存在
|
||||
2. 如不存在:
|
||||
- 汇报:Draft OpenSpec 未通过 commit 检查
|
||||
- 列出缺失的 checkpoint 项
|
||||
- 询问用户:是否补做 commit,或明确跳过(需显式确认)
|
||||
|
||||
#### 修改 3:Archive 阶段增加强制执行顺序
|
||||
|
||||
**5 步 Checklist**(不得跳过或重排):
|
||||
1. **创建 devflow 档案**(必需):brief.md + evidence.md + decisions.md + acceptance.md
|
||||
2. **更新索引**(必需):在 `devflow/index.md` 追加一行
|
||||
3. **标记 OpenSpec**(必需):创建 `.archive-ready` 文件
|
||||
4. **向用户汇报**(必需):列出文件、验证分类、剩余风险,询问是否归档
|
||||
5. **执行 OpenSpec Archive**(可选):用户确认后调用 `openspec-archive-change`
|
||||
|
||||
**自检**:Step 4 前检查 Step 1-3 是否都完成
|
||||
|
||||
### 新增门控文件
|
||||
|
||||
| 文件 | 创建时机 | 用途 |
|
||||
|------|----------|------|
|
||||
| `.committed` | commit 阶段退出时 | apply 阶段前置门控依据 |
|
||||
| `.archive-ready` | archive Step 3 | 标记归档准备就绪 |
|
||||
|
||||
### 预期效果
|
||||
|
||||
**解决的问题**:
|
||||
- ❌ Commit 标准不明确 → ✅ 有具体检查清单,无法模糊通过
|
||||
- ❌ Apply 可能基于不完整 OpenSpec → ✅ 门控文件强制阻止
|
||||
- ❌ Archive 容易遗漏 devflow → ✅ 强制顺序确保完整
|
||||
|
||||
**量化指标**:
|
||||
- Commit 阶段跳过率:-100%(有 checklist 无法跳过)
|
||||
- Apply 基于不完整 OpenSpec:-100%(门控阻止)
|
||||
- Archive 遗漏 devflow:-100%(强制顺序)
|
||||
|
||||
### 设计原则
|
||||
|
||||
#### 1. 可验证性
|
||||
将模糊标准转为可测量的具体要求:
|
||||
- Before: "检查 OpenSpec 是否可执行"
|
||||
- After: "proposal ≥50字、design ≥1个数据结构、specs ≥3个 requirement"
|
||||
|
||||
#### 2. 门控文件
|
||||
用文件存在性替代软性判断:
|
||||
- Before: 描述"已通过 commit"
|
||||
- After: 检查 `.committed` 文件存在
|
||||
|
||||
#### 3. 强制顺序
|
||||
用 checklist 替代建议性描述:
|
||||
- Before: "应该先创建 devflow"
|
||||
- After: "Step 1 devflow → Step 2 索引 → Step 3 标记 → Step 4 汇报"
|
||||
|
||||
### 复杂度评估
|
||||
|
||||
**本次修改复杂度**:低-中等
|
||||
- 文本增量:+80 行(phase-contracts.md +40 行,archive-rules.md +40 行)
|
||||
- 概念增加:2 个门控文件
|
||||
- 规则增强:3 个阶段的检查清单
|
||||
|
||||
**整体复杂度**:高(但更可靠)
|
||||
- 总行数:~700 行 → ~780 行(+11%)
|
||||
- 门控数:6 个 → 8 个
|
||||
|
||||
**权衡**:
|
||||
- ✅ 收益:彻底解决"跳过阶段"问题
|
||||
- ⚠️ 成本:增加 80 行文本,更多检查项
|
||||
|
||||
### 与 v4.1 的关系
|
||||
|
||||
| 版本 | 核心改进 | 解决问题 |
|
||||
|------|----------|----------|
|
||||
| v4.1 | Pre-apply Research Checkpoint | apply 前置调研不足,导致返工(4-5次 → 0-1次) |
|
||||
| v4.2 | 可验证 Checkpoint + 门控文件 | 约束是软性的,agent 容易跳过阶段 |
|
||||
|
||||
**互补关系**:
|
||||
- v4.1 解决"调研不充分导致返工"(质量问题)
|
||||
- v4.2 解决"缺少执行机制导致跳过阶段"(流程问题)
|
||||
|
||||
### 适用场景
|
||||
|
||||
**✅ 所有场景(无例外)**
|
||||
|
||||
v4.2 的改进是执行机制层面的,不涉及业务逻辑:
|
||||
- 无论 micro/standard/complex,都需要 commit 检查
|
||||
- 无论需求大小,都需要 apply 前置门控
|
||||
- 无论项目规模,都需要 archive 强制顺序
|
||||
|
||||
**快速模式**:可以简化产物(如 tasks 只需 3 个),但**不能跳过门控**。
|
||||
|
||||
### 后续演进方向(v5.0 候选)
|
||||
|
||||
如果 v4.2 执行良好但仍有问题,考虑:
|
||||
|
||||
1. **流程状态文件** `.sm-flow-state`
|
||||
- 记录当前阶段、已完成阶段、时间戳
|
||||
- 支持断点续做
|
||||
|
||||
2. **更多门控文件**
|
||||
- `.context-done`、`.grill-done`、`.apply-done`
|
||||
- 形成完整的阶段间依赖链
|
||||
|
||||
3. **违规自检机制**
|
||||
- 每个阶段退出前,自动检查 6 条硬约束
|
||||
|
||||
4. **进度可视化**
|
||||
- 每次开始时,汇报进度条
|
||||
|
||||
**判断依据**:如果 v4.2 后仍频繁出现跳过阶段,再引入更重的机制。
|
||||
|
||||
### 相关文档
|
||||
|
||||
- 执行复盘:`skill-workbench/docs/sm-flow/sm-flow-optimization-suggestions.md`
|
||||
- 更新日志:`skill-workbench/docs/sm-flow/phase-contracts-v4.2-changelog.md`
|
||||
- 修改文件:
|
||||
- `.agents/skills/sm-flow/references/phase-contracts.md`
|
||||
- `.agents/skills/sm-flow/references/archive-rules.md`
|
||||
|
||||
Reference in New Issue
Block a user