Filed by the director seat (session local_c32e5a25-0581-4665-952f-60c1be74b250) executing point 5 of the maintainer's 2026-08-31 joint-case ruling on #13491 (verbatim 「同意」): the carve-out below is the AMPLIFIER of the NULL-tenant-row defect class, and the ruling directs it to its own card — ⛔ never a rider on the #13491 implementation. Left ungraded — domain:*/type/priority are triage's.
The carve-out
packages/drivers/driver-sql/src/sql-driver.ts:7320 — the driver's native tenant scope is
(organization_id = :tenantId OR organization_id IS NULL)
a deliberate fail-open so bootstrap-seeded platform rows stay visible to every organization.
Why it needs a census before any design decision
Measured consequences already on record:
Task (measure first, then design)
- Census the legitimate dependents of NULL-row visibility: bootstrap seeds, Layer-0 environment-scoped metadata (
sys_metadata reads fall back to the NULL layer BY DESIGN — see cloud apps/objectos-ee/objectstack.config.ts walled-posture notes), and any other read path that would break if NULL rows stopped being globally visible.
- Classify by object: for which objects is NULL-visibility load-bearing (metadata fallback) vs. accidental (tenant-scoped tables whose writers failed to stamp)?
- With the census in hand, bring the design options back through the decision inbox — sketch: (a) keep the carve-out, rely on per-object scope rules above the driver (cloud#1239 pattern); (b) narrow the carve-out to declared-global objects only; (c) posture-dependent behaviour. Each option moves published contract semantics on a security boundary ⇒ maintainer floor, clause-② posture to be judged at claim time.
Refs: #13491 (ruling, point 5) · #13497 (measurement) · #13178 (repair family) · cloud#1232 · cloud#1239.
Filed by the director seat (session
local_c32e5a25-0581-4665-952f-60c1be74b250) executing point 5 of the maintainer's 2026-08-31 joint-case ruling on #13491 (verbatim 「同意」): the carve-out below is the AMPLIFIER of the NULL-tenant-row defect class, and the ruling directs it to its own card — ⛔ never a rider on the #13491 implementation. Left ungraded —domain:*/type/priority are triage's.The carve-out
packages/drivers/driver-sql/src/sql-driver.ts:7320— the driver's native tenant scope isa deliberate fail-open so bootstrap-seeded platform rows stay visible to every organization.
Why it needs a census before any design decision
Measured consequences already on record:
organization_id = NULLin a tenant-scoped table is readable by every organization. cloud#1232 measured real cross-tenant reads through exactly this branch; cloud#1239 repaired two objects (sys_package_installation,sys_environment_credential— a credentials table) by adding scope rules ABOVE the driver, leaving the carve-out itself intact.isSystem写入是否在租户审计控制范围内?——#13178 类级装置(A/B/C)的共同前置,从未被裁过 #13491's option-C ruling closes the biggest NULL-row PRODUCER (isSystem writes on tenant-scoped platform-namespace objects), which shrinks — but does not empty — the population this branch exposes: rows already written, application-object sites still unrepaired (tenant-audit: the "write without tenantId" signal is a throttled log warn gated on multi-tenant posture, so it cannot fire in any environment where code is exercised #13178 family, p1), and any future unstamped writer.Task (measure first, then design)
sys_metadatareads fall back to the NULL layer BY DESIGN — see cloudapps/objectos-ee/objectstack.config.tswalled-posture notes), and any other read path that would break if NULL rows stopped being globally visible.Refs: #13491 (ruling, point 5) · #13497 (measurement) · #13178 (repair family) · cloud#1232 · cloud#1239.