Repository navigation
docs(qa): identity-auth — 23 ledger edits from the 18.2.0 release sweep - #26117
Merged
Merged
Conversation
…sweep accuracy edits Claude-Session: https://claude.ai/code/session_016gb7qhsFoBRVmSNDpHG9Nh Co-authored-by: Claude <noreply@anthropic.com>
…dits Claude-Session: https://claude.ai/code/session_016gb7qhsFoBRVmSNDpHG9Nh Co-authored-by: Claude <noreply@anthropic.com>
…thod matrix — 18.2.0 sweep accuracy edits Claude-Session: https://claude.ai/code/session_016gb7qhsFoBRVmSNDpHG9Nh Co-authored-by: Claude <noreply@anthropic.com>
…and workspace switch — 18.2.0 sweep accuracy edits Claude-Session: https://claude.ai/code/session_016gb7qhsFoBRVmSNDpHG9Nh Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · devx seat 2 · 2026-10-26T12:53ZSeat
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Fixes #25843
Clause-②: no
Metadata-protocol: none
Ledger edits to
docs/qa/platform-checklist/areas/identity-auth.jsononly: the 23 checklist-accuracy lines the 18.2.0 release sweep parked on card #25843 (wave anchor #25807). Every line is applied or answered below. Each touched item has its text revised, itsrevisionbumped and onehistoryrow appended that cites the QA run the line came from (ref#25843, the parking card, as the 18.0 sweep's rows cite theirs). 11 items, docs-only, nothing published.Premise checked against
origin/main: the file is unchanged since the card was filed (its last change predates 2026-10-24, shallow boundary deepened to read it), so every line was re-read against current code before it was edited.Per-line disposition (23)
default-organization-boot-invariant(3 facts)steps[2]filterssys_member?organization_id=DEFAULT_ORG_ID(the slug-default row's id; the column isorganization_id).fixtures.requiresboots with--log-level infoand a second entry names the--freshSQLite file (FRESH_HOME/data/objectstack.db, read while the server runs).acceptance[0].verifysays--maxWorkers=1, RUNNER.md's memory fact.admin-lifecycle-operationsa4acceptance[4].verify: the standing pin asserts the 403 + code only; the target's protected request is driven by hand.admin-lifecycle-operationsa0/n1acceptance[0].verifyandautomated.ref: the clause-0 case assertsbanned/ban_reasonand the unban, no sign-in by the banned user, so the enforcement half andnegative[1]are manual.admin-lifecycle-operationsref-parseautomated.refnames the remove-user atomicity unit test as a contrast without spelling its path, so a ref parser no longer counts it as a pin.api-key-expiry-lifecyclea2acceptance[0]names the pin layers;acceptance[2].verifydrives the key count live (the no-key half is pinned only over a fake objectql).api-key-expiry-lifecyclea3acceptance[3].verifydrives a revoked and an expired key live; the three 403 codes are pinned at unit layer only.auth-gate-held-session-raw-host-familiesa2acceptance[2].verifydrives the forced-reset door,POST /api/v1/auth/admin/set-user-password, and notes it revokes the member's sessions and keys by default (runAdminSetUserPassword).auth-gate-held-session-raw-host-familiesa3acceptance[3].verify: the two posture pins driveRestServer.enforceAuth/HttpDispatcherwith fakes, so the x-api-key calls are made over HTTP.auth-gate-held-session-raw-host-familiesa1acceptance[0]names the mixed layers (storage, settings, share-link, cloud-connection pins use fake request/response);acceptance[1].verifyscores every family from a real request.auth-method-matrixa3automated.ref;acceptance[3].verifysays it drives AuthManager, not the production boot's send-otp door, so it scores partial.auth-method-matrixa6two-factor-lockout.dogfood.test.tsjoinsautomated.ref.auth-method-matrixa9change-email-delete-user-wiring.test.tsjoinsautomated.ref;acceptance[9].verifynames its unit layer.auth-method-matrixrefautomated.reflists the four pins with the clause and layer each scores (4 of 10 clauses);kindreadsdogfoodinstead ofe2e.cookie-session-renewal-in-processa1acceptance[0]names the runtime pin's three doors;acceptance[1].verifyscores the meta read on its own.implicit-account-linking-ownershipa0–a3automated.refandsteps[7]: the "end to end" cases run over a hand-rolled in-memory engine, soacceptance[0]–[3]are scored live and the pin scoresacceptance[4].import-invitation-and-sso-domain-answersa1admin-import-users-account-invitation.test.ts(cases ① and ②) joinsautomated.ref;acceptance[0]names both halves.import-invitation-and-sso-domain-answersa3acceptance[0]: the SSO pin runs overcreateMemoryEngine, unit layer only;acceptance[3].verifydrives the doors live.invitation-scope-gatesa0automated.refalready says the pending half is scored live. Recorded in the item's rev 6 history row.invitation-scope-gatesn1negative[1]says the forged-request half is pinned and the affordance-hidden half isacceptance[4]'s browser work.two-factor-backup-codesA4fixtures.requires[2],steps[7],acceptance[4].verify: the at-rest read is out of band, from the DB file, becausebackup_codesisinternal: trueand REST never returns it. The same three places quoted the column's old "JSON-serialized" description; they now quote the current one (encrypted at rest, one opaque ciphertext).admin-lifecycle-operationscoverage gapacceptance[10]–[12]for the walled Create User join: joins the caller's active organization asmemberand a bodyorganizationIdchooses nothing;400 NO_ACTIVE_ORGANIZATIONwith no row;invite-onlystill joins. Plusfixtures.requires[2](a walled boot declaringOS_AUTH_MEMBERSHIP_POLICY=invite-only), two steps, andautomated.refentries forcreate-user-organization-join.dogfood.test.ts(J1, J2, HTTP) and theadmin-user-endpoints.test.tsinvite-only case (plugin unit, so partial). Appended after clause 9, so no existing clause index moved.workspace-org-switchpersonas[2]400 NO_ACTIVE_ORGANIZATION.admin-lifecycle-operationsref overclaimsautomated.ref's STILL MANUAL list now names clause 0's sign-ins, clause 4's live-session half, clause 6's stop half and clause 9's state read-back beyond create-user and set-user-password.Acceptance notes
--maxWorkers=2correction is applied to five items, not one. The card cites it ondefault-organization-boot-invariantonly; the same sentence sat in four other items this PR revises for their own lines (api-key-expiry-lifecycle,auth-gate-held-session-raw-host-families,cookie-session-renewal-in-process,import-invitation-and-sso-domain-answers). Each history row says so.implicit-account-linking-ownershipsteps[7]gains--maxWorkers=1the same way. Zero--maxWorkers=2remain in the file.objectui:build/objectui:refresh) — AGENTS.md and 3 skills among them #26035, current form per docs: build the Console with pnpm console:build, not the retired objectui pin scripts #26052): zero live hits in this file.git grep -nE "objectui:(build|refresh|bump|clean)|\.objectui-sha|build-console"over the file finds onlyhistoryrows ofself-signup-gateandemail-verification-loop, which record what a past revision read at a past pin. Those are records and are left as written, as docs(devx): 32 files still prescribe the retired objectui pin scripts (objectui:build/objectui:refresh) — AGENTS.md and 3 skills among them #26035 asks for records. Thestale-console-bundletrap name is unchanged (RUNNER.md keeps it).out_of_scope_findings.admin-lifecycle-operationsand every other item's clause assertions are unchanged; edits re-point verify text, refs and fixtures to what the pins actually reach (RUNNER.md rule 6, "a pin scores only the layer it drives").Gates
All at head
95f651ad(branch merged withorigin/mainf6c61932first; that range touches nothing underdocs/qa/).pnpm check:platform-checklist: exit 0,check-platform-checklist: OK — 16 areas, 329 items (324 active, 1 planned), line citations 0 surviving.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 13 derived families, each run locally, all exit 0:check-ci-filter-parity,check-closing-keyword-parity(+--self-test),check-comment-mask-corpus,@objectstack/lint check:doc-formula-expressions(first run exit 3, prerequisite not met; re-run afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lint, exit 0),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,check:watch-hint-literal.--ranreconciliation with exit codes recorded: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN.skip-changeset: the diff is one file underdocs/qa/, which no package'sfiles[]ships.Generated by Claude Code