Skip to content

Commit 82ba3a6

Browse files
os-zhuangclaude
andauthored
docs(liveness): record the tenancy.strategy/crossTenantAccess removal decision (#2763) (#2765)
Owner decision: two tenancy modes only (per-tenant DB = environment level; shared DB = org row isolation via enabled+tenantField). No object-level isolation requirement — both dead knobs are slated for removal at the next spec major. Ledger notes + authorHints updated to cite #2763 and point at the real mechanisms. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 446a0b8 commit 82ba3a6

2 files changed

Lines changed: 17 additions & 4 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
docs(liveness): record the tenancy.strategy / crossTenantAccess removal decision (#2763)
6+
7+
Owner decision 2026-07-10: the platform has exactly two multi-tenancy
8+
modes — per-tenant database (environment-level, zero object config) and
9+
shared-DB organization row isolation (`tenancy.enabled` + `tenantField`).
10+
Object-level isolation strategy has no requirement, so `strategy` and
11+
`crossTenantAccess` are slated for removal at the next spec major.
12+
Ledger notes + compile-time authorHints now state the decision and point
13+
authors at the two real mechanisms.

packages/spec/liveness/object.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@
129129
"strategy": {
130130
"status": "dead",
131131
"evidence": "inert — only tenancy.enabled is read",
132-
"note": "part of the live tenancy block (sql-driver reads enabled+tenantField); verify before touching.",
132+
"note": "REMOVAL DECIDED (#2763, owner 2026-07-10): the platform has exactly two tenancy modes — per-tenant database (environment-level, zero object config) and shared-DB org row isolation (enabled+tenantField). Object-level isolation strategy has no requirement; remove at the next spec major.",
133133
"authorWarn": true,
134-
"authorHint": "Only tenancy.enabled + tenantField are read (sql-driver row scoping) — 'shared'/'isolated'/'hybrid' changes nothing. Do not expect per-tenant databases from this knob."
134+
"authorHint": "No requirement — removal decided (#2763). Library-level isolation is an environment/deployment choice; row-level isolation is tenancy.enabled + tenantField. This knob changes nothing."
135135
},
136136
"tenantField": {
137137
"status": "live",
@@ -141,9 +141,9 @@
141141
"crossTenantAccess": {
142142
"status": "dead",
143143
"evidence": "inert",
144-
"note": "part of the live tenancy block; verify before touching.",
144+
"note": "REMOVAL DECIDED (#2763, owner 2026-07-10): cross-visibility governance lives in sharing/OWD (ADR-0056), externalSharingModel (ADR-0090 D11) and access posture; a blanket boolean has no requirement. Remove at the next spec major.",
145145
"authorWarn": true,
146-
"authorHint": "Inert — setting it true does NOT grant (or gate) cross-tenant access. Tenant isolation is enforced solely via tenancy.enabled row scoping."
146+
"authorHint": "No requirement — removal decided (#2763). Setting it true grants nothing; use sharing rules / externalSharingModel for cross-visibility."
147147
}
148148
}
149149
},

0 commit comments

Comments
 (0)