Skip to content

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

Closed

Description

@objectstack-fleet

Filing gate: maintainer-directed task. Filed by the 18.2.0 release-assessment thread · session_01G3h9iZTpL8aCiXbfsp8H5u. ⛔ Not a claim, ⛔ not dispatched.

Maintainer's words (project thread, 2026-10-25, verbatim): 22:54Z 「约 300 条清单准确性问题:是不是应该开卡?」, then 22:55Z 「写issue,不派发」.

Parent: wave anchor #25807 (18.2.0 release test sweep). RUNNER's extraction obligation parks checklist-accuracy findings on the anchor; the maintainer asked for them as issues, so the wave's findings are split into one card per ledger file and the anchor links each card. This is not a release blocker, so it carries no target:v18.

Reader who acts: the lane owning docs/qa/platform-checklist/** (domain:devx). Dedupe (open and closed): no card holds these lines; the 18.0 precedent closed its accuracy rows on its anchor #24579.

Wanted

For each line below, edit docs/qa/platform-checklist/areas/identity-auth.json: revise the item's text, bump its revision, and append a history entry citing the run record the line comes from. Keep pnpm check:platform-checklist green. A line that turns out to describe a product defect rather than stale text gets its own card instead of a ledger edit.

Findings (23)

From #25812 — priority:P0, 23 items, at 6679644a, pin b41ed7f68956

  • identity-auth.default-organization-boot-invariant: step 3 filters organization = default, the column is organization_id and takes the org id; fixtures.requires says --fresh but c1 needs --log-level info and a readable file DB; acc[0] prescribes --maxWorkers=2 against RUNNER's memory fact.

From #25815 — release-18.2.0-tier1, 156 items, at 6679644a, pin b41ed7f68956 (clause labels: aK = acceptance[K], nK = negative[K])

  • identity-auth.admin-lifecycle-operations a4: verify says the 'target's next PROTECTED request still 2xx' is pinned by admin-platform-admin-standing.dogfood.test.ts; that file asserts the 403 + code only, no protected request as the target
  • identity-auth.admin-lifecycle-operations a0/n1: C0 case asserts sys_user.banned/ban_reason and unban; no sign-in by the banned user is attempted, so the enforcement half is unpinned
  • identity-auth.admin-lifecycle-operations ref-parse: packages/plugins/plugin-auth/src/remove-user-atomicity.test.ts is named in the ref only as a contrast ('deliberately does NOT copy'), not as a pin; the parent's pins list includes it — it scores no clause
  • identity-auth.api-key-expiry-lifecycle a2: the dogfood case asserts 400 API_KEY_EXPIRY_TOO_LONG but not that the key count is unchanged; 'nothing is stored' is asserted only in packages/runtime/src/api-key-lifecycle.pin.test.ts over a fake objectql
  • identity-auth.api-key-expiry-lifecycle a3: the three 403 codes are pinned only at unit layer (rest-api-key-lifecycle.pin.test.ts over HTTP_STUB + fake ql; runtime dispatcher over a fake kernel); the dogfood file drives no revoked or expired key
  • identity-auth.auth-gate-held-session-raw-host-families a2: held-session-vendor-admin-doors arms PASSWORD_RESET_REQUIRED by a system write of must_change_password + auth.noteMustChangePasswordIssued() (simulating the forced-reset route), not by driving the admin's forced-reset door
  • identity-auth.auth-gate-held-session-raw-host-families a3: rest-api-key-account-posture.pin drives RestServer.enforceAuth with a hand-built req/res and a fake auth; http-dispatcher.api-key-account-posture drives HttpDispatcher with fakes — neither answers an HTTP x-api-key call
  • identity-auth.auth-gate-held-session-raw-host-families a1: 'raw-host families' are proven at mixed layers: storage, settings, share-link and cloud-connection pins call registered handlers with fake IHttpRequest/IHttpResponse
  • identity-auth.auth-method-matrix a3: verify names packages/plugins/plugin-auth/src/phone-otp-no-sms-service-refusal.test.ts as the pin — it exists but is not in automated.ref, and it drives AuthManager (unit), not the NODE_ENV=production boot's send-otp door.
  • identity-auth.auth-method-matrix a6: verify names packages/qa/dogfood/test/two-factor-lockout.dogfood.test.ts as the end-to-end pin for the 2FA gate — exists, not in automated.ref.
  • identity-auth.auth-method-matrix a9: verify names packages/plugins/plugin-auth/src/change-email-delete-user-wiring.test.ts ('auth-method-matrix: change-email and delete-user are booked as mounted in auth-route-ledger.ts but plugin-auth never configures better-auth's user.changeEmail / user.deleteUser — no switch to enable them #7735 — POST /delete-user stays unwired') — exists, not in automated.ref; AuthManager unit layer.
  • identity-auth.auth-method-matrix ref: a single OIDC pin (a7) for a 10-clause, 5-negative mixed item; kind 'e2e' over-implies coverage.
  • identity-auth.cookie-session-renewal-in-process a1: the runtime pin's DOORS are GET /data/:object, /auth/me/permissions and /i18n/locales — the clause's 'meta reads' leg has no door in it
  • identity-auth.implicit-account-linking-ownership a0-a3: the ref's 'end to end' cases drive the real better-auth handler (AuthManager.handleRequest) but over a hand-rolled in-memory data engine and with sys_account read off that fake, not an admin read through a booted server — they assert each clause's facts at the unit layer only
  • identity-auth.import-invitation-and-sso-domain-answers a1: the ref's admin-import-users-invite-link.test.ts asserts the auth.account_invitation template id on the import but never the 'self-requested reset still uses password_reset' half; packages/plugins/plugin-auth/src/admin-import-users-account-invitation.test.ts (cases ① and ②) asserts both and is not in the ref
  • identity-auth.import-invitation-and-sso-domain-answers a3: sso-domain-verification-unknown-provider.pin.test.ts mounts the real AuthPlugin on Hono but over createMemoryEngine (a hand-rolled engine fake), so it scores the doors at unit layer only
  • identity-auth.invitation-scope-gates a0: ref states its pending half is scored live — consistent
  • identity-auth.invitation-scope-gates n1: server-side denial of the forged request is pinned; the UI-hidden half is a5/a4 browser work

From #25817 — release-18.2.0-manual-set, 29 items, at 6679644a, pin b41ed7f68956

  • identity-auth.two-factor-backup-codes: A4's at-rest check needs an out-of-band DB read, because REST never returns the column. The item should say so.

From #25823 — addendum, identity-auth.admin-lifecycle-operations at 17f8217b, after #25626

Acceptance

  • Every line above is either applied (item revised, revision bumped, history cites the record) or answered on this card with the reason it was not.
  • pnpm check:platform-checklist is green.
  • The PR links this card and [sweep] v18.2.0 release test sweep #25807.

Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-26T12:22Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_016gb7qhsFoBRVmSNDpHG9Nh
    Account: os-steve
    Branch: claude/project-thread-pomla3 (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-25843
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: docs/qa/platform-checklist/areas/identity-auth.json only (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds (action surface git log origin/main on the file since filing: no commit; the dev re-reads each line against main first)
    Serial constraints cleared: own ledger file only; seat 1 holds #25835 / #25836 on other files; #26035 left the retired objectui pin wording in these files to these cards; no other Claim: names this file


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 25843,
    "status": "done",
    "branch": "claude/project-thread-pomla3",
    "pr": "#26117",
    "session": "session_016gb7qhsFoBRVmSNDpHG9Nh",
    "premise_still_valid": true,
    "summary": "All 23 lines disposed in docs/qa/platform-checklist/areas/identity-auth.json: 22 applied, 1 answered with no edit (invitation-scope-gates a0, already consistent). 11 items revised, each with revision bumped and one history row citing its QA run (#25812, #25815, #25817 or addendum #25823; ref #25843). admin-lifecycle-operations gains acceptance[10]-[12] for the #25626 walled Create User join, appended after clause 9 so no index moved. Retired objectui pin wording: 0 live hits in this file; 6 mentions sit in history rows of self-signup-gate and email-verification-loop and are left as records.",
    "tests": "docs-only ledger; no package touched, so no build closure (①) and no package tests (②) are owed.",
    "gates": "head 95f651a (merged origin/main f6c6193, no docs/qa change in range). pnpm check:platform-checklist exit 0 (OK, 16 areas, 329 items). dispatch-gates --commands: 13 derived, all run, all exit 0; @objectstack/lint check:doc-formula-expressions exit 3 (prerequisite: formula/lint dist missing) then exit 0 after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint (os-verify-lock VERDICT command-exit 0). --ran with exit codes: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN. CI families: PR #26117 check-runs in_progress at report time.",
    "line_budget": "1 file, +130 / -47 (177 changed lines) vs merge base 9753d16; under the 3000 human-merge threshold.",
    "files_changed": [
    "docs/qa/platform-checklist/areas/identity-auth.json"
    ],
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "deviations": [
    "--maxWorkers=2 corrected to 1 in 4 items beyond the one the card cites (api-key-expiry-lifecycle, auth-gate-held-session-raw-host-families, cookie-session-renewal-in-process, import-invitation-and-sso-domain-answers), each already revised for its own card line; implicit-account-linking-ownership steps[7] gains --maxWorkers=1. Named in each history row and the PR body.",
    "two-factor-backup-codes: beside A4, the same three places quoted the column old JSON-serialized description; they now quote the current sys-two-factor.object.ts description. Same item, same line.",
    "history rows carry ref #25843 (the parking card), following the #22017 precedent, not the PR number.",
    "worktree objectstack-issue-25843 created on the harness-pinned branch by detaching the shared checkout first (the branch was checked out there).",
    "branch merged origin/main once before pr_create because the gate derivation flagged a stale tree.",
    "PR reviewer request not made: the only route is a GitHub MCP write, which the dispatch forbids. Assignee os-steve set through the relay pr_create.",
    "PR body footer uses the AGENTS.md session-URL form, not the harness Generated-with block; commit trailers are the model-free pair."
    ],
    "mcp_calls": "5 — mcp__github__issue_read x5 (get 25843, get_comments 25843 x2, get 26052, get 26035); no write tool",
    "api_writes": "2 — fleet-write relay: pr_create (POST /repos/objectstack-ai/objectstack/pulls + assignees + labels, run 40325231677, read-back identical 9258 bytes, labels [skip-changeset], assignees [os-steve]); this os-dev-report comment (POST /repos//issues/25843/comments)",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none — no line turned out to be a product defect; noted, not filed"
    ]
    }

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · review: ACCEPT → PR #26117 comment 6416479375. Landing: ready + merge queue once every check on the reviewed head is green or skipped.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions