---
name: soloforge-test-plan
description: 定义测试范围、场景、环境、数据、证据和完成判定。
when: 测试计划 / test_plan / scope.code
---

# 测试计划

## 适用性

任务包含代码或运行时行为时使用。设计和切片未稳定前只做风险草案，不宣布最终计划；纯文档任务可明确不适用。

## 事实输入

- 每条需求的验收标准、状态机、权限和非功能指标。
- API、数据、原型和切片契约。
- 真实测试框架、环境、外部依赖、可用数据和 CI 能力。
- `template.md` 与 `examples.md`。

## 关键决策

- 测试层级由风险和可观察性决定，不强行套固定金字塔比例。
- 每条需求至少覆盖正常、错误和边界；权限、并发、恢复、兼容性按适用性补充。
- Evidence 级别必须说明实际运行载体；静态检查或 AI 摘要不能冒充运行时通过。

## 产出方法

1. 从需求和切片构建场景清单，不从模板预填的测试类型反推场景。
2. 为每个场景写前置数据、步骤、预期、清理、执行层级和证据位置。
3. 明确哪些依赖使用真实服务、容器、替身或契约测试，并说明风险。e2e 补充零 API 铁律：被验证链路只用真实页面操作；API/DB 只允许两个角色——事后断言通道、或显式划界的替代侧；mock 替身必须写清「从哪个上下文发出、等价谁」。绕过页面的动作（DB 直插等）显式标注「夹具，非链路验证」。
4. e2e 可移植化：环境/凭据收进单点基线文件+多层 env 注入（任何成员环境可直接跑，禁止脚本写死地址/明文密码）；测试名/数据带防撞后缀机制。
5. e2e 断点续跑设计：阶段化+每阶段幂等+状态文件记录进度，失败时输出「续跑命令」进失败产物。
6. e2e 时序策略分层：networkidle 打底→关键元素显式等待→内容就绪信号优先于固定等待（如「行首列渲染出真实行名才继续」——过早操作会被页面重建覆盖）；恢复动作（改密/登出等）入 finally（实证：改密连锁触发凭证锁 15 分钟）。
7. 造数走真实链路拿凭证（零 SQL 裸插）；数据卫生策略显式声明（全恢复 vs 留存标注）。
8. 给出性能、安全、故障恢复和兼容测试的触发条件与阈值来源。
9. 默认路径为 `docs/build/测试计划.md`；有 project map override 时使用解析后的权威路径。

## 禁止项

- 不得保留通用“单元/集成/E2E”示例行而没有项目场景。
- 不得把“测试通过”写作计划证据，不得在计划里预填执行结果。
- 不得含糊声明「e2e 覆盖一切」——自动化覆盖边界与人工/IT 兜底分工须显式声明（哪些级联降级为稳定断言、哪些由人工或 IT 覆盖）。
- 不得省略失败数据、环境版本或不可重复的外部条件。
- 不得用固定比例、固定工具或固定浏览器列表替代项目适用性分析。

## 交付自检

- 每条适用需求都有正常、错误和边界场景或不适用理由。
- 场景能追溯到切片、接口、页面或数据契约。
- 计划中的命令、环境和数据在当前项目可获得。
- 完成判定能区分通过、失败、阻塞和未执行。

## 权威验证

编辑后先处理 quick 反馈，再调用 `sf_verify action="full" task_id="当前任务ID" artifact="test_plan"`。计划通过不代表测试已执行，执行证据必须进入测试报告。


## 交付前对抗审查

`sf_verify` 通过只证明结构/编译/测试层；语义质量（承接正确性、异常/并发/权限/边界是否可靠、是否含空话或无法证伪的承诺）须经独立对抗审查。advance/deliver 前用 `sf_review action="start" task_id="当前任务ID" artifact="<本产物 kind>"` 发起 per_artifact 审查，用**独立 session/subagent**（非产出本产物的同一会话）执行返回的 prompt、submit findings，按 next_step 完成 K 次独立采样与闭环。deliver 会阻断未完成/未闭环的审查；活跃豁免与被驳回 error 会被注入审查 focus 供独立复核。
