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
Measured on origin/main at 5364d2e5e while verifying #11975's "never a silent dual-track" discipline. Not touched by that card's PR (#13666) — fixing it is a behaviour change (it makes a warning quieter), which #11975's dispatch fenced off, and it bears directly on #13515's single carve-out clause.
What was measured
single is the default tenancy posture: packages/types/src/env.tsresolveTenancyPosture() ends return resolveMultiOrgEnabled() ? 'isolated' : 'single';, so an unconfigured deployment is single.
On a single rig, bootstrapPlatformAdmin still promotes the first human user by minting the org-less admin_full_access grant row — pinned, and pinned as correct and permanent, in packages/plugins/plugin-security/src/bootstrap-platform-admin-walled-owner.test.ts:
describe('single posture — "first user is owner" is ruled reasonable and UNCHANGED (Choice 4A)', …)
it('promotes the first human user with no owner email declared (the pre-#11184 shape)', …)
it('never consults the owner-email variable: a declared owner does NOT redirect the single-org promotion', …)
But the request-side deprecation pointer at packages/core/src/security/resolve-authz-context.ts §6b-config is posture-independent:
Measured directly (fake ObjectQL, OS_TENANCY_POSTURE=single, OS_PLATFORM_OWNER_EMAIL unset, one org-less admin_full_access grant for usr_first) — posture resolves PLATFORM_ADMIN and one warn line is emitted:
[authz] user usr_first holds PLATFORM_ADMIN through the legacy unscoped 'admin_full_access'
grant row, not through OS_PLATFORM_OWNER_EMAIL. The grant row is the OLD anchor and is
honoured for now; it is removed in a later release. Re-anchor this deployment by declaring
its administrators in configuration: OS_PLATFORM_OWNER_EMAIL=first@corp.example …
Why that is wrong for this rig
Two claims in that line are false on a single posture as currently ruled:
"Re-anchor this deployment by declaring its administrators in configuration" — a single rig that follows this advice gets nothing, because the same test file pins that the single promotion never consults the owner-email variable.
The boot-side detector already gets this right and is posture-gated: bootstrap-platform-admin.ts early-returns already_have_admin for !walled, and its own comment says so — "Under walled postures that same row is the LEGACY anchor and gets the deprecation pointer below instead of a silent early exit." The request-side call site simply does not carry the same gate.
Impact
Every default-posture deployment with a first-user-promoted admin emits, once per process, a deprecation notice instructing the operator to migrate off an anchor that is not scheduled to go away, toward a variable their posture ignores. It is a wrong-advice / false-alarm class, not an access-control defect: standing itself is correct in every arm.
Shape of a fix (not prescribed — needs the #11979 fork settled first)
Gate the request-side pointer on a walled posture, matching the boot-side detector, so the migration window's loudness is scoped to the rigs actually in the window. ⚠️ Whether that is the right answer depends on #11979 / Choice 4B: if single does re-anchor, the line becomes true for those rigs and the correct fix is instead to make the single promotion honour the config. Both readings are live, which is why this is filed rather than patched.
⛔ Not addressed in #13666. #13515 remains open and is unaffected except that its single carve-out clause is the natural place to re-read this.
Measured on
origin/mainat5364d2e5ewhile verifying #11975's "never a silent dual-track" discipline. Not touched by that card's PR (#13666) — fixing it is a behaviour change (it makes a warning quieter), which #11975's dispatch fenced off, and it bears directly on #13515'ssinglecarve-out clause.What was measured
singleis the default tenancy posture:packages/types/src/env.tsresolveTenancyPosture()endsreturn resolveMultiOrgEnabled() ? 'isolated' : 'single';, so an unconfigured deployment issingle.On a
singlerig,bootstrapPlatformAdminstill promotes the first human user by minting the org-lessadmin_full_accessgrant row — pinned, and pinned as correct and permanent, inpackages/plugins/plugin-security/src/bootstrap-platform-admin-walled-owner.test.ts:But the request-side deprecation pointer at
packages/core/src/security/resolve-authz-context.ts§6b-config is posture-independent:Measured directly (fake ObjectQL,
OS_TENANCY_POSTURE=single,OS_PLATFORM_OWNER_EMAILunset, one org-lessadmin_full_accessgrant forusr_first) — posture resolvesPLATFORM_ADMINand one warn line is emitted:Why that is wrong for this rig
Two claims in that line are false on a
singleposture as currently ruled:singlere-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor thesingleposture — first-user promotion becomes development-only fallback #11979. Under the ruled 4A the row is that rig's permanent anchor. platform-admin re-anchor (L5 removal half): delete the legacy grant-row read — one minor after L4's landing #13515 states it directly: "if 4B has not landed, thesingleposture's row-derived standing must be carved out explicitly, not deleted with the window."singlerig that follows this advice gets nothing, because the same test file pins that thesinglepromotion never consults the owner-email variable.The boot-side detector already gets this right and is posture-gated:
bootstrap-platform-admin.tsearly-returnsalready_have_adminfor!walled, and its own comment says so — "Under walled postures that same row is the LEGACY anchor and gets the deprecation pointer below instead of a silent early exit." The request-side call site simply does not carry the same gate.Impact
Every default-posture deployment with a first-user-promoted admin emits, once per process, a deprecation notice instructing the operator to migrate off an anchor that is not scheduled to go away, toward a variable their posture ignores. It is a wrong-advice / false-alarm class, not an access-control defect: standing itself is correct in every arm.
Shape of a fix (not prescribed — needs the #11979 fork settled first)
Gate the request-side pointer on a walled posture, matching the boot-side detector, so the migration window's loudness is scoped to the rigs actually in the window.⚠️ Whether that is the right answer depends on #11979 / Choice 4B: if
singledoes re-anchor, the line becomes true for those rigs and the correct fix is instead to make thesinglepromotion honour the config. Both readings are live, which is why this is filed rather than patched.⛔ Not addressed in #13666. #13515 remains open and is unaffected except that its
singlecarve-out clause is the natural place to re-read this.