Skip to content

feat(planning): move the type rules into a shared type-rules convention read by design, implement and the reviewer #12150

Description

@kyle-sexton

Parent #7589 decides that pstack's principles are placed in the phase skills that apply them (D58). Decision 58, approved by the owner (poteto-review decision row 58), resolves the one part with no home: part 24j, "apply the same type rules while writing code". It reads: "Type rules move to a docs/conventions type-rules convention synced into plugins." The reason: the rules live in plugins/planning/skills/design/reference/type-discipline.md, which only /planning:design may read. The skill-encapsulation rule bars /implementation:implement and review:code-reviewer from citing it, and the reviewer restates part of it instead. The precedent named in the decision is the enforcement ladder, which now lives at docs/contracts/enforcement-ladder/README.md (docs/conventions holds plugin settings files per ADR 0064), as a contract plus byte-identical plugin copies registered in scripts/shared-copies.txt and generated by scripts/sync-shared-copies.sh. On main, plugins/planning/skills/design/reference/type-discipline.md is read by design's SKILL.md Phase 3, links to type-discipline/typescript.md (which links back to ../type-discipline.md), and is asserted by two cases in plugins/planning/skills/design/evals/evals.json.

Done when

  • docs/contracts/type-discipline/README.md holds the canonical rules table moved from plugins/planning/skills/design/reference/type-discipline.md, with every rule, its decision, its reason and their order unchanged. It carries no wording specific to /planning:design (Phase 3, type-inventory.md) and no relative link that would not resolve from every copy's location.
  • scripts/shared-copies.txt lists a copy for each of plugins/planning, plugins/implementation and plugins/review. The planning copy is generated at the existing path plugins/planning/skills/design/reference/type-discipline.md, so design's SKILL.md link, type-discipline/typescript.md's link back, and the two evals.json cases that name that path keep resolving. scripts/sync-shared-copies.sh generates the copies, and CI's copy check passes.
  • /planning:design's SKILL.md keeps the Phase 3 framing and the language-file pointer (TypeScript: type-discipline/typescript.md, loaded when a tsconfig.json or TypeScript files are present) that leave the shared text.
  • /implementation:implement reads its copy at the step where it writes types, with one reasoned sentence on when it applies.
  • review:code-reviewer reads its copy for type questions. Its existing items, the cast item included, are unchanged.
  • .changes/planning/*.md, .changes/implementation/*.md and .changes/review/*.md fragments describe the change (bump: patch).
  • The PR's CI is green.

Out of scope

  • Adding new type rules or changing existing ones.
  • Removing the reviewer's own type-rule restatements in favor of the copy: cutting existing agent text needs eval evidence of no loss first (skill criteria).
  • Gated part 24i (optional-field bags in review).

Parent: #7589

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 1, 2026
  2. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.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.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions