Skip to content

docs(qa): identity-auth — 23 ledger edits from the 18.2.0 release sweep - #26117

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/project-thread-pomla3
Oct 26, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/project-thread-pomla3

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steve · project thread
Fixes #25843

Clause-②: no
Metadata-protocol: none

Ledger edits to docs/qa/platform-checklist/areas/identity-auth.json only: 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, its revision bumped and one history row 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)

Run Item · line Disposition
#25812 default-organization-boot-invariant (3 facts) Applied, rev 3. steps[2] filters sys_member?organization_id=DEFAULT_ORG_ID (the slug-default row's id; the column is organization_id). fixtures.requires boots with --log-level info and a second entry names the --fresh SQLite file (FRESH_HOME/data/objectstack.db, read while the server runs). acceptance[0].verify says --maxWorkers=1, RUNNER.md's memory fact.
#25815 admin-lifecycle-operations a4 Applied, rev 10. acceptance[4].verify: the standing pin asserts the 403 + code only; the target's protected request is driven by hand.
#25815 admin-lifecycle-operations a0/n1 Applied. acceptance[0].verify and automated.ref: the clause-0 case asserts banned/ban_reason and the unban, no sign-in by the banned user, so the enforcement half and negative[1] are manual.
#25815 admin-lifecycle-operations ref-parse Applied. automated.ref names the remove-user atomicity unit test as a contrast without spelling its path, so a ref parser no longer counts it as a pin.
#25815 api-key-expiry-lifecycle a2 Applied, rev 2. acceptance[0] names the pin layers; acceptance[2].verify drives the key count live (the no-key half is pinned only over a fake objectql).
#25815 api-key-expiry-lifecycle a3 Applied. acceptance[3].verify drives a revoked and an expired key live; the three 403 codes are pinned at unit layer only.
#25815 auth-gate-held-session-raw-host-families a2 Applied, rev 3. acceptance[2].verify drives 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).
#25815 auth-gate-held-session-raw-host-families a3 Applied. acceptance[3].verify: the two posture pins drive RestServer.enforceAuth / HttpDispatcher with fakes, so the x-api-key calls are made over HTTP.
#25815 auth-gate-held-session-raw-host-families a1 Applied. acceptance[0] names the mixed layers (storage, settings, share-link, cloud-connection pins use fake request/response); acceptance[1].verify scores every family from a real request.
#25815 auth-method-matrix a3 Applied, rev 9. The pin joins automated.ref; acceptance[3].verify says it drives AuthManager, not the production boot's send-otp door, so it scores partial.
#25815 auth-method-matrix a6 Applied. two-factor-lockout.dogfood.test.ts joins automated.ref.
#25815 auth-method-matrix a9 Applied. change-email-delete-user-wiring.test.ts joins automated.ref; acceptance[9].verify names its unit layer.
#25815 auth-method-matrix ref Applied. automated.ref lists the four pins with the clause and layer each scores (4 of 10 clauses); kind reads dogfood instead of e2e.
#25815 cookie-session-renewal-in-process a1 Applied, rev 2. acceptance[0] names the runtime pin's three doors; acceptance[1].verify scores the meta read on its own.
#25815 implicit-account-linking-ownership a0–a3 Applied, rev 4. automated.ref and steps[7]: the "end to end" cases run over a hand-rolled in-memory engine, so acceptance[0]–[3] are scored live and the pin scores acceptance[4].
#25815 import-invitation-and-sso-domain-answers a1 Applied, rev 2. admin-import-users-account-invitation.test.ts (cases ① and ②) joins automated.ref; acceptance[0] names both halves.
#25815 import-invitation-and-sso-domain-answers a3 Applied. acceptance[0]: the SSO pin runs over createMemoryEngine, unit layer only; acceptance[3].verify drives the doors live.
#25815 invitation-scope-gates a0 Answered, no edit: automated.ref already says the pending half is scored live. Recorded in the item's rev 6 history row.
#25815 invitation-scope-gates n1 Applied, rev 6. negative[1] says the forged-request half is pinned and the affordance-hidden half is acceptance[4]'s browser work.
#25817 two-factor-backup-codes A4 Applied, rev 5. fixtures.requires[2], steps[7], acceptance[4].verify: the at-rest read is out of band, from the DB file, because backup_codes is internal: true and 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).
#25823 admin-lifecycle-operations coverage gap Applied. New acceptance[10]–[12] for the walled Create User join: joins the caller's active organization as member and a body organizationId chooses nothing; 400 NO_ACTIVE_ORGANIZATION with no row; invite-only still joins. Plus fixtures.requires[2] (a walled boot declaring OS_AUTH_MEMBERSHIP_POLICY=invite-only), two steps, and automated.ref entries for create-user-organization-join.dogfood.test.ts (J1, J2, HTTP) and the admin-user-endpoints.test.ts invite-only case (plugin unit, so partial). Appended after clause 9, so no existing clause index moved.
#25823 workspace-org-switch personas[2] Applied, rev 6. The operator creates and set-actives an organization before Create User, else 400 NO_ACTIVE_ORGANIZATION.
#25823 admin-lifecycle-operations ref overclaims Applied. automated.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

Gates

All at head 95f651ad (branch merged with origin/main f6c61932 first; that range touches nothing under docs/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 after turbo 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.
  • --ran reconciliation with exit codes recorded: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN.
  • Families CI owns (the required contexts, the artifact rosters, the wide-population families) are left to this PR's check-runs.

skip-changeset: the diff is one file under docs/qa/, which no package's files[] ships.


Generated by Claude Code

…sweep accuracy edits

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>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 26, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · devx seat 2 · 2026-10-26T12:53Z

Seat domain:devx#2 (#20163) · session_01Q4MDXRbEJCNdPAP4SiXwp9 · reviewed head 95f651adf3 · card #25843, claim 6415890956.

  • Shape: draft → main, Fixes #25843, Clause-②: no, Metadata-protocol: none at line start. Four card commits plus one merge of origin/main (no conflict), which the derived gates asked for.
  • Premise measured: no commit on docs/qa/platform-checklist/areas/identity-auth.json on origin/main since filing.
  • Scope: files endpoint and three-dot diff against a fresh origin/main both show one file (+130/−47), which parses at the head. No .changeset, no governed path, no contract face ⇒ skip-changeset right, no second-agent review owed.
  • Spot readings on origin/main: plugin-auth/src/admin-user-endpoints.ts refuses a multi-org create with no active organization as 400 NO_ACTIVE_ORGANIZATION before any write, as acceptance[11] says. packages/qa/dogfood/test/create-user-organization-join.dogfood.test.ts exists (acceptance[10]'s pin), and admin-user-endpoints.test.ts:1454 is the "under invite-only: still joined" case that acceptance[12] scores as unit-layer partial. OS_AUTH_MEMBERSHIP_POLICY is the env key in organizations/src/membership-policy-gate.ts:89. The new clauses append after clause 9, so no existing index moves. No retired pin wording (.objectui-sha, objectui:build, "objectui checkout") survives outside history rows.
  • Gates: dev-local check:platform-checklist exit 0 and 13/13 derived families exit 0, 0 NOT-MEASURED (report 6416397134). CI on this head was running at review; ready waits for every check green or skipped.
  • Accepted deviations: the maxWorkers 2→1 correction was also applied to four sibling items of the same file (same stale fact, same file, mechanical). History rows cite the card, following the qa(checklist): park the blocked partial-coverage gaps of the 17.7 pre-release runs (#21720, #21721, #21782, #21784) — each gets a fixture recipe, a pin, a re-pointed clause or a recorded knownGap #22017 precedent.
  • Out of scope: none.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 26, 2026 13:06
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 2445f2a Oct 26, 2026
52 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-pomla3 branch October 26, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

qa(checklist): identity-auth — 23 ledger edits from the 18.2.0 release sweep (#25807)

2 participants