Skip to content

Concise skills rollout: naming (1 skills, 1 model-invoked) #6611

Description

@kyle-sexton

Part of #6476. Rewrite naming's skills to the skill criteria in one draft PR, following the per-plugin runbook (/playbooks:skill-authoring, reference/rewrite-a-plugin.md). The runbook and the rewrite protocol it cites decide what ships; this issue holds only what is specific to the plugin.

Path: description-only, measured by trigger probes (owner decision on #6476, 2026-10-18: the 1-skill tail takes the description-only path). The body is not rewritten.

The plugin today

As of origin/main on 2026-10-24:

  • Skills: name-it-better (model-invoked).
  • Outcome eval case directories under the plugin: 0. Probe files under probes/: 0.

Done when

  • git diff origin/main -- plugins/naming/skills changes no line outside the description key of plugins/naming/skills/name-it-better/SKILL.md.
  • plugins/naming/probes/name-it-better.json exists in the PR.
  • The PR body shows /skill-quality:check measure-invocation trigger scores for the before and the after description on the same probes.
  • The after description scores at least the before score, or the PR ships the before description and says so.
  • /skill-quality:check plugins/naming on the PR head reports no FAIL that the run on main does not.
  • The plugin's version or changelog entry is in the PR, per the plugin's release mode.

Eval spend and review

  • Eval passes within prepaid API credit are pre-approved (owner decision Q46, 2026-10-24), at the --max-cost-usd 5 per-pass ceiling set on #6476 on 2026-10-18.
  • No person gates the PR: the owner's 2026-10-24 decision (C12) leaves only an intent mismatch during the build or a security issue at review as stops.

Generated by Claude Code

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 7, 2026
  2. github-actions commented on Oct 7, 2026

    @github-actions
    Contributor

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

    Size: Small
    Complexity: Low
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: rewrite only the description of the name-it-better skill in the naming plugin, add a trigger-probe file, compare before/after trigger scores, and add the version or changelog entry. The runbook and the done-when list are specific, and eval spend is already pre-approved. Nothing is missing, and I found no likely duplicates.

    Automated triage, applied by the lanes App.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 7, 2026
  4. added theissue type on Oct 12, 2026
  5. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  6. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  7. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    Released by the owner's HITL session (2026-10-24, C12): it waited only on a removed gate. Intake triage re-runs on it to set its fields, then admission takes it.

  8. github-actions commented on Oct 25, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (attempt 1 of 2).

  9. 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.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed on Oct 25, 2026
  10. 3 remaining items

  11. kyle-sexton commented on Oct 27, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI.

    Parked for capacity, not for the owner. This rollout's remaining work is the measured eval passes of the batch-1 protocol, which the issue lane cannot run: it cannot start claude or claude plugin eval (see the lane's escalation on #6585, https://github.com/melodic-software/claude-code-plugins/actions/runs/40186335064). It waits on the plugin eval dispatch work in #9704, now a blocked-by edge, so admission holds it until #9704 closes.

    Under the owner's 2026-10-26 stop rule, a person is needed only for a change in intent or vision, an implementation finding that changes the intent or primary design, or a high or critical security issue; host, attended and eval runs are agent work. So needs-human comes off, and the issue moves to host-run with status: confirmed, which keeps the issue lane from taking it when #9704 closes: #9704 adds an eval dispatch workflow, not eval capability for the issue lane.

  12. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    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.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 27, 2026
  13. kyle-sexton commented on Oct 31, 2026

    @kyle-sexton
    MemberAuthor

    Host run. Description-only trigger screen for naming:name-it-better: before and after copies launched together, frozen probes.

    What ran

    • Claude Code 2.1.316, base a781adf89a, models claude-opus-5-5 and claude-sonnet-5-5, --ablation none, -j 2, cases from measure-invocation.sh emit-plugin-eval, 20 probes (10 positive, 10 negative), digest 49ea5128d1ae.
    • Description length: 650 to 542 characters (16.6%). Probes were written by a fresh agent from the before description. The rewriter was barred from reading probes and evals, and kept every quoted trigger phrase.
    • Rule written before any after-version result: --runs 1 screen, then --runs 3, where after must score at least before on every model (the done-when), or the before description ships.
    • Meaning diff: two labelers, union of losses. PASS from both.
    • Command in short form: claude plugin eval <copy> --eval-dir trigger --model <model> --ablation none --runs N -j 2 --keep-temp --max-cost-usd 5, each in a capped scope.
    • Result files: /home/kyle/worktrees/host-run-tail-eval/out/<label>-before.json and -after.json, labels s1-naming-opus, s1-naming-sonnet, s3-naming-sonnet. Rule: PREREG.md beside them. Frozen probes: /home/kyle/worktrees/host-run-tail-eval/probes/naming/name-it-better.json.

    Done-when

    • Description-only diff: not covered, no PR. The run copies differed only in the description.
    • Probe file in the PR: not met: frozen outside the repository, no PR.
    • Before and after scores in the PR body: not covered, no PR. They are in this record.
    • After at least before, or the PR ships the before description: not met: 59/60 against 60/60 on sonnet, and no PR ships the before description yet.
    • /skill-quality:check, no new FAIL: not covered: no PR head.
    • Changelog entry: not met, no PR.

    Scores (hits on both polarities, over probes x runs)

    Pass Model Before After
    screen 1 run opus 20/20 20/20
    screen 1 run sonnet 20/20 20/20
    gate 3 runs sonnet 60/60 59/60

    Result

    No improvement. The after description scored below the before on sonnet (one negative probe fired in 1 of 3 runs), so under the done-when the before description stays. The gap is one run in 60, which is inside the protocol's 5-point margin; the done-when is stricter than that margin. The opus gate was stopped because it could not change the result. Remaining for this issue: the done-when still lists the probe file, which is not committed, because this run opened PRs only for shipped changes.

    Caveats

    • run-validity.py has no trigger mode: a missed positive prints INVALID on skill fired, and an ungranted-tool No such tool available error prints a denial. Both were read per an addendum written before any --runs 3 pass, the same for both versions. That addendum fails a pass on a denial of a granted tool, and every other row had to pass.
    • The eval loads one plugin, so these numbers show no rival skills from other plugins. A score at the ceiling cannot show an improvement.
    • No separate held-out set ran: the rewriter never saw these probes and cut no quoted phrase.

    Target labels: add none; remove none.

  14. self-assigned this
    on Nov 1, 2026
  15. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  16. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Progress (lane 3): #12002 merged as e3da95f.

    Lease released.

  17. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  18. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    Reopened (lane 3): the #12186 description cut failed a retroactive negative control, so it is being reverted.

    Owner rule (2026-11-02): before a cut ships, the suite must score a deliberately broken copy clearly below the before version, or the cut is unmeasurable. #12186 merged before the rule existed, so lane 3 ran the control afterwards.

    Setup: the shipped 624-character description against description: "Helps with naming.", on Sonnet 5.5. Both versions were launched together, and all 12 passes were VALID.

    Suite shipped broken
    Routing, 4 cases × 5 runs (merged mean) 0.967 0.983
    Held-out trigger: should-trigger fired 24/24 24/24
    Held-out trigger: should-not quiet 22/24 23/24

    The noise report called no routing case drop. The trigger suite's one case drop (neg-val-03, a single false fire out of 3) did not reproduce in a preregistered confirmation run, which was quiet 3/3 on both versions.

    FAIL. The suite cannot tell the description from a generic one, so round 1's tie is no evidence the cut is safe.

    Likely cause (UNVERIFIED): with only this plugin loaded, the skill and plugin names route naming asks by themselves and nothing competes. A control that can bite needs competing skills such as docs-hygiene:rename-references in the session, which plugin eval cannot load. A headless claude -p session with those plugins enabled can.

    Next: a revert PR restores the 650-character description. This issue stays open for a round with a competitor-loaded routing suite. Cost of the control: 9.32 USD (list-price estimate, the sum of costUsd).

  19. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI.

    Negative control with competitor plugins loaded (#12249): PASS

    Part: naming name-it-better description (#6611).

    Copies. main: git archive of origin/main plugins/ at cf60764 (#12300 merged). broken:
    the same, with only the skill's description: line replaced by
    "Helper for repository maintenance tasks.". diff -r main broken shows that one line only, before
    and after emission.

    Suite. The 20 frozen probes in probes/name-it-better.json (10 should-trigger, 10 should-not),
    emitted per copy with the merged measure-invocation.sh emit-plugin-eval. Every case's plugins:
    line names naming and its competitors' plugins: docs-hygiene, docs-naming, domain-driven-design. The
    emitted cases are byte-identical in both copies. Main and broken were launched together on
    claude-sonnet-5-5 (Claude Code 2.1.316), each with
    --runs 3 --ablation none --disallow-tools Read Glob Grep Agent -j 2. The rule was preregistered
    before any paid run.

    Loading. All 60 with-arm init lines on each side list exactly naming, docs-hygiene, docs-naming
    and domain-driven-design, with no plugin_errors. They also list two Claude Code built-ins
    (cc-plugin-agents-md, cc-plugin-plugin-authoring), the same on both sides. run-validity's
    plugins loaded check passes on both passes.

    main broken
    should-trigger fired 30/30 11/30
    should-not quiet 30/30 30/30
    mean of case scores 1.000 0.683
    run-validity VALID VALID

    Noise report, broken against main (20 cases, margin 0.05):

    • with-arm change (this minus baseline), paired over 20 cases: -0.32, 95% interval -0.51 to -0.12
    • case drop: case naming-name-it-better-pos-train-01 with-arm fell from 1.00 to 0.00, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-train-03 with-arm fell from 1.00 to 0.33, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-train-04 with-arm fell from 1.00 to 0.00, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-val-01 with-arm fell from 1.00 to 0.00, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-val-02 with-arm fell from 1.00 to 0.33, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-val-03 with-arm fell from 1.00 to 0.00, a third or more; name its cause and prove it before shipping
    • case drop: case naming-name-it-better-pos-val-04 with-arm fell from 1.00 to 0.00, a third or more; name its cause and prove it before shipping
    • compare verdict: not shown non-inferior at margin 0.05 (the interval's lower end -0.51 is below -0.05), and 7 case(s) dropped by a third or more

    Seven of the ten should-trigger probes dropped, five of them in all three runs. In the missed runs
    the traces show no denial or run error: the broken copy answered the naming request directly,
    without the skill. Three positives still fired 3 of 3 (pos-train-02, pos-train-05,
    pos-val-05), and every should-not probe stayed quiet on both versions.

    Result: PASS, on the rule's mean criterion: the with-arm mean fell by 0.32, past the 0.15
    threshold. That criterion decides on its own, so no confirmation pair was needed for the case drops.
    With competitors loaded, the suite tells the shipped description from a generic one, so the #6611
    description cut can be measured with this suite. The single-plugin control could not do that (24/24
    fired on both versions).

    Cost: 5.79 USD (list-price estimate, sum of costUsd over 2 passes).

    Next for this issue: the suite can now tell a description from a generic one, so a description cut is measurable. A rewrite ships only on a before/after pass of these probes with the same competitors loaded, with no case drop.

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

Metadata

Metadata

Assignees

Labels

host-runNeeds an unattended run on a host; the host runner takes it, 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

No fields configured for Task.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions