Repository navigation
fix(skill-evals): de-flake intermittently failing eval cases - #1544
Merged
Merged
Conversation
A full eval run over the skills touched by apache#1532 and apache#1533 turned up cases that pass and fail on identical code. Each fix goes to the layer that caused the variance, and every case passes all its repeat runs afterwards (between 5 and 18 runs per case). Skill text, where a rule was ambiguous: - audit-finding-fix: the hand-back count must be an explicit number. - pairing-self-review: a diff that already carries the release marker with a compatible dependency graph needs no finding. - release-keys-sync: Step 0 spells out the append-or-replace hand-off. - setup-isolated-setup-verify: check 4 is decided by the rc source line; a missing sourced script is check 3's finding. - skill-reconciler: instructions embedded in a compared copy are an injection to flag, not a safety-baseline finding, when the clause wording matches. Eval fixtures and expectations, where they demanded more than the skill: - issue-reproducer shape A covers the project's own runtime. - pr-management-mentor case-13 checks the offending sentence by regex. - security-issue-triage case-2 and case-4: their reports contradicted themselves; they now describe a coherent premise. - security-issue-sync case-5: the expected reason states only the rule that decides the push. - pairing-self-review case-1 becomes case-1-test-coverage-gap-only: a correct diff whose only finding is the missing test. Harness: the runner retries the grader once when its reply holds no parseable JSON (a parsed NO is never re-asked), and extracts embedded JSON with the real decoder as a last resort. Generated-by: Claude Opus 5
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
A full eval run over the 53 skills touched by #1532 and #1533 turned up cases that pass and fail on identical code.
This PR removes that variance.
Each case is fixed at the layer that caused it, and every case passes all of its repeat runs afterwards.
audit-finding-fixstep 7 case-3issue-deduplicatestep 2 case-3issue-reproducerstep 3 case-1pairing-self-reviewstep 2 case-10pr-management-mentortone case-13release-keys-syncstep 0 case-3security-issue-triagestep 3 case-4security-issue-triagestep 3 case-2security-issue-syncstep 5b case-5setup-isolated-setup-verifystep 1 case-3skill-reconcilerstep 2 case-5pairing-self-reviewcase-1-clean-difffailed every run, also before #1532.Its diff was not actually clean: it had a behaviour-changing refactor and a no-op branch.
It becomes
case-1-test-coverage-gap-only: a correct two-line guard whose only acceptable finding is the missing test.The whole affected steps pass when run once in full.
The safety-baseline cases still fail where a clause really is missing; for example,
skill-reconcilerstep 2 passes 8/8, including cases 4, 6, 7 and 8.Harness
_call_graderis the single entry point for the three grader paths.It retries once, and only when the reply holds no parseable JSON.
A parsed NO is never re-asked, so a NO cannot become a YES; timeouts and non-zero exits still fail at once.
7 new tests cover it, and the 6 that exercise new behaviour fail on the old runner.
After this merges, the user-scope runner copy in
~/.claude/scripts/skill_evals/needs refreshing (/magpie-setup-isolated-setup-updatereports the drift), or wrapper runs will not get the retry.Not fixed here
These fail the same way before #1532, so they are not caused by the config-home series.
They are left for follow-ups:
pairing-self-reviewcase-13: its blocking correctness finding sometimes omits the fix;preflight-floorcases 1, 6, 7 and 8 (case-6 references an undefined assertion);setup-statusstep 3 cases 3 and 4, which expectsetup adoptwhere the skill sayssetup install.Testing
prek run --all-filesis green.tools/skill-evalspytest is green; mypy reports no new errors.Gen-AI disclosure: prepared with the assistance of Claude Code (Claude Opus 5); reviewed by the author.
🤖 Generated with Claude Code