eo-test — 独立测试(按需闸门)
本 skill 是可选闸门,不是流程节点。默认主路里 eo-implement 自验足够;只有 ../eo-shared/granularity.md §5 风险信号命中(且用户未豁免)或用户显式点名时才调用。价值 = 独立视角:不是把 implement 跑过的再跑一遍,而是审计真实性 + 补 AC 没想到的输入。
职能边界
- 绝对禁令:禁止修改任何非测试相关的业务源码。发现 bug 只记录并建议修复,不自行改源码
- 审计 + 补缺,不重写:先盘点既有测试并审计真实性(断言是否真实覆盖对应 AC、有无被弱化/删除、有无过拟合/硬编码特判),只为缺口编写
- 简版报告:结论 + 未决清单 + 失败定位,写入
eo-doc/changes/<change-id>/test.md;同一 change 再次调用时覆盖重写(历史由 git 兜),速报恒在对话里给
前置条件
- 必须能找到
.eo-project.json。同目录存在.eo-project.local.json时顶层字段覆盖合并(local 优先)。找不到 → 报错退出,提示运行/eo-project-init eo-doc/changes/<change-id>/change.md已存在,相关代码已实现(status: implementing或reviewed)- 调用依据二选一:change.md §6 记录了命中信号且未豁免 / 用户显式点名。都没有 → 告知用户默认主路不需要本闸门,确认仍要跑再继续
工作流程
- 消费 lessons:按 ../eo-shared/lessons.md §1 扫 INDEX 匹配 trigger——尤其环境相关 lesson(起停命令、单次代价)
- 盘点覆盖:读 change.md §2 全部 AC 与 §5 TODO;读 frontmatter
base_commit..HEAD的[<change-id>]提交 diff;建立「AC → 已有证据」映射(既有测试、implement 速报里的一次性执行证据都算输入) - 提取缺口:对照映射列出无覆盖验证点。AC 决定验什么,代码决定拿什么验——从 diff 的分支、默认值、空值与边界处理、类型转换里提取 AC 没写、已有测试也没碰、但代码实际会遇到的输入,补进缺口清单(只按 AC 文字正向推导,验的永远只是「AC 想到的路径」)
- 补缺编写:只为缺口写测试,遵循项目既有测试目录与命名约定;回归资产分层——逻辑密集 / 边界多 / 共享路径的落成永久测试文件,其余以一次性执行证据作证(命令 + 关键输出记入 test.md)
- 执行:跑全部相关测试与必要回归;需要起环境的按 ../eo-shared/ac-spec.md「起环境的纪律」——探测复用、按环境组合分组跑完
- 失败分析:测试代码自身写错 → 直接修正重跑;业务代码 bug → 停手,记入报告并建议走 /eo-fix 循环内分支
- 报告与速报:
test.md 简版(覆盖式):
# <标题> 测试报告 > 日期:YYYY-MM-DD | 基线:<HEAD short-sha> | 结论:通过 / 不通过(失败 x 项) ## 未决清单 | 项 | 失败现象 | 位置 | 修复 commit | 状态 | |----|---------|------|------------|------| | F-1 | <一句话> | <用例/文件> | | open / fixed / verified | ## 缺口补缺摘要 <补了哪些测试、一次性证据清单(命令 + 关键输出)>修复后再跑:核销未决清单(fixed 项复测 → verified / 回 open),覆盖重写报告
对话速报(硬性):
结论:通过 / 不通过(失败 x 项)[基线 <short-sha>] 失败项: 1. <一句话> — <用例/文件> 未覆盖 AC:<AC-x(原因)>;全覆盖则省略此行 下一步:<失败 → /eo-fix 循环内分支修复后回本 skill 复验 / 通过 → /eo-archive 或用户指定> (详细报告见 <test.md 路径>)status 回退边:结论不通过且当前 status 为
reviewed→ 当场置回implementing(见 ../eo-shared/conventions.md §3)
关键约束
- 禁止跨权:严禁修改业务逻辑代码
- 不重写已覆盖项:审计通过的不重编;独立性靠审计 + 独立执行保证
- 测试独立性:用例独立运行,不依赖执行顺序
- 不修改 change 的判据:AC/TODO 的文字不动——发现写漏/写偏记录到报告并建议回 /eo-implement 确认后补写
- 环境不归你所有:探测复用、用完不停;按环境组合分组跑
- 输入不只来自 AC:跳过「读实现取输入」= 只验 AC 想到的路径
- 注释纪律:测试资产同样遵守注释纪律(项目级完整篇:
eo-doc/agent-handbook/comments.md,如已启用)——溯源标注与「为何正确」辩护不进测试注释