Repository navigation
fix(plugin-eval): load the eval handoff classifier under its own package scope - #13636
Conversation
…age scope
In run 42138674762 both measure-skill-edit key legs failed at the probe:
eval-handoff.mjs required lane.cjs in place from the .ci-workflows sparse
checkout, Node's package-scope lookup climbed past it to the workspace root,
and the package.json there did not parse ("Invalid package config"). The
classifier never ran, so the legs went red instead of judging or handing off.
- loadLauncher copies the three classifier files into a fresh folder whose
package.json ends the lookup there, requires them, and removes the folder.
- A classifier that cannot run now stops the leg with an explicit ::error
in every probe and judge step: fail closed, never a guessed handoff.
- Tests: the classifier under a workspace with an unparsable root
package.json; a classifier that cannot load prints no verdict and exits 2;
the loaded files equal the legs' sparse checkout; a key leg with an empty
or credit-skipped key runs no step past its credential check.
Refs: #13586
Refs: #12035
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review: PR #13636 (head 3000b31)I found no security issues. I read every hunk of all 5 changed files. Two of them match trusted paths: What changed
What I checked
Spend (not a finding). None added. Fail-closed legs can spend less, because a broken classifier no longer hands off to the next credential. critical-findings: 0 |
|
claude-review reviewed Code review: no findingsThis was a full review of the head commit What changed
What I checked
Not verified by me Closing issues and spend
|
Post-merge mutation testingKilled 5, survived 2, timeout 0, no coverage 0, invalid 0, not run 0.
Surviving mutants
The run's summary has the full report. |
Refs: #13586
Refs: #12035
Summary
In run 42138674762 (maintenance-measure-skill-edit, education/teach), both pass-a and pass-a2 failed at the key leg's probe:
The handoff classifier from #13626 never ran, so neither leg judged its credential or handed off, and pass-subscription and pass-fallback were skipped.
Fix
The cause.
eval-handoff.mjsrequiredlane.cjsin place, from the.ci-workflowssparse checkout. That checkout holds only three files and nopackage.json.package.jsonthere did not parse.package.jsonat its working directory's root, exits 2 with the same message, and passes with a valid one.What wrote that file is UNVERIFIED. The repository checkout is at
.base, not the workspace root. The fix no longer depends on it.The fix.
loadLaunchercopies the three classifier files into a fresh folder with its ownpackage.json({"type":"commonjs"}), where the lookup ends.A classifier that cannot run fails closed.
eval-hill-climb-pass.ymlandeval-browser-dispatch.ymlnow stops the leg with::error::the handoff classifier failed, so this leg cannot tell its credential's stop from a case failure and stops.Check (1), the credit-skip path.
steps.credential.outputs.run, or on a step gated on it.SKIP_KEY: falseandPRESENT: true. The skip notice in the log is that step's script text, not its output.Verification
eval-handoff.test.mjs: 12/12. New cases:package.jsonisnot json {hands off a credit stop;callers.test.mjs:run;::error.Node suites.
node --test ".github/scripts/**/*.test.mjs" ".github/actions/**/*.test.mjs": 8214 tests, 8214 pass, 0 fail, 0 skipped.Bash suites:
write-runner-never-rules.test.shcheck-artifact-retention.test.shcheck-app-key-references.test.shcheck-read-caller-keys.test.shcheck-lane-coverage.test.shworkflow-self-paths.test.shcredential-sweep.test.shrun-zizmor.test.shci-review-lanes.test.shaffected-tests-live.shGates, all clean:
runner-policy.mjs --root .passed;check-artifact-retention.sh --check,check-read-caller-keys.shandcheck-app-key-references.sh;check-test-tmp-cleanup.sh.Remaining
package.jsonon the runner. UNVERIFIED: no step in the leg writes one, and the log shows nothing.Related
🤖 Generated with Claude Code