Repository navigation
test(wizard): outcome eval cases and trigger probes; concise rewrite measured, not shipped - #11672
Conversation
Six claude plugin eval cases (gen-* for generate, una-* for unattended), all deterministically graded with offline pass and fail samples, plus the frozen 18-query probe sets for both skills, written from the before contract ahead of the concise-skills rewrite. Refs: #6596 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
The smoke pass showed four graders failing replies that meet their case's expected outcome: no-wizard-run counted a path held in a shell variable as a run, routes-unattended missed the unattended skill's own scope step, asks-confirm missed "once you answer and approve the table", and secret-resolved-by-script missed a Read-Host -AsSecureString prompt. Each fix carries a must-pass sample of the missed shape and a must-fail sample it must still reject. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
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-review reviewed Incremental review of The change rewords
I checked both against their I read the two prompt files, their Trusted-path scrutiny: neither changed file matches a trusted-path glob. Cost: the change adds no billed resource and no new model or run spend, so I set no hold. |
|
claude-security-review reviewed No security findings in the incremental change since 51c0923. The change rewrites one The skip-gate 2 item applies: no security-relevant surface. The edit doesn't delete, narrow, or soften any standing instruction. Not run: the criteria file was not read in full, and the adversarial validation step was skipped because there were no candidates. critical-findings: 0 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c3d940ec24
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ers rejected asks-approval now accepts "reply with your approval" and "give me your approval" and still rejects their negated forms. The routing graders in una-routes-2fa and gen-routes-elevated grade the Skill call to the target skill instead of the final reply, since a trace regex would also match the entry skill's own body, which names the target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
…graders Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
Closes #6596
Refs: #6476
Summary
This is the
wizardslice of the concise-skills rollout, run through the per-plugin runbook (/playbooks:skill-authoring,reference/rewrite-a-plugin.md). A cut ships only with eval evidence that nothing was lost./evals:plugin-evaljudged INVALID, and the protocol ships only parts measured on valid runs (skill-criteria.md, step 4 and step 6).evals/, three per skill. They are graded deterministically (regex andtool_used), and each grader has offline pass and fail samples.probes/, 16 queries per skill..changes/wizard/feat-6596-concise-wizard-8d82efc5.md, bumpnone: no skill text changes, so no release.Fix
plugins/wizard/evals/: six cases with two fixtures.gen-approval-gate,gen-routes-elevatedandgen-stage-table-firstcover/wizard:generate.una-handoff-dry-check,una-routes-2faanduna-scope-irreversiblecover/wizard:unattended.Four grader defects, fixed after the smoke pass and before any measured pass. A fresh agent classified all 19 smoke failures: 15 real, 4 grader defects, 0 case defects. Each fix only widens acceptance. Each adds a must-pass sample of the missed shape and a must-fail sample it must still reject. The validator fails on the old graders and passes on the new ones under both Python and JavaScript.
no-wizard-run: a path held in a shell variable (S=.../setup-sms.sh; grep ...) counted as a run.routes-unattended: it missed the unattended skill's own scope step after the Skill call.asks-confirm(two cases): it missed "once you answer and approve the table".secret-resolved-by-script: it missed aRead-Host -AsSecureStringprompt.The suite was frozen after a re-smoke of the fixed cases and was not edited again.
plugins/wizard/probes/: the trigger probes the held-out set was drawn from.Verification
Per-skill decision table
Rule, written before any run: on both models, the after description ships only if it fires on at least as many of 8 held-out positives as before and stays quiet on at least as many of 8 negatives. The after body ships only if every outcome case's mean score over 3 runs is at least before minus 0.05. A validity rule was added before any measured pass was read and applies to both versions: the after text for a part ships only if every pass behind that part, on both models, is VALID under
run-validity.py.gen-approval-gategen-routes-elevatedgen-stage-table-firstuna-handoff-dry-checkuna-routes-2fauna-scope-irreversibleDescriptions revert on validity only. Every trigger pass fired 8/8 and stayed quiet 8/8 on both versions and both models. Seven of the eight trigger passes were INVALID for sandbox denials. These come from the probes themselves, on both versions:
neg-val-04Globs a system log directory (3 of 4 passes);pos-val-05Globs under the Windows mount (all 4 passes).Only the before-version Sonnet generate pass was VALID. At 8/8 the counts could show no gain either way.
Generate body reverts. The after Sonnet
gen-approval-gatepass is INVALID: its with-armcpof the plugin'stemplate.shwas denied, a risk named before the run. As graded, the same case also drops 0.067, past the margin.Unattended body reverts. The after Opus
una-handoff-dry-checkpass is INVALID: two with-arm Bash denials, on reads of/etc/os-releaseand the hostname. Both runs still scored 1.00. As graded, Sonnetuna-routes-2faalso drops 0.833 to 0.500.Two-version noise report (the three cases merged per skill, model and version, margin 0.05). Every pair reads "not shown non-inferior at margin 0.05", and Sonnet unattended also flags the
una-routes-2facase drop. That is no evidence of a gain, and given the grader misses below, no evidence of a loss either.gen-approval-gatehas 5 graders, so oneasks-approvalmiss costs 0.067 and fails the margin. Opusuna-scope-irreversiblehas 7 graders, so one miss costs 0.048 and passes. The same single flip gets opposite verdicts depending on how many graders a case has. The rule was not changed.Graders changed after review
The committed eval suite differs from the measured one: measured digest
883b830e6b05c41f2236eacb50a97e18156099e7ff376c55cc8b1dab0f720ebe, committed digest185b5d6c7de2ce0cf756afb16854b5d27008960731593d7008620b992a65069b. After review (Codex), three graders changed in51c09230e0:gen-approval-gate/asks-approvalnow accepts "reply with your approval" asks.una-routes-2faandgen-routes-elevatedrouting graders now grade theSkillcall to the target skill (tool_used,arm: both), not the reply text.ce3f5ac2darestates those two cases'expected_outcometo match. No decision moves, because this PR ships no skill text (every part reverted on the validity rule). The corrected graders serve the re-measure in #11628.Grader-miss rulings
These were read from the kept traces. Each run meets the case's
expected_outcome, but its grader marked it a failure. The rulings are listed and not applied; every score above is as graded.gen-routes-elevated/routes-unattended, Opus: 3 before and 2 after with-arm runs calledSkill wizard:unattended, planned an adminpwshscript and wrote no.sh. The regex accepts only replies that say "unattended" or "result file ... I read".una-routes-2fa/routes-generate, Sonnet: all 3 after runs and 1 before run calledSkill wizard:generate, showed the generate stage table and wrote no.ps1. The reply text never nameswizard:generate, so the text-only regex fails. This explains the 0.833 to 0.500 drop.gen-approval-gate/asks-approval, Sonnet after: "Reply with your approval and I'll runchmod +x" asks for approval. The regex accepts "reply approved" but not "reply with your approval".gen-stage-table-first/asks-confirm, Opus after: "Once you've answered these and confirmed or edited the table, I'll write the script" asks for confirmation. Two other misses in this case gate the script on open questions without asking to confirm the table; those failures stand.gen-stage-table-first/no-env-grep, Sonnet after (borderline): the match wasgrep -v '^./.env:', a filter that drops.envlines after a recursive grep. No value appeared in the reply.The case-drop restore re-run was not run. Every part already reverts on validity, so no restore result could change a decision.
Validity
run-validity.pyverdicts:gen-approval-gatebefore pass. The CLI then refused every Bash-granting run. That pass (two errored runs, INVALID) and five more refused sub-passes (0 turns, cost 0) were set aside.Unmeasured
no-wizard-runmisses ascript -qeclaunch;no-paste-backaccepts "send me result-latest.json and the transcript".Checks on this branch
scripts/check-affected.sh --tests: 14 passed, 2 skipped./evals:validateonplugins/wizard/evals: exit 0; every sample sorts correctly. The only warnings are the expectedallowed_toolsgrant notes./skill-quality:check plugins/wizard/skills: PASS for both skills, 0 errors, 2 size warnings each. These are unchanged from the base.plugins/wizard/skills/generate/template.test.sh: 335 cases, 0 failures.plugins/wizard/skills/unattended/template.test.sh: OK.scripts/check-changed-skills.sh origin/main: no changed skills.scripts/check-changelog-fragments.sh --check-required origin/main: pass.Left out: the case-drop restore re-run (every part already reverts on validity); the two tightening grader gaps listed under Unmeasured; spoke reach in the with-arm runs.
Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY