---
name: test
description: 当需要为功能、修复、迁移或交付设计并执行完整测试、E2E、缺陷重放，或裁决当前成果能否交付时使用。从真实入口走到真实结果端，以 TestPlan 与 Test Report 形成可重放证据。聚焦实现检查归 `dev`，代码与设计裁决归 `review`，验收尚未成立归 `shape`。
---

# test

## 让承诺接受真实结果端的反驳

测试不是替实现寻找通过理由，而是先设计怎样推翻它，再把这些问题送进真实系统。真实结果端，是变化真正生效或被真实消费者观察的地方。`test-plan.md` 固定准备证明的承诺、风险、用例和证据边界；`test-report.md` 从第一条实际执行开始承接发生过的动作、观察、失败和终态，最后给出能否交付的裁决。执行是两者之间不断校准的现实过程，不另造第三份产物。

当前任务有 `context.md` 时，先读取它和 Current Artifacts，确认任务承诺、被测版本、环境与授权。计划从用户结果、原始缺陷、真实 diff、公共契约和受影响消费者长出来，不从通用检查清单长出来。每个承重场景使用稳定 ID，写到下一位无需现场发明关键输入、步骤、终态观察和清理方式就能执行。开跑前反过来攻击计划：如果产品仍然错误，它是否可能全部变绿？

计划会被执行修订。新证据暴露了原计划没有接住的风险，就补入同一风险模型并继续；事实改变了验收或任务边界，交回 `shape`；价值、风险接受和越出授权的环境后果由用户决定。已知但明确不在当前承诺内的问题可以记录，不能混入 gate 改写本轮结论。

## 让执行留下当时的事实

先钉住实际运行的代码、构建物、环境、身份、数据和路由，再从承诺对应的真实入口走到真实结果端。UI 属于承诺时亲自走 UI；API、数据库、日志和下游系统用于闭合对应层级的终态，不能替用户旅程冒充 E2E。请求成功、命令退出零、页面提示完成和测试变绿，都只证明它们实际观察到的那一层。

执行每个用例时同步更新 `test-report.md`，先记录真实动作和观察，再写状态；原始请求、响应、SQL、日志、截图或临时重放材料放入 `evidence/`，正文解释它们证明什么。失败、重跑和环境变化保留历史，不能用后来的绿色覆盖先前红色，也不能从 TestPlan 或记忆补写没有发生过的步骤。发现产品失败先留下可重放证据；只有用户已要求或授权修复时才交给 `dev`，随后按受影响范围重测，否则按失败裁决交付，不把只读测试扩成实现。

阻塞只截断依赖它的结论，其余安全测试继续。测试产生的数据、进程、路由和权限也是结果的一部分：清理要有回读，保留要有明确交接，不能留下无人知道是否仍在运行的现场。

## 让报告配得上裁决

报告必须让没参加执行的人独立知道：测的是哪个对象，为什么这些场景足够，实际怎样执行，系统最终发生了什么，哪些承诺成立或失败，哪些仍未证明，以及结论支持到哪里。每个计划用例在覆盖台账中恰好拥有一个当前状态；总体结论由承重风险和证据决定，不由通过率平均。

非平凡测试开始前读取 [测试证据链](references/test-evidence-chain.md)。两份正式产物 `<task-workspace>/test/test-plan.md` 与 `<task-workspace>/test/test-report.md` 分别遵循 [TestPlan 模板](references/templates/test-plan.demo.md) 与 [Test Report 模板](references/templates/test-report.demo.md)：

```text
<task-workspace>/test/
├── test-plan.md
├── test-report.md
└── evidence/       # 需要保存原始证据时使用，不是第三份测试契约
```

落盘后把 `test-plan.md` 与 `test-report.md` 登记到 `context.md` 的 Current Artifacts。简单且一个聚焦检查就能完整证明的变化可以直接在对话交付对象、环境、动作、真实终态、裁决和边界；一旦需要计划、跨入口执行、持续状态或正式裁决，就使用这两份产物，不把它们压成摘要。

Test 不替 `review` 批准设计或代码质量，不在测试中暗改产品，也不把没有接触到的系统写成已经验证。要把自动化测试变成产品的长期保护时，它属于实现资产，由 `dev` 在当前授权内纳入代码。
