Skip to content

test(bakeoff): resync protector fixture CVSS + add flip-rate mode#249

Merged
thejefflarson merged 1 commit into
mainfrom
fix/bakeoff-flip-rate
Jul 19, 2026
Merged

test(bakeoff): resync protector fixture CVSS + add flip-rate mode#249
thejefflarson merged 1 commit into
mainfrom
fix/bakeoff-flip-rate

Conversation

@thejefflarson

Copy link
Copy Markdown
Owner

Why

A live false-exploitable landed on protector's own pod: the judge reported [reachability: loaded-at-runtime] on CVEs the evidence actually tags [reachability: not-observed] — a fabricated tag (its own reason gave it away: "despite not being observed running"). Correct verdict is refuted. The bakeoff already has this exact case (protector_notobserved_cves_broad_rbac) and qwen3:1.7b "passed" it 12/12 — but two things made that misleading.

Changes

  1. CVSS resync (fidelity fix). The fixture's CVE-2023-45853 was [cvss: 5.3]; the live feed now shows [cvss: 9.8]. CVSS shouldn't move a not-observed verdict, but for a small model "critical + 9.8" pulls harder than "5.3" — so the fixture must match what the model actually sees.
  2. --flip mode. Runs one case N times and tallies verdicts. The bench runs each case once, which hides a rare temp-0 tail-flip (refute 19/20, flip once → reads as a clean pass). HTTP-only (no ollama subprocess management) so it runs against a remote ollama over a port-forward — measuring the deployed judge on the deployed prompt.
python3 scripts/judge_bakeoff.py --flip --n 20 [--case NAME] [--model qwen3:1.7b]

Result

Measured on the deployed qwen3:1.7b, faithful full-scale prompt, num_ctx=16384:

FLIP RATE: 0/20 = 0% NOT 'refuted'   (22/22 incl. sanity)

So the live exploitable is a rare temp-0 tail event, not a regression. No model swap, no prompt change — that would be over-fitting a sub-1-in-22 tail the model already handles. Consistent with ADR-0029 (accepted in shadow; JEF-445 stops it freezing in the verdict cache, so it self-heals on the next pass).

🤖 Generated with Claude Code

Two fidelity fixes prompted by a live false-`exploitable` on protector's own pod
(the judge hallucinated [reachability: loaded-at-runtime] on CVEs the evidence
tags [reachability: not-observed]):

- The `protector_notobserved_cves_broad_rbac` fixture had drifted from live:
  CVE-2023-45853 was [cvss: 5.3], the live feed now shows [cvss: 9.8]. Resynced
  so the bench tests what the model actually sees (CVSS shouldn't move a
  not-observed verdict, but for a small model "critical + 9.8" pulls harder than
  "5.3", so the fixture must be faithful).

- `--flip` mode: run ONE case N times and tally the verdicts. The bench runs each
  case once, which hides a rare temp-0 tail-flip — a model that refutes 19/20 and
  flips once reads as a clean pass. HTTP-only (no ollama subprocess management) so
  it runs against a REMOTE ollama over a port-forward, measuring the DEPLOYED
  judge on the DEPLOYED prompt.

Measured on the deployed qwen3:1.7b against the faithful full-scale prompt
(num_ctx=16384): 20/20 refuted (0% flip). The live exploitable is a rare temp-0
tail event, NOT a regression — consistent with ADR-0029 (accepted in shadow;
JEF-445 stops it freezing in the verdict cache). No model/prompt change warranted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP
@thejefflarson
thejefflarson merged commit a07101e into main Jul 19, 2026
5 checks passed
@thejefflarson
thejefflarson deleted the fix/bakeoff-flip-rate branch July 19, 2026 04:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant