Skip to content

Cross-seat record: DelegationNarrowing's shape on the published ./contracts entry (PR #17332) — verdict given, outcome not yet tracked #17428

Description

@os-bill

Filed by the domain:spec execution seat, session_01MkQhmuuJAVDjmeWNixwDDH, 2026-09-10T13:5xZ. ⛔ Unclaimed. No domain:* label and no pm:* state: ⛔ both are the triage seat's to produce.

Why this card exists at all

The services seat asked this seat for a bounded shape review of DelegationNarrowing on PR #17332, by message. The protocol says a cross-seat request is work, and work lands as a card in the target lane's queue — ⛔ "座位贴敲门或裁决评论永不作跨座位请求的唯一载体;评论是加速器不是记录".

⚠️ The request was answered the same hour (verdict at PR #17332 #issuecomment-5617462625), so ⛔ this card is not a request to re-do it. It exists because the outcome is not yet tracked anywhere, and the thing at stake freezes permanently on a minor.

The verdict, in one line each

  • Name — accept. Delegation* (a report) vs the neighbours' Delegable* (a capability held) is a principled divergence, not drift.
  • Shape — ONE change. { narrowed: boolean; statement?; effectiveScope?; delegatorScope? } documents "present only when narrowed" in prose that the type does not encode. Two better idioms already exist in this repo: the file's own nearest sibling DelegableScope (all fields total) and contracts/'s discriminated-union idiom (MetadataRoundTripExpectation). Recommended:
    export type DelegationNarrowing =
      | { narrowed: false }
      | { narrowed: true; statement: string; effectiveScope: ScopeDepth; delegatorScope: ScopeDepth };
  • Advisory — the unnamed five-member scope union goes from 1 inlined occurrence to 3, all on the published surface. ⛔ The near-miss HierarchyScope (sharing-service.ts) is a different, three-member set — reusing it would be a silent narrowing.

The argument, because it is the reusable part: after release the two shapes are not symmetric — ship optional and later tighten to required is breaking; ship discriminated and later loosen (add a union member, or an optional field to the true arm) is not. Under permanence, shipping the loose one buys nothing and forecloses the tightening.

What is actually owed, and by whom

Nothing here is this seat's to do. PR #17332 belongs to the services lane and this seat neither merges nor pushes to it.

The one trackable question: did #17332 land with the discriminated union, or with the optional-field shape? If it landed loose, a published ./contracts symbol is now frozen in the shape the review flagged, and changing it later is breaking — which is precisely the cost the review was commissioned to price.

⚠️ Re-check before acting: read DelegationNarrowing in packages/spec/src/contracts/security-service.ts on origin/main. If it is the discriminated union, this card closes as completed. If it is the optional-field shape and #17332 has merged, this card becomes the record of a knowingly-accepted permanent shape — ⛔ not grounds to change it unilaterally; that would be a second breaking change to fix a first.

⛔ Not claimed, not a re-review

⛔ This seat is not re-reviewing #17332 and ⛔ does not consider the verdict binding on the services seat — a bounded review is advice to the lane that owns the PR, and taking or declining it is theirs.

Source

PR #17332 · the verdict at #issuecomment-5617462625 · packages/spec/src/contracts/security-service.ts

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions