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
docs(adr): status-hygiene sweep — fix 0096 collision, flip implemented statuses, mark PRIORITIZATION stale
Follow-up to the ADR-0086 re-evaluation (#2557): an audit of docs/adr found
three hygiene defects; this fixes the mechanical ones.
1. Resolve the ADR-0096 numbering collision. Two unrelated ADRs landed as
0096 on the same day; the first-merged one (execution-surface identity
admission, #2975) keeps 0096, and the connector ADR (#2977) is renumbered
to ADR-0097. All connector-semantic "ADR-0096" references in code comments,
test titles, and zod describe/message strings are updated to ADR-0097;
execution-surface references (http-dispatcher, authz-conformance,
graphql/realtime contracts, service-realtime README) are untouched.
CHANGELOGs and commit history are left as historical record.
2. Flip Status lines of implemented ADRs that were still Proposed, with
evidence: 0093 (tenancy service + membership reconciler + dogfood test)
and 0095 (tenant-layer.ts + posture-ladder.ts + matrix-gate tests).
Verified code+tests on main before flipping; other stale-looking ADRs
(0049/0056/0057/0066/...) are left for per-ADR verification.
3. Mark docs/adr/PRIORITIZATION.md as a historical snapshot (it predates
ADR-0050+) and record the status-hygiene rule: the PR that lands an ADR's
implementation flips its Status line with one line of evidence.
Copy file name to clipboardExpand all lines: docs/adr/0093-tenancy-mode-and-membership-lifecycle.md
+1-1Lines changed: 1 addition & 1 deletion
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-0093: Tenancy mode as a first-class capability, and a single owner for the user→membership lifecycle
2
2
3
-
-**Status:**Proposed (implementation in progress)
3
+
-**Status:**Accepted (2026-07-13) — implemented: `tenancy` kernel service (`plugin-auth/src/tenancy-service.ts`), membership reconciler (`reconcile-membership.ts`), locked by `dogfood/test/membership-reconciler.dogfood.test.ts`
4
4
-**Date:** 2026-07-13
5
5
-**Deciders:** ObjectStack Protocol Architects
6
6
-**Implementation:**#2882 (Phase 0 — tactical create-user bind, merged) → this PR (Phases 1–3 — `tenancy` service, fail-fast boot guard, membership reconciler, consumer migration, backfill, docs). One revision from the original plan, ratified in D2: the endpoint-level create-user bind **delegates to the shared reconciler** (one implementation, two call sites) instead of being deleted. Runtime verification confirmed the hook fires for `admin.createUser`, but better-auth *defers*`user.create.after` post-commit (#1881), so the endpoint keeps its delegated call to report `organizationId` / `membershipCreated` deterministically in its response. Cloud-host semantics (personal-org hook precedence, multi-org non-binding, D5 blast radius) verified against `objectstack-ai/cloud` — see D2/D3/D5.
'Both connector kinds are demonstrated. (1) Provider-bound INSTANCE (ADR-0096 / #2977): StatusApiConnector declares `provider: rest` and is materialized into a live, dispatchable connector at boot by ConnectorRestPlugin\'s provider factory — ShowcaseDeclarativeConnectorPingFlow calls it via connector_action and it appears in GET /connectors. (2) Catalog DESCRIPTOR (#2612): ErpCatalogConnector has no provider, so it stays inert metadata; enabled:false marks the deliberate catalog entry and silences the boot audit. Plugin-registered connectors (ConnectorRestPlugin/ConnectorSlackPlugin in objectstack.config.ts) are also exercised by the connector flows.',
182
+
'Both connector kinds are demonstrated. (1) Provider-bound INSTANCE (ADR-0097 / #2977): StatusApiConnector declares `provider: rest` and is materialized into a live, dispatchable connector at boot by ConnectorRestPlugin\'s provider factory — ShowcaseDeclarativeConnectorPingFlow calls it via connector_action and it appears in GET /connectors. (2) Catalog DESCRIPTOR (#2612): ErpCatalogConnector has no provider, so it stays inert metadata; enabled:false marks the deliberate catalog entry and silences the boot audit. Plugin-registered connectors (ConnectorRestPlugin/ConnectorSlackPlugin in objectstack.config.ts) are also exercised by the connector flows.',
0 commit comments