# TDD 验收契约 · {{产品名}} > 给 Coding Agent:这份文件定义本次开发的全部 required 终止条件。读取同目录上游产物后持续实现、验证、修复和回归;任何验收行未通过都不得结束。 > **执行门禁(严禁跳过)**:完整 `/goal` 在改任何代码前,必须提取本文件全部验收 ID,创建 `output/tests/TDD验收结果.md` 并全量置为 `pending`。只有本轮严格按“验证方式”真实执行并留下证据,才能改为 `pass`。未建台账先写代码、写完后倒填、用旧日志或推测标 `pass`,均视为 TDD 没有执行。 > 结果文件元信息固定写成 `- contract_sha256: sha256:<64位hex>` 与 `- run_started_at: `,不得改字段名。 > 完成前必须用 tdd-master 校验器的 `--result` 模式或等价脚本机械核对契约与结果;严禁人工目测后宣布全绿。 ## 0. 契约元信息 - work_type: `feature | bugfix` - source_contract: `requirements.md | bugfix.md` - scope: `MVP` - source_revision: `{{上游 revision 或基线说明}}` - generated_from: `PRD/bugfix + 设计追溯矩阵 + 技术/修复方案 + MVP 页面与高保真原型` ## 1. 完成定义 同时满足以下条件才算完成: 1. 安装、构建、启动与全部冒烟验收通过。 2. 本文件 §2–§5 的每一条验收行都通过,没有跳过、弱化或删除。 3. PRD/bugfix 中本期 required Source IDs 均被验收行覆盖。 4. Design 中全部 MVP 页面、弹窗、关键状态与交互均已落地;每页完成同状态集、同内容区尺寸的原型/成品截图对照。 5. 最终提供 fresh verification evidence:实际命令、退出码、测试结果和截图对;不能用“应该通过”或“UI 自动化已过”代替视觉验收。 ## 2. 冒烟门禁 > 保持 1–3 条。至少覆盖安装/构建/启动和一条核心用户旅程;同一条可包含多个连续动作。 | ID | Source IDs | Design IDs / 产物 | 场景与操作 | 可观察通过标准 | 验证方式 | | :--- | :--- | :--- | :--- | :--- | :--- | | `SMOKE-01` | `{{REQ/AC;纯工程启动可写 -}}` | `{{PAGE/SEQ/技术方案;无则 -}}` | `{{从干净环境启动并完成核心入口操作}}` | `{{明确、可观察的结果;含无阻断错误}}` | `{{构建/启动命令 + 浏览器或 E2E}}` | ## 3. 功能与流程验收 > 按用户可观察结果和核心旅程组织,不按函数、组件、页面或测试层拆分。一条场景可覆盖多个 Source/Design ID。 | ID | Source IDs | Design IDs / 产物 | 场景与操作 | 可观察通过标准 | 验证方式 | | :--- | :--- | :--- | :--- | :--- | :--- | | `FLOW-01` | `{{REQ-Fxx-xx, AC-Fxx-xx}}` | `{{PAGE/API/SEQ ID + 真实产物}}` | `{{角色在明确前置条件下完成一段核心业务操作}}` | `{{页面、数据和业务结果必须同时满足什么}}` | `{{浏览器 E2E / API / 集成测试}}` | ## 4. 设计落地验收 > 页面清单中每个 MVP 页面恰好对应一行,不合并多个 PAGE ID。相同路由下的紧密状态可合并;会造成不同实现或遗漏风险的弹窗、空/错/成功状态必须明确写出。验证真实运行页面,不验证静态 HTML 文件存在。通过标准必须从原型提取具体锚点,禁止只写“与原型一致”。 | ID | Source IDs | Design IDs / 产物 | 场景与操作 | 可观察通过标准 | 验证方式 | | :--- | :--- | :--- | :--- | :--- | :--- | | `DESIGN-01` | `{{对应 REQ/AC 或 design-derived: DEC-xxx}}` | `{{PAGE-Fxx-xx; pages/实际页面文档.md; pages/实际高保真.html}}` | `{{打开真实页面并触发与原型相同的状态集}}` | `{{结构=区域与顺序;组件=类型与数量;内容=关键文字/数据;交互=入口与反馈;视觉=布局/间距/字体/色彩层级;原生适配=允许差异或无}}` | `{{同状态集原型/成品 PNG 截图对 + 独立视觉复核;UI 自动化不能代替}}` | ## 5. 风险触发验收 > 没有真实高风险就写“本期无额外风险验收”,不要为凑类别造用例。存在金额、权限、隐私、重要数据、不可逆操作、外部契约或明确 NFR 时,每个独立风险至少一行。 | ID | Source IDs | Design IDs / 产物 | 场景与操作 | 可观察通过标准 | 验证方式 | | :--- | :--- | :--- | :--- | :--- | :--- | | `RULE-01` | `{{REQ/AC/NFR}}` | `{{API/DATA/DEC/技术方案章节}}` | `{{触发关键业务约束或高影响失败路径}}` | `{{系统必须守住的业务/数据/权限结果}}` | `{{单元/集成/API/E2E 中成本最低且可靠的一种}}` | ## 6. 本期不阻塞项 > 只写明确延后的质量项及理由,不生成测试 ID,不计入 GOAL。 - `{{例如:完整无障碍审计——PRD/NFR 未要求,MVP 延后}}` - `{{例如:高并发压力测试——当前无并发/SLA 指标,MVP 延后}}`