実戦:JUnit・trace 索引・stderr 断片を一枚の PR ゲート要約へ畳み、ゲートウェイから返す
概要:リモート Mac のPlaywrightでJUnit・trace 索引・stderr 断片を束ねOpenClawから単一 PR 要約へ載せる HowTo です。関連:シャード集約・トークン要約・静的検査ゲート。
00 痛みと境界
一つ失敗行が散り読みづらい。二つ trace URL 列挙で本文肥大。三つマージ前断片で重複コメント。境界はマージ済みのみ、長バイトは倉庫の固定 URL に残します。レビュアは CI 全文ではなく PR 上の一枚を読む運用に寄せます。
01 対照:渡すもの/渡さないもの
| 区分 | ゲートウェイ入力 | 倉庫成果物のみ |
|---|---|---|
| JUnit | merged の件数・失敗ケース名一覧 | shard ごとの生 XML |
| trace | 索引の先頭キーと件数 | zip 本体とストレージパス |
| stderr | 末尾断片と行上限 | フルコンソールログ |
02 レポートパス約束
ルートartifacts/e2e/${RUN_ID}/、片shard-${INDEX}/results.xml、マージmerged/junit.xml、索引merged/trace-index.json、断片merged/stderr-tails.json。RUN_ID は PR 番号と短 SHA。キーはtestCaseId優先、無ければファイル名。
03 閾値戦略
判定はmerged/junit.xmlの失敗数のみ。flake 再試行は F 件に対しR = min(3, max(1, ceil(0.12×F)))で片上限と全体蓋。stderr は末尾 2KB・8 行、trace 索引は本文三キーまで。
04 ゲートウェイ側テンプレ
ペイロードは JSON 一塊、テンプレは表・trace 先頭・stderr フェンスを固定見出しで並べ、本文は四千字以内。PR コメントは ID で upsert。機微はマスク、索引は相対パスのみ。モデルへ渡す直前にキー順を安定ソートし差分ノイズを減らします。
05 失敗時の再試行
欠損シャードのみ再実行して再マージ。ゲートウェイは指数バックオフで最大三回再送、ダメなら赤で終了。索引が未完なら同じく再試行対象。
06 再現手順(HowTo)
- 隔離:RUN_ID 配下へ片ごと JUnit と trace zip。
- マージ:単一ジョブで
merged/junit.xml。 - 索引:trace map と stderr 末尾切り出し。
- 閾値:flake と本文長を強制。
- 投稿:テンプレを OpenClaw へ、PR は upsert。
可引用:RUN_ID 一意・stderr 2KB・trace 三キー・再送三回・本文四千字。
07 可実行スクリプト思路
# マージ→索引→断片→ゲートウェイ POST の骨子
ROOT="artifacts/e2e/${RUN_ID:?}/merged"
node scripts/merge-junit.mjs ../shard-*/results.xml > junit.xml
node scripts/build-trace-index.mjs .. > trace-index.json
node scripts/collect-stderr-tails.mjs .. --max-chars=2048 --max-lines=8 > stderr-tails.json
node scripts/render-openclaw-payload.mjs --root .. | curl -sS -X POST "$OPENCLAW_GATEWAY_URL" -H "content-type: application/json" -d @-XML と JSON は Node、bash は呼び出しだけにするとテストが楽です。