Repository navigation
Concise skills rollout: coupling (1 skills, 1 model-invoked) #6602
Copy link
Copy link
Closed
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: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.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 coupling'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:
reduce(model-invoked). - Outcome eval case directories under the plugin: 0. Probe files under
probes/: 0.
Done when
-
git diff origin/main -- plugins/coupling/skillschanges no line outside thedescriptionkey ofplugins/coupling/skills/reduce/SKILL.md. -
plugins/coupling/probes/reduce.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/couplingon 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: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.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: this is the
couplingplugin's part of the #6476 rollout. It takes the description-only path. The only change is thedescriptionkey ofreduce/SKILL.md. A newprobes/reduce.jsonmeasures the before and after descriptions. The PR also needs a version or changelog entry.The body is complete and the earlier hold was released by the owner's 2026-10-24 decision. Nothing is missing. Eval spend is prepaid and pre-approved. I found no duplicates.
The issue carried both
priority: lowandpriority: medium. I'm keeping one: medium.Automated triage, applied by the lanes App.
kyle-sexton commentedon Oct 19, 2026
This was generated by AI during triage.
Held for a person: The #6476 owner decision (2026-10-18) moves this 1-skill plugin to a description-only path measured by trigger probes, but this body still asks for a full rewrite and a person's eval-spend approval; the body and spend need the owner's update first.
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).
13 remaining items
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 29, 2026
Re-triage. Not an owner stop. #10010 added
plugins/coupling/probes/reduce.json. Its blocker #9704 is closed. Under the 2026-10-18 owner decision, this one-skill plugin takes the description-only path. The rest is a pair of trigger-score runs that only a Claude Code session can make, so the issue keepshost-runand the host runner takes it.Acceptance criteria:
git diff origin/main -- plugins/coupling/skillschanges no line outside thedescriptionkey ofplugins/coupling/skills/reduce/SKILL.md./skill-quality:check measure-invocationtrigger scores for the before and the after description, both onplugins/coupling/probes/reduce.json./skill-quality:check plugins/couplingon the PR head reports no FAIL that the run on main does not report.kyle-sexton commentedon Oct 31, 2026
Host run. Description-only trigger screen for
coupling:reduce: 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), digesta7a55f0d4b33.--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-coupling-opus,s1-coupling-sonnet,s3-coupling-sonnet,s3-coupling-opus-pos. Rule:PREREG.mdbeside them. Frozen probes:/home/kyle/worktrees/host-run-tail-eval/probes/coupling/reduce.json.Done-when
/skill-quality:check, no new FAIL: met on the local change: PASS, 0 errors, 2 warnings, same as main.Scores (hits on both polarities, over probes x runs)
Result
Not shipped from this run; the before description stands on main. Sonnet held (50/60 to 51/60). The opus positive pass scored 30/30 in both versions, but 6 runs in each hit a Grep or Glob denial at the sandbox root, a granted tool. The written rule fails such a pass,
run-validityfails it too becausepos-train-05has no denial-free run, and this run did not rewrite that rule after reading the score. Remaining: decide in advance how a trigger pass treats a denial that lands after the skill has fired, rerun the opus gate under that rule, then open the PR.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./skill-quality:checkon the plugin matches main with the description applied: PASS, 0 errors, 2 warnings./home/kyle/worktrees/host-run-6602: description, changelog fragment, no commit.Target labels: add none; remove none.
kyle-sexton commentedon Nov 2, 2026
Claimed by Lane 5 (melo-lap-001), handed over by Lane 3.
kyle-sexton commentedon Nov 2, 2026
Host run (Lane 5): description-only trigger measurement for
coupling:reduce. Result: the before description stays, and no PR is opened.What ran
31fb15a347. Modelsclaude-opus-5-5andclaude-sonnet-5-5.--ablation none --runs 3 -j 2 --disallow-tools Read Glob Grep Agent --keep-temp --max-cost-usd 5. These are the emitted README's run line.run-validity.py(origin/main) judged all 20 passes VALID. No pass had aprobe toolsor denial warning, so the Grep/Glob sandbox-root denial that left the last opus run unreadable did not recur.docs-hygiene:compare-labeleragents found 0 semantic loss and 0 ambiguity.plugins/coupling/probes/reduce.json(20).Scores (hits over probes x 3 runs)
Decision
reducepos-train-03went from 3/3 to 2/3 andpos-val-03from 1/3 to 0/3.noise-report.py --margin 0.05agrees: Sonnet frozen positives are not shown non-inferior (paired change -0.07, 95% interval -0.15 to +0.02), and neither are held-out positives (-0.04, -0.11 to +0.04). The control shows the suite can detect a loss: degraded opus positives were 42/57 against 57/57, 5 probes lost.reduceHeadroom
pos-val-031/3,pos-ho-052/3,pos-ho-062/3,pos-ho-091/3. Every other probe was 3/3 on both models.Done-when
probes/reduce.json: recorded in this comment. With no PR, there is no PR body to put them in./skill-quality:check: main is PASS, with 0 errors and 3 warnings. Nothing changes.Spend: 20 result files, about 37 USD (list-price estimate, sum of
costUsd). The kept sandboxes are deleted.What remains: a further description change needs a new rewrite round with a fresh held-out set. That round must beat a before version re-measured alongside it on each model.
Target labels: add none; remove none.
kyle-sexton commentedon Nov 2, 2026
Restore round (Lane 5): the before description stays. No PR.
This round follows the runbook's restore step (
plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md, lines 54-55) for the two Sonnet case drops in the previous run:pos-train-03andpos-val-03. The rule was preregistered before the paid run.What changed and why
Both dropped probes ask for the value-change mode: a timeout changed from 30s to 45s, and a product renamed. No cut text touches the value-change clause itself. The reword that sits right before that clause was the most likely carrier, so I restored it: "so the next run resumes" became "so repeated runs continue where the last stopped" again. The other two cuts stayed cut ("typed against a coupling model", "general"). The new after2 description is 943 characters, against 982 before.
Run
--runs 3, same flags as before.run-validity.py.pos-train-033/3 to 2/3,pos-val-031/3 to 0/3)pos-ho-053/3 to 1/3,pos-ho-063/3 to 2/3,pos-ho-090/3 to 1/3)Decision
reducereduceThe restored phrase is ruled out as the cause. On Sonnet, both rounds lose the same two value-change probes, which points to the shorter description as a whole rather than to one cut. That is an inference; I did not test the other two cuts one at a time.
Done-when
Unchanged from the previous comment.
Spend: 6 result files, 7.46 USD (list-price estimate). That makes 44.22 USD across 26 result files for this issue's two rounds. The kept sandboxes are deleted.
Target labels: add none; remove none.
kyle-sexton commentedon Nov 2, 2026
Closing as completed: the rollout's per-skill decision is made and measured. Nothing changes in the plugin.
coupling:reducerewrite-a-plugin.mdstep 5, "When no restore closes the gap, the before text ships." The opus negative control (42/57 vs 57/57) shows the suite detects a loss, so this no-ship rests on measured evidence.coupling:reduceThe probe file is already on main (#10010). All 26 passes are VALID; the tables are in the round 1 and restore comments. A future description change would need a new blind round that beats a before version re-measured alongside it on each model.