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 (#3032)
* 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.
* chore: retrigger CI
* docs: rename remaining connector-semantic ADR-0096 refs introduced by #3016/#3029
---------
Co-authored-by: Claude <noreply@anthropic.com>
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 INSTANCES (ADR-0096 / #2977): StatusApiConnector declares `provider: rest` (inline config) and StatusOpenApiConnector declares `provider: openapi` with its OpenAPI document referenced as a package-relative FILE PATH (#3016, read at boot and confined to the package root) — both are materialized into live, dispatchable connectors at boot; ShowcaseDeclarativeConnectorPingFlow calls the rest instance via connector_action and both appear 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 INSTANCES (ADR-0097 / #2977): StatusApiConnector declares `provider: rest` (inline config) and StatusOpenApiConnector declares `provider: openapi` with its OpenAPI document referenced as a package-relative FILE PATH (#3016, read at boot and confined to the package root) — both are materialized into live, dispatchable connectors at boot; ShowcaseDeclarativeConnectorPingFlow calls the rest instance via connector_action and both appear 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