Skip to content

planning: move type rules from design into a synced type-rules convention #12479

Closed

Description

@kyle-sexton

Refs: #7586

Parent

Slice 4 of 4 of #7586, filed under its decision record (comment).

Outcome

The type rules move out of /planning:design into a type-rules convention, synced into the plugins that read them.

Decisions (from #7586: Q12)

  • The type rules live in one convention file, the single source, and each plugin that needs them gets a synced copy rather than a hand-kept one.

Done when

  • A type-rules convention holds the rules, and /planning:design points at it instead of restating them.
  • Every plugin copy is generated by the repository's sync mechanism and checked by its --check mode.
  • bash plugins/skill-quality/scripts/check-skill.sh plugins/planning/skills exits 0, and the design skill's cut ships with before/after evals showing no loss.

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Nov 2, 2026
  2. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: move the type rules out of /planning:design into a single type-rules convention file, sync copies into the plugins that read them via the repository's sync mechanism (with --check passing), and show before/after evals with no loss from the design skill's cut. The scope and done-when are clear, and the parent decision (#7586) settles the design. No duplicates found among open issues.

    Automated triage, applied by the lanes App.

  3. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Nov 2, 2026
  4. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  5. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  6. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 2, 2026
  7. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped on this issue (host-only): the run reports the work needs a host run the lane cannot make.
    It added host-run and removed agent-ready: an agent run on a host builds it, and it waits on no decision from a person.

    In the run's words:

    host-only: the type-rules move is already on main through merged PR #12168 (merge commit 95210a4, closed #12150). It created docs/contracts/type-discipline/README.md as the single source, synced into planning, implementation and review by scripts/sync-shared-copies.sh, and /planning:design's Phase 3 points at its generated copy. The one done-when item still open is the before/after eval run of plugins/planning/skills/design showing no loss from that cut, plus bash plugins/skill-quality/scripts/check-skill.sh plugins/planning/skills. Those are a paid eval run and a script this lane cannot invoke, so they need a host run. Nothing is left to edit.

    What the run says it did not do:

    • Before/after evals for /planning:design's cut (done-when item 3). This is a paid eval run that needs a host run; #12168 did not ship one.
    • bash plugins/skill-quality/scripts/check-skill.sh plugins/planning/skills. This lane may run only its named wrappers, and check-changed-skills had no changed skill to gate.
    • Tidy, review and PR prep: skipped because the run made no change.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41513899975

    To hand it back to the lane, remove host-run and add agent-ready again.

  8. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Claim. Lane 3 host run is measuring this (hub overnight order).

  9. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Measured result: no loss, on one model, with a limit on what the suite can detect. Change measured: #12168. Before is origin/main's plugin with only skills/design taken from 95210a4363^. Claude Code host run, claude-sonnet-5-5, 3 runs per case, launched together, 18 of 18 runs VALID on each of the three copies.

    • check-skill.sh plugins/planning/skills exits 0 (5 warnings on the design skill, no errors).
    • None of the five existing design-* cases reach Phase 3, so three new cases grade the type-inventory.md a run writes (PR to follow).
    Case Before After Negative control
    design-types-ts-idioms 1.00 1.00 0.00
    design-types-py-money-minor-units 1.00 1.00 0.83
    design-types-py-row-derived 1.00 1.00 1.00
    • Noise report, after against before: non-inferior at margin 0.05, change +0.00, no case drop. With minus without on after: +0.83, interval +0.51 to +1.00.
    • Negative control (the Apply paragraph and the type-discipline files removed): case drop on design-types-ts-idioms, mean down 0.39, over the 0.15 threshold.

    Limits.

    • All the detection comes from the TypeScript route. Without that case the control falls only 0.08, so this does not show the rules-table content is protected. Separately, feat(planning): move the type rules into a shared type-discipline contract read by design, implement and the #12168's diff leaves the rule rows unchanged.
    • Measured passes ran with --disallow-tools Glob Grep to get VALID runs, so whether the model hunts for the file more often after the change is unmeasured.
    • no-stored-has-more would pass on a run that wrote no inventory (every counted run wrote one), and row-derived mostly detects the audit's word "derives".

    One signal, not scored and exploratory. On the row case, runs opened the rules file less often after the change: 9 of 11 before, 3 of 11 after (Fisher's exact about p = 0.03, one case picked after seeing the gap). On the other two cases both versions read it 3 of 3. No scored grader moved, and every run of the 8-run follow-up on both versions still wrote a sum type and assert_never. The cause is UNVERIFIED. No change is made for it; the reads-type-rules indicator ships with the cases, so a later pass can see it.

    Spend: about 13.53 USD list-price estimate, model usage only.

  10. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Done-when holds. The design type-rules eval cases merged in #12837, which carried Refs: #12479, so this issue is closed by hand with the measured record.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    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.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    agent-ready

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions