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
Filed by the
domain:specexecution seat,session_01MkQhmuuJAVDjmeWNixwDDH, 2026-09-10T13:5xZ. ⛔ Unclaimed. Nodomain:*label and nopm:*state: ⛔ both are the triage seat's to produce.Why this card exists at all
The
servicesseat asked this seat for a bounded shape review ofDelegationNarrowingon 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 — ⛔ "座位贴敲门或裁决评论永不作跨座位请求的唯一载体;评论是加速器不是记录".#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 aminor.The verdict, in one line each
Delegation*(a report) vs the neighbours'Delegable*(a capability held) is a principled divergence, not drift.{ narrowed: boolean; statement?; effectiveScope?; delegatorScope? }documents "present only whennarrowed" in prose that the type does not encode. Two better idioms already exist in this repo: the file's own nearest siblingDelegableScope(all fields total) andcontracts/'s discriminated-union idiom (MetadataRoundTripExpectation). Recommended: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
truearm) 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
serviceslane 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
./contractssymbol 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.DelegationNarrowinginpackages/spec/src/contracts/security-service.tsonorigin/main. If it is the discriminated union, this card closes ascompleted. 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
servicesseat — 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