Repository navigation
Concise skills rollout: playgrounds (1 skills, 1 model-invoked) #6612
Copy link
Copy link
Open
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: lowNice-to-have, cosmetic, or speculative; opportunistic.Nice-to-have, cosmetic, or speculative; opportunistic.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A 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.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Description
Part of #6476. Rewrite playgrounds'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:
use(model-invoked). - Outcome eval case directories under the plugin: 0. Probe files under
probes/: 0.
Done when
-
git diff origin/main -- plugins/playgrounds/skillschanges no line outside thedescriptionkey ofplugins/playgrounds/skills/use/SKILL.md. -
plugins/playgrounds/probes/use.jsonexists in the PR. - The PR body shows
/skill-quality:check measure-invocationtrigger 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/playgroundson 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 5per-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
Metadata
Metadata
Assignees
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: lowNice-to-have, cosmetic, or speculative; opportunistic.Nice-to-have, cosmetic, or speculative; opportunistic.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A 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.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Type
Fields
No fields configured for Task.
Activity
github-actions commentedon Oct 7, 2026
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
descriptionof theplaygrounds:useskill, addprobes/use.json, and show before/after trigger scores. Also add the version or changelog entry. The issue has no open questions, and the runbook and owner decisions it cites set the approach. I found no likely duplicates.Automated triage, applied by the lanes App.
kyle-sexton commentedon Oct 19, 2026
This was generated by AI during triage.
Held: this one-skill plugin is in the description-only tail the owner set on #6476 (2026-10-18), measured by paid trigger probes in the attended eval session, not by the lane.
kyle-sexton commentedon Oct 24, 2026
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.
github-actions commentedon Oct 25, 2026
The triage sweep dispatched intake triage for this issue (attempt 1 of 2).
1 remaining item
melodic-automation-lanes commentedon Oct 25, 2026
The work-resolve-issue lane stopped partway through this issue and needs a person.
Why, in the run's own words:
What the run says it did not do:
Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40195212155
To retry, remove
needs-humanand addagent-readyagain.kyle-sexton commentedon Oct 27, 2026
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
claudeorclaude 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-humancomes off, and the issue moves tohost-runwithstatus: 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.kyle-sexton commentedon Oct 31, 2026
Host run. Description-only trigger screen for
playgrounds:use: before and after copies launched together, frozen probes.What ran
a781adf89a, modelsclaude-opus-5-5andclaude-sonnet-5-5,--ablation none,-j 2, cases frommeasure-invocation.sh emit-plugin-eval, 20 probes (10 positive, 10 negative), digest79ba59f7d95a.--runs 1screen, then--runs 3, where after must score at least before on every model (the done-when), or the before description ships.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./home/kyle/worktrees/host-run-tail-eval/out/<label>-before.jsonand-after.json, labelss1-playgrounds-opus,s1-playgrounds-sonnet. Rule:PREREG.mdbeside them. Frozen probes:/home/kyle/worktrees/host-run-tail-eval/probes/playgrounds/use.json.Done-when
/skill-quality:check, no new FAIL: not covered: no PR head.Scores (hits on both polarities, over probes x runs)
Result
Unchanged on main. Neither model produced a readable pass, so nothing here supports a change. Remaining: rerun the screen under a rule set in advance for denials the skill's own presence check causes, then the gate, then the PR with the probe file.
Caveats
run-validity.pyhas no trigger mode: a missed positive prints INVALID onskill fired, and an ungranted-toolNo such tool availableerror prints a denial. Both were read per an addendum written before any--runs 3pass, the same for both versions. That addendum fails a pass on a denial of a granted tool, and every other row had to pass.playground@claude-plugins-official, and the CLI printed no warning, so positives scored 0/10 in both versions. Dropping thedependencieskey from both run copies fixed it (10/10). The upstream skill is therefore absent from these numbers.neg-val-01timed out at 300s in both versions on opus and is excluded from both, per the written rule.beforeand both sonnet versions logged a Glob denial, a granted tool, in positive runs looking for the upstream plugin. The written rule fails those passes, and opusafteralso failsrun errors, so each score is marked unreadable.Target labels: add none; remove none.
kyle-sexton commentedon Nov 1, 2026
kyle-sexton commentedon Nov 1, 2026
Progress (lane 3): #12036 merged as b6f80cf.
playgrounds:useare on main.no-workaroundno longer treats a dot inside a URL or path as the end of a sentence.no-playground-skillalso rejects a bare{"skill":"use"}call.git rev-parse 6c583909da:plugins/playgrounds/evals=2d76993c3774ceb6f7c6b2fbda81906f23378615.Lease released.
kyle-sexton commentedon Nov 2, 2026
kyle-sexton commentedon Nov 2, 2026
Host run (lane 3): measured description-only pass for
playgrounds:use. Nothing ships; the before description stays on main.What ran
Claude Code 2.1.316, base
fd0c36f751, modelsclaude-opus-5-5andclaude-sonnet-5-5,--ablation none(with-arm only), before and after copies launched together per pass,-j 1each.Frozen suite:
plugins/playgrounds/evalstree2d76993c37(test(playgrounds): add outcome eval cases and frozen trigger probes for use #12036). Run-copy digest re-checked before every pass.Description 972 to 907 characters. A fresh rewriter worked on a copy outside the repository, barred from every eval and probe file. It made six edits: it cut "in one step" and "field-tested", tightened two connective phrases, and dropped "owns that" from both exclusions. Every quoted trigger phrase and both exclusion owners were kept.
Meaning diff: two fresh
/docs-hygiene:compress comparelabelers, both PASS, with 0 SEMANTIC LOSS and 0 AMBIGUITY.Held-out trigger set: 16 queries (8 positive, 8 negative), written blind from a neutral statement of purpose by a print session with skills and tools disabled. They were emitted with
measure-invocation.sh emit-plugin-eval --runs 3and run with--disallow-tools Read Glob Grep Agent.Routing cases:
use-routes-natural-explorer(must route; Write granted, run under the docker link swap)use-boundary-visual-form(must not route)Each ran 5 times per version.
Not run: the three slash-invoked cases. A
/playgrounds:useprompt never reaches description routing, and the body is byte-identical.The manifest
dependencieskey was dropped from both run copies, per the 10-31 screen.A host-safety probe ran before the Write grant and passed: Windows drives listed empty, Windows binaries were unreachable,
WSL_INTEROPwas unset, and no canary write landed.The decision rule was preregistered before the first paid run. The after description ships only if every rule holds on both models: held-out trigger at or above before with no lost trigger, both routing cases VALID, routing within 1 run, mean within 0.05, no case drop, and no new must-not failure.
Scores (VALID passes only)
use-boundary-visual-form(mean, 5 runs)use-boundary-visual-form(mean, 5 runs)use-routes-natural-explorer(mean, 5 runs)use-routes-natural-explorer(mean, 5 runs)case dropline appeared.no-writefailures.Result
The before description ships, so main is unchanged. Rule 2a failed on Opus:
use-routes-natural-explorerwas never VALID on the after side.~/.claude/pluginsfor the upstream install (Glob, then Grep), made after the graded Skill call.run-validity.pycounts a with-arm host-home denial as a FAIL unless every run in both arms was denied the same call.Every other deciding rule that was read held on both models. The part is due a second round, so this issue stays open.
Done-when
plugins/playgrounds/probes/use.jsonexists: met on main (test(playgrounds): add outcome eval cases and frozen trigger probes for use #12036)./skill-quality:check: no PR head. On main: PASS, 0 errors, 1 warning (description 972 > 419).For round 2
use-routes-natural-explorergrants Glob and Grep, and the presence check sometimes searches the host's~/.claude.run-validity.pycarve-out for a host-home presence probe made after the Skill call, and count presence-check calls per version from the traces. A blanket--disallow-tools Glob Grepwould hide the difference above. Either way, apply the rule from the first pair.no-writefailed). That contradicts the body's "never builds a playground itself". The before rerun did not repeat it.Cost
12.59 USD list-price estimate (sum of
costUsd) over 15 passes, including the probe and the INVALID passes. Every pass stayed under the 5 USD per-pass ceiling.Target labels: add none; remove none.