Skip to content

test(evals): add eval cases for pointer-swept skills that have none #13300

Closed
9 of 9 issues completed
Closed

Description

@kyle-sexton

Slice of #6405, carried over from #7296 (eval runs owed after the upstream-pointer sweep, PRs #7061-#7274).

Problem

The sweep replaced restated Claude Code docs text with pointers in these skills. None of them has a plugin eval case that targets it, by a Skill input_match or by tag, on origin/main at 90d3c6962e. So nothing checks that they still do their job:

  • instruction-placement migrate, audit, delta
  • work-items setup
  • autonomy setup
  • disk-hygiene audit, check, setup
  • skill-quality setup
  • bugs setup
  • harness-memory audit, stateless
  • docs-naming generate-file-name-gate
  • event-storming methodology, simulation
  • firecrawl update
  • github advise
  • code-metrics principles
  • mutation-testing audit
  • playwright demo-video
  • playbooks boris, repo-sweep, update

Change

For each skill, add at least one case that tests its main behavior. Ship one plugin per PR.

  • Each case has a skill-fired grader plus deterministic graders where the answer allows them.
  • Each case has pass and fail samples, and validate-cases.py reports 0 FAIL.

Done when

  • Every skill above has a case on main.
  • Each plugin's new cases have one run with a VALID both-arm verdict, recorded on this issue. Any regression found goes in its own bug issue.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  2. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Scope amendment. disk-hygiene check comes off the list. main has no such skill: origin/main has only plugins/disk-hygiene/skills/{audit,clean,setup}, because the *:check consolidation waves moved each plugin's check into its setup skill. Its check action is covered by the disk-hygiene setup case this issue already requires.

    Done-when row 1 now covers the remaining 22 skills.

  3. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Large
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    I understood this as: add at least one plugin eval case (a skill-fired grader plus deterministic graders, with pass and fail samples, and 0 FAIL from validate-cases.py) for each of the 22 pointer-swept skills that have none. The work ships one plugin per PR. The scope amendment drops disk-hygiene check, because setup now covers it. The done-when also asks for one VALID both-arm eval run per plugin, recorded here. That part needs eval runs, so a maintainer or a host run will have to do it.

    Because it spans about 15 plugins, the work should be split into one issue or PR per plugin. Related, but not duplicates: #7296 (running the deferred eval suites), #6405 (the parent slice) and #13298 (plain prompts missing two skills).

    Automated triage, applied by the lanes App.

  4. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  5. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 4, 2026
  6. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: sub-issue #13311 is open.

  7. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    Split at intake (owner Q93). This issue is Size Large, so its done-when is split into 9 sub-issues, each holding its task-list lines as written.

    Automated split by the lanes App. Admission waits on this issue while a sub-issue is open; work-unblock closes it as completed once every sub-issue is closed as completed by a merge or a listed human and its done-when is covered.

  8. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Part 4 (#13306): VALID both-arm runs on Claude Code 2.1.318, opus judge, 3 runs per arm, each plugin run from a copy outside git:

    Plugin Case With Without
    skill-quality su-check-default-root 1.00 0.00
    skill-quality su-check-missing-root-routes-to-configure 1.00 0.33
    bugs su-check-untracked-team-file 1.00 0.92
    bugs su-check-zero-config-is-info 1.00 0.33
    • Validity: run-validity.py reads VALID for both plugins. Its one warning is that no tool_used: Skill grader exists. Both setup skills set disable-model-invocation: true, so a case invokes them by slash command and no Skill call happens. Each case uses a with-only grader on skill-only content instead.
    • For the other parts: every setup skill in this list is likely to have the same Skill-grader limit.
    • No regression found. The bugs run found one grader defect, which is fixed in the PR. PRs: #13324 (skill-quality) and #13325 (bugs).
  9. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Part 7 (#13309): VALID both-arm runs on Claude Code 2.1.318, opus judge, 3 runs per arm, each plugin run from a copy outside git:

    Plugin Case With Without
    github advise-ruleset-walkthrough 1.00 0.67
    github advise-set-it-up-stays-proposed 1.00 0.67
    code-metrics principles-cyclomatic-22-answered-with-provenance 1.00 0.50
    code-metrics principles-coverage-no-universal-target 1.00 0.00
    mutation-testing au-dirty-target-stops 1.00 0.25
    mutation-testing au-no-test-command-asks 0.89 0.00
    • Validity: run-validity.py reads VALID for every run. advise-ruleset-walkthrough carries a warning for one with-arm Glob denied on the user's .claude directory, outside the plugin.
    • Gains: the noise report reads "n too small to call" throughout, so none of these is a measured gain.
    • Graders changed after the runs: one each in principles-coverage-no-universal-target (tightened) and au-no-test-command-asks (widened, for a false negative on a correct reply; its 0.89 is before that fix). Both were regraded offline over the recorded replies: only that false negative changes verdict. Neither final pattern has had its own paid run.
    • No regression found.
    • PRs: #13358, #13362, #13363.
  10. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Eval record for #13307 (part 5 of 9): harness-memory and docs-naming. Each plugin's new cases have one run with a VALID both-arm verdict.

    Setup for both: Claude Code 2.1.318, claude-opus-5-5, judge opus, --runs 3 -j 4 --scaffold --allow-tools Bash Write Edit, default with/without ablation, deterministic graders only. Each plugin was copied outside git.

    Plugin Cases run-validity.py With / without mean Delta, 95% interval noise-report Cost
    docs-naming (generate-file-name-gate) 3 VALID (warning: 1 without-arm denial, scored the same as that arm's denial-free runs) 1.00 / 0.70 +0.30 (-0.01 to +0.61) within noise 3.37 USD
    harness-memory (audit, stateless) 3 VALID (warning: ceiling; stateless-env-zero-beats-setting scores 1.00 without the plugin and is excluded, so the delta over the other 2 cases is +0.36) 1.00 / 0.76 +0.24 (-0.06 to +0.54) within noise 3.92 USD
    • Gain: not established for either plugin, since both intervals contain 0. test(evals): add eval cases for pointer-swept skills that have none #13300 asks for a VALID run, not a gain. In every with-arm run the skill fired and every grader passed.
    • Earlier rounds: each was fixed and rerun, not counted.
      • docs-naming 1 and 2: INVALID. Without-arm runs wrote under .claude/, which the sandbox protects, and one with-arm run made a scratch copy outside the repository. Each prompt now rules that out.
      • docs-naming 3: VALID, but a spot-read found correct answers failing on grader wording. Those graders were widened, with samples.
      • harness-memory 1: INVALID. Every run of the env case read the sandbox's protected default memory store. That case now grades only the on/off answer.
      • harness-memory 2: VALID, but a correct purge manifest failed a grader that demanded absolute paths, which the skill never promises.
    • Regressions: none found, so no bug issue.
    • Commits (not yet on main; one PR per plugin to follow):
      • docs-naming: ccf3966a, 3c1cb00e
      • harness-memory: 1aae4810, c18c84ab
  11. melodic-automation-lanes commented on Nov 5, 2026

    @melodic-automation-lanes
    Contributor

    Every sub-issue of this split is closed as completed by a listed human or a merge (#13303, #13304, #13305, #13306, #13307, #13308, #13309, #13310, #13311), so the lanes App closes it as completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    ready

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions