| name | e2e-reporter |
| description | Aggregate e2e-diagnostician's diagnosis.md and e2e-quality's quality.md into a final acceptance-form e2e-report.md at tests/e2e-out/<ts-sha>/e2e-report.md. Use only when the full pipeline has run (runner → diagnostician PASS → quality); when the gate fails, e2e-diagnostician already wrote e2e-report.md and this skill must not overwrite it. Triggers on /e2e-reporter, "generate e2e report", "summarize e2e results", or after a successful /e2e-quality run. |
e2e-reporter
Slice 7 of PRD #26 (Part B). 仅在 完整流水线跑通后被调用
(runner → diagnostician verdict=PASS → quality) —— 汇总 diagnosis.md +
quality.md → 最终 e2e-report.md。
不复现用户路径(runner 的工作),不做诊断(diagnostician 的工作),
不评翻译质量(quality 的工作)。只把已有产物按验收形态汇总,不复述
证据细节(细节在源文件里)。
调用前提
tests/e2e-out/<ts-sha>/diagnosis.md 存在,且 verdict: PASS。
tests/e2e-out/<ts-sha>/quality.md 存在(quality 跑过)。
tests/e2e-out/<ts-sha>/e2e-report.md 不存在(避免覆盖 diagnostician
失败时写的验收形态;若已存在,本 skill 不执行,报"Report file
exists — diagnostician's failure report is authoritative")。
任一前提不满足 → 立即停止,不要试图补跑前置 skill。 报"Reporter
precondition failed: "。
输入契约
tests/e2e-out/<ts-sha>/
├── diagnosis.md # verdict: PASS,带 per-mode summary + criteria results
├── quality.md # verdict: PASS|REVIEW,带 cheap 指标表 + judge 5 维评分
└── (e2e-report.md? # 本 skill 写;若已存在则 STOP,见前提 #3)
两源文件 schema 详见:
.claude/skills/e2e-diagnostician/SKILL.md(diagnosis.md shape)
.claude/skills/e2e-quality/SKILL.md(quality.md shape)
本 skill 不重新计算或重新评判;只 grep / 引用 / 排版。
输出契约
tests/e2e-out/<ts-sha>/
├── diagnosis.md
├── quality.md
└── e2e-report.md # 本 skill 写:汇总形态,人扫读 / PR 评论 / CI artifact 摘要
最终 e2e-report.md 包含:
- 顶部 verdict 行(与
diagnosis.md 一致 = PASS)
- TL;DR:一两句话概括三模式结果
- Per-mode snapshot:三模式各一行,引
diagnosis.md 段落数 + 引 quality.md 总分
- Quality overview:引
quality.md cheap 表 + judge 表
- Issue list:仅
quality.verdict = REVIEW 时列出质量待优化项
(e.g. "quick 模式总分 16/25 < 18 阈值")
- 指向
diagnosis.md + quality.md 拿完整证据
- Next step:STOP(整次 e2e 流水线结束,无需进一步动作)
e2e-report.md shape (PASS,质量也 PASS)
# e2e report — <ts-sha>
verdict: PASS # = diagnosis.md 同 verdict
status: PASSED # 显式一行,人扫读
generated_at: <ISO timestamp>
## TL;DR
三模式全部翻译成功 + 段落数与 reference 对齐(quick 100% / normal 104% /
refined 100%)+ 翻译质量均 ≥ 22/25。本次 e2e **通过**。
## Per-mode snapshot
| mode | status | paragraphs (captured / reference) | duration_ms | quality (5-dim total / 25) |
|---------|----------|-----------------------------------|-------------|----------------------------|
| quick | complete | 75 / 75 (100%) | 4200 | 20.0 |
| normal | complete | 78 / 75 (104%) | 12300 | 22.5 |
| refined | complete | 84 / 84 (100%) | 28500 | 25.0 |
数据来源:`diagnosis.md` 的 per-mode summary + `quality.md` 的 judge 总分。
## Quality overview
### Cheap metrics
| mode | jaccard (char) | 2-gram overlap | paragraph drift |
|---------|----------------|----------------|-----------------|
| quick | 0.342 | 0.187 | 100.0% |
| normal | 0.401 | 0.234 | 104.0% |
| refined | 0.456 | 0.298 | 100.0% |
完整数值与脚本见 `quality.md`。
### Judge scores (5-dim, 1-5 each)
| mode | accuracy | terminology | cultural-notes | fluency | faithfulness | total |
|---------|----------|-------------|----------------|---------|--------------|-------|
| quick | 4.0 | 4.5 | 3.0 | 4.5 | 4.0 | 20.0 |
| normal | 4.5 | 5.0 | 4.0 | 4.5 | 4.5 | 22.5 |
| refined | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 | 25.0 |
维度定义 + rationale 摘录见 `quality.md`。
## Recommendations
- 无显著问题(quality verdict=PASS)
- quick 模式 cultural-notes 3.0 是低分但仍达标;若想强化可调 EXTEND.md
## Refer to source artifacts for full evidence
- 判定证据(per-criteria pass/fail + 修复建议):`diagnosis.md`
- 翻译质量评分(cheap + judge 5 维 rationale):`quality.md`
## Next step
**STOP.** 整次 e2e 流水线结束。
- 若本次 e2e 失败(re-run 发现 regression):回 `e2e-runner` 复现 → 修代码 →
重跑流水线。
- 若扩展代码变更(协议 / prompt / injector):直接调 `e2e-runner` 重跑整
流水线,本目录的 `<ts-sha>` 时间戳会自动加新历史。
e2e-report.md shape (PASS,质量 REVIEW)
# e2e report — <ts-sha>
verdict: PASS # = diagnosis.md(结构层通过)
status: PASSED_WITH_QUALITY_REVIEW # 显式标注质量待优化
generated_at: <ISO timestamp>
## TL;DR
三模式全部翻译成功 + 段落数与 reference 对齐,但**翻译质量** quick 模式总分
16/25 < 18 阈值,REVIEW。本次 e2e **结构层通过,质量层待优化**。
## Per-mode snapshot
| mode | status | paragraphs (captured / reference) | duration_ms | quality (5-dim total / 25) |
|---------|----------|-----------------------------------|-------------|----------------------------|
| quick | complete | 75 / 75 (100%) | 4200 | 16.0 ⚠ REVIEW |
| normal | complete | 78 / 75 (104%) | 12300 | 22.5 |
| refined | complete | 84 / 84 (100%) | 28500 | 25.0 |
## Quality overview
(同上,cheap + judge 表)
## Issue list (quality REVIEW)
| # | mode | dimension | score | suggestion |
|---|------|-----------|-------|------------|
| 1 | quick | cultural-notes | 2.0 | 注释覆盖度严重不足,建议 prompt 强化 audience=general 时必加文化注释 |
| 2 | quick | terminology | 3.0 | "Ocado" 等本土品牌首次未加注,见 quality.md rationale |
| 3 | quick | accuracy | 3.0 | 漏译数据点(quality.md rationale 已列) |
**注**:质量 issue **不**阻断 e2e 通过(ADR-0003 §4.2 明确 quality 层
不阻塞)。建议下次 e2e 之前修 quick 模式 prompt 注释规则。
## Refer to source artifacts for full evidence
- 判定证据:`diagnosis.md`
- 翻译质量评分与 rationale:`quality.md`
## Next step
**STOP.** 整次 e2e 流水线结束。
- 优化建议:见 `quality.md` 的 Recommendations 段;改 prompt / EXTEND.md 后
重跑 `e2e-runner`。
- 若是 prompt / protocol 改动:`npm run build` + 重跑整流水线。
两种形态共享:verdict / status / per-mode snapshot / quality overview /
"Refer to source artifacts" / "Next step: STOP"。差异仅在 TL;DR 文案 +
issue list 段。
跨契约
ADR 契约(修改需同步):
[baoyu] 前缀本 skill 不直接消费,但间接:reporter 引用的
diagnosis.md 假设 console.jsonl 已被 [baoyu] 过滤。修改前缀需同步
ADR-0002 + runner + diagnostician。
- Gate 行为由 ADR-0003 §Consequences 锁定:diagnostician FAIL 时,
diagnostician 自己写
e2e-report.md 验收形态,后续 quality + reporter
不执行(包括本 skill)。本 skill 自身不检 verdict —— 由上游
orchestrator 把控;但在 SKILL.md 内显式写"调用前提"以便调用方有据可查。
代码库契约(复用既有实现,不重新声明):
- 三模式枚举复用
shared/types.ts::TranslationMode。
diagnosis.md / quality.md schema由对应上游 skill 锁定;本 skill
读取端按这些 schema 解析,不重新计算 / 评判。
e2e-report.md schema本身在本 skill 锁定;后续若有需求变更需同步
上游 diagnostician(失败时也写 e2e-report.md,需保持同 schema)。
与 diagnostician 的 e2e-report.md 关系
e2e-diagnostician 在 gate FAIL 时也写 e2e-report.md(验收形态,
含 issue list + TL;DR + per-mode snapshot)。两者 schema 头部共享(
verdict / status / generated_at / TL;DR / per-mode snapshot / 源文件引用),
差异在"Issue list"段:
- diagnostician 的 issue list:结构层 finding(C1-C4),必须出现因为
验收形态要标注结构问题。
- reporter 的 issue list:质量层 issue(quality REVIEW 维度),仅质量
不达标时出现。
两份 verdict 必须一致;本 skill 在写盘前 grep '^verdict: PASS'
源 diagnosis.md,若不是 PASS → 立即停止,报"Diagnostician gate is
not PASS — its e2e-report.md is authoritative, do not overwrite"。
这条约束保证:失败时 diagnostician 的验收报告不会被 reporter 覆盖;
成功时 reporter 的最终汇总在 e2e-report.md,人扫读 / PR 评论都看这一份。
手工验证范式
TS_SHA="2026-06-02T10-30-00_abcdef1"
RUN="tests/e2e-out/${TS_SHA}"
ls "$RUN/diagnosis.md" "$RUN/quality.md"
grep '^verdict:' "$RUN/diagnosis.md" "$RUN/quality.md"
触发本 skill,期望:
e2e-report.md 出现,含 verdict / status / TL;DR / per-mode snapshot /
quality overview + 引向 diagnosis.md / quality.md。
- 成功时 verdict=PASS,无 issue list(recommendations 可有)。
- 质量 REVIEW 时 verdict=PASS 但 status=PASSED_WITH_QUALITY_REVIEW,
含 quality issue list。
不在本 skill 范围
- 诊断 / 质量计算:本 skill 不重新跑判定或评分,只引用源文件。
- 修建议:翻译质量优化建议由
quality.md 的 Recommendations 段提供,
本 skill 只复述,不新增。
- CI artifact retention:与 runner / diagnostician 一致;CI retention
由 CI 系统决定。
- 失败 e2e-report.md:diagnostician 自己写(Slice 6),本 skill 不覆盖。
- 历史目录管理:不删历史
tests/e2e-out/<ts-sha>/,时间序列累积。
用法
触发本 skill 后:
- 确认三前提:diagnosis.md 存在 + verdict=PASS + quality.md 存在 +
e2e-report.md 不存在。任一不满足 → STOP。
- 解析源文件:
diagnosis.md 读 per-mode summary(段落数 / duration / batches / 末态
a11y / console error 数)。
quality.md 读 cheap 指标表 + judge 表 + verdict(PASS/REVIEW)。
- 组装 e2e-report.md:按上面 schema 排版(PASS 或 PASSED_WITH_QUALITY_REVIEW
二选一)。
- 写盘 + 回报:
- "Reporter done for
<ts-sha>. e2e-report.md 写了。verdict=PASS
(status=PASSED 或 PASSED_WITH_QUALITY_REVIEW)。整次 e2e 流水线
结束。"
- 若 quality verdict=REVIEW,在回报中突出"质量待优化"。
故障排查
| 现象 | 根因 | 修复 |
|---|
| "Diagnostician gate is not PASS" | 上游 quality 跑前 diagnostician 就 FAIL 了 | 这是 expected —— diagnostician 的 e2e-report.md 是权威,本 skill 不被调 |
| "Report file exists" | runner / 别的流程提前写了 e2e-report.md | 看是谁写的;若 diagnostician 失败时写的,不动;若其他流程误写,删后重跑 reporter |
diagnosis.md 缺 verdict 行 | 上游没按 schema 写 | 看 e2e-diagnostician/SKILL.md 的 diagnosis.md shape,fix 上游后重跑 |
quality.md 缺 cheap / judge 表 | quality 部分计算失败 | 看 e2e-quality/SKILL.md 故障排查段;rerun quality |
| verdict 不一致(diagnosis=PASS 但 quality=REVIEW) | 这是正常,质量层独立判定 | 按 "PASSED_WITH_QUALITY_REVIEW" 形态出报告,verdict 写 PASS(status 标注) |
参考
- PRD #26:父 PRD(Slice 7 / Part B:reporter)。
- ADR-0002:日志 schema +
[baoyu] 前缀契约(间接消费)。
- ADR-0003:e2e 流水线 + gate 行为 + 产物契约(失败时 diagnostician 写
e2e-report.md,本 skill 不覆盖)。
.claude/skills/e2e-runner/SKILL.md:产物 schema 来源(Slice 5)。
.claude/skills/e2e-diagnostician/SKILL.md:diagnosis.md schema +
失败时 e2e-report.md schema。
.claude/skills/e2e-quality/SKILL.md:quality.md schema。
src/shared/types.ts::TranslationMode:三模式枚举。
tests/reference/article-zh-CN-<mode>/:ground truth(本 skill 间接引用)。