Repository navigation
Commit 5e772c7
docs(qa): re-author access-security.platform-owner-email-anchor for the Default Organization grant (#25323)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DBZkWHiqgPrYfLLav4s1vTL)_
Fixes #24465
Clause-②: no
Metadata-protocol: none
## What changed
One file, one item: `access-security.platform-owner-email-anchor` in
`docs/qa/platform-checklist/areas/access-security.json`, revision 7 → 8,
with one `history` entry naming this card and PR #24463.
Clause 6 named its own re-author trigger: "The single half's own fate is
#11979's (Choice 4B): if that lands, this clause is re-authored, not
read as a regression". It has landed, in two steps:
- PR #24373 (`b2e78701f7`) landed #11979. The `single` first-user
promotion writes its `admin_full_access` grant with `organization_id`
set to the Default Organization (`bootstrap-platform-admin.ts`, ADR-0131
D5).
- PR #24872 (`94842bad2a`, 2026-10-20, after this card was filed)
removed the organization-less arm from `grantAnchorsPlatformStanding`.
Under `single`, only the Default Organization's grant anchors standing
now. An organization-less row anchors nothing on any posture, and it no
longer applies in any resolution.
So the live door the seeded admin's 200 goes through is the Default
Organization's grant. Six texts still named the organization-less row as
that door. Each one is re-described below. The four the card names are
first.
| field | before | after |
|---|---|---|
| `personas[0]` | "grant-anchored via the unscoped admin_full_access row
that first-registrant promotion writes, the ADR-0068 D2 contrast; under
a walled posture no such row is written" | "grant-anchored via the
admin_full_access grant that first-registrant promotion writes, owned by
the Default Organization (ADR-0131 D5), the ADR-0068 D2 contrast; an
organization-less admin_full_access row anchors nothing on any posture;
under a walled posture no such grant is written" |
| `fixtures.knownGaps[0]` | "also holds the unscoped admin_full_access
grant under single (the posture this item boots)" | "also holds the
Default Organization's admin_full_access grant under single (the posture
this item boots; ADR-0131 D5)" |
| `acceptance[0].clause` | "under single the ADR-0068 D2 unscoped-grant
anchor stays the only door" | "under single the ADR-0068 D2 stored-grant
anchor — the Default Organization's admin_full_access grant (ADR-0131
D5) — stays the only door" |
| `acceptance[5].clause` | "standing resting on the unscoped
admin_full_access grant alone still resolves PLATFORM_ADMIN (clauses 1
and 3 observe it live); under a walled posture … the same row confers no
PLATFORM_ADMIN standing (the held set still grants its own capabilities;
…" | "standing resting on the admin_full_access grant first-registrant
promotion writes — owned by the Default Organization (ADR-0131 D5) —
alone still resolves PLATFORM_ADMIN (clauses 1 and 3 observe it live as
the seeded admin's 200); an organization-less admin_full_access row
anchors nothing on any posture; under a walled posture … the same grant
confers no PLATFORM_ADMIN standing (the held set still grants its own
capabilities in its own organization; …" |
| `variants[6]` | "walled posture — the unscoped admin_full_access grant
alone confers no PLATFORM_ADMIN standing (unit pin, clause 6)" | "walled
posture — the Default Organization's admin_full_access grant alone
confers no PLATFORM_ADMIN standing, and an organization-less row anchors
nothing on any posture (unit pins, clause 6)" |
| `source[2]` parenthetical | "(#11663 L5 — the unscoped
admin_full_access row derives PLATFORM_ADMIN only when the requested
posture enforces no wall)" | "(ADR-0131 D5 + #11663 L5 — the Default
Organization's admin_full_access grant derives PLATFORM_ADMIN only when
the requested posture enforces no wall; an organization-less row anchors
nothing)" |
Also changed:
- `acceptance[5].verify` and `automated.ref` now cite the describe ``
'[ADR-0131 D5] under `single` the Default Organization's
admin_full_access grant is the anchor' ``. It is measured in
`packages/core/src/security/resolve-authz-context.platform-admin-config.test.ts`
(at `9dc1f42d50`). Clause 6's trailing trigger sentence now records that
the trigger fired and that revision 8 re-authored the clause.
- `source` gains
`packages/plugins/plugin-security/src/bootstrap-platform-admin.ts#readPromotionGrantOwner`,
which reads the grant's owner. The gate resolves it as a declaration
(987/997 symbol anchors resolved at head, the 10 others on the named
residual).
## Verdicts
No clause verdict changes. M is refused at baseline, unverified and
non-match. The seeded admin answers 200. A verified match confers. A
malformed list fails closed. Under a wall the promoted grant confers no
standing, and the config anchor still confers. The pins clause 6 cites
still exist under the same names. Since PR #24872, the `[#11663 L5]`
describes use a fixture of the Default Organization's grant. The new
arm, "an organization-less row anchors nothing", is pinned by the last
case of the `[ADR-0131 D5]` describe.
## Gates
Head `8d7571de`: `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 13 commands. Each one ran with its
exit code captured before any pipe. All 13 exit 0:
`check-ci-filter-parity`, `check-closing-keyword-parity` (and its
`--self-test`), `check-comment-mask-corpus`,
`check:doc-formula-expressions` (lint, after `pnpm --filter
'@objectstack/lint...' build`), `check:cross-package-test-inputs`,
`check:doc-authoring`, `check:driver-memory-census`,
`check:gitlink-declared`, `check:nul-bytes`, `check:platform-checklist`,
`check:refd-timer-probe` and `check:watch-hint-literal`. The `--ran`
reconciliation reads: "13 derived famil(ies) accounted for — 13 run, 0
NOT-MEASURED (a DERIVED zero …)".
`pnpm check:platform-checklist` verdict: `OK — 16 areas, 329 items (324
active, 1 planned); … symbol anchors: 987/997 resolved … 18 file floors
held`.
No package is touched, so no build closure, package test or typecheck is
owed. CI families are read from this PR's check-runs. `docs/qa/**`
publishes nothing, so this PR carries `skip-changeset`. Nothing was
ablated: the diff changes QA-ledger data, not tested behaviour.
## Acceptance notes
- **Card target re-measured (PR #24872).** The card asked to keep the
organization-less row's "single only, nothing under a wall" assertion,
now pinned only by tests. That premise was falsified after filing. PR
#24872 retired the row's `single` anchor, and the `[ADR-0131 D5]`
describe pins "the organization-less row a pre-D5 promotion wrote
anchors NOTHING". Keeping the old assertion would claim a capability the
runtime no longer has. This PR states the current behaviour instead and
does not change the item's verdicts.
- **Revision.** The card said 3 → 4, but the item was already at
revision 7 (revisions 4 to 7 came from #24717, #24580, #24788 and
#25018). This PR bumps 7 → 8.
- **Scope.** The card named four phrases. The same stale description
also sat in `variants[6]` and `source[2]` of the same item, and both are
re-described here. The file surface is unchanged. After this PR,
`unscoped` appears 0 times in `access-security.json`.
- The attribution block's first line is an HTML comment, which the
session requires as the body's first line. That is a declared deviation
from `os-dev.md`'s no-HTML-comment rule (same shape as PR #25255).
- The work was done in a linked worktree (`../objectstack-issue-24465`)
on the branch the claim names, because the primary checkout's guards
block edits.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01JDXz1o5fLjTiZcUdKvNKJN)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 6bf0ff5 commit 5e772c7
1 file changed
Lines changed: 16 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2919 | 2919 | | |
2920 | 2920 | | |
2921 | 2921 | | |
2922 | | - | |
| 2922 | + | |
2923 | 2923 | | |
2924 | 2924 | | |
2925 | 2925 | | |
2926 | | - | |
| 2926 | + | |
2927 | 2927 | | |
2928 | 2928 | | |
2929 | 2929 | | |
| |||
2933 | 2933 | | |
2934 | 2934 | | |
2935 | 2935 | | |
2936 | | - | |
| 2936 | + | |
2937 | 2937 | | |
2938 | 2938 | | |
2939 | 2939 | | |
| |||
2946 | 2946 | | |
2947 | 2947 | | |
2948 | 2948 | | |
2949 | | - | |
| 2949 | + | |
2950 | 2950 | | |
2951 | 2951 | | |
2952 | 2952 | | |
| |||
2976 | 2976 | | |
2977 | 2977 | | |
2978 | 2978 | | |
2979 | | - | |
| 2979 | + | |
2980 | 2980 | | |
2981 | | - | |
| 2981 | + | |
2982 | 2982 | | |
2983 | 2983 | | |
2984 | 2984 | | |
| |||
2995 | 2995 | | |
2996 | 2996 | | |
2997 | 2997 | | |
2998 | | - | |
| 2998 | + | |
2999 | 2999 | | |
3000 | 3000 | | |
3001 | 3001 | | |
3002 | 3002 | | |
3003 | 3003 | | |
3004 | 3004 | | |
3005 | 3005 | | |
3006 | | - | |
| 3006 | + | |
3007 | 3007 | | |
3008 | 3008 | | |
3009 | 3009 | | |
3010 | 3010 | | |
3011 | | - | |
| 3011 | + | |
| 3012 | + | |
3012 | 3013 | | |
3013 | 3014 | | |
3014 | 3015 | | |
| |||
3058 | 3059 | | |
3059 | 3060 | | |
3060 | 3061 | | |
| 3062 | + | |
| 3063 | + | |
| 3064 | + | |
| 3065 | + | |
| 3066 | + | |
| 3067 | + | |
3061 | 3068 | | |
3062 | 3069 | | |
3063 | 3070 | | |
| |||
0 commit comments