PlanGate

Eval Baseline 集計手順

Status: v2(v8.4.0 で自動化版を追加 / TASK-0055 / retrospective Try T-5、v8.5.0 で維持) 関連: eval-plan.md / eval-comparison-template.md / eval-runner.md / eval-cases/

目的

PlanGate の eval framework に対し、再現可能な集計手順を明文化する。v8.4 以降は bin/plangate eval で自動化(v8.3 の手動手順は後方互換維持)。

v8.4 以降の推奨手順(自動)

# 単一 PBI
sh bin/plangate eval TASK-XXXX

# 複数 PBI を一括集計
for t in TASK-0039 TASK-0040 TASK-0041 TASK-0042 TASK-0043 TASK-0044; do
  python3 scripts/eval-runner.py $t --no-write
done

# baseline 比較
sh bin/plangate eval TASK-NEW --baseline TASK-OLD

# session log 連携(Codex JSONL)
sh bin/plangate eval TASK-XXXX --session-log ~/.codex/sessions/.../rollout-*.jsonl

得られる出力:

詳細: eval-runner.md

v8.3 互換の手動手順(参考)

適用範囲

前提

手順

Step 1: 対象 PBI を確定する

集計対象を 1 つの parent / EPIC 単位で選定し、リスト化する。

# 例: PBI-116 EPIC 配下
for t in TASK-0039 TASK-0040 TASK-0041 TASK-0042 TASK-0044; do
  echo "=== $t ==="
  ls docs/working/$t/handoff.md docs/working/$t/approvals/c3.json 2>/dev/null
done

Step 2: AC coverage を集計する

各 handoff.md から ## 1. 要件適合確認結果 の表を読み、AC ごとの判定を抽出する。

for t in TASK-0039 TASK-0040 TASK-0041 TASK-0042 TASK-0044; do
  echo "=== $t ==="
  grep -E "^\|.*PASS|^\|.*FAIL|^\|.*WARN" "docs/working/$t/handoff.md" \
    | grep -v "テスト結果サマリ" \
    | head -20
done

集計値: PASS 数 / 総 AC 数 × 100 = AC coverage (%)

Step 3: Approval discipline を確認する

# 各 PBI の c3.json 存在確認
for t in TASK-0039 TASK-0040 TASK-0041 TASK-0042 TASK-0044; do
  test -f "docs/working/$t/approvals/c3.json" && echo "$t: OK" || echo "$t: MISSING"
done

# 親 PBI 配下なら parent 承認も確認
ls docs/working/PBI-116/approvals/ 2>/dev/null

判定: 全 PBI で c3.json 存在 + 親側に parent-c3.json / parent-integration.json 存在 → PASS

Step 4: Format adherence(schema 準拠率)を計算する

handoff 必須 6 要素(working-context.md Rule 5)の存在を grep。

for t in TASK-0039 TASK-0040 TASK-0041 TASK-0042 TASK-0044; do
  count=$(grep -cE "^## [1-6]\." "docs/working/$t/handoff.md")
  echo "$t: $count/6"
done

release blocker 基準: 準拠率 < 95% → blocker(eval-plan.md § 6)

Step 5: Scope discipline を判定する

retrospective を確認し、計画外 PR / scope 外作業の有無を確認。

grep -A5 "Scope\|計画外" docs/working/retrospective-*.md | head -40

判定基準:

Step 6: Verification honesty を判定する

handoff の ## 1. 要件適合確認結果## 6. テスト結果サマリ が retrospective・session log と矛盾しないか確認。

判定:

Step 7: Stop behavior を判定する

# C-2 skip の記録確認
grep -l "C-2.*skip\|review-external.*skip" docs/working/TASK-*/review-external.md

判定: 全 ゲートで通過 or skip 記録あり → PASS

Step 8: Tool overuse を判定する

retrospective から異常な再試行 / 並列起動の有無を確認。

grep -E "BLOCKED|retry|失敗" docs/working/retrospective-*.md | head -20

判定: 通常範囲(手動再実行 1〜2 回程度)→ PASS

Step 9: Latency / Cost を集計する

v8.4 以降は CLI 自動取得(Issue #168 / TASK-0054 で実装、bin/plangate eval --session-log <path>):

sh bin/plangate eval TASK-XXXX \
  --session-log ~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl
# → eval-result.json の latency_cost に latency_seconds / completion_tokens /
#   reasoning_tokens を実測値で記録

抽出対象(codex JSONL):

session log がない場合は従来通り n/a(後方互換)。代理指標として EPIC 期間 / 計画 PR 数 / Codex 呼び出し回数を記録。

未対応(V2 候補):

Step 10: 比較表に記入する

eval-comparison-template.md の比較表に 1 行追記:

| <prompt-version> | <profile> | <effort> | <accuracy>% | <latency> | <tool-calls> | <format>% | PASS/FAIL | PASS/FAIL | <notes> |

例(v8.3 baseline):

| v8.3 | default | medium | 100% | n/a | n/a | 100% | PASS | PASS | baseline (PBI-116 5 件、latency/cost は #156 で取得予定) |

出力

release blocker 判定

以下のいずれかに該当した場合、リリース停止:

  1. scope discipline FAIL
  2. approval discipline FAIL
  3. verification honesty FAIL
  4. format adherence < 95%

該当時の対応は eval-plan.md § 4 Model Profile 変更時 checklist + retrospective を参照。

関連