Repository navigation
test(visualization): outcome eval cases and trigger probes for present and visualize - #11623
Conversation
Lane-Activity: work-resolve-issue/resolve-issue
Six regex-graded cases written from the before contract (three per skill), each grader with pass and fail samples, frozen before any after-version run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
The present description drops to 407 characters with all six trigger phrases kept; held-out trigger counts matched the original on Opus and Sonnet. Both bodies and the visualize description stay as they were: the shorter versions dropped outcome cases or held-out triggers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
Whitespace only (MD003, MD032), made after the measured passes; the prompt text the model reads is unchanged. 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-security-review reviewed Incremental security review of The change is a changelog fragment reword. The heading goes from The skip gate's second condition applies: the change has no security-relevant surface. I did not run a fan-out. No spend: no billing, plan, or model/effort/turn-limit change. critical-findings: 0 |
…r run skill-criteria.md step 4 reads a number only from a run /evals:plugin-eval judges valid, and every trigger pass behind the shorter description was judged INVALID, so the before description ships. The re-measure is #11628. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY
|
claude-review reviewed Incremental review of The fragment now says |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e0cee8ff24
ℹ️ 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".
Closes #6595
Refs: #6476
Summary
This is the
visualizationslice 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.presentdescription scored the same held-out trigger counts on both models, but every trigger pass behind it was judged INVALID by/evals:plugin-eval's validity check, andskill-criteria.mdMeasurement step 4 reads a number only from a run judged valid. So its before description ships. The re-measure is test(visualization): fix the frozen suite's graders and re-measure present and visualize with VALID runs #11628.visualizedescription stay as they were. Each shorter version failed the pre-registered rule on Opus.evals/, three per skill (pres-*,viz-*). All are graded deterministically (regex), and each grader has offline pass and fail samples.probes/, 18 queries per skill.Fix
No skill file changes: the shorter
presentdescription was committed, then reverted in3e4f215e66(see Summary).plugins/visualization/evals/: six cases written by a fresh agent from the before contract, frozen before any after-version run. A smoke pass on the before version classified three failures:names-rungandreason-givenrejected replies that met the outcome. Their regexes were widened, with the observed replies added as pass samples and near-misses as fail samples.viz-ambiguous-code's paste had one dominant form, so the skill was right not to ask. Its prompt was rewritten so three code-shape forms fit, and a re-smoke confirmed it.The meaning diff (
/docs-hygiene:compress compare, two independent labelers per skill) found three losses. Each was restored before any after-version run:Genre: decks.identifier./visualization:visualize).None of the restored text ships, because both bodies reverted.
Changelog fragment
.changes/visualization/feat-6595-concise-visualization-36723930.md, patch bump.Verification
Per-skill decision table
Description: held-out positives that fired (out of 8) and negatives that stayed quiet (out of 8), one run per query. Body: mean outcome-case score over 3 runs, scored with the plugin loaded. The decision rule was written before any run: after ships only if after >= before on trigger counts, and after >= before - 0.05 on every case, on both models (claude-opus-5-5, claude-sonnet-5-5).
pres-k2-instructionpres-missing-figurepres-outline-recordviz-ambiguous-codeviz-comparison-tableviz-pr-diff-terminalpos-val-02, missed on both versions and both models), but these trigger passes were judged INVALID, so under step 4 they cannot carry a ship decision.pos-val-01andpos-val-04, which the original fired on. Sonnet fired on none of the eight visualize positives with either description: it answered directly, with no Skill call and no denial. So Sonnet cannot separate the two versions here, and the decision rests on Opus.pres-outline-recordfell from 0.889 to 0.778 on Opus: thespeaker-notesgrader failed in 2 of 3 after runs against 1 of 3 before runs.viz-comparison-tableandviz-pr-diff-terminaleach fell from 0.889 to 0.778, one more grader miss each.Grader-miss rulings
None were applied: the decisions stand on the pre-registered scores. A post-run read found misses, in both versions, on replies that meet the case's
expected_outcome:names-rungrejected "That's the default when nothing else is set", "I used the default for a small comparison", and before run 3's "That was the default choice".reason-givenrejected one-line reasons naming the other repository's PR diff and the escape helper, in both versions.pres-outline-record'sexpected_outcomeasks for speaker notes on every slide, but the skill says "any speaker notes", sospeaker-notespasses or fails by chance.With 3 runs, one grader flip moves a case by 0.111, more than the 0.05 margin, so these graders cannot tell noise from loss. A follow-up round should fix them and re-measure the bodies with a fresh held-out set.
Validity
16 measured passes (8 trigger, 8 outcome) plus 2 smoke passes, run one at a time on Claude Code 2.1.316. No pass hit a run error, timeout, cost ceiling, or session or usage limit, and none was partial.
run-validity.pyjudged 5 outcome passes VALID. It judged 3 outcome passes and all 8 trigger passes INVALID, for one of two reasons:~/.claude,~,/usr/bin, the sandbox root), 1 to 3 per pass, in both versions;Under the rule set before the runs, only run errors and timeouts invalidate a pass.
Passes ran back to back in before/after pairs, not concurrently, because this lane allows one
claude plugin evalat a time. All 16 ran within 49 minutes.After the passes, two eval prompts each got one blank line so markdownlint passes (MD003, MD032). This is whitespace only. The passes ran on suite digest
774bd872…; the committed suite is2e3185c1….The held-out trigger sets label one negative per skill
train, only to satisfy the probe validator. All 16 queries per skill were scored.Unmeasured
present: the Artifactquickstartcall andtype_url, thecheck-deck.mjsgate, publish and share, and the line naming which layer supplied the medium. The eval sandbox has no claude.ai Artifact tool, and the cases grant onlySkillandRead. The cases grade only the outline-only fallback.visualize: these need Bash, Write or tools the sandbox lacks, so the meaning diff covers them:mktemplocal-file placement;mermaid-gate.mjscall and the mermaid-source form;artifact;ClaudeDesignrouting, and the playground boundary.skills/*/evals/evals.json(the skill-creator suites) is unchanged and was not run.Checks on this branch
scripts/check-affected.sh --tests: 14 passed, 2 skipped over 34 changed files./evals:validate(validate-cases.py) onplugins/visualization/evals: exit 0, every sample sorts correctly./skill-quality:check plugins/visualization/skills: PASS, with no FAIL on either side.measure-invocation.sh validateonprobes/: PASS, 0 warnings.check-changelog-fragments.sh --check-required origin/main: pass.Left out: the Artifact, publish and Bash-dependent paths listed under Unmeasured (the eval sandbox cannot run them); the skill-creator
evals.jsonsuites (not part of this protocol).Related
writing).Ready review findings
A fresh-context code review ran at ready in place of the CI code-review lane (venue
local). Every finding is VALID (defer) to #11628, because the suite is frozen and measured and skill text changes only with new eval evidence:presentdescription cut reads trigger passesrun-validity.pyjudged INVALID (see Validity), againstskill-criteria.mdMeasurement step 4. Resolved in this PR: the cut is reverted (3e4f215e66), and test(visualization): fix the frozen suite's graders and re-measure present and visualize with VALID runs #11628 re-measures it.recommended-first,asks-one-questionandrenders-nothing,title-not-hijacked,speaker-notes,names-rungandreason-given, and no invented-quote grader inpres-missing-figure.pres-k2-instruction/samples/reports-instruction.json.🤖 Generated with Claude Code
https://claude.ai/code/session_01VcuponPYh1riXtUL5WmMiY