test · diff

git:20260725.cfce686 to git:20260727.9ce3b8d

22 added, 15 removed. Audit A to A.

---
name: test
- description: 当需要执行完整测试、E2E、缺陷重放,或判断功能、修复、迁移与交付承诺是否真的成立时使用。从真实入口走到结果真正生效或被真实消费者观察的一端,以可重放证据裁决被测承诺。实现中的聚焦反馈归 `dev`,代码与设计裁决归 `review`,验收未定归 `shape`。
+ description: 当需要为功能、修复、迁移或交付设计并执行完整测试、E2E、缺陷重放,或裁决当前成果能否交付时使用。从真实入口走到真实结果端,以 TestPlan 与 Test Report 形成可重放证据。聚焦实现检查归 `dev`,代码与设计裁决归 `review`,验收尚未成立归 `shape`。
---
# test
- ## 让承诺走到真实结果端
+ ## 让承诺接受真实结果端的反驳
- 测试不是确认实现者讲得通,而是把被测承诺送进真实系统。真实结果端,是变化真正生效或被真实消费者观察的地方。
+ 测试不是替实现寻找通过理由,而是先设计怎样推翻它,再把这些问题送进真实系统。真实结果端,是变化真正生效或被真实消费者观察的地方。`test-plan.md` 固定准备证明的承诺、风险、用例和证据边界;`test-report.md` 从第一条实际执行开始承接发生过的动作、观察、失败和终态,最后给出能否交付的裁决。执行是两者之间不断校准的现实过程,不另造第三份产物。
- 当前任务有 `context.md` 时,读取任务承诺和相关 Current Artifacts。钉住实际被测的版本或构建、环境、身份与数据;现成测试、代码结构和作者说明只帮助寻找证据,不自动代表覆盖。
+ 当前任务有 `context.md` 时,先读取它和 Current Artifacts,确认任务承诺、被测版本、环境与授权。计划从用户结果、原始缺陷、真实 diff、公共契约和受影响消费者长出来,不从通用检查清单长出来。每个承重场景使用稳定 ID,写到下一位无需现场发明关键输入、步骤、终态观察和清理方式就能执行。开跑前反过来攻击计划:如果产品仍然错误,它是否可能全部变绿?
- 每项重要结论都走通:
+ 计划会被执行修订。新证据暴露了原计划没有接住的风险,就补入同一风险模型并继续;事实改变了验收或任务边界,交回 `shape`;价值、风险接受和越出授权的环境后果由用户决定。已知但明确不在当前承诺内的问题可以记录,不能混入 gate 改写本轮结论。
- ```text
- 承诺 → 可重放动作 → 实际终态 → 结论边界
- ```
+ ## 让执行留下当时的事实
- 根据对象选择自动化测试、API、CLI、浏览器、数据库、日志、外部接收方或完整用户旅程。请求成功、命令退出零、页面提示和测试变绿只证明实际观察到的那一层;涉及异步、持久化、权限、通知或下游消费时,继续看到真实结果端。缺陷修复保留原始触发条件,并在安全可得时用同一入口对照修前与修后。
+ 先钉住实际运行的代码、构建物、环境、身份、数据和路由,再从承诺对应的真实入口走到真实结果端。UI 属于承诺时亲自走 UI;API、数据库、日志和下游系统用于闭合对应层级的终态,不能替用户旅程冒充 E2E。请求成功、命令退出零、页面提示完成和测试变绿,都只证明它们实际观察到的那一层。
- 让承诺、真实变化、消费者和失败代价决定深度。局部低风险承诺可以用一条直接路径结束;跨边界、跨状态或后果较重的承诺要覆盖关键路径、可信失败和受影响的既有行为。阻塞只截断依赖它的结论,其他证据继续取得。
+ 执行每个用例时同步更新 `test-report.md`,先记录真实动作和观察,再写状态;原始请求、响应、SQL、日志、截图或临时重放材料放入 `evidence/`,正文解释它们证明什么。失败、重跑和环境变化保留历史,不能用后来的绿色覆盖先前红色,也不能从 TestPlan 或记忆补写没有发生过的步骤。发现产品失败先留下可重放证据;只有用户已要求或授权修复时才交给 `dev`,随后按受影响范围重测,否则按失败裁决交付,不把只读测试扩成实现。
- 能安全准备的条件自行准备。测试后果会越过授权边界时先让用户决定。现场事实改变承诺或验收标准时交回 `shape`;发现产品问题时先保留失败证据,只有用户已要求或授权修复时,才交给 `dev` 修复并重测;否则按失败裁决交付,不在 Test 中暗改产品或把只读测试扩成实现。
+ 阻塞只截断依赖它的结论,其余安全测试继续。测试产生的数据、进程、路由和权限也是结果的一部分:清理要有回读,保留要有明确交接,不能留下无人知道是否仍在运行的现场。
- ## 用证据裁决被测承诺
+ ## 让报告配得上裁决
- 每项承诺只能裁决为成立、失败或证据不足。没有执行、只执行一半或结果不稳定的部分不能写成成立;保留真实失败,不用后一次绿色覆盖前一次矛盾。停止时,关键承诺已有直接证据,剩余未知不会改变裁决,或已经成为具名证据缺口。
+ 报告必须让没参加执行的人独立知道:测的是哪个对象,为什么这些场景足够,实际怎样执行,系统最终发生了什么,哪些承诺成立或失败,哪些仍未证明,以及结论支持到哪里。每个计划用例在覆盖台账中恰好拥有一个当前状态;总体结论由承重风险和证据决定,不由通过率平均。
- 结论只回答被测承诺在该对象与环境中是否成立,不批准代码质量、设计或未接触的系统。要把自动化测试变成产品的长期保护时,它属于实现资产,由 `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):
- 简单检查直接在对话交付对象、环境、动作、终态、裁决和边界。当前任务有 `context.md`,且非平凡测试需要保存或交接时,写 `<task-workspace>/test/test.md`,以 [test.demo.md](references/templates/test.demo.md) 为唯一结构来源,并更新 Current Artifacts。正文放不下且需要独立核验时才建立 `evidence/`。
+ ```text
+ <task-workspace>/test/
+ ├── test-plan.md
+ ├── test-report.md
+ └── evidence/ # 需要保存原始证据时使用,不是第三份测试契约
+ ```
+
+ 落盘后把 `test-plan.md` 与 `test-report.md` 登记到 `context.md` 的 Current Artifacts。简单且一个聚焦检查就能完整证明的变化可以直接在对话交付对象、环境、动作、真实终态、裁决和边界;一旦需要计划、跨入口执行、持续状态或正式裁决,就使用这两份产物,不把它们压成摘要。
+
+ Test 不替 `review` 批准设计或代码质量,不在测试中暗改产品,也不把没有接触到的系统写成已经验证。要把自动化测试变成产品的长期保护时,它属于实现资产,由 `dev` 在当前授权内纳入代码。