# 回归规则

| 风险 | 约束 |
| --- | --- |
| 误改文件 | Git 工作区清洁检查、task 边界、owned paths |
| 漏测 | 每个任务必须运行 `test_command` |
| 伪完成 | `passes=true` 必须建立在 fresh evidence 上 |
| 文档漂移 | 规则、模板、命令改动后同步更新对应文档 |

## 基本要求

- 文档改动至少运行 `git diff --check`。
- 代码改动必须运行与任务风险匹配的验证命令。
- 不允许在未验证的情况下手工把任务标记为通过。

## 需求到验证的左移规则

- 测试从需求收敛阶段开始介入，不允许等代码完成后才第一次补测试范围。
- 任何 P0/P1 需求进入实现前，至少要有 Requirement ID、业务规则、正向示例、异常示例、测试层级映射、测试数据说明和证据路径。
- 任何 P0/P1 或高风险测试进入脚本实现前，必须先定义测试意图和 Oracle；写操作、权限、状态机、异步链路必须包含副作用或无副作用验证。
- 创建或重建 `task.json` 时必须一次性补齐完整 QA 合约；后续不得依赖人工逐项补 `requirement_ids`、测试数据、Oracle、开发验证、最终验收验证、证据路径或整链路验证。
- `docs/testing/TRACEABILITY_MATRIX.md`、验收示例和验证矩阵属于实现前 truth source；缺失时应优先补齐，而不是继续猜测实现。
- 修改业务代码时必须同时检查测试影响；相关测试缺失时，先补测试骨架或测试计划，再继续实现。
- Stage 2 必须拦截假测试，包括只断言 200 / truthy、只测 happy path、mock 被测逻辑、缺少业务断言、缺少执行证据或缺少来源绑定的测试。

## 完成定义

- 对外部系统、既定开源栈、第三方平台或真实环境的集成型需求，完成定义至少包含：真实依赖接上、真实请求走通、成功态证据、失败态证据。
- 页面能打开、本地接口能返回、单元测试通过，都不足以声称正式 `FR-*` 已完成。
- 每个 `feature_impl` 必须同时具备两段证据：编码过程中的 `development_validation`，以及代码写完后从用户 / 业务闭环视角重新运行的 `acceptance_validation`。
- 每个 `feature_impl` 至少需要故事级完整链路验收证据；只跑单元测试、局部 smoke、affected tests、静态检查或 `git diff --check` 不足以完成任务。
- 如果当前只是原型 / spike / exploratory 路径，不要把演示性交付直接标成正式 `FR-*` 完成；应改用 `PROTO-*`、`SPIKE-*`、`INTEGRATION-*` 等单独标识，或在 spec / plan 中显式记录该 FR 仍处于未完成集成态。
- 单元测试只能证明本地逻辑；集成型需求还必须补环境 smoke、E2E、真实下游连通性验证和验收证据 note。
- Release 完成必须有发布候选级跨故事整链路、P0/P1 回归、契约/API、E2E/视觉或等价系统级验证；不得把各子任务局部测试简单相加当作整测。
- Stage 17 只负责 fresh evidence、affected tests 和 P0/P1 回归确认，不负责第一次定义需求测试范围。
- 重构任务必须显式声明行为不变约束；接口、用户路径、数据结构和兼容逻辑不能在未说明时被顺手改变。
- 重构结束前应按声明范围清理无用变量、无用函数、无用组件、无用类型、无用 import、临时代码和过期注释。

## 技术栈验证基线

| 改动类型 | 最小验证 |
| --- | --- |
| 文档 | `git diff --check` |
| JSON | `ConvertFrom-Json` |
| PowerShell | Parser 语法检查 |
| TypeScript / 前端 | lint、typecheck、build |
| API 或业务流程 | 单元测试、集成测试或 E2E，按风险选择 |
