Skip to content

perf(evals): cut the plugin-eval skill body through progressive disclosure #12661

Description

@kyle-sexton

Refs #12243

Outcome

The /evals:plugin-eval body is cut through progressive disclosure: action-specific detail moves to reference files read on demand, and the hub keeps routing and gates. This is one of five slices under #12243; the first cut (/source-control:worktree) landed in #12387, whose recipe this follows.

Size at origin/main 3bd42cabfe: body 41,783 bytes (SKILL.md with frontmatter stripped, the method #12387 used); the skill directory holds 570,818 tracked bytes. The binding limit is the paired eval run each cut needs, so each skill is its own PR.

Done when

  • The hub's body bytes fall, measured the same way. Moved text sits verbatim in reference/, and every citation of it (tests, hooks, scripts, fixtures, README) is repointed.
  • /docs-hygiene:compress compare returns VERDICT PASS with no SEMANTIC LOSS.
  • The cases in plugins/evals/evals/ that target this skill (the pe-* cases and any other whose case.yaml names it) run on the before and after copies with /evals:plugin-eval --baseline <before.json> --margin <m>, on a round run-validity.py marks VALID on both arms, and the after arm is non-inferior (plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md, "Cutting text").

Related

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    host-runNeeds an agent run or builder session on a host; not a person or the issue lane.
    on Nov 3, 2026
  2. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

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

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

    Decision recorded.
    (agent; not an owner decision)

    The Iterating cut in #12875 ships. The one case that reads the moved text, iterate-then-confirm, cannot detect its deletion. Its control, main's skill with only ## Iterating deleted, still scores 1.00 on 3 of 3 runs, because the hub's Cost section already says "--runs 1 for iteration with a confirm at 3".

    Basis:

    • plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md:61-63 defines the control for a body cut as deleting the skill's procedure steps.
    • That control ran as preregistered above (r3): 0.98 to 0.72, change -0.26 (interval -0.39 to -0.13), three case drops, VALID on both arms.
    • The cut round (r6) is non-inferior at margin 0.05 (+0.01, interval -0.01 to +0.04), VALID on both arms.
    • On iterate-then-confirm, the after arm read reference/iterating.md in all 3 runs.

    #12661 (comment)

    That decision settles the open questions, so I'm asking nothing further. I read this as a bounded change to the plugin-eval skill: move action-specific text into reference/, repoint its citations, and confirm with a compress check and a paired eval run. The paired eval run needs a host, so admission can route it. I found no duplicate.

    Automated triage, applied by the lanes App.

  3. 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 3, 2026
  4. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 3, 2026
  5. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: its done-when asks for what an unattended lane run cannot perform: item 1 (measure-over-time: "The hub's body bytes fall, measured the same way. Moved text sits verbatim in..."), item 3 (a model eval run: "The cases in plugins/evals/evals/ that target this skill (the pe-* cases and ..."); recommended split: keep the other items here as the admissible issue and move these to a child issue for the host queue (host-run); it carries host-run. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  6. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  7. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Claim. Backlog HITL host-run worker is taking this now.

  8. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Negative control, preregistered before the first paid run (rewrite-a-plugin.md step 4).

    • Suite: the 7 cases that name this skill in case.yaml (pe-ci-pin-full-ids, pe-estimate-under-ceiling, pe-invalid-no-number, pe-rules-target, pe-windows-sandbox-refusal, pe-worktree-guard-stop, va-unknown-timeout-key). All graders are deterministic (regex, tool_used).
    • Degraded copy: the before plugin (origin/main) with the plugin-eval SKILL.md body's procedure sections deleted (everything after the H1 except ## Next), frontmatter, reference/ and scripts/ kept.
    • Model: claude-opus-5-5, --runs 2 --ablation none --scaffold --keep-temp, launched together with a before run.
    • Detection: the noise report (--baseline before.json) calls a case drop, or the mean case score falls by 0.15 or more. Neither means the body is unmeasurable by this suite and the before text ships.
    • run-validity.py --own-copy-search-warns on the degraded side only.
    • The cut's comparison: after against a fresh before, launched together, same flags, noise-report.py --baseline before.json --margin 0.05, VALID on both arms.
  9. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded.
    (agent; not an owner decision)

    The Iterating cut in #12875 ships. The one case that reads the moved text, iterate-then-confirm, cannot detect its deletion. Its control, main's skill with only ## Iterating deleted, still scores 1.00 on 3 of 3 runs, because the hub's Cost section already says "--runs 1 for iteration with a confirm at 3".

    Basis:

    • plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md:61-63 defines the control for a body cut as deleting the skill's procedure steps.
    • That control ran as preregistered above (r3): 0.98 to 0.72, change -0.26 (interval -0.39 to -0.13), three case drops, VALID on both arms.
    • The cut round (r6) is non-inferior at margin 0.05 (+0.01, interval -0.01 to +0.04), VALID on both arms.
    • On iterate-then-confirm, the after arm read reference/iterating.md in all 3 runs.
  10. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    and removed
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Nov 3, 2026
  11. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (dispatch 1; 2 runs that reach intake, or 6 dispatches, hand it to a maintainer).

  12. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  13. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 3, 2026
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

    host-runNeeds an agent run or builder session on a host; not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    confirmed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions