Repository navigation
Concise skills rollout: domain-driven-design (1 skills, 1 model-invoked) #6604
Copy link
Copy link
Open
Copy link
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 domain-driven-design'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:
curate-language(model-invoked). - Outcome eval case directories under the plugin: 0. Probe files under
probes/: 0.
Done when
-
git diff origin/main -- plugins/domain-driven-design/skillschanges no line outside thedescriptionkey ofplugins/domain-driven-design/skills/curate-language/SKILL.md. -
plugins/domain-driven-design/probes/curate-language.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/domain-driven-designon 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: 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: a description-only rewrite of the
curate-languageskill indomain-driven-design. It also adds a probe file, a before/after trigger-score comparison in the PR body, and a version or changelog entry. The scope and done-when list are clear, and the eval spend is already pre-approved in the issue. No duplicates found among the open issues. It is part of #6476.Automated triage, applied by the lanes App.
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).
3 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 31, 2026
Host run. Description-only trigger screen for
domain-driven-design:curate-language: 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), digest5977464f6fe4.--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-domain-driven-design-opus,s1-domain-driven-design-sonnet. Rule:PREREG.mdbeside them. Frozen probes:/home/kyle/worktrees/host-run-tail-eval/probes/domain-driven-design/curate-language.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: #11828 merged (dd26f63). It adds five outcome eval cases (27 deterministic graders) and 18 frozen trigger probes for the
domain-driven-designcurate-languageskill, and tightens one grader that passed a merged Claimant definition. No skill text changed. Its smoke pass was INVALID (one sandbox denial of a plugin-data write), so its scores are a signal, not a measurement.This issue stays open. The concise rewrite and its measured passes wait on the eval validity fixes in #11618 and #11628. The rewrite should also reword
cl-existing-conventionso "never the insured organization" reads unambiguously as a rejected name (see the PR body). The frozen suite digest for those runs is0ecb152f77dd79791ff9d3abb5e4c6371a637cb5(plugins/domain-driven-design/evalsat e44363c). The claim on this issue is released.kyle-sexton commentedon Nov 1, 2026
kyle-sexton commentedon Nov 2, 2026
Reopened (lane 3): the #12114 description cut failed a retroactive negative control, so it is being reverted.
Owner rule (2026-11-02): a cut ships only if its suite scores a deliberately broken copy clearly below the before version. #12114 merged before the rule existed.
Setup: main's
curate-languagedescription against"Helper for repository maintenance tasks."(522 → 56 characters), on Sonnet 5.5. Both versions were launched together on the round's trigger sets with the round's flags, and every pass was VALID.The frozen set's one case drop was a single run on
neg-train-05. It did not reproduce in a confirmation pair launched together, which was quiet 3/3 on both versions.FAIL. A description that says nothing about glossaries fired on every should-trigger probe, so the suite cannot tell the shipped text from a generic one, and the round's no-loss result is no evidence the cut is safe.
Next: a revert PR restores the earlier description. This issue stays open for a routing suite with competing skills loaded; with one plugin installed, nothing competes for the queries. Cost of the control: 10.40 USD (list-price estimate, the sum of
costUsd).kyle-sexton commentedon Nov 2, 2026
This was generated by AI.
Negative control with competitor plugins loaded (#12249): FAIL
Part: domain-driven-design
curate-languagedescription (#6604).Copies.
main:git archiveof origin/mainplugins/at cf60764 (#12300 merged).broken:the same, with only the skill's
description:line replaced by"Helper for repository maintenance tasks.".diff -r main brokenshows that one line only, beforeand after emission.
Suite. The 18 frozen probes in
probes/curate-language.json(9 should-trigger, 9 should-not),emitted per copy with the merged
measure-invocation.sh emit-plugin-eval. Every case'splugins:line names domain-driven-design and its competitors' plugins: planning, naming, docs-hygiene,
architecture. 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 preregisteredbefore any paid run.
Loading. All 54 with-arm init lines on each side list exactly domain-driven-design, planning,
naming, docs-hygiene and architecture, with no
plugin_errors. They also list two Claude Codebuilt-ins (
cc-plugin-agents-md,cc-plugin-plugin-authoring), the same on both sides.run-validity's
plugins loadedcheck passes on every pass.Noise report, broken against main (18 cases, margin 0.05):
with-arm change (this minus baseline), paired over 18 cases: -0.02, 95% interval -0.05 to +0.02case drop: case domain-driven-design-curate-language-neg-train-01 with-arm fell from 1.00 to 0.67, a third or more; name its cause and prove it before shippingcompare verdict: not shown non-inferior at margin 0.05 (the interval's lower end -0.05 is below -0.05), and 1 case(s) dropped by a third or moreThe case drop did not reproduce. It rests on one run. In run 3 of should-not probe
neg-train-01("read me the glossary entry"), the broken copy searched for Read, Grep and Glob andfound none. It then called the skill as a way to read the file, and told the user it had no
file-reading tool. The trace shows no denial or run error. The preregistered confirmation pair (that
case alone, launched together, 3 runs) had both sides quiet in 3 of 3 runs, both VALID.
Result: FAIL. With its competitors loaded, the generic description still fired on every
should-trigger probe in every run: 27 of 27, the same as the shipped description. The mean fell by
0.02, short of the 0.15 the rule needs, and the only case drop did not reproduce. The suite still
cannot tell the shipped description from a generic one, so the #6604 cut remains unmeasurable.
Cost: 7.27 USD (list-price estimate, sum of
costUsdover 4 passes, confirmation included).Next for this issue: loading the probe file's competitors was not enough: every should-trigger probe still routes to the generic description. The probe set needs queries that a neighbouring skill (planning, naming, docs-hygiene, architecture) could plausibly take, frozen before any description cut.