### 测试用例设计（写测试时按此检查）

写测试是为了拦住回归，不是"有测试文件"。
**基础习惯照做、不展开**：FIRST（快/独立/可重复/自校验/及时）、金字塔分层（单元为主/集成少量/E2E 只冒烟）、AAA 结构、测试名描述场景、测试数据轻量构造（Object Mother/Builder）、覆盖率不追数字。

**先判该不该写：按层适用**（一句话判据——能写成「当 X 发生时，用户应看到/发生 Y」→ 写测试；只能描述成「看起来更精致/更美观」→ 不写，靠规范与人工验收）：
- **纯逻辑**（校验规则/数据变换/状态规则/重试策略）→ 严格 test-first：先写测试再实现。
- **行为契约**（用户做 X 后应看到/发生 Y 的关键交互，组件/API 皆然）→ 断言用户可见行为；主干断言可先行，mock 细节允许实现后补；不为样式类/className 写断言。
- **视觉样式与纯配置**（颜色/布局/间距/动效；配置/文档/CI）→ 不写测试——断言样式是负资产，改一次样式碎一片；测试绑定记「不适用：<理由>」。

逐条对照检查：
1. **覆盖**：正常路径 + 边界 + 异常/非法输入，不只写业务正例；单测全绿 ≠ 集成正确。
2. **断言**：断言真实输出/副作用，禁止只"不抛错"的空断言；不 mock 被测方法自身。
3. **行为 vs 实现**：走公开 API 测行为；重构后功能不变，测试不应失败。
4. **契约与回归**：覆盖本次改动会破坏的既有行为与相邻模块接口；改公共签名/文案/常量时同步修复受影响既有测试并跑全量，禁止删断言凑绿。
5. **时间敏感分支**：超时/重试/并发分支别真等——超时参数做成可注入，测试传毫秒级极小值或注入可控时钟推进，再断言超时后的行为（走哪个分支/返回什么/资源是否回收）。
6. **隔离确定性**：独立 fixture、可重复跑，不依赖共享状态/执行顺序。
7. **覆盖对账**：每条 TaskCard acceptance 至少对应一个测试用例，或显式标注 non-testable（文档/部署类——证据列写一句理由）；对应关系由 verify 探针 7 矩阵机械核对（判定 covered/partial 须给测试锚点）——写测试前先读卡的 acceptance 列表逐条对齐，勿只覆盖顺手的主路径。