⛔ BLOCKED — the v18 development line is not open. Blocked-by: #15193. No card in this tree is dispatched, claimed or assigned while #15193 is open. Read that card before touching anything here.
Execution tree for ADR-0131 — Total organization ownership: no NULL organization_id (docs/adr/0131-total-organization-ownership-no-null-organization-id.md, merged via #14976, approved by the maintainer 2026-09-04). §8 of the record is the table these cards are cut from.
The three sentences every card in this tree assumes
- A managed package's metadata is not in the database. It is cross-tenant, it upgrades with the code, and its definitions are sealed. A customer's customization is environment-level state: overlay for presentational types, disable-and-clone for behavioural ones, extend for structural ones (ADR-0126's three regimes, now at environment scope only). Environment metadata written by Studio, by the cloud build agent, or by a template-mode install lives in the database, is editable in the UI, and its ledger has no organization column. A template package cannot be installed on a shared-database multi-tenant deployment.
- A row with an organization column was written by that organization — created, cloned, or assigned. The column is
NOT NULL. References to declared items are by machine name, resolved registry-first. - A table with no organization column is deployment-level or code-level. It is protected by permissions, not by the tenant wall.
Dependency order
#15193 (gate: v18 line opens)
└─ this epic
├─ C1 Default Organization load-bearing; unstamped write refused in every posture
├─ C2 catalog read from the registry; assignments reference by name
│ └─ C3 retire the catalog seeders, the per-org catalog machinery, the four objects
│ └─ C9 (objectui) Setup reads the registry; assignment pages stay data pages
├─ C4 email/notification templates resolve the registry; org-level editing closed
├─ C5 `sys_metadata` family tenant-less; per-org overlay axis retired; managed content sealed
│ └─ C12 the template install mode
├─ C6 deployment-level state has no organization column
│ └─ C10 (cloud) control plane adopts D7, backfill to fates
├─ C7 inventory + migration: four fates, manual operator ceremony (needs C2–C6)
│ └─ C8 `organization_id` NOT NULL; one predicate; both arms retired (protocol 18)
└─ C11 docs and family close-out (needs C8 + C10)
Staging (D14)
Maintainer, 2026-09-04: 「我发 17.3,然后后续这么大的改动应该放到 v18」 and 「我建议18.0 的主要考虑是客户数据变化比较大,而且需要手工执行升级脚本」.
Two cards landed before the 17.3 tag and are not part of this tree: #15024 (sys_metadata_activation ships tenant-less, PR #15155) and #15030 (the NULL-inclusive business-unit screen of #14949 reverted, PR #15078). ⛔ Everything else is one major with one migration. No 17.x card narrows or removes a driver arm, adds a name column beside an id column, or ships half of this record.
Open questions the record leaves to the maintainer
ADR-0131 §6 Q1 — what becomes of email-template rows an organization has already customized (customized: true): kept readable as the Default Organization's overrides, or dropped with a release note. To be ruled when C4 is cut, not before.
Sub-issues
Every card below carries pm:blocked and names #15193. The order is the dependency order; Blocked-by: lines encode it card by card.
| card | issue | lands in | blocked by (besides the gate) |
|---|
| C1 | #15195 | objectql, plugin-auth | — |
| C2 | #15196 | core, objectql, plugin-security, plugin-sharing | — |
| C3 | #15204 | plugin-security, platform-objects, spec | C1, C2 |
| C4 | #15205 | plugin-email | — (⚠️ §6 Q1 must be ruled first) |
| C5 | #15206 | metadata-core, metadata-protocol, objectql, plugin-security | C1 |
| C6 | #15207 | spec, services | — |
| C7 | #15211 | objectql, cli | C2, C3, C4, C5, C6 |
| C8 | #15212 | spec, drivers, objectql, plugin-security | C7 · protocol 18 · clause-② yes |
| C9 | objectstack-ai/objectui#7611 | objectui | C2 |
| C10 | objectstack-ai/cloud#1979 | cloud | C6, then C8 |
| C11 | #15214 | docs | C8, C10 |
| C12 | #15213 | spec, objectql, cli | C5 |
Landed before the 17.3 tag, deliberately outside this tree:#15024 (PR #15155) and #15030 (PR #15078).
Existing cards this tree re-aims
Surveyed 2026-09-04 across the three repositories' open queues at the maintainer's request. Each card named here carries a pointer comment of its own:
| card | why this tree touches it |
|---|
| #11753 | a new ActionParam carry-over key for a Clone dialog C3 deletes and C9 rebuilds — folded into C9 |
| #14491 | its whole subject is which copy the catalog seeders read; C3 retires the seeders |
| #14772 · #13753 | both describe or forward the metadata organization partition C5 retires |
| objectui#7205 | persists an org-wide view overlay — the ADR-0005 axis C5 retires |
| #13419 | asked whether name-based permission-set resolution is intended; D4 answers yes |
| #11973 · #11978 · #11979 | the platform-admin re-anchor family, decided by D5 and implemented in C1/C3 |
| #14570 · #15086 | organization-less row populations C7's inventory must give a fate |
| #14096 | ruled and closed 2026-09-04 — D9 removes the question rather than choosing an option |
| #14508 · #15072 · #13433 · #8241 · #15007 | pointer only;排期不变 |
⛔ Not touched, and shipping on their own clock: #14970 / #14971 / #13566 (the p0 cross-tenant webhook family — D7 keeps sys_http_delivery and sys_email tenant data), #14754, #14936, #14937. C1 makes the last three more load-bearing, not less.
⛔ BLOCKED — the v18 development line is not open.
Blocked-by: #15193. No card in this tree is dispatched, claimed or assigned while #15193 is open. Read that card before touching anything here.Execution tree for ADR-0131 — Total organization ownership: no NULL
organization_id(docs/adr/0131-total-organization-ownership-no-null-organization-id.md, merged via #14976, approved by the maintainer 2026-09-04). §8 of the record is the table these cards are cut from.The three sentences every card in this tree assumes
NOT NULL. References to declared items are by machine name, resolved registry-first.Dependency order
Staging (D14)
Maintainer, 2026-09-04: 「我发 17.3,然后后续这么大的改动应该放到 v18」 and 「我建议18.0 的主要考虑是客户数据变化比较大,而且需要手工执行升级脚本」.
Two cards landed before the 17.3 tag and are not part of this tree: #15024 (
sys_metadata_activationships tenant-less, PR #15155) and #15030 (the NULL-inclusive business-unit screen of #14949 reverted, PR #15078). ⛔ Everything else is one major with one migration. No 17.x card narrows or removes a driver arm, adds a name column beside an id column, or ships half of this record.Open questions the record leaves to the maintainer
ADR-0131 §6 Q1 — what becomes of email-template rows an organization has already customized (
customized: true): kept readable as the Default Organization's overrides, or dropped with a release note. To be ruled when C4 is cut, not before.Sub-issues
Every card below carries
pm:blockedand names #15193. The order is the dependency order;Blocked-by:lines encode it card by card.objectql,plugin-authcore,objectql,plugin-security,plugin-sharingplugin-security,platform-objects,specplugin-emailmetadata-core,metadata-protocol,objectql,plugin-securityspec, servicesobjectql,clispec, drivers,objectql,plugin-securityspec,objectql,cliLanded before the 17.3 tag, deliberately outside this tree:#15024 (PR #15155) and #15030 (PR #15078).
Existing cards this tree re-aims
Surveyed 2026-09-04 across the three repositories' open queues at the maintainer's request. Each card named here carries a pointer comment of its own:
ActionParamcarry-over key for a Clone dialog C3 deletes and C9 rebuilds — folded into C9⛔ Not touched, and shipping on their own clock: #14970 / #14971 / #13566 (the p0 cross-tenant webhook family — D7 keeps
sys_http_deliveryandsys_emailtenant data), #14754, #14936, #14937. C1 makes the last three more load-bearing, not less.