Skip to content

Replay mode: run the panel on a pinned checkout+diff, findings to JSON (protoLab#26) #20

Description

@mabry1985

Plugin-side half of protoLabsAI/protoLab#26 (see the design comment there: the model-swap gate runs the panel end-to-end, not the raw model). The lab side is done — scorer, run-output contract, and a pinned replay manifest live at protoLab:evals/review-eval/. What's missing is the runner: a way to invoke the panel outside the live-PR path.

What replay mode is

Run the full panel (finders + verify pass + guards, unchanged) against a checkout + diff at a pinned SHA, with:

  • findings emitted as JSON instead of posted to GitHub — contract in protoLab:evals/review-eval/SCHEMA.md (run header, per-review findings with severity/file/line/disposition, plus telemetry)
  • model resolved from a gateway alias passed per-run (e.g. protolabs/fast vs protolabs/smart) — this is the entire A/B knob
  • telemetry carried through: the #34 guard fields (grounding_checked, unaccounted, converge_reason) plus token accounting and a truncated flag. Truncation is first-class: findings=[] && truncated must be distinguishable from a clean pass — the fast incident (6k reasoning tokens, no final answer) is exactly what the scorer needs to see.

Input

protoLab:evals/review-eval/replay_manifest.jsonl — currently 6 pinned rounds, all SHAs verified against the protoreview[bot] review markers:

  • protoAgent#2208 r1 7e62cd80 (FAIL — the planted event-loop major, catch probe) and r2 a71d2ec8 (the hallucinated PASS with the defect still present → shipped as #2210; false-negative + honesty probe)
  • protoAgent#2141 r3 d139f4d0 (PASS that shipped the null-edit-prompt orphan, #2143; false-negative probe)
  • protoAgent#2138 r1 550c5497 / r2 4790614 (the disregarded-evidence escalation; honesty probe)
  • protoAgent#2150 r2 fb6b98d5 (fabricated finding refuted by its own sibling finding; false-positive probe)

Grows toward ~20 from the #24 dataset. The reviewed SHA is pinned per round — ground truth is only valid against the blob it was graded on.

Non-goals

  • No new grounding/verification logic — the point is to measure the panel as deployed.
  • No GitHub writes. Replay must be side-effect-free so it can run repeatedly (per model, per trial) from CI or a cron.
  • Determinism is not expected; the scorer treats small deltas as noise. A trial field in the run header is enough.

Scoring happens lab-side (score_ab.py — precision with the #24 grounding-method exclusions, recall incl. false-negative rows, dishonest-disposition + disregarded-evidence counters, severity split, truncation rate). First milestone once this lands: fast vs smart over the manifest.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions