Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); [finding] The #11663 P5 legacy-grant deprecation pointer fires on `single`-posture rigs, where ruled Choice 4A says the row is NOT going away · Issue #13667 · objectstack-ai/objectstack · GitHub
Skip to content

[finding] The #11663 P5 legacy-grant deprecation pointer fires on single-posture rigs, where ruled Choice 4A says the row is NOT going away #13667

Description

@os-steve

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:

}elseif(hasPlatformAdminGrant){reportLegacyPlatformAdminGrant({ userId,email: userRow?.email});}

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:

  1. "it is removed in a later release" — Choice 4B (does single re-anchor too?) is unruled and tracked at platform-admin re-anchor follow-up (Choice 4B): config-anchor the single posture — 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, the single posture's row-derived standing must be carved out explicitly, not deleted with the window."
  2. "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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions