feat(reviewer-eval): N-arm matrix, blinded grading, corpus 2->11 for the GPT-5.6 evaluation#700
Conversation
…the gpt-5.6 evaluation Harness: configs.json arms list + declared treatment_fields (fail-closed loading); runner single-field-contrast confound rules; --k-per per-config repeats; compare --blinded (deterministic sealed mapping, model-ref sanitization, latency redaction); effort + timeout_s plumb-through in openai_review.py with byte-identical production defaults. Corpus: 2 -> 11 cases (2 S1 synthetic, 4 S2 historical replays, 2 S3 negative controls incl. a documented-deviation calibration probe, 3 S4 missed-bug probes). Pre-registered GO/NO-GO gates in DECISION_RULE.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019xnguzh8asX9dY54djvR41
Overall Assessment✅ Looks good — no unmitigated P0/P1 findings. Executive Summary
MethodologyNo findings. The PR does not modify live The ContinuousDiD ACRT fixture is consistent with the documented binary/single-dose boundary: Code QualityNo findings. Key fail-closed paths are implemented in PerformanceNo findings. The new timeout handling prevents hung Codex runs from blocking an eval campaign, and stdin feeding/output draining avoid full-pipe deadlock: MaintainabilityNo findings. Experiment identity now includes model, effort, action version, CLI, prompt, and backend invocation contract, reducing stale-cache ambiguity: Tech DebtNo findings. Existing deferred methodology limitations relevant to added missed-bug cases are already tracked in SecurityNo findings. Subdir traversal, stored-patch containment, and worktree cleanup are guarded: Documentation/TestsNo findings. The added tests cover N-arm config validation, treatment-field rules, per-config repeats, blinded compare refusals/determinism, effort passthrough, and timeout behavior: |
Summary
config/configs.jsonmoves from the two-armcontrol/candidateshape to anarmslist (exactly onerole: control) plus declaredtreatment_fields; loading is fail-closed (duplicate ids, unknown per-arm keys, missing model/effort, zero-or-multiple controls all abort). Current config: the 4-arm gpt-5.6 evaluation (gpt-5.5@xhigh control, gpt-5.6-sol@xhigh, gpt-5.6-terra@xhigh, gpt-5.6-sol@max), cli pin bumped to codex-cli 0.144.5 (verified live 2026-07-18).engine/runner.py): undeclared confounds (incl.model) must be identical across arms; no two arms may share a treatment tuple; every arm needs a single-field contrast partner (a jointly-confounded subset like model+effort with no bridging arm is refused). Multi-arm only - single-arm smokes stay exempt.run --k-per "C=1,D=1"(fail-closed parse) inside ONE invocation/manifest;k/k_perrecorded in the success manifest.compare --blindedwritescomparison.blinded.md+ a sealedblinding.json- arm ids remapped toM*labels via a permutation salted from the manifest's run_ids, model/CLI/latency metadata redacted, model self-references scrubbed (configured names + gpt-family/tier/bare-version patterns) from reviews AND case notes; refuses--allow-mixed/ manifest-less subdirs..claude/scripts/openai_review.py):_build_codex_cmd/call_codexgaineffort=(fail-closed allowlist;ultradeliberately excluded - not accepted on this API path) andtimeout_s=with byte-identical production defaults; stdin is fed off-thread with output drains started first, so the timeout is armed immediately and a full-pipe write cannot deadlock; the eval adapter runsSUPPORTED_EFFORTS = ("xhigh", "max")with a 60-min per-run ceiling (hung run -> resumable INFRA_ERROR).allow_severities: ["P3"]probes severity calibration), +3 S4 missed-bug probes replaying rounds the reviewer passed while a later-flagged P1 was already present (Add LPDiD complex-survey-design support (Phase D1) #590, feat(callaway): allow_unbalanced_panel — RC-on-panel parity with R did #631, Fix wild cluster bootstrap p-value / CI inconsistency (WCR + test inversion, #543) #546 - the last with two latent P1s and a tutorial notebook exercising the notebook-prose path).tools/reviewer-eval/DECISION_RULE.mdcommits the GO/NO-GO gates, blinded multi-grader protocol, and corpus floor BEFORE any campaign run - this PR timestamps the pre-registration.Methodology references (required if estimator / math changes)
tools/reviewer-eval/corpus/cases/**/inject.diff(historical PR replays / deliberate bug injections with documented ground truth); they are corpus data, not library changes.Validation
tests/test_evals_runtime.py(+18: fail-closed configs/treatments incl. model-held-constant regression, k-per parse + end-to-end, blinded compare refusals/determinism),tests/test_evals_engine.py(+6: blind mapping determinism, sanitizer, no-identity-leak bundle, allow_severities-derived FP wording),tests/test_openai_review.py(+6: effort argv byte-identity/passthrough/invalid, timeout kill, blocking-stdin timeout coverage). CLI-pin literals now read fromconfigs.json. Suites: 111 eval + 260 openai_review tests green;verify-corpus11/11.runs/is gitignored)Security / privacy
Generated with Claude Code
https://claude.ai/code/session_019xnguzh8asX9dY54djvR41