|
2 | 2 |
|
3 | 3 | - **Status**: Proposed (2026-09-06) — awaiting the maintainer's hand-merge, which is the acceptance act for a governed surface (Prime Directive #14). ⛔ Nothing in this file is a new decision; see [Provenance](#provenance--read-this-before-citing-this-file). |
4 | 4 | - **Mirrors**: `objectstack-ai/cloud` **ADR-0081** (Status: Accepted, founder-decided in session, 2026-07-09) — **D1, D3 and D4 only**, the half whose mechanism is open code in this repository. |
5 | | -- **Deliberately not mirrored**: cloud ADR-0081 **D2**, its non-goals, and its commercial consequences. Those govern a packaging choice, stay in cloud, and are cited as `cloud ADR-0081` — never restated here. See [Relationship to the D2 reversal](#relationship-to-the-d2-reversal-16215). |
| 5 | +- **Deliberately not mirrored**: cloud ADR-0081 **D2**, its non-goals, and its commercial consequences — cited as `cloud ADR-0081`, never restated here. ⚠️ D2 is absent for a stronger reason than the other two: it has been **reversed** by [ADR-0132](./0132-multi-organization-runtime-is-open-core.md), and the multi-organization machinery it packaged now ships in this repository (`packages/plugins/organizations`). What stays in cloud is that *record* — together with the non-goals and the commercial consequences, which the reversal leaves untouched. See [Relationship to the D2 reversal](#relationship-to-the-d2-reversal-adr-0132). |
6 | 6 | - **Cross-checked against** (cite, do not duplicate): [ADR-0093](./0093-tenancy-mode-and-membership-lifecycle.md) (tenancy mode; the membership lifecycle; D9 already anchors the active-organization resolution), [ADR-0105](./0105-group-tenancy-posture-and-first-class-org-scope.md) (group tenancy posture; D12 anchors the multi-org entitlement), [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) (total organization ownership; D1/D7/D9) |
7 | 7 | - **Filed by**: [#14508](https://github.com/objectstack-ai/objectstack/issues/14508), a sub-issue of [#14496](https://github.com/objectstack-ai/objectstack/issues/14496) (maintainer ruling 2026-09-02, option 2: mirror the open half, do not move files) |
8 | 8 | - **Consumers**: `@objectstack/platform-objects` (the identity surface and the Setup navigation contributions), `@objectstack/plugin-auth` (better-auth's organization plugin and the default-organization bootstrap), `@objectstack/spec` (the public auth-feature roster), and the objectui console that renders the surface |
@@ -55,44 +55,45 @@ than resolved. |
55 | 55 |
|
56 | 56 | --- |
57 | 57 |
|
58 | | -## Relationship to the D2 reversal (#16215) |
| 58 | +## Relationship to the D2 reversal (ADR-0132) |
59 | 59 |
|
60 | 60 | **A separate local record — "The multi-organization runtime is open core" — |
61 | | -reverses cloud ADR-0081 D2.** It is open as a draft PR |
62 | | -([#16215](https://github.com/objectstack-ai/objectstack/pull/16215)) and is not |
63 | | -yet on `main`. |
64 | | - |
65 | | -⛔ **It is referenced here by PR number and never by its ADR number, and that is |
66 | | -a gate requirement rather than a style choice.** `pnpm check:adr-anchors` fails |
67 | | -any citation of an ADR number that names no record under `docs/adr/`: an |
68 | | -unmerged number is a squat, and every citation of it is retroactively falsified |
69 | | -if the record lands under a different number. A PR reference cannot rot that |
70 | | -way. **When #16215 merges, its number becomes citable and this file should be |
71 | | -updated to use it** — that edit is cheap, mechanical, and owed to whichever of |
72 | | -the two records lands second. |
| 61 | +reverses cloud ADR-0081 D2.** It is |
| 62 | +[ADR-0132](./0132-multi-organization-runtime-is-open-core.md), and it is **on |
| 63 | +`main`** (landed 2026-09-07): a record, not a proposal. |
| 64 | + |
| 65 | +⛔ **It is cited here by ADR number and relative link, and nothing about that |
| 66 | +reversal is re-derived, restated or evaluated below.** This file previously |
| 67 | +cited it by PR number, which was a gate requirement rather than a style choice: |
| 68 | +`pnpm check:adr-anchors` fails any citation of an ADR number that names no |
| 69 | +record under `docs/adr/`, so while the record was unmerged its number was a |
| 70 | +squat and a citation of it would have been retroactively falsified had it landed |
| 71 | +under a different number. That constraint is discharged — the number resolves, |
| 72 | +so it is the citable form and the PR reference is retired from this file. |
73 | 73 |
|
74 | 74 | The division of labour between the two records is exact and neither restates |
75 | 75 | the other: |
76 | 76 |
|
77 | 77 | | cloud ADR-0081 | who carries it locally | |
78 | 78 | |---|---| |
79 | 79 | | **D1** — the "add a teammate" basics stay open | **this record** | |
80 | | -| **D2** — the multi-organization machinery is enterprise | the record proposed in **#16215**, which reverses it. ⛔ Not re-derived, restated or evaluated here | |
| 80 | +| **D2** — the multi-organization machinery is enterprise | **reversed** by [ADR-0132](./0132-multi-organization-runtime-is-open-core.md), which is on `main`. ⛔ Not re-derived, restated or evaluated here | |
81 | 81 | | **D3** — the in-shell organization surface | **this record** | |
82 | 82 | | **D4** — org-scoped roster reads | **this record** | |
83 | 83 | | the non-goals and the commercial consequences | stay in cloud, cited as `cloud ADR-0081` | |
84 | 84 |
|
85 | | -⚠️ **A note for the hand-merge, stated rather than decided.** #16215's record |
86 | | -says in its own "What this record does not decide" section that D1/D3/D4 "are |
87 | | -mirrored into this repository by #14508", and asks that writer to cite its |
88 | | -decisions rather than open a *competing* record — which this file does: it |
89 | | -decides nothing that record decides. A later comment on #14508 goes further and |
90 | | -proposes folding D1/D3/D4 into that file instead of writing a second one. That |
91 | | -option was not available to this change: the file does not exist on `main`, so |
92 | | -"extending" it would mean building on an unmerged governed PR and coupling two |
93 | | -hand-merges into one. **If the maintainer prefers one combined record, that is a |
94 | | -merge-time call** — the two files are disjoint, so folding them is a move, not a |
95 | | -rewrite. |
| 85 | +⚠️ **A note for the hand-merge, stated rather than decided.** ADR-0132 says in |
| 86 | +its own "What this record does not decide" section that D1/D3/D4 "are mirrored |
| 87 | +into this repository by #14508", and asks that writer to cite its decisions |
| 88 | +rather than open a *competing* record — which this file does: it decides nothing |
| 89 | +that record decides. A later comment on #14508 goes further and proposes folding |
| 90 | +D1/D3/D4 into that file instead of writing a second one. When this file was |
| 91 | +drafted that option was not available: ADR-0132 did not exist on `main`, so |
| 92 | +"extending" it would have meant building on an unmerged governed PR and coupling |
| 93 | +two hand-merges into one. That obstacle is gone — the record has landed — so the |
| 94 | +choice now stands on its merits alone. This change does not take it. **If the |
| 95 | +maintainer prefers one combined record, that is still a merge-time call** — the |
| 96 | +two files are disjoint, so folding them is a move, not a rewrite. |
96 | 97 |
|
97 | 98 | --- |
98 | 99 |
|
@@ -243,8 +244,9 @@ resolved here. |
243 | 244 | and D14), not a mirror's to settle. |
244 | 245 |
|
245 | 246 | 4. **What an enterprise subscription buys, and where the multi-organization |
246 | | - machinery lives.** Cloud ADR-0081 D2 and the record proposed in #16215, |
247 | | - respectively. ⛔ Not evaluated here. |
| 247 | + machinery lives.** Cloud ADR-0081 D2 and |
| 248 | + [ADR-0132](./0132-multi-organization-runtime-is-open-core.md), respectively. |
| 249 | + ⛔ Not evaluated here. |
248 | 250 |
|
249 | 251 | --- |
250 | 252 |
|
|
0 commit comments