Filed from the maintainer's ruling on #13906 (2026-09-04, live chat, adopting the PM recommendation verbatim: 「按照你的建议,你帮我跟进处理15020」). Measurement only — ⛔ no code lands under this card. domain:cli (REST transport wiring); type and priority are triage's.
Why this exists
PR #15020 shipped decision 1 of the 2026-09-02 ruling as A + B′. B′ was a boot refusal: on the single-kernel provider wiring (no kernel-manager service), a wall-enforcing tenancy posture made RestApiPlugin refuse to start, on the reasoning that computeExecCtx never reads a posture on that wiring so "the Layer 0 wall would silently not be enforced". Measured on the merged tree (#15020 comment "CI triage", 2026-09-03): the ONLY registrar of a kernel-manager service in the repository is B′'s own narrowness control test (positive control: the same grep for org-scoping returns four real registrars), so every wall-enforcing composition the open core can build — the real os serve process under isolated, the ADR-0105 bootStack multiTenant harness, seven dogfood suites, group as well as isolated — is on the refusing side. And the refusal's premise is false where it fires: a wall-enforcing effective posture requires org-scoping, and org-scoping is exactly what makes plugin-security keep the platform's organization_id row policies (ADR-0105 D3), so the row wall IS enforced on those deployments. What the provider wiring actually skips is narrower — the two API-key admission refusals computeExecCtx derives from the posture (organization_required, organization_membership_ended) — and nobody has measured whether those refusals are reached by another layer on that wiring.
The maintainer therefore removed B′ from #15020 (A and decision-2 B land in 17.3) and moved B′'s question here.
The measurement
On a real os serve boot under OS_TENANCY_POSTURE=isolated with @objectstack/organizations mounted (the composition B′ refused), as an authenticated principal whose API key is stamped with an organization they are no longer a member of:
- Does the request reach data, or is it refused — and by which layer (Layer 0 in plugin-security, the REST
computeExecCtx posture branch, better-auth session validation)? Name file and symbol either way.
- Repeat for a key whose principal has no organization (
organization_required).
- Control: the same two requests on the multi-kernel wiring (a
kernel-manager present), where the posture branch is known to fire — both must be refused there, proving the probe itself works.
- Read
computeExecCtx and state, from the code, which authorization inputs the single-kernel branch derives without a posture and which it cannot derive at all.
Outcomes
- Every refusal reached by another layer → close: the single-kernel wiring carries no posture and needs none; document that in the REST plugin's docblock (a docs card, not a refusal).
- A refusal reached by NO layer → a real defect: file it with the measured blast radius; the repair is to make the single-kernel branch derive the posture (the option the 2026-09-02 ruling declined, to be re-judged on the measurement), never a boot refusal that turns every walled deployment off.
Refs: #13906 · PR #15020 · ADR-0105 D3 · ADR-0095 D1 · ADR-0069.
Filed from the maintainer's ruling on #13906 (2026-09-04, live chat, adopting the PM recommendation verbatim: 「按照你的建议,你帮我跟进处理15020」). Measurement only — ⛔ no code lands under this card.
domain:cli(REST transport wiring); type and priority are triage's.Why this exists
PR #15020 shipped decision 1 of the 2026-09-02 ruling as A + B′. B′ was a boot refusal: on the single-kernel provider wiring (no
kernel-managerservice), a wall-enforcing tenancy posture madeRestApiPluginrefuse to start, on the reasoning thatcomputeExecCtxnever reads a posture on that wiring so "the Layer 0 wall would silently not be enforced". Measured on the merged tree (#15020 comment "CI triage", 2026-09-03): the ONLY registrar of akernel-managerservice in the repository is B′'s own narrowness control test (positive control: the same grep fororg-scopingreturns four real registrars), so every wall-enforcing composition the open core can build — the realos serveprocess underisolated, the ADR-0105bootStack multiTenantharness, seven dogfood suites,groupas well asisolated— is on the refusing side. And the refusal's premise is false where it fires: a wall-enforcing effective posture requiresorg-scoping, andorg-scopingis exactly what makes plugin-security keep the platform'sorganization_idrow policies (ADR-0105 D3), so the row wall IS enforced on those deployments. What the provider wiring actually skips is narrower — the two API-key admission refusalscomputeExecCtxderives from the posture (organization_required,organization_membership_ended) — and nobody has measured whether those refusals are reached by another layer on that wiring.The maintainer therefore removed B′ from #15020 (A and decision-2 B land in 17.3) and moved B′'s question here.
The measurement
On a real
os serveboot underOS_TENANCY_POSTURE=isolatedwith@objectstack/organizationsmounted (the composition B′ refused), as an authenticated principal whose API key is stamped with an organization they are no longer a member of:computeExecCtxposture branch, better-auth session validation)? Name file and symbol either way.organization_required).kernel-managerpresent), where the posture branch is known to fire — both must be refused there, proving the probe itself works.computeExecCtxand state, from the code, which authorization inputs the single-kernel branch derives without a posture and which it cannot derive at all.Outcomes
Refs: #13906 · PR #15020 · ADR-0105 D3 · ADR-0095 D1 · ADR-0069.