{"slug":"eo-test","title":"eo-test","summary":"按需独立测试视角：风险信号命中或用户点名时，对已实现 change 做测试审计、补缺与重验证，产简版 test.md。严禁修改业务代码。触发：找双新眼睛跑测试 / 独立验证 / 给这个 change 补测试 / /eo-test。 NOT FOR: 与 change 无关的日常跑测试或补单测（直接做即可，不产报告）；默认主路的自验（归 eo-implement）。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-02T16:13:07.548156Z","repo":{"url":"https://github.com/SimpleEve/eo-skills","stars":31,"forks":6,"license":"MIT","updatedAt":"2026-09-24T03:41:00Z"},"bodyHtml":"<hr>\n<h2>name: eo-test\ndescription: |\n按需独立测试视角：风险信号命中或用户点名时，对已实现 change 做测试审计、补缺与重验证，产简版 test.md。严禁修改业务代码。触发：找双新眼睛跑测试 / 独立验证 / 给这个 change 补测试 / /eo-test。\nNOT FOR: 与 change 无关的日常跑测试或补单测（直接做即可，不产报告）；默认主路的自验（归 eo-implement）。</h2>\n<h1>eo-test — 独立测试（按需闸门）</h1>\n<p>本 skill 是<strong>可选闸门</strong>，不是流程节点。默认主路里 eo-implement 自验足够；只有 <a href=\"../eo-shared/granularity.md\">../eo-shared/granularity.md</a> §5 风险信号命中（且用户未豁免）或用户显式点名时才调用。价值 = <strong>独立视角</strong>：不是把 implement 跑过的再跑一遍，而是审计真实性 + 补 AC 没想到的输入。</p>\n<h2>职能边界</h2>\n<ol>\n<li><strong>绝对禁令</strong>：禁止修改任何非测试相关的业务源码。发现 bug 只记录并建议修复，不自行改源码</li>\n<li><strong>审计 + 补缺，不重写</strong>：先盘点既有测试并审计真实性（断言是否真实覆盖对应 AC、有无被弱化/删除、有无过拟合/硬编码特判），只为缺口编写</li>\n<li><strong>简版报告</strong>：结论 + 未决清单 + 失败定位，写入 <code>eo-doc/changes/&lt;change-id&gt;/test.md</code>；同一 change 再次调用时<strong>覆盖重写</strong>（历史由 git 兜），速报恒在对话里给</li>\n</ol>\n<h2>前置条件</h2>\n<ul>\n<li><strong>必须能找到 <code>.eo-project.json</code></strong>。同目录存在 <code>.eo-project.local.json</code> 时顶层字段覆盖合并（local 优先）。找不到 → 报错退出，提示运行 <code>/eo-project-init</code></li>\n<li><code>eo-doc/changes/&lt;change-id&gt;/change.md</code> 已存在，相关代码已实现（<code>status: implementing</code> 或 <code>reviewed</code>）</li>\n<li>调用依据二选一：change.md §6 记录了命中信号且未豁免 / 用户显式点名。都没有 → 告知用户默认主路不需要本闸门，确认仍要跑再继续</li>\n</ul>\n<h2>工作流程</h2>\n<ol>\n<li><strong>消费 lessons</strong>：按 <a href=\"../eo-shared/lessons.md\">../eo-shared/lessons.md</a> §1 扫 INDEX 匹配 trigger——尤其环境相关 lesson（起停命令、单次代价）</li>\n<li><strong>盘点覆盖</strong>：读 change.md §2 全部 AC 与 §5 TODO；读 frontmatter <code>base_commit..HEAD</code> 的 <code>[&lt;change-id&gt;]</code> 提交 diff；建立「AC → 已有证据」映射（既有测试、implement 速报里的一次性执行证据都算输入）</li>\n<li><strong>提取缺口</strong>：对照映射列出无覆盖验证点。<strong>AC 决定验什么，代码决定拿什么验</strong>——从 diff 的分支、默认值、空值与边界处理、类型转换里提取 AC 没写、已有测试也没碰、但代码实际会遇到的输入，补进缺口清单（只按 AC 文字正向推导，验的永远只是「AC 想到的路径」）</li>\n<li><strong>补缺编写</strong>：只为缺口写测试，遵循项目既有测试目录与命名约定；回归资产分层——逻辑密集 / 边界多 / 共享路径的落成永久测试文件，其余以一次性执行证据作证（命令 + 关键输出记入 test.md）</li>\n<li><strong>执行</strong>：跑全部相关测试与必要回归；需要起环境的按 <a href=\"../eo-shared/ac-spec.md\">../eo-shared/ac-spec.md</a>「起环境的纪律」——探测复用、按环境组合分组跑完</li>\n<li><strong>失败分析</strong>：测试代码自身写错 → 直接修正重跑；业务代码 bug → <strong>停手</strong>，记入报告并建议走 /eo-fix 循环内分支</li>\n<li><strong>报告与速报</strong>：\n<ul>\n<li><p>test.md 简版（覆盖式）：</p>\n<pre><code># &lt;标题&gt; 测试报告\n&gt; 日期：YYYY-MM-DD ｜ 基线：&lt;HEAD short-sha&gt; ｜ 结论：通过 / 不通过（失败 x 项）\n\n## 未决清单\n| 项 | 失败现象 | 位置 | 修复 commit | 状态 |\n|----|---------|------|------------|------|\n| F-1 | &lt;一句话&gt; | &lt;用例/文件&gt; | | open / fixed / verified |\n\n## 缺口补缺摘要\n&lt;补了哪些测试、一次性证据清单（命令 + 关键输出）&gt;\n</code></pre>\n</li>\n<li><p>修复后再跑：核销未决清单（fixed 项复测 → verified / 回 open），覆盖重写报告</p>\n</li>\n<li><p><strong>对话速报（硬性）</strong>：</p>\n<pre><code>结论：通过 / 不通过（失败 x 项）［基线 &lt;short-sha&gt;］\n失败项：\n1. &lt;一句话&gt; — &lt;用例/文件&gt;\n未覆盖 AC：&lt;AC-x（原因）&gt;；全覆盖则省略此行\n下一步：&lt;失败 → /eo-fix 循环内分支修复后回本 skill 复验 / 通过 → /eo-archive 或用户指定&gt;\n（详细报告见 &lt;test.md 路径&gt;）\n</code></pre>\n</li>\n<li><p><strong>status 回退边</strong>：结论不通过且当前 status 为 <code>reviewed</code> → 当场置回 <code>implementing</code>（见 <a href=\"../eo-shared/conventions.md\">../eo-shared/conventions.md</a> §3）</p>\n</li>\n</ul>\n</li>\n</ol>\n<h2>关键约束</h2>\n<ul>\n<li><strong>禁止跨权</strong>：严禁修改业务逻辑代码</li>\n<li><strong>不重写已覆盖项</strong>：审计通过的不重编；独立性靠审计 + 独立执行保证</li>\n<li><strong>测试独立性</strong>：用例独立运行，不依赖执行顺序</li>\n<li><strong>不修改 change 的判据</strong>：AC/TODO 的文字不动——发现写漏/写偏记录到报告并建议回 /eo-implement 确认后补写</li>\n<li><strong>环境不归你所有</strong>：探测复用、用完不停；按环境组合分组跑</li>\n<li><strong>输入不只来自 AC</strong>：跳过「读实现取输入」= 只验 AC 想到的路径</li>\n<li><strong>注释纪律</strong>：测试资产同样遵守注释纪律（项目级完整篇：<code>eo-doc/agent-handbook/comments.md</code>，如已启用）——溯源标注与「为何正确」辩护不进测试注释</li>\n</ul>\n","files":[{"path":"references/test-template.md","sizeBytes":1301,"isText":true},{"path":"SKILL.md","sizeBytes":5340,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-02T16:13:37.196711Z","sha256":"6D27E402DE2E1BFB796763036306DC2858D7A6D73D191B0DB899829F60489EB5","sizeBytes":4124},"review":null,"source":{"repositoryUrl":"https://github.com/SimpleEve/eo-skills","path":"eo-test","license":"MIT","commit":"a5062887a6abcb255b4745f871208be292484bfa","subtreeSha":"7FF0748432521DCF8D77E09526627CF89F5E173087D252FCE718ED7C15598E72","lastSyncedAt":"2026-09-27T19:48:06.599057Z"},"reviewedAt":"2026-09-02T16:15:43.54354Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/SimpleEve/eo-skills/tree/main/eo-test"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install simpleeve-eo-skills@llmmart"},{"target":"git","command":"git clone https://github.com/SimpleEve/eo-skills.git"}]}