Files
git-learn/.agents/skills/sm-flow/references/fallbacks.md
T
zhuyongxin 71e0b7f801 redesign sm-flow v4.0 as protocol-layer harness
- Reposition sm-flow as orchestration harness over OpenSpec lifecycle
- Adopt 4 user commands (Actions, Not Phases) instead of phase numbers
- Rename all stages to English verbs (clarify through archive)
- Reorder execution: grill before specify to eliminate rework loops
- Simplify core rules from 19 to 6 hard constraints in SKILL.md
- Simplify conflict classification from 4 categories to 2+1
- Switch devflow strategy to decisions.md-only process log during execution
- Upgrade micro mode from artifact compression to gate merging
- Add observable outputs for quality constraints
- Add design review doc and user guide
- Append v4.0 changelog to workflow.md
2026-05-25 17:28:15 +08:00

135 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 降级协议
当子 skill 无法直接调用时,sm-flow 使用内置执行协议接管。这不是能力缺失,而是 harness 的正常能力切换。
使用任何降级前必须先向用户说明:目标子 skill、无法调用原因、降级协议名称。产物中也必须记录"本阶段为降级执行"。
## 降级记录要求
任何降级都必须同时满足以下记录要求:
1. 在对用户的阶段汇报里声明:
- 目标 capability
- 不可用原因
- 使用的降级协议名
2. 在 `decisions.md` 中留下同样的降级记录。
3. 如果当前阶段需要 checkpoint,则降级声明是 checkpoint 完成条件的一部分。
4. 如果没有完成这些声明和记录,该阶段不得视为已完成。
除非某个降级额外说明,否则下面各节默认继承这组通用记录要求,不再重复。
## OpenSpec 提案降级
specify 阶段调用 `openspec-propose` 不可用时使用。propose 阶段使用 sm-flow 内置协议(轻量 proposal),不需要降级。
1. 确认 `openspec/changes/{slug}/proposal.md` 已存在(propose 阶段产出)。
2. 读取 grill 阶段的 decisions.md 记录,获取已确认的需求和决策。
3. 写入 `design.md`,包含:
- 关键技术决策
- 来自 devflow 的上下文约束
- 架构约束和风险
4. 将 `tasks.md` 写成按纵向切片组织的 checkbox 清单。
5. 只为外部可见行为或发生变化的需求编写 specs。
6. 确保 design/specs/tasks 与 proposal 对齐。
7. 如果存在高风险假设,在 specify checkpoint 中向用户汇报。
## OpenSpec 修正降级
当 PRD、devflow、澄清结论、架构审计和 OpenSpec 冲突时:
1. 列出冲突来源:PRD / glossary / ADR / acceptance / compound / OpenSpec。
2. 判断冲突类型:术语、范围、验收、架构、任务拆分、风险。
3. 向用户汇报冲突和推荐修正。
4. 用户确认后,优先修正 OpenSpec proposal/design/specs/tasks。
5. 再同步更新 devflow 文档;不要只改 devflow。
6. 额外记录冲突修正状态到 decisions.md。
## OpenSpec 执行降级
apply 阶段调用 `openspec-apply-change` 不可用时使用。执行依据仍必须是 `openspec/changes/{slug}/`。
1. 阅读 `proposal.md`、`design.md`、`specs/**/*.md` 和 `tasks.md`。
2. 确认 OpenSpec 与 devflow 上下文没有未解决冲突。
3. 确认没有未解决的 user-interview 问题、未判级接口影响或未提交的 Draft OpenSpec。
4. 确认 commit 后已经获得用户明确的 apply 授权;单个 grill 决策确认不能替代 apply 授权。
5. 修改前先检查现有代码。
6. 一次实现一个 OpenSpec task 的纵向切片。
7. 如果用户质疑、代码发现、测试失败或运行行为与 OpenSpec 冲突,做三类判断:
- OpenSpec 不准(规格遗漏、边界未覆盖、验收口径缺失)→ 暂停执行,修正 OpenSpec 并重新提交后继续。
- 代码偏离(实现没按 OpenSpec 做)→ 修代码。
- 不确定根因、涉及设计方向、用户改变目标或范围 → 暂停并等待用户确认。
8. 判断结果、证据、用户确认和 OpenSpec 回写状态必须记录到 `decisions.md`。
9. 用最窄但有效的命令验证每个切片。
10. 只有验证通过或明确记录原因后,才更新 task 状态。
11. 如果失败原因不确定,停止并进入 diagnose。
12. 如果 diagnose 证明规格不准,先修正 OpenSpec,再继续执行。
13. 额外记录任务推进状态和验证状态。
## PRD 降级
specify 阶段调用 `to-prd` 不可用时使用。优先使用 `references/templates.md#brief-模板` 创建 `brief.md`。只有复杂需求、对外协作或用户明确要求 PRD 时,才使用 `references/templates.md#prd-模板` 创建 `prd.md`。
规则:
- 从当前上下文、devflow 记忆和 OpenSpec 产物综合,不要机械复制。
- `brief.md` 或 PRD 用来表达用户价值、范围和验收口径;不能替代 OpenSpec specs/tasks。
- 只有当缺失决策会阻塞 OpenSpec 正确性时,才采访用户。
- 额外记录是否创建了独立 `prd.md`。
## 文档化追问降级
grill 阶段调用 `grill-with-docs` 不可用时使用。
1. 阅读已有词汇表、ADR、相关 OpenSpec 产物和 devflow 项目档案。
2. 先声明每个问题的模式:`evidence-driven` 或 `user-interview`。
3. 对 evidence-driven 问题,先查代码库、文档、OpenSpec 或 ADR,再向用户汇报证据和结论。
4. 对 user-interview 问题,一次只问一个并等待用户确认。
5. evidence-driven 和 user-interview 交替推进,避免攒到一起汇报。
6. 术语确认后立即更新词汇表。
7. 影响实现的澄清必须回写 proposal.md。
8. 只为难以逆转的真实权衡创建 ADR。
9. 额外记录 question pool 和已消费问题。
快速模式的最小问题:
- 术语:这个概念应该使用哪个领域术语?证据是什么?
- 边界:哪些内容明确不在范围内?是否需要用户确认?
- 验收:什么可观察行为能证明它完成?是否已写入 OpenSpec specs?
## 架构审计降级
audit 阶段调用 `zoom-out` 不可用时使用。产出一份短架构审计:
1. 画出输入 → 处理 → 输出。
2. 列出相关模块和调用方。
3. 识别耦合、数据所有权和生命周期风险。
4. 检查是否与词汇表、ADR 和 OpenSpec design 冲突。
5. 用不超过五句话总结最大风险。
6. 如果影响实现,回写 OpenSpec design/tasks。
7. 额外记录审计结论回写状态。
## Diagnose 降级
apply 阶段调用 `diagnose` 不可用时使用。
1. 复现问题,或捕获准确失败信息。
2. 最小化失败案例。
3. 生成 3-5 个假设,并按可能性和验证成本排序。
4. 修改代码前,先添加仪器化或定向检查。
5. 判断根因属于实现问题还是 OpenSpec 规格问题。
6. 如果是实现问题,修复被证明的最小原因。
7. 如果是规格问题,先修正 OpenSpec,再继续 apply。
8. 运行回归验证。
9. 额外记录根因分类和回归结果。
## TDD 降级
apply 阶段调用 `tdd` 不可用时使用。使用纵向切片,不要水平批量写测试:
1. 从 OpenSpec specs 中选择一个外部可见行为。
2. 写一个失败测试。
3. 实现刚好让测试通过的最小代码。
4. 只在测试通过时重构。
5. 对下一个 OpenSpec 行为重复以上步骤。
6. 额外记录当前行为切片的测试状态。