Files
mini-openclaw/docs/project-process/01-requirement.md
2026-09-28 16:34:10 +08:00

5.5 KiB
Raw Permalink Blame History

阶段 ① 需求与规格(Requirement & Spec)

定义:把用户意图变成一份"实现者(人或 agent)无需猜"的规格文档。规格完备的标志是:实现者不发明任何决策就能把改动做出来。 输入:需求描述 / issue / 用户反馈 / 变更请求。 输出:规格文档(按下方 7 段结构 + BR/E/AC 编号)。 进入下一阶段(② 架构设计):六道完备性门全部通过。


1. 要求(Requirements)

1.1 进入条件

  • 需求来源明确(谁提的、要解决什么问题、对哪些角色生效)。
  • 明确本轮范围 vs 明确不在本轮范围(out-of-scope 与 in-scope 同等重要)。
  • 单一交付面还是多交付面已确认(web / Electron 主进程 / 硬件网关 / 设置面板……每个交付面都会让规格多一段)。

1.2 完成条件(DoD)

  • 七段结构齐全(多交付面则第 3 段重复),每个领域术语都进术语表
  • 每条业务规则 BR-xx 可测试(能说清"什么输入让它过、什么输入让它挂")
  • 每条规则隐含的失败路径都有 E-xx,异常"用户可见消息 ↔ 后端错误码"绑定
  • 每条 BR-xx / E-xx 至少被一条 AC-xx 引用;验收含正常/异常/边界三类用例
  • 无阻塞当前迭代的未决问题(或已把阻塞规则移出范围)
  • 决策记录(Decision Record)已写明已定决策与被否掉的替代方案

2. 规则(Rules)

编号 规则
R-1.1 行为必须有 id:业务规则 BR-01…,异常场景 E-01…,验收标准 AC-01…。散文式描述不能进入规格。
R-1.2 id 只追加不重排;规则废弃时标记 withdrawn 并保留编号(提交、测试、评审已引用旧 id)。编号按规格独立,不全局递增。
R-1.3 每条 BR-* 只对应一个实现点。一条规则要碰三条无关代码路径 = 它其实是三条规则。
R-1.4 每条 E-* 必须绑定"各受影响面展示给用户的消息"与"产生它的后端错误码",前后端不能静默漂移。
R-1.5 每条 AC-* 用 Given / When / Then 三元组,且引用它覆盖的 BR-*/E-* id。无验收引用的规则/异常 = 未验证,阻塞进入实现。
R-1.6 未决定的事项显式标记(needs-decision / open question,带 owner 与期限),禁止用"貌似合理的编造值"填空。
R-1.7 截图/线框图只表达布局,不替代规则:不得用截图当 spec,除非它同时写清状态转换与权限。
R-1.8 反模式禁止:只写 happy path(§5/§6 才是实现风险所在)、把字段类型当业务规则(BR-* 描述系统要决定什么,不是存什么)、整段照抄他项目(可复用段清单,内容必须基于本目标事实重写)。

3. 输出规范

3.1 规格文档结构(7 段;每多一个交付面,第 3 段重复一次 → 8/9 段)

1. Requirement Overview      业务背景、in-scope / out-of-scope、受影响角色、术语表
2. Data Model & Interface    新增/变更的表(列类型、可空性)、服务契约、公开端点(请求/响应形状)、枚举、消息/事件载荷
   Contract
3. Surface Specification     每个交付面:页面骨架、组件粒度、每个有状态视图的状态机、动作列表(含守卫权限)
4. Business Rules            编号 BR-01…,每条一条可测试语句
5. Exception Scenarios       编号 E-01…,触发条件 + 各面用户可见消息 + 后端错误码
6. Acceptance Criteria       编号 AC-01…,按角色分组,Given/When/Then,覆盖正常/异常/边界
7. Open Questions &          未决项(owner + needed-by)+ 已定决策与被否方案
   Decision Record

参考模板:vendor/better-harness/references/bootstrap/examples/frontend-web-spec.md(前端表面)、backend-service-spec.md(多交付面)、mobile-app-spec.md(离线/权限/版本)。复用结构,不复用表名/端点/阈值/角色名。

3.2 六道完备性门(任一不过,禁止进入实现)

门 判定
Term gate 术语门 规则中每个领域术语都在术语表里
Contract gate 契约门 表面展示/提交的每个字段都在 §2 里有类型,每个枚举值都列出
Rule gate 规则门 每条 BR-* 可测试(评审者能说出"输入 X 通过、输入 Y 失败")
Exception gate 异常门 每条规则隐含的失败路径都有 E-*;静默失败是规格缺陷,不是实现细节
Coverage gate 覆盖门 每条 BR-*/E-* 至少被一条 AC-* 引用;验收含至少一个边界用例
Decision gate 决策门 本轮范围内没有未决问题阻塞规则;要么移出范围,要么解决

3.3 交付物清单

  • 规格文档(本地草稿放 docs/plans/,不入库,见 .gitignore;需入库的规格随 PR 放 docs/ 对应目录,命名 <日期>-<主题>-spec.md)
  • (可选)给 UI 需求的面:指向 04-ui-spec.md 的表面规格拆分

4. 轻量路径(小改动)

  • 一行修复 / 文案 / 纯内部重构:规格可缩为 PR 描述中的"范围 + BR/AC 各 1-3 条",但 id 与可追溯要求不变。
  • 无法写清验收标准的改动 = 规格未完成,不得进实现。

5. 相关文档