Repository navigation
Conversation
…ation apply_adjudications rewrote every row of an adjudicated case except parse_contract_failure rows, so it overwrote a recorded budget_exhausted_at_ceiling row with the adjudicated class and subtype. collect_audit and case_annotations force that recorded class onto its row, and the dashboard export restores it, but the annotation CSVs kept the overwrite (and the export kept the overwritten subtype). NON_SUBSTANTIVE_SOURCES names both classes an adjudication leaves alone. verify_adjudications_applied uses the same mask for its substantive rows and for its stray-verdict check, so the release drivers' apply-then-verify does not demand the adjudicated class on a recorded ceiling row, or call it a stray verdict when the judge also chose that class for the case. No committed annotation moves: no committed row records ceiling exhaustion, and rebuilding releases 20261013 and 20261013b from their frozen audit trees on this code gives the committed CSVs byte for byte. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
What changes
apply_adjudicationsrewrites every row of an adjudicated case exceptparse_contract_failurerows. So it overwrote a recordedbudget_exhausted_at_ceilingrow with the adjudicated class and subtype. Elsewhere the pipeline treats that recorded class as authoritative:collect_audit(_row_failure_sourceand the deterministic branch) andcase_annotations.wrong_prediction_rowsforce it onto its row.full_run_export.merge_annotationsrestores it at dashboard export. It restores onlyfailure_source, so the export kept the overwritten subtype.The annotation CSVs kept the overwrite.
NON_SUBSTANTIVE_SOURCES(parse_contract_failure,budget_exhausted_at_ceiling): the row classes an adjudication leaves alone.apply_adjudicationsskips both.verify_adjudications_applieduses the same mask for its substantive rows, which must carry the adjudicated source and subtype. It also uses it for its stray-verdict check: no substantive row may still carry the judge's non-final class.scripts/finish_musewonder.pytriage,finish_haiku55.py~2901–2904) would demand the adjudicated class on a recorded ceiling row that apply now leaves alone.budget_exhausted_at_ceilingwould fail verification on its recorded rows.parse_contract_failurerows the stray check is unchanged: a final class never matches a non-final judge class.Background:
~/reviews/policybench-budget-line-20261013/REPORT.md("How the label is assigned") andsol_review_r3.mdfinding 3.No published effect
budget_exhausted_at_ceiling. There are 10,346 rows and 989 case notes at origin/main (release 20261013, bc30579) and at Re-judge five audit verdicts the judge-isolation audit could not clear (release dashboard-data-20261013b) #218's 20261013b (6c44858). No case in either release's frozen audit manifest records the class, and no prediction row in the Gemini 4 Argon release stage (Add Gemini 4 Argon and Muse Spark 1.3 (release, 50 models) [WIP] #221) records it.collect_auditon the frozen audit tree, the committed adjudications, the release's wording amendments. On this branch both releases' CSVs come out byte-identical to the committed files (sha256 in~/reviews/policybench-budget-line-20261013/pr-b-impact/sha256.txt; scripts in../pr-a-impact/).test_skipping_ceiling_rows_moves_no_committed_annotationapplies the committed record to the committed annotations under the old mask and the new one, and checks the results are identical.Invariants
These are stated and tested with Hypothesis in
test_adjudication_skips_non_substantive_rows_properties. It runs 300 generated examples: one to three cases of one to four rows, each of any class and subtype (skipped classes oversampled), and a valid record (checked byparse_adjudications) deciding any subset of cases from any judge class.parse_contract_failureorbudget_exhausted_at_ceilingrow keeps its class and subtype, and a row of an undecided case is untouched.rows_rewrittencounts exactly the rows whose class or subtype changed.verify_adjudications_appliedaccepts whatapply_adjudicationsbuilds.The property's oracle spells out the skipped classes itself instead of importing the constant. On its own it catches each of four mutants:
Tests
tests/test_adjudications.py:test_apply_leaves_a_recorded_ceiling_exhaustion_alone;test_verify_does_not_hold_a_ceiling_row_to_the_adjudicated_class, which also checks that rewritten rows are still held to the record;pytestpasses on test_adjudications and the release-driver suites (results below).ruff check .andruff format --check .are clean.Not changed
collect_audit's judged branch.eval_no_tools.pyattaches the label only to missing variables, so a case whose wrong models all record it isparse_failure_onlyand already takes the deterministic branch.axiom: n/a: benchmark annotation pipeline, no policy rule
🤖 Generated with Claude Code