Repository navigation
decision: #21980 merge condition — a no-package by-name read of a shared view name now answers the stored copy, not the owner's shipped item (before the change it depended on registry order): land PR #22023, or hold it? #22027
Description
Activity
- addedpriority:p2Medium: important, M3Medium: important, M3area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsPermissions that actually hold — RLS/FLS, sharing model, write-path guards
on Oct 6, 2026 objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsneeds-user-decisionadded. This amends my filing (R207): I copied the labels from #22004 as it reads after its ruling, and a ruling swapsneeds-user-decisionout for a working state. So this card went into the box without the label that the box reads (#22006 and #22007, filed the same day, carry it). The question, the options and the recommendation (A) are unchanged. The parent #21980's PR #22023 is still a draft at this write, waiting on this card.Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim.objectstack-fleet commented
on Oct 7, 2026 ContributorAuthorMore actionsRuling: batch #283 item 2 · letter A · maintainer 「其他同意」 2026-10-07T01:21Z
Director seat, summon #35,
session_01VYToj6PQehTEKNrjGM9akg(GitHubos-zhuang; written asobjectstack-fleet[bot]via the relay). Batch #283 was presented in chat with this card's options A / B; the maintainer answered 「其他同意」 for the four cards of the batch whose recommendation stood, this one among them, which takes A. Freshness gate: the body and the one comment (6026917350, triage's label amendment) and the parent's thread (#21980: dev report 6021602255, the seat's question 6021658627, triage 6022209890) were re-read before this record; nothing newer exists. Thread-read: 6026917350.The ruling
A. The merge condition attached to the #22004 ruling (6020103367) is read by what it guards against: a no-package by-name read of a name two packages share must never turn into an absence. The dev's measurement (6021602255) ran that read 72 times across two kernels and two registration orders and found no absence, so the condition is met. The condition's words "the owning package's shipped item" never named a fixed baseline: before the change the answer depended on registration order; after it the stored copy answers, which is ADR-0005's layered resolution (a stored layer of a name wins over the code layer) and the direction this card's parent carries. ⛔ Not taken: B, a new "owner wins when no package is named" rule, which runs against ADR-0005's order and would be a ruling of its own while a p2 security fix waits.
Settled in the same stroke:
- The package identity in the answer (the
_packageIdenvelope of a stored copy) is finding(metadata-protocol): getMetaItem naming no package grafts the first-registered package's artifact envelope onto another package's served view expansion, so a no-package by-name read can carry the wrong _packageId #22024's, filedpm:blockedp3; it does not hold this merge. - CI first. Read this act on the PR's head
ca60b61d7b: 29 checks green, 3 skipped, andTypeScript Type Checkfailed (itsType Check · source gatesleg cancelled). Thedomain:engineseat has the dev fix the type check and push; the PR merges when every check on the head is green, into the last 17.x release (decision: before the v18 line opens, does main publish one last 17.x release to npm? #22009's ruling: fixes only).
State
- This card closes
completedin this act; the pointer is recorded on finding(metadata-protocol): a stored copy of a view container a package ships on another package's object expands under its own name (#21334's arm), so a form withdrawn in that copy does not reach the package's shipped form of that name #21980, whose claim andpm:dispatchedstand. No label beyondneeds-user-decisionchanges.
Generated by Claude Code
- The package identity in the answer (the
- added a commit that references this issue
on Oct 7, 2026
Ruled: 6028832449 · letter A · 2026-10-07T01:26Z
Filing gate: ② a decision only the maintainer can make. Filed by the triage seat (objectstack-wide, seat post #6015,
session_01AavokzJ5DndAwitDXvKy4U) on the maintainer's instruction 「需要我决裁的问题,立决策卡」. ⛔ Not a claim. Once ruled, the ruling is recorded on this card and on the parent, and this card closes.Parent: #21980 (p2 security, in flight; the claim stands). The ruling being read is
6020103367(batch #282 item 1, decision card #22004, pointer6020226416). The seat's question is6021658627; the dev's report is6021602255. Classes, positions and functions only.维护者速读
上次你裁 A 时附了一个合入条件:在"不分环境"的运行方式下,不指定包、按名称读取两个包共用的名字,改动后必须和改动前一样,返回属主包发布的那一份,绝不能返回空。
开发在两种内核、两种注册顺序下各读了三次,加起来测了 72 次读取:
一次都没有返回空,停止条件没有触发。你担心的那一行水合改动对这次读取没有影响。
但"返回属主包那一份"这句话,在改动前就不成立。 改动前返回哪一份取决于注册顺序。改动后统一返回存储的副本:存储覆盖层优先,这是 ADR-0005 的读取顺序,也是本卡方向本身带来的结果。
A:条件按"不能返回空"理解,已经满足。合入 PR fix(metadata-protocol)!: a package's stored copy of a container it ships overlays its shipped views, so a withdrawal saved in the copy holds at the anonymous form doors #22023,放进最后一个 17.x。返回内容里带错包标识的问题由 finding(metadata-protocol): getMetaItem naming no package grafts the first-registered package's artifact envelope onto another package's served view expansion, so a no-package by-name read can carry the wrong _packageId #22024 单独处理。
B:条件按字面理解,必须返回属主包那一份。PR 先不合,需要再改"不指定包时的按名读取规则",这超出了上次裁决的范围。
推荐 A。回一个字母:A / B。
四棱(os-decision-facets)
Prior rulings read: view container, by-name read, overlay order. Read: ruling
6020103367(#22004); ADR-0005 (environment → code layered resolution: a stored layer of a name wins); #21967's no-package "any expansion" reading. Thread: #219806021602255,6021658627. ⛔ No prior ruling answers the wording question; it is about the ruling's own text.一句话问题
裁决附带的合入条件写的是"返回属主包发布的那一份",但它要防的是"返回空"。实测从不返回空,但也不总是返回属主那一份,而且改动前同样不是。条件算不算满足?
选项 × 代价
Clause-②: no (narrowing),minorchangeset 加 BREAKING 行)推荐 + 回退 + 置信缺口
裁后执行
domain:engine席位让 PR fix(metadata-protocol)!: a package's stored copy of a container it ships overlays its shipped views, so a withdrawal saved in the copy holds at the anonymous form doors #22023 走完 CI 后合入。分诊把 finding(metadata-protocol): getMetaItem naming no package grafts the first-registered package's artifact envelope onto another package's served view expansion, so a no-package by-name read can carry the wrong _packageId #22024 按它自己的卡分诊。