Skip to content

Concise skills rollout: domain-driven-design (1 skills, 1 model-invoked) #6604

Description

@kyle-sexton

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/skills changes no line outside the description key of plugins/domain-driven-design/skills/curate-language/SKILL.md.
  • plugins/domain-driven-design/probes/curate-language.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/domain-driven-design 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: a description-only rewrite of the curate-language skill in domain-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.

  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 domain-driven-design:curate-language: 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 5977464f6fe4.
    • Description length: 587 to 540 characters (8.0%). 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. One labeler flagged a merged clause that put a qualifier on the domain-modeling trigger; the original clause was restored before any measurement of this plugin. The other labeler passed the merged text. The final text differs from the labeled text only by that restore.
    • 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-domain-driven-design-opus, s1-domain-driven-design-sonnet. Rule: PREREG.md beside them. Frozen probes: /home/kyle/worktrees/host-run-tail-eval/probes/domain-driven-design/curate-language.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 covered: no --runs 3 gate ran.
    • /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

    Result

    Passed the screen. No --runs 3 gate 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.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

    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-design curate-language skill, 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-convention so "never the insured organization" reads unambiguously as a rejected name (see the PR body). The frozen suite digest for those runs is 0ecb152f77dd79791ff9d3abb5e4c6371a637cb5 (plugins/domain-driven-design/evals at e44363c). The claim on this issue is 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 #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-language description 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.

    Set should-trigger fired, main / broken should-not quiet, main / broken
    held-out (16) 24/24 / 24/24 24/24 / 24/24
    frozen (18) 27/27 / 27/27 27/27 / 26/27

    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).

  19. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI.

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

    Part: domain-driven-design curate-language description (#6604).

    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 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's plugins:
    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 preregistered
    before 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 Code
    built-ins (cc-plugin-agents-md, cc-plugin-plugin-authoring), the same on both sides.
    run-validity's plugins loaded check passes on every pass.

    main broken
    should-trigger fired 27/27 27/27
    should-not quiet 27/27 26/27
    mean of case scores 1.000 0.981
    run-validity VALID VALID

    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.02
    • case 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 shipping
    • compare 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 more

    The 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 and
    found 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 costUsd over 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.

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