**⛔ 阻塞中,勿认领**:依赖 ADR-0120 17.x 波前两块(#5030 的 driver 侧 D3+D4、#4986 的 spec 词汇 + lint)的 PR 合入。两者落地后本单解除阻塞。**不入 pm:queue,由维护者安排。** ADR-0120(`docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md`,已 Accepted)17.x 波的第三块,范围: ## D5e — isolated 安装期姿态硬门 - 安装 app 进 `isolated` 姿态环境时,枚举其非 `sys` 对象上的 `'global'` 唯一(字段级与声明索引),逐索引硬停确认:「确认真平台级 / 改写为 `'organization'`」; - 确认**留痕**于安装清单(ADR-0104 attestation 风格),之后不复问; - `os doctor` / `os migrate plan` 保留 advisory 形态,只兜两类门够不到的存量:门禁上线前的安装、装后姿态变更的环境; - ⛔ 永不做成启动期告警(#4884 纪律)。 ## D6 — 剩余成文契约扫荡(前两块未覆盖部分) - `content/docs/data-modeling/indexing.mdx` §Two ways to say "unique" 全节按新词汇重写(含 `os:check` 代码块); - `content/docs/references/**` 走 `gen:schema && gen:docs` 再生成,不手改; - `packages/plugins/driver-sql/src/sql-driver.ts` `syncDeclaredIndexes` 文档块的「VERBATIM」表述收窄到 `'global'`; - 全仓 grep 清掉与旧契约相悖的残留表述。 ## 三姿态 conformance(ADR §Acceptance tests) - 同一 fixture app 在 `single | group | isolated` 三姿态启动,逐 S 行断言 enforcement; - 姿态翻转本身零 drift op 的 smoke 断言; - D5e 门演练:带 `'global'` 业务唯一的 fixture app 装进 `isolated` 环境 → 硬停、留痕、不复问;pre-gate 存量走 advisory 的断言; - `scripts/adr-anchors.json` 补 ADR-0120 锚点,`pnpm check:adr-anchors` 绿。 ## 关联 - ADR-0120(决策来源,Accepted 2026-08-04);#4986 / #5030(前两块);#5054(ADR PR)
Activity
os-zhuang commentedon Aug 4, 2026
补充一条 D6 扫荡范围备注(来自 #4986 spec+lint 侧 PR #5208 的实现会话,非新缺陷):
ADR-0120 Resolved #2 的非规范性引导 —— 官方示例 / 脚手架 / 生成器在新代码中输出
unique: 'organization'而非裸true—— 在 #4986 的 PR 里只落到了UniqueScopeSchema的文档块与describe()(规范文字面)。examples/**、create-objectstack模板与各生成器的实际输出尚未扫过。它与本单 D6 的「全仓 grep 清掉与旧契约相悖的残留表述」同一动作面,建议并入本单执行,不另开 issue。字段级裸true永久合法,此项纯引导性,无用户可见缺陷。Generated by Claude Code
os-zhuang commentedon Aug 4, 2026
解除阻塞,可认领。 前置两块已合入 main:
COALESCE(organization_id, '__global__')物化、drift 两侧同步、重复预检、'__global__'保留守卫)— Fixes driver-sql: 单租户栈上 organization_id 恒为 NULL,#3696 的 (tenant, col) 复合 UNIQUE 因 NULL-distinct 而完全不生效 —— 字段级 unique: true 静默零约束 #5030;'organization'+ D5a/D5b lint 规则)— Fixes driver-sql: 表级{ fields, unique: true }在 tenant-scoped 对象上落成平台级 UNIQUE —— normalizeDeclaredIndex 不补租户列(#4698 实例 2 移交) #4986。本单范围照 issue 正文执行(D5e isolated 安装期姿态硬门 + D6 剩余文档扫荡 + 三姿态 conformance)。注意 indexing.mdx 重写时以 main 上已落地的实现与 ADR-0120 为准;lint D5c(遗留手写复合的
'organization'重拼写 advisory)也在本单。Generated by Claude Code
os-zhuang commentedon Aug 4, 2026
认领:PM 循环第 2 批补位(spec 车道,batch:5;维护者列为 v17 高价值项,前置 #5212/#5030、#5208/#4986 已合入解锁)
会话:
session_01ErbEDVAg1No9gdg1pgDAGB分支:
claude/issue-5081-adr0120-17x-closeoutWorktree:
objectstack-issue-5081域:
domain:spec文件面:D5e 安装期姿态硬门(安装链路 + 安装清单 attestation,落点以实测为准)、D6 文档扫荡(
content/docs/data-modeling/indexing.mdx、content/docs/references/**经 regen、driver-sql/src/sql-driver.ts文档块、全仓残留表述 grep、examples/脚手架/生成器的unique: 'organization'引导输出、lint D5c advisory)、三姿态 conformance fixture + 测试、scripts/adr-anchors.json、.changeset/*.md。与在飞 #5015/#5235/#5271/#5285 生成物重叠按 os-regen 四步互保;源文件面与四单不相交。执行依据:ADR-0120(Accepted)+ 解锁评论(2026-08-04 12:56Z);⛔ 永不做成启动期告警(#4884 纪律)。
Generated by Claude Code
os-zhuang commentedon Aug 4, 2026
验收:ACCEPT(PM 复核毕,PR #5314)
复核依据(GitHub 实据):
MarketplaceInstallLocalPlugin.handleInstall,冲突检查后、注册与 ledger 写入前;停下的安装零残留;attestation 记姿态、跨姿态不算同意;⛔ rehydrate 永不评估,[schema-drift] Fresh DB boots "drifted": detector can't read COALESCE index columns, then tells the operator to --allow-destructive away a legitimate unique index #4884 有专测钉住)+ D5c advisory lint(永不自动修,写进 adr-anchors invariant)+ D6 扫荡(含 driver-sql: 单租户栈上 organization_id 恒为 NULL,#3696 的 (tenant, col) 复合 UNIQUE 因 NULL-distinct 而完全不生效 —— 字段级 unique: true 静默零约束 #5030 证伪过的那句原话替换、skills 的tenant_id误例清理)+ 三姿态 conformance(落 driver 层的论证成立,相同性断言配正向断言防空产出假绿 —— 且首跑正是正向断言抓住了索引名错误);syncDeclaredIndexes已被 feat(driver-sql)!: NULL 安全的组织级唯一约束 + 声明索引 'organization' 作用域(ADR-0120 D3/D4,#5030) #5212 提前收窄故本 PR 未动;examples/模板/生成器实测零唯一声明,真实引导面是 skills);git diff --exit-code逐字节核证零吞;与 fix(tenancy): 八处把被降级的 OS_MULTI_ORG_ENABLED 当「是不是多组织」在读 (#5262) #5302 的 import 冲突按语义解决(弃被禁读的resolveMultiOrgEnabled,保postureEnforcesWall);'tenant_id'与平台列名矛盾)已按 finding 纪律立单,PM 已补domain:spec标签,待发现分诊轮判级。后续:PR #5314 进落地串行链(现序:#5300 同步中 → #5304 → #5306 → #5308 → #5312 返工后 → 本单);ADR-0120 17.x 三块就此齐活。
Generated by Claude Code
fix(cli): read the `objectql` slot through its IObjectQLEngine contra…
feat(types,cloud-connection,lint,cli): ADR-0120 17.x 收尾 —— isolated 安…