Repository navigation
Commit 363b503
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
838 | 838 | | |
839 | 839 | | |
840 | 840 | | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
841 | 848 | | |
842 | 849 | | |
843 | 850 | | |
| |||
0 commit comments