⛔ 挂起至协议 18 列车开启,现在勿认领勿动工(维护者裁定,ADR-0120 D7:现在写会随 18 的其它变更 bitrot)。不入 pm:queue。
ADR-0120(docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md,Accepted 2026-08-04)刻意延后到协议 18 的三项,届时照 ADR 执行:
D2 — 转换层条目
裸 true 硬拒
- 协议 18 起,声明索引上的裸
unique: true 在 validate/publish 期拒绝,报错文案照 D5a(指明 'global' / 'organization' 两个替代);17.x 的警告规则同步升级为 error。
pin 退役
sql-driver-unique-tenancy.test.ts 中「'global' is a synonym of true」的 pin 随裸 true 一起退役。
再生成
gen:spec-changes / gen:upgrade-guide 携带该 conversion 条目,check:spec-changes / check:upgrade-guide 绿。
关联
⛔ 挂起至协议 18 列车开启,现在勿认领勿动工(维护者裁定,ADR-0120 D7:现在写会随 18 的其它变更 bitrot)。不入 pm:queue。
ADR-0120(
docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md,Accepted 2026-08-04)刻意延后到协议 18 的三项,届时照 ADR 执行:D2 — 转换层条目
declared-index-unique-scope(toMajor: 18):存量/加载元数据中声明索引的unique: true一律改写为unique: 'global'—— 语义逐字相同,物理索引零漂移;applyConversionsToStoredItem(sys_metadata 存量行);{ fields, unique: true }在 tenant-scoped 对象上落成平台级 UNIQUE —— normalizeDeclaredIndex 不补租户列(#4698 实例 2 移交) #4986 停工上报第四节);unique: true不转换(D1:永久合法)。裸
true硬拒unique: true在 validate/publish 期拒绝,报错文案照 D5a(指明'global'/'organization'两个替代);17.x 的警告规则同步升级为 error。pin 退役
sql-driver-unique-tenancy.test.ts中「'global'is a synonym oftrue」的 pin 随裸true一起退役。再生成
gen:spec-changes/gen:upgrade-guide携带该 conversion 条目,check:spec-changes/check:upgrade-guide绿。关联
{ fields, unique: true }在 tenant-scoped 对象上落成平台级 UNIQUE —— normalizeDeclaredIndex 不补租户列(#4698 实例 2 移交) #4986 / driver-sql: 单租户栈上 organization_id 恒为 NULL,#3696 的 (tenant, col) 复合 UNIQUE 因 NULL-distinct 而完全不生效 —— 字段级 unique: true 静默零约束 #5030 / ADR-0120 17.x 收尾块:D5e isolated 安装期姿态硬门 + D6 文档/pin 测试扫荡 + 三姿态 conformance(阻塞于 #5030、#4986 的实现 PR) #5081(17.x 波);docs(adr): ADR-0120 — explicit unique-scope vocabulary (organization/global) and NULL-safe per-organization uniqueness (#4986, #5030) #5054(ADR PR)