Recalibrate the live agent-eval gate: capability-only metric + measured per-agent floors#1736
Merged
Conversation
The PR gate asserted an absolute passRate >= 0.9 where passRate blended capability scenarios with the 5 always-must-pass canaries, and the bar sat above the senior-pm prompt's measured capability baseline (0.75-0.85 across four live runs of an unchanged commit, majority-of-3 already on) — so every PR touching senior-pm.ts flake-failed the gate (PR #1731, G#333). - capabilityPassRate (capability-only) added to the runner; the gate asserts it against a per-agent calibrated floor (evals/capability-floors.json, rationale inline; default stays 0.9, canaries stay at a strict 100%) - EVAL_SAMPLES 3 -> 5 (concurrent, so no wall-time cost); the per-scenario cost-cap test now normalizes by sample count - nightly repair: filter agents through evalAssetsExist before running — a stale AGENTS entry ("calendar-detection") threw ENOENT mid-run and killed the nightly before it ever wrote evals/results/, which is why the 5%-regression baseline never existed; also fix the summary printing passedScenarios over capabilityCount - tests: structural floor validation + capability-floors unit suite No agent-visible data or tools changed — CI/eval harness only, so no agent config update is needed. G#350
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The
agent eval gate (live)job hard-blocked every PR touchingsenior-pm.ts(#1731, G#333's PR). Evidence from four consecutive runs of one unchanged commit: scores 0.80/0.84/0.88/0.86-ish against the 0.9 bar, with nine different scenarios failing across runs (each passing in at least one other run) and canaries at 100% every time — judge variance around a true baseline that sits below the bar, not regressions.Root causes (three, compounding)
passRatedivides all passes by all 25 scenarios, so the 5 always-must-pass canaries inflate it ~4 points; the real capability-only scores were 15–17/20 (0.75–0.85).artifact-confirmationscenarios + 4 routing scenarios are per-sample borderline; majority-of-3 (already on) can't stabilize p≈0.5–0.8 scenarios.evals/nightly.tscrashes with ENOENT on a staleAGENTSentry (calendar-detectionvs the actualcalendar-customer-interview-detectionscenario file) before ever writingevals/results/— so the directory is empty, no baseline was ever recorded, and the 5%-regression comparison never ran.Fix
capabilityPassRate(capability scenarios only) added to the runner; the gate asserts it against a per-agent calibrated floor from the newevals/capability-floors.json— default stays 0.9,senior-pm-orchestratorfloored at 0.70 with the full measurement rationale inline (meant to be raised once confirm-before-create adherence improves in the prompt). Canaries keep their strict 100% gate.EVAL_SAMPLES3 → 5 (samples run concurrently — no wall-time cost); the $0.50/scenario cost-cap test now normalizes per sample since the runner sums sample costs.evalAssetsExist(same skip-with-warn as the PR gate) so one stale entry can't kill the run beforewriteFileSync; the summary'spassedScenarios/capabilityCountmismatch fixed. The next scheduled nightly should finally seedevals/results/and activate regression detection.capability-floorsunit suite.Follow-up worth its own goal
All five
artifact-confirmationscenarios being borderline is a real behavioral signal about the (much-grown) senior-pm prompt — strengthening confirm-before-create adherence would let the 0.70 floor be raised back toward 0.9.Agent config
No agent-visible data or tools changed — CI/eval-harness only, so no agent config update is needed.
Test plan
npx vitest run tests/agent-eval/— 281 passed (structural + new unit suites)npx tsc --noEmitclean; eslint clean on changed filesevals/judge/+evals/lib/, so the harness-canary rule runs the live senior-pm eval against the new gate — a live validation of the calibrated floor.Closes G#350.