Skip to content

Commit 363b503

Browse files
docs(adr-0048): N.3 amended — the post-hydration check judges a package's claim against the environment catalog (ruling letter A on #22307) (#22366)
Refs #22307 Records the maintainer's ruling letter A on #22307 (ruling record 6063176077) in ADR-0048: addendum N.3 gains one dated note. The hydration write stays unjudged as a write, and the post-hydration check judges the package's claim against it. This is the Tier H half of #22307, split from the code PR (#22365) so the code can land on its own record. #22307 stays open after this PR; the code PR carries the card. ## What changed — `docs/adr/0048-cross-package-metadata-collision.md` only Additive: 7 lines, no existing line edited. - **A dated note directly under N.3's list:** "Amended (2026-10-08) — the cold boot". After `sys_metadata` hydration and before `kernel:ready`, every package-held permission set and position name is checked against the environment catalog, and a name the environment already holds fails the boot with the N.2 envelope, naming both holders. It cites the ruling record. - N.3's existing bullet ("A write with no package provenance … stays under ADR-0005 overlay precedence") is left as it is: the hydration write is still not judged as a write, which is what the note says first. - N.4 ("Where it is implemented") is not edited. The code PR leaves the ADR id in the code (`ObjectQLPlugin.refuseEnvironmentHeldSecurityCatalogNames`) and extends the module's ADR anchor (`scripts/adr-anchors/packages__objectql__src__security-catalog-namespace.ts.json`). ## Gates (at f86b451) `node scripts/pm/dispatch-gates.mjs --commands` derived 19 commands at f86b451. All 19 ran with exit codes recorded, and `--ran` reconciles 19/19 with 0 NOT-MEASURED (a derived zero). All 19 exit 0. `check:doc-formula-expressions` first answered PREREQUISITE NOT MET (exit 3); it exited 0 after `@objectstack/formula` and `@objectstack/lint` were built. `origin/main` has moved since the branch point, and `git merge-tree` against it is clean. ## 维护者速读(草稿) ### 改了什么 只改 ADR-0048 的文字,没动代码。在附录 N.3 下面加了一段带日期的说明(7 行),原文一个字都没改。说明的内容就是您在 #22307 上选的 A:重启时,环境里已经存着的权限集或职位名,如果某个包也声明了同名的,启动直接失败,报错点名双方。 ### 为什么改 N.3 原来写的是"环境自己保存的数据不受这条规则管"。重启时,包先注册,环境数据后加载,所以按原来的写法,重启这条路正好漏过去:同一个包热安装会被拒,重启加进来却能装上,还被环境里的同名定义悄悄盖住。您裁定重启也要拒。这段说明把两件事分开写清楚:环境数据的加载本身照旧不判;加载完以后,拿包的声明去对环境目录,重名就拒。不写进 ADR,ADR 和代码就对不上。 ### 风险与代价(含回滚) - 这份 PR 本身只是文档,没有运行时风险。 - 真正的行为变化在配套的代码 PR(#22365):已经处在"环境里存着同名权限集或职位、配置里又有声明同名的包"这种状态的部署,升级后会起不来,要运维改名或删掉其中一个才行。包括锁上线前保存的旧覆盖行,也包括平台安全插件自带的权限集(例如 `member_default`)上的旧覆盖行。仓库里的示例应用实测没有这种状态,真实部署的数量测不到。 - 回滚:撤销这份 PR,ADR 回到原文;代码 PR 可以分开回滚。 ### 席位意见 ### 你要做的 请看这段说明的措辞是否准确反映您的裁决,同意就批准(Approve)。这份 PR 属于 Tier H,只能由您批准后落地。 --- _Generated by [Claude Code](https://claude.ai/code/session_01EUBvqtauTDmHi2ZgY759p2)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent a45d5d8 commit 363b503

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

‎docs/adr/0048-cross-package-metadata-collision.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,13 @@ rename, or uninstall the other holder.
838838
- **No downgrade.** `OS_METADATA_COLLISION=warn` softens the §3.2 namespace gate
839839
only; no ruling extends it to this refusal.
840840

841+
> **Amended (2026-10-08) — the cold boot.** The hydration write stays unjudged as
842+
> a write, and the post-hydration check judges the package's claim against it:
843+
> after `sys_metadata` hydration and before `kernel:ready`, every package-held
844+
> permission set and position name is checked against the environment catalog,
845+
> and a name the environment already holds fails the boot with the N.2 envelope,
846+
> naming both holders (ruling record 6063176077 on #22307, letter A).
847+
841848
### N.4 Where it is implemented
842849

843850
`@objectstack/objectql`: the rule and its holders in `security-catalog-namespace.ts`;

0 commit comments

Comments
 (0)