You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Filed by the domain:engine PM seat as the downstream half of a maintainer ruling, so the follow-up is a card rather than something a seat has to remember. ⛔ Not dispatchable until #11006 closes.
Why this card exists
The maintainer ruled B on #11006 (2026-08-22 live session, 「同意所有」, item 5): MetadataProtocol gains an optional publishMetaItem member. The ruling record assigns the consumer-side cleanup to this lane by name:
follow-up in the engine lane removes the (p as any) cast at the REST call site once landed (the spec PR body names that consumer so the engine seat picks it up)
That sentence was the only record of this work. It lives in a comment on a card in another lane which will close when the spec PR merges — at which point the follow-up becomes invisible to every queue view in this repo. Hence a card.
What the work is
Once #11006's spec change lands, the REST call site's (p as any) cast can come off, because the cast will no longer be carrying anything. That is the measured point from #11006, and it is worth restating precisely because it is counter-intuitive:
删掉 cast 得到的是 TS2339 — Property 'publishMetaItem' does not exist on type 'RestProtocol',而不是TS2353(对象字面量属性不匹配)。也就是说 cast 承的是「成员存在性」的重,不是「请求形状」的重
So this is not a request-shape fix and adding fields to metadata-protocol's own request type could never have achieved it — the cast exists solely because the interface had no such member. #11006 adds the member; this card removes the prop that was holding the gap closed.
Expected shape after the ruling lands: the cast degrades to the existing optional-call idiom (matching getMetaItemLayered / deleteMetaItem), and with #9741's TransportScopedMetaRequest wrapper applied, an undeclared key at the call site becomes a compile error — which is the entire point of the exercise and the acceptance signal for this card.
Before dispatching, re-verify rather than assume
Confirm on merged main that [裁决] MetadataProtocol 是否应声明 publishMetaItem 成员 —— 半声明的门(响应已声明、请求未声明) #11006's member actually landed as an optional member with the request type, not some narrowed variant. The scope may have shifted during spec-seat implementation, and this card's premise is exactly that member's existence.
Establish that removing the cast produces a clean compile, not a different error. If a second, independent reason for the cast surfaces, that is a finding — report it rather than re-casting.
⛔ packages/spec is off limits from this lane. If the cleanup needs anything further in spec, it goes back to the domain:spec seat, not into this card's PR.
Labelling note
domain:engine here transcribes the ruling's own routing ("follow-up in the engine lane") rather than being a fresh triage judgement — this seat does not produce domain:*. Triage should correct it freely if the landing point argues otherwise. Size looks S (one cast, one compile check), but the sizing is this seat's guess and not measured.
Related: #11006 (the ruling, upstream) · #10350 (the parent card, landed as PR #11005 — packageId declared, three stale comments corrected) · #9741 (the meta-read sibling and the transport wrapper) · #7294 (declared the response side) · ADR-0076 D9
Blocked-by: #11006
Filed by the
domain:enginePM seat as the downstream half of a maintainer ruling, so the follow-up is a card rather than something a seat has to remember. ⛔ Not dispatchable until #11006 closes.Why this card exists
The maintainer ruled B on #11006 (2026-08-22 live session, 「同意所有」, item 5):
MetadataProtocolgains an optionalpublishMetaItemmember. The ruling record assigns the consumer-side cleanup to this lane by name:That sentence was the only record of this work. It lives in a comment on a card in another lane which will close when the spec PR merges — at which point the follow-up becomes invisible to every queue view in this repo. Hence a card.
What the work is
Once #11006's spec change lands, the REST call site's
(p as any)cast can come off, because the cast will no longer be carrying anything. That is the measured point from #11006, and it is worth restating precisely because it is counter-intuitive:So this is not a request-shape fix and adding fields to
metadata-protocol's own request type could never have achieved it — the cast exists solely because the interface had no such member. #11006 adds the member; this card removes the prop that was holding the gap closed.Expected shape after the ruling lands: the cast degrades to the existing optional-call idiom (matching
getMetaItemLayered/deleteMetaItem), and with #9741'sTransportScopedMetaRequestwrapper applied, an undeclared key at the call site becomes a compile error — which is the entire point of the exercise and the acceptance signal for this card.Before dispatching, re-verify rather than assume
mainthat [裁决]MetadataProtocol是否应声明publishMetaItem成员 —— 半声明的门(响应已声明、请求未声明) #11006's member actually landed as an optional member with the request type, not some narrowed variant. The scope may have shifted during spec-seat implementation, and this card's premise is exactly that member's existence.packages/specis off limits from this lane. If the cleanup needs anything further in spec, it goes back to thedomain:specseat, not into this card's PR.Labelling note
domain:enginehere transcribes the ruling's own routing ("follow-up in the engine lane") rather than being a fresh triage judgement — this seat does not producedomain:*. Triage should correct it freely if the landing point argues otherwise. Size looks S (one cast, one compile check), but the sizing is this seat's guess and not measured.Related: #11006 (the ruling, upstream) · #10350 (the parent card, landed as PR #11005 —
packageIddeclared, three stale comments corrected) · #9741 (the meta-read sibling and the transport wrapper) · #7294 (declared the response side) · ADR-0076 D9