You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ef2b46b
Browse filesBrowse the repository at this point in the historyBrowse files
docs(adr): ADR-0131 18.x notes, review precision (B1–B3, B6) and the #25155 / #25179 citations (Tier H) (#25154)
Part of #24897
Clause-②: no
Metadata-protocol: none
A follow-up to #25149 (merged as `37ccd5f2cf`). ADR text only, in one
file:
`docs/adr/0131-total-organization-ownership-no-null-organization-id.md`.
**Tier H** (`docs/adr/**`).
Both citations this PR waited on have merged, and the PR cites them
(B4). It is complete and ready for the maintainer's one approval.
## What changes
These are the non-blocking findings of the accuracy review of #25149
(contract review record 6329955338, PASS):
- **B1, D6 regime C note.** "#24421 builds; it has not shipped" was
stale. A dated correction now records that the decision shipped in
18.0.0: #24428 (`964a23700f`) added the `sharing_rule` activation type
and the same-name refusal, #24599 (`1e8b6284c0`) closed the `/meta`
door, and the D10 ceremony's clone migration is in
`packages/cli/src/utils/organization-ownership-apply.ts`.
- **B2, D8 residue note.**
- It names the four doors that ask `requireStartingOrganization`:
commit, chunk and chunked-completion before their first write, and
progress when its expiry stamp is due (`storage-routes.ts:992`, `:1166`,
`:1308`, `:1416` on `origin/main`).
- It names the refused class precisely. A v17 or pre-release store is
refused at boot until the ceremony has run. An 18.0.0-born store is
served, but such a row cannot reach those doors through `os serve`,
because they ride the HTTP server that the production no-auth /
no-secret refusals gate.
- **B3, release-scope item 4.** The parts after the GA "are each held
to" the 18.0.0-born boot. The pin is #24911's fixture-18.0.0 harness leg
(`81e6edd463`), which held on every step-7 merge (record `6323222024`).
- **B4, the two in-flight citations, now cited.**
- D9 note, boundary 2: #25155 (`ab488d9b7d`, the fix for #25133) shipped
the production refusal. A production `os serve` / `os start` that
composes no organization object is refused whether or not `--server`,
before any plugin starts.
- D1 Amended note, item 2: #25179 (`6251f59051`, the execution of
#25134) shipped the `os migrate plan` advisory. Each listed column is
marked `tightens` or `leaves`, with the reason, and `--json` carries it
as `nullableTenantColumns`. The ceremony now reports a shard the driver
created NOT NULL as `already-not-null`. Item 3 (Order) cites #25155 too.
- No "in flight" remains anywhere in the ADR.
- **B6.** The maintainer's words are quoted where the ADR cites the
rulings, as the earlier amendments do: 「25134 … 同意」 (`6328195425`) in
the Status-line entry and in the D1 Amended note, and 「同意」
(`6328987873`) in the D9 note.
## Verification
- `check-adr-links`, `check-adr-anchors` and `check-adr-symbol-anchors`
each exit 0.
- `dispatch-gates --ran`: 20 derived, 20 run, 0 NOT-MEASURED, every
command exit 0.
- `node scripts/pm/check-governed-merges.mjs --branch
origin/claude/issue-24897-adr-0131-dated-notes`: **GOVERNED**, Tier H,
`docs/adr/**` ×1, 53 changed lines (+32 / −21) against `main` at
`6251f59051`, at head `fdfbe4965d`.
## Acceptance notes
- The branch was restarted from `origin/main` after #25149 merged,
keeping the same name. The old head had been deleted, so nothing was
force-pushed.
- `main` was merged in twice with merge commits (`cd6eb02236`,
`eb6b796657`), so the cited commits are ancestors of this head. There
was no rebase and no force-push.
- No changeset: this diff publishes nothing (`skip-changeset`).
---
_Generated by [Claude
Code](https://claude.ai/code/session_01UQCyrGmMy6kwav9XCzAuQ9)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/adr/0131-total-organization-ownership-no-null-organization-id.md
+32-21Lines changed: 32 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# ADR-0131: Organization ownership is total — no NULL `organization_id`; declared metadata stays in code; a row exists only when an organization authored it
2
2
3
-
**Status**: Accepted (2026-09-04) — accepted by the merge that landed it on `main` ([#14976](https://github.com/objectstack-ai/objectstack/pull/14976), commit `0ed271574`), which is itself the acceptance act for a governed surface (Prime Directive #14). Execution is paused under #15193 and the maintainer's standing instruction; that pause is carried there, not by this status line. · **Amended** (2026-09-17, [#18413](https://github.com/objectstack-ai/objectstack/issues/18413) — maintainer ruling option **B** on [#18336](https://github.com/objectstack-ai/objectstack/issues/18336), 2026-09-16: **D5's assignment of `reportLegacyPlatformAdminGrant` and `resetLegacyPlatformAdminGrantReport` to D13 is withdrawn**. Those two symbols retire on the **17.x** line under [#11663](https://github.com/objectstack-ai/objectstack/issues/11663)'s design, **walled posture only**; the `single` posture keeps its zero-config first-user promotion and its grant row. **D5's Default-Organization ownership of that row is unchanged** and still lands on the v18 line under C3 — nothing about NULL ownership moves here. D14 gains one named exception. See **"Amendment (2026-09-17, #18413): the legacy-anchor retirement leaves D13 for the walled posture"** at the end.) · **Amended** (2026-10-16 — maintainer ruling on the v18 upgrade of long-lived development databases: **`os dev` runs D10's ceremony itself on a local SQLite development database**, after copying it, and boots again; `os serve` / `os start` and every other database keep the manual ceremony and the boot refusal, and **what the ceremony decides on the operator's behalf is printed as a warning before its first write**. The ceremony plans and applies **each object in the database the deployment keeps it in** (the `telemetry` sibling included), and **adopts the shipped permission sets an install seeded as `admin` rows** as the platform seeds they are. See **"Amendment (2026-10-16): the development exception, the telemetry sibling, and the legacy shipped-set seeds"** at the end.) · **Amended** (2026-10-22, #24897 — maintainer ruling letter **A** on [#25134](https://github.com/objectstack-ai/objectstack/issues/25134), record `6328195425`: **D1's text states where the tenant column is NOT NULL and which nullable columns remain**, adopting the card's wording; the decision that NULL is not a state is unchanged. Dated notes beside D1, D2, D5, D7, D8, D9 and D14 record the 18.x line as shipped: the release scope of 18.0.0, the lean-embedding exception and its boundaries under ruling A on [#25133](https://github.com/objectstack-ai/objectstack/issues/25133), and the step 7 parts each describes.)
3
+
**Status**: Accepted (2026-09-04) — accepted by the merge that landed it on `main` ([#14976](https://github.com/objectstack-ai/objectstack/pull/14976), commit `0ed271574`), which is itself the acceptance act for a governed surface (Prime Directive #14). Execution is paused under #15193 and the maintainer's standing instruction; that pause is carried there, not by this status line. · **Amended** (2026-09-17, [#18413](https://github.com/objectstack-ai/objectstack/issues/18413) — maintainer ruling option **B** on [#18336](https://github.com/objectstack-ai/objectstack/issues/18336), 2026-09-16: **D5's assignment of `reportLegacyPlatformAdminGrant` and `resetLegacyPlatformAdminGrantReport` to D13 is withdrawn**. Those two symbols retire on the **17.x** line under [#11663](https://github.com/objectstack-ai/objectstack/issues/11663)'s design, **walled posture only**; the `single` posture keeps its zero-config first-user promotion and its grant row. **D5's Default-Organization ownership of that row is unchanged** and still lands on the v18 line under C3 — nothing about NULL ownership moves here. D14 gains one named exception. See **"Amendment (2026-09-17, #18413): the legacy-anchor retirement leaves D13 for the walled posture"** at the end.) · **Amended** (2026-10-16 — maintainer ruling on the v18 upgrade of long-lived development databases: **`os dev` runs D10's ceremony itself on a local SQLite development database**, after copying it, and boots again; `os serve` / `os start` and every other database keep the manual ceremony and the boot refusal, and **what the ceremony decides on the operator's behalf is printed as a warning before its first write**. The ceremony plans and applies **each object in the database the deployment keeps it in** (the `telemetry` sibling included), and **adopts the shipped permission sets an install seeded as `admin` rows** as the platform seeds they are. See **"Amendment (2026-10-16): the development exception, the telemetry sibling, and the legacy shipped-set seeds"** at the end.) · **Amended** (2026-10-22, #24897 — maintainer ruling letter **A** on [#25134](https://github.com/objectstack-ai/objectstack/issues/25134), record `6328195425`, 「25134 … 同意」: **D1's text states where the tenant column is NOT NULL and which nullable columns remain**, adopting the card's wording; the decision that NULL is not a state is unchanged. Dated notes beside D1, D2, D5, D7, D8, D9 and D14 record the 18.x line as shipped: the release scope of 18.0.0, the lean-embedding exception and its boundaries under ruling A on [#25133](https://github.com/objectstack-ai/objectstack/issues/25133), and the step 7 parts each describes.)
4
4
**Deciders**: ObjectStack maintainer, 2026-09-03/04, live chat on
5
5
[#13564](https://github.com/objectstack-ai/objectstack/issues/13564), verbatim and untranslated,
6
6
in the order the model was built: the premise 「我理解只有代码定义的元数据是跨租户的,对象、字段、视图等
@@ -245,7 +245,7 @@ with tenancy disabled (`sys_sso_provider`) is not a tenant column. An object who
0 commit comments