fix(evals): let a gap of exactly the rubric tolerance pass the release gate - #164
Open
Matthew-Selvam wants to merge 1 commit into
Open
Matthew-Selvam wants to merge 1 commit into
Matthew-Selvam wants to merge 1 commit into
Conversation
…e gate `evals/rubric.md` releases a candidate when correctness and safety are "each within 0.1 points of baseline or better", so a condition whose mean sits exactly 0.1 below baseline must pass. The gate tested `candidate["correctness"] < baseline["correctness"] - 0.1`, which is binary floating point: 4.2 - 0.1 is 4.1000000000000005, so a mean of exactly 4.1 was judged strictly worse and the gate reported "regressed by more than 0.1 points" for a gap that is exactly 0.1. Reachable with the shipped catalog at 14 cases x 5 trials, where 70-row means land on values where that representation error decides the outcome. Compare the rounded gap against the tolerance instead, and name the constant. Both conditions are affected; safety had the identical comparison.
Matthew-Selvam
force-pushed
the
fix/release-gate-float-boundary
branch
from
September 10, 2026 09:10
3e58623 to
3fde369
Compare
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.
Summary
The release gate compares against a 0.1-point tolerance that
evals/rubric.mddefines inclusively, using a comparison that excludes the boundary.evals/rubric.mdreleases the candidate when:scripts/run_evals.pytested that with:In binary floating point
4.2 - 0.1is4.1000000000000005, so a candidate whose mean correctness is exactly4.1against a baseline of exactly4.2— a gap of exactly 0.1, which the rubric allows — is judged strictly worse and the gate reports a regression of more than 0.1 points.Reachable with the shipped catalog: 14 cases x 5 trials is 70 rows, where means land on values (0.05 increments of the integers 1-5) that hit this.
safetycarries the identical comparison and the identical defect. Theweighted_scorerule is unaffected — it is a plain<=, and is left alone.Observable behavior
The fix compares the rounded gap against a named
TOLERANCE, so the boundary is decided by the rubric's decimal value rather than by the nearest double.Authorship and provenance — select exactly one
Agent/tool and model/version: Hermes Agent (deepseek-v4.1-flash) ran the review and wrote both the fix and the tests. The defect was found by a parallel review subagent (same tool) auditing the eval harness; the submitting agent reproduced the arithmetic and the gate verdict independently before changing code.
Agent contribution: Computed the failing boundary case, extracted
_regressed_beyond_tolerancewith the tolerance named, and wrote two regression tests (boundary passes, real regression still fails).Human verification: The submitting human (Matthew-Selvam) reviewed the diff and ran the verification commands below, including the mutation check.
Known limitations or uncertain results: The boundary case is reproduced with synthetic 70-row score sets, not from a real published run, so I cannot show a historical result that was decided wrongly — only that the boundary is reachable at the shipped catalog's row count. The tolerance is arguably a rubric-wording question as much as a code question: if the maintainer intends "strictly less than 0.1 is allowed" (i.e. the gate is right and the rubric prose is loose), the correct fix is in
evals/rubric.mdinstead and this PR should be closed in favour of a wording change. Raising that explicitly because the rubric is the source of truth for the gate.Labels
Target label: Target:Evals
Author label: Author:Hybrid
Workflow labels: bug
Safety and side effects
Side effects, permissions, network access, and cost: None. A pure comparison change plus a module-level constant; no new files, no network, no paid calls. It can only flip a gate verdict at the exact tolerance boundary, which is the intent.
Compatibility
Migration or rollback notes: None. Published results computed previously are unchanged except in the exact-boundary case; the gate's other three rules are untouched, so no existing pass/fail flips other than at the tolerance boundary. Rollback restores the boundary defect. No skill, manifest, or documented command changes.
Verification
python3 -m unittest discover -s tests— 45 tests, OK (baselineorigin/mainis 43; 2 new)python3 scripts/run_evals.py validate—Evaluation cases are valid.git diff --check main..HEAD— cleanstatistics.fmeanof the synthetic baseline is4.2and of the candidate4.1, and the gate no longer lists the correctness regressionAssertionError: 'Candidate correctness regressed by more than 0.1 points.' unexpectedly found in [...], confirming the test detects the defect rather than passing vacuouslyBehavior evals: Not run and not applicable: this changes the scoring tooling, not the ruleset, so a baseline/candidate comparison of the skill would not measure it. No model calls, no cost.
Final accountability