Repository navigation
Concise skills rollout: tdd (1 skills, 1 model-invoked) #6615
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: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.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 tdd'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.
The plugin today
- Skills:
principles. - Outcome eval cases under
evals/: 0. Probe files underprobes/: 0.
Path (owner decision 2026-10-18)
The 1-skill tail takes the description-only path, measured by trigger probes (decision). Only the principles description changes; the body stays as on main. Eval spend for the probe runs falls under the prepaid-credit pre-approval, with the batch-1 ceiling of --max-cost-usd 5 per pass.
Done when
-
git diff --name-only origin/main -- plugins/tdd/skills/lists onlyplugins/tdd/skills/principles/SKILL.md, and its diff touches only thedescriptionfrontmatter line. -
bash plugins/skill-quality/scripts/check-skill.sh plugins/tdd/skillsexits 0. -
bash plugins/skill-quality/scripts/measure-invocation.sh validate plugins/tdd/probesexits 0 on the committed frozen probe fileplugins/tdd/probes/principles.json. - The PR body carries the before and after trigger rates from held-out probes (
measure-invocation.sh emit-plugin-eval, run with--ablation noneon each target model) and themeasure-invocation.sh compareoutput; the after description ships only when its rate is not below the before rate outside noise, otherwise the before description stays. -
ci-statusis green on the PR.
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: 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: Medium
Uncertainty: Knowable
Flags: none
Understood: change only the
descriptionline of thetddprinciplesskill, and keep the new description only if held-out trigger probes show its rate is not below the old one outside noise. The body path and spend look settled by the #6476 decision. The probe runs (claude plugin eval) can't be done by an unattended lane run, so they need an eval-capable session. The other done-when items (diff scope,check-skill.sh,validateon the probe file) can be checked in the lane. No likely duplicates found among the open issues.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.
kyle-sexton commentedon Oct 24, 2026
Held again by the owner's HITL session (2026-10-24): my release earlier today was wrong, because it needs trigger-probe runs (
claude plugin eval) to measure the description; the issue lane cannot run it: a lane run executes only the verify-scripts listed indocs/conventions/pr-pipeline.yamlunder dontAsk, so it cannot startclaude,claude plugin evalor a workflow dispatch. Run it from an eval-capable session (the batch-1 protocol).1 remaining item
melodic-automation-lanes commentedon Oct 24, 2026
The work-resolve-issue lane did not start this issue: it needs a person to make it clearer first.
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/40128858690
To retry, answer the question here, 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
tdd:principles: 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), digeste6552aaae0a9.--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-tdd-opus,s1-tdd-sonnet. Rule:PREREG.mdbeside them. Frozen probes:/home/kyle/worktrees/host-run-tail-eval/probes/tdd/principles.json.Done-when
--runs 3gate ran./skill-quality:check, no new FAIL: not covered: no PR head.Scores (hits on both polarities, over probes x runs)
Result
Passed the screen. No
--runs 3gate ran inside the time box, so the description is unchanged on main and nothing ships yet. Remaining: 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.Target labels: add none; remove none.
kyle-sexton commentedon Nov 1, 2026
kyle-sexton commentedon Nov 1, 2026
This was generated by AI.
Progress: #12129 merged (1870f1b). It adds outcome eval cases and a frozen trigger-probe file for the
tddplugin'sprinciplesskill. No skill text changed.Three review rounds hardened the graders before merge:
db-realno longer passes a reply that mocks the database;asserts-outputno longer matches the method nameTotal(cart), and it accepts "verifies".One negative probe that the skill actually answers was replaced before the file froze. Replaying the stored smoke replies changed no result in any round.
This issue stays open for its measured pass.