Skip to content

Commit 9c79640

Browse files
docs(qa): access-security ledger edits from the 18.2.0 sweep (#25835) (#26101)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DFYiPmjmUVVNwXn3h6CGthD)_ Fixes #25835 Wave anchor: #25807 (18.2.0 release test sweep). Docs only: one file, `docs/qa/platform-checklist/areas/access-security.json`. ## What changed All 65 lines of the card were re-read against `main` at `b4199c96` before editing (the records measured `6679644a`, pin `b41ed7f68956`; the pin is retired, #25745). 62 lines are applied, 3 are answered on the card instead (below). 24 items are revised, plus one more for the retired-pin text, 25 in all. Each revised item has its `revision` bumped once and one new `history` entry that cites the record(s) its lines came from (#25812, #25815, #25817, #25823) and says which lines did not hold. ⛔ No item status changed and no clause's assertion changed: almost every line was the ledger overclaiming what a pin asserts, or not naming the layer a pin reaches (RUNNER rule 6). So most edits are to `automated.ref`, which now says per clause what each pin asserts, at which layer, and which legs stay hand-driven. | item | lines | rev | the edit | |:--|:-:|:-:|:--| | crud-permission-matrix | 6 | 7→8 | knownGaps[1] and the ref: a plain member reads the org's whole `sys_user` directory (`sys_user_org_members`), not a self-scoped row. The ref no longer reads `objectstack verify --rls` as a pin. It no longer claims clauses 3 and 6 whole, and it says the zoo's out-of-subtree case asserts only a non-2xx. acceptance[6].verify says which 164 cells the pin judges. | | walled-environment-metadata-operator-only | 2 | 5→6 | knownGaps[0]: the wall-* pins boot the CRM example, not the showcase, and their single leg is a `manage_metadata` holder, not the seeded admin. | | activation-write-operator-gate | 4 | 9→10 | The ref no longer claims the full matrix. It names `automation-toggle-deny-message.test.ts`, `automation-write-capability-gate.test.ts` and `packaged-activation-ledger-reach.dogfood.test.ts` with their layers and personas, and names the unpinned re-hydration leg. | | anonymous-deny-surfaces | 3 | 3→4 | The ref names three hand-driven legs: the /meta contrast is `.not.toBe(401)`, there is no forms contrast, and there is no post-DELETE read-back. | | anonymous-floor-v18-doors | 4 | 3→4 | The ref says per clause what the pins assert. `EVERYTHING_ELSE` never reads `error.code`, the share-link class accepts 401, the docs pin does not compare against the control path, and the 201 is pinned only over a protocol double. | | deployment-tables-platform-only | 2 | 2→3 | `authz-identity-objects-boot-refusal.test.ts` left the ref (it pins something else). acceptance[1] and acceptance[2] are named live-run. | | fls-mask-and-strip | 2 | 5→6 | STILL MANUAL now names the admin budget write and the name re-read. | | grant-table-write-contract | 2 | 6→7 | The ref names the engine layer of the plugin-security pins, and the legs the HTTP window case does not assert. | | me-permissions-aggregation-parity | 3 | 3→4 | `current-user-endpoints-localization.test.ts` joins the ref. STILL MANUAL names the admin half of /me/apps and the anonymous trio on a real stack. | | meta-authoring-trail-and-audience-gates | 2 | 2→3 | The ref names the unit layer of the audience-gate pin, the doors it lacks, and the unit-only 304. | | no-active-org-session-semantics | 6 | 8→9 | The ref quotes the group case as it reads now (refusal, #24784 / PR #24819). It no longer claims every clause, and it names three existing pins with their layers. After #25626, personas, fixtures.requires[1] and knownGaps[0] mint producer (2)'s member through create-user, and record producer (1) blocked(fixture). | | org-admin-assignment-boundary | 1 | 1→2 | The ref says that per posture only `admin_full_access` is exercised. | | owd-sharing-matrix | 3 | 4→5 | The ref names each unpinned model and leg, the cbp fallback set, and the synthetic fixture. | | parent-and-organization-write-guards | 1 | 5→6 | The ref names the in-process layer, and says the #24840 PASS predates the layer rule. | | platform-owner-email-anchor | 2 | 8→9 | The ref says `ADMIN_STANDING_NON_TABLE_INPUTS` is asserted by no test. The a0–a3 line confirmed the ledger. | | public-form-withdrawal-layers | 2 | 3→4 | The ref says acceptance[0] does not score from pins alone, and names the layers of the a2–a5 pins. | | record-access-explain | 2 | 3→4 | The ref says the zoo case calls `explain()` in-process under `isSystem`, and that no deny-side explain is pinned. | | record-view-read-audit | 2 | 3→4 | negative[0] now says once per CAUSE (#18247). The ref says the exclusion pin probes other names and that no pin reads the install line. | | rls-both-sides | 2 | 7→8 | The ref names the command, not a source file, as the proof, and says where the row-unchanged re-read is pinned. | | security-catalog-activation-and-clone-doors | 2 | 1→2 | The ref says which refusal arms are HTTP-pinned and which are unit-only. | | security-catalog-one-holder-and-boot-report | 4 | 2→3 | `marketplace-install-local-catalog-name-collision.test.ts` joins the ref. The ref names the registerApp layer, the in-process CLI, and the unasserted 50-name cap. | | share-link-combined-gates | 2 | 3→4 | `share-links-refusal-order.test.ts` joins the ref. Both runtime pins are named in-process, so they score acceptance[0] only. | | write-path-guards | 4 | 6→7 | The ref names what the bulk, readonlyWhen and static-readonly pins do not assert, and the fake-driver objectql pins. | | capability-declaration-lifecycle | 2 | 6→7 | steps[7]: the located path is `capabilities.N.scope` (`.2` when appended). The `mixed` line was answered, not applied. | | share-link-landing-page | retired pin | 4→5 | knownGaps[2] no longer prescribes `.objectui-sha`. It names `pnpm console:build` into `packages/console/dist` (which `pnpm build` does not refresh) and `ui/apps/console/src/pages/SharedRecordPage.tsx`. History line cites #26035. | Answered on the card, not edited (with reasons in the card report): - crud-permission-matrix, the pin header's "6 delegate × sys_* rows". The stale number is a comment in the test file, outside this card's one-file surface. The ledger already says 4. - platform-owner-email-anchor a0–a3. The record confirms the ledger already records these as STILL MANUAL. - capability-declaration-lifecycle `mixed` without a browser oracle. In this ledger `mixed` means more than one execution surface: 31 other active `mixed` items have no screenshot or dom oracle, and this item is driven over the API and the build / CLI. Two lines held only in part on this tree, and the history says so. activation a0/n2: `FLOW_ENABLEMENT_DENY_MESSAGE`'s sentence is asserted, by value, in `automation-toggle-deny-message.test.ts`. anonymous-floor a1: `UNAUTHENTICATED` is asserted on other faces of /notifications, /keys and /share-links, but not on the three GET faces the step lists. No line described a product defect, so nothing was filed. ## Verified - Gate families derived by `node scripts/pm/dispatch-gates.mjs --commands` on head `9738ffad` (one path vs merge base `b4199c968`): - `node scripts/check-ci-filter-parity.mjs` — exit 0 - `node scripts/check-closing-keyword-parity.mjs` — exit 0 - `node scripts/check-closing-keyword-parity.mjs --self-test` — exit 0 - `node scripts/check-comment-mask-corpus.mjs` — exit 0 - `pnpm --filter @objectstack/lint run check:doc-formula-expressions` — exit 0 - `pnpm check:cross-package-test-inputs` — exit 0 - `pnpm check:doc-authoring` — exit 0 - `pnpm check:driver-memory-census` — exit 0 - `pnpm check:gitlink-declared` — exit 0 - `pnpm check:nul-bytes` — exit 0 - `pnpm check:platform-checklist` — exit 0 - `pnpm check:refd-timer-probe` — exit 0 - `pnpm check:watch-hint-literal` — exit 0 - `check:doc-formula-expressions` first exited 3 (PREREQUISITE NOT MET) in the fresh worktree; after `pnpm --filter '@objectstack/lint...' build` (lock VERDICT command-exit 0) it exits 0. - `node scripts/pm/dispatch-gates.mjs --ran`: 13 derived, 13 run, 0 NOT-MEASURED. - `node scripts/pm/check-governed-merges.mjs --test docs/qa/platform-checklist/areas/access-security.json`: "NOT governed — ordinary queue landing applies". No contract review is triggered, and this is not Tier H. - Diff: 1 file, 207 insertions and 57 deletions, so no split is needed. Edits were made as text replacements inside each item, so the file's own formatting is kept (a JSON re-serialise would have rewritten 22 one-line history rows). ## Acceptance notes (found beside the lines, outside this card's surface) - `packages/qa/dogfood/test/showcase-crud-persona-matrix.dogfood.test.ts`: the header comment still says "6 `showcase_field_ops_delegate` × `sys_*` rows", while its own assertion says 4. This is test-file text and needs no card. Carrier: none. - no-active-org-session-semantics knownGaps[4] and [5] still read #24784 as open, but it closed 2026-10-20 (PR #24819). Their own text asks for a live walled `group` re-run before the line drops, so they are left for that run. - After #25626, `identity-auth.workspace-org-switch` personas[2] and RUNNER.md's "Walled personas come from the admin door" `membershipCreated: false` sentence are stale too (#25823). They belong to the identity-auth card and the RUNNER card (#25850). - RUNNER.md's standing fact still calls `automated.ref` paths under objectui "objectui-repo-only", while `ui/` is now in this repo. share-link-landing-page knownGaps[0] and its ref stay in step with RUNNER until #25850 changes it. `skip-changeset`: docs only, nothing published. --- _Generated by [Claude Code](https://claude.ai/code/session_01GgKuGD9Ats95jBbJRZrf4a)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 04148ac commit 9c79640

1 file changed

Lines changed: 207 additions & 57 deletions

File tree

0 commit comments

Comments
 (0)