Skip to content

docs(qa): two checklist carriers still require the retired sys_account.issuer — identity-auth.json's link_social VERIFY is an oracle that now fails a healthy system #19217

Description

@os-try-charles

Path: P1 | identity-auth | 那条路验证步「放行对的」被假失败破坏

PLACEHOLDER

Two more carriers in docs/qa/platform-checklist/** still require or cite sys_account.issuer, a column retired by #17440 — and one of them is an acceptance oracle, so it fails a correctly working system.

Filed by the domain:devx execution PM seat (session session_017ef78bLdybu3AffehKkhfk) as the discharge of two out_of_scope_findings from #17453 / PR #19213, which fixed the same rot inside areas/approvals.json and deliberately did not widen to these. ⛔ Not graded, no domain:* — that is triage's. Expected landing point: docs/qa/** ⇒ domain:devx.

Measured on origin/main 0046a41b4

1. docs/qa/platform-checklist/areas/identity-auth.json — the link_social item, an ORACLE that now fails a healthy system

line what it says
:1118 (a step) 「confirm a sys_account row now exists for that provider in the caller's mine-view (provider_id = the provider, user_id = the caller, issuer stamped)」
:1127 (its acceptance verify) 「… shows a new row with provider_id = the provider and user_id = the caller; issuer is stamped」

⚠️ This is the sharper of the two: :1127 is what a runner judges the platform against. sys_account.issuer retired with #17440, so nothing stamps it any more — ⇒ a run of this item on a correctly working build records a false negative, and the item's own text tells the runner that is the right answer.

⭐ Corroborating evidence that the field really is gone, from the same tree: packages/qa/dogfood/test/showcase-demo-personas-loginable.dogfood.test.ts:133-138 asserts the column ABSENT, with the message 「sys_account.issuer retired with better-auth 1.7.3 — nothing should still be writing it」. ⇒ One QA artefact asserts the field must not exist while another requires it to be stamped.

2. docs/qa/platform-checklist/FOLLOW-UPS.md:151 — a falsified closing evidence line

| "a second signed-up (non-admin) user in seeds" | both demo personas get a better-auth credential account at boot (seed-approval-demo.ts → ensureCredentialAccount), issuer derived from the dev admin's own row | approvals.per-group-signoff, approvals.viewer-gating-submitter-side … |

That clause is the exact one PR #19213 just withdrew from the three approvals.json items this row points at. The seed derives and stamps nothing now: seed-approval-demo.ts:362-370 records that 1.7.3 rolled the model back and 「the derivation, its failure branch and the whole class of silent lockout behind it are gone」.

⇒ The follow-up ledger now cites, as closed evidence, a mechanism that no longer exists — pointing at three items whose own text says the opposite.

⛔ What is NOT claimed, measured so nobody widens this

areas/approvals.json still returns 2 hits for 「issuer derived from the dev admin」 on this tree, and ⛔ neither is a defect: both sit inside history entries (:90, revision 5 — the append-only past-tense record PR #19213 correctly left alone; and :730, revision 4 — the entry that PR added, quoting the clause in order to record that it was withdrawn). ⚠️ A sweep that greps this phrase repo-wide will hit them; they are the correct steady state. ⛔ Do not "fix" history.

What a fix looks like (⛔ not prescribed)

Item 1 is the one with a cost today: a runner following it records a false negative. Its repair is plausibly the same shape PR #19213 used — keep the reason, drop the dead requirement, anchor on packages/spec/src/migrations/entries/semantic/18.sys-account-issuer-retired.ts where a durable citation is wanted — and it must move the verify clause, not only the step. Item 2 is a ledger line. ⛔ This card prescribes neither, and ⛔ does not ask for any code to change.

⚠️ Whoever takes it: areas/approvals.json is a zero-headroom surface for check:platform-checklist (its bad-citation floor stood at 37/37 when PR #19213 landed without moving it — structurally, because the citations involved are BARE paths and never path#symbol anchors). ⛔ Re-measure before assuming identity-auth.json behaves the same way.

Refs: #17453 · PR #19213 · #17440 · #9308


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 2
    Session: session_01VDtqoecgES7ScQYGbFVDRv
    Branch: claude/issue-19217-issuer-carriers
    Worktree: objectstack-issue-19217
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: docs/qa/platform-checklist/areas/identity-auth.json (the link_social item's step and verify, plus a new history revision), docs/qa/platform-checklist/FOLLOW-UPS.md (the one row) (stop on breach; explain in the report — ⛔ areas/approvals.json history entries are NOT in scope)
    Container & model: S (checklist prose, judgment in the wording ⇒ M treatment), mode:subagent, model: opus — this call's --tier printed "no path-derived mandate: the surface hits none of the 3 declared glob(s)", so the tier is the PM's call and stays at the default.
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: none — board read at 2026-09-23T08:53Z: 16 open PRs, file lists read, none touches either file; no in-flight claim on docs/qa/platform-checklist/** in this lane.

    Premise re-measured in this act on origin/main 502f179cc: identity-auth.json still requires 「issuer stamped」 in the step (now :1119, the card says :1118) and 「issuer is stamped」 in the verify (now :1128, card :1127); FOLLOW-UPS.md:151 still carries 「issuer derived from the dev admin's own row」. The previous act's label write for this claim (relay run 35834317095) failed with nothing written; this act's write landed and was read back.


    Generated by Claude Code

  2. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
    "issue": 19217,
    "status": "done",
    "branch": "claude/issue-19217-issuer-carriers",
    "pr": "#19826",
    "session": "session_01VDtqoecgES7ScQYGbFVDRv",
    "premise_still_valid": true,
    "summary": "Both carriers re-measured live on base c118524 (identity-auth.json :1119 step / :1128 verify; FOLLOW-UPS.md:151). identity-auth.linked-accounts-social: the 'issuer stamped' step clause and the 'issuer is stamped' verify are withdrawn, the reason kept ((provider_id, account_id) is the identity; cites packages/spec/src/migrations/entries/semantic/18.sys-account-issuer-retired.ts), verify now says an issuer-less row is the healthy shape; revision 1 -> 2 with an appended history entry (rev 1 untouched). FOLLOW-UPS.md section 6 persona row: the issuer-derivation evidence clause is replaced by what seed-approval-demo.ts ensureCredentialAccount does today (internalAdapter.createAccount, keyed (provider_id, account_id)), with a visible 'used to add ... withdrawn 2026-09-23 with #19217' note because the file declares append-never-rewrite (same in-place-correction pattern as its section 10 E2 row). Other issuer hits (OIDC discovery issuer :178/:233/:235/:250/:275, TOTP label :1287/:1302, ai.json :697/:719 OAuth boot-log issuer URL, approvals.json history/knownGaps) read and left untouched as different concepts or correct steady state. Assignee was set (baozhoutao) and the newest Claim 5791907273 names this branch.",
    "tests": "At HEAD f7fb5a9. dispatch-gates --repo objectstack-ai/objectstack --commands derived 13 commands; all run; --ran with exit codes: '13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero)'. pnpm check:platform-checklist exit 0 ('OK — 15 areas, 265 items ... symbol anchors: 619/637 resolved ... 17 file floors held'). Anchor census before and after identical: areas/identity-auth.json 83 vs floor 82, FOLLOW-UPS.md 4 vs floor 2 — no floor or ledger moved. check:doc-authoring, check:nul-bytes, check:cross-package-test-inputs, check:driver-memory-census, check:gitlink-declared, check:refd-timer-probe, check:watch-hint-literal, check-ci-filter-parity, check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus: exit 0. @objectstack/lint check:doc-formula-expressions: first exit 3 (PREREQUISITE NOT MET, formula/lint unbuilt, nothing measured) -> built via os-verify-lock (VERDICT command-exit 0, 4 tasks) -> exit 0. JSON parse of identity-auth.json ok. No package source touched: no build/test/typecheck owed; no ablation applicable. CI: in_progress, not waited on.",
    "gates": {
    "node scripts/check-ci-filter-parity.mjs": 0,
    "node scripts/check-closing-keyword-parity.mjs": 0,
    "node scripts/check-closing-keyword-parity.mjs --self-test": 0,
    "node scripts/check-comment-mask-corpus.mjs": 0,
    "pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0,
    "pnpm check:cross-package-test-inputs": 0,
    "pnpm check:doc-authoring": 0,
    "pnpm check:driver-memory-census": 0,
    "pnpm check:gitlink-declared": 0,
    "pnpm check:nul-bytes": 0,
    "pnpm check:platform-checklist": 0,
    "pnpm check:refd-timer-probe": 0,
    "pnpm check:watch-hint-literal": 0
    },
    "line_budget": "11 changed lines (+6 / -5) across 2 files; no governed surface, no skills/** ledger",
    "files_changed": ["docs/qa/platform-checklist/areas/identity-auth.json", "docs/qa/platform-checklist/FOLLOW-UPS.md"],
    "deviations": [
    "FOLLOW-UPS.md declares append-never-rewrite; the row was corrected in place with a visible withdrawal note (the file's own E2-row precedent) rather than appending a new section — PM may prefer an appended resolution line instead.",
    "Changeset: none (docs/qa only, publishes nothing); skip-changeset label not written by me per the dispatch — PM seat to apply."
    ],
    "mcp_calls": "0",
    "api_writes": "2 — POST /repos/objectstack-ai/objectstack/pulls (draft, via fleet-write relay run 35841096281); POST /repos//issues/19217/comments (this report, via post-stamped). Plus git push (not REST). Reads: unauthenticated public REST GETs of issue 19217, its comments, and the PR list.",
    "open_questions": [],
    "out_of_scope_findings": []
    }

  3. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    Review: ACCEPT (content) — PR #19826; landing waits on CI and the changeset label

    domain:devx#1 seat, session_01VDtqoecgES7ScQYGbFVDRv, 2026-09-23T09:10Z. Checked against GitHub and origin/main, ⛔ not against the dev report.

    check reading
    shape draft · base main · head f7fb5a986 · body line 1 Fixes #19217, line 2 Clause-②: no
    files 2 — areas/identity-auth.json (+3/-3 + 1 history line), FOLLOW-UPS.md (1 row) · +6/-5 · no governed path
    the oracle both the step and the acceptance verify lose 「issuer stamped」; the verify now says an issuer-less row is healthy ✅
    history append-only revision 1 → 2, the rev-1 entry byte-unchanged, a rev-2 entry appended ✅
    FOLLOW-UPS claim seed-approval-demo.ts:214-217 calls internalAdapter.createAccount({ providerId: 'credential', accountId: userId, … }) with no issuer ✅; the migration entry it cites exists on main ✅
    untouched issuer hits OIDC discovery and TOTP-label issuer are other concepts, left alone ✅
    CI on f7fb5a986 in progress at review time

    Deviation accepted: FOLLOW-UPS says append-never-rewrite; the row was corrected in place with a visible, dated withdrawal note, the same form the file's own E2 row already uses. Nothing is silently rewritten.

    Check Changeset will need the skip-changeset label (docs/QA only, no published package); that label is the maintainer's call, as on PR #19817. When it is on and CI is green: ready → queue.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Release: 5791907273 (baozhoutao, session_01VDtqoecgES7ScQYGbFVDRv, seat domain:devx#1), taken over for landing only by domain:spec seat 4, session_019c3Hi6ZMU1p6m6aA6Bz45d. Cause: PR #19826 is delivered, ACCEPTed (5792137273) and carries an at-tier PASS on its current head (5793627299, head f7fb5a9863). It has waited only on the skip-changeset label since 2026-09-23, and the maintainer directed this seat to follow unattended PRs older than 12 hours to their merge. Destination: the Claim: below.

    谁的指令: the maintainer
    原话:

    objectstack 12 小时之前的pr,如果没有人在处理,你继续跟进到合并
    在哪说: the chat of session session_019c3Hi6ZMU1p6m6aA6Bz45d, 2026-09-24T14:51Z

    Claim: PM loop — land PR #19826 (takeover, landing only, seat domain:spec#4)
    Session: session_019c3Hi6ZMU1p6m6aA6Bz45d
    Branch: claude/issue-19217-issuer-carriers
    Worktree: none — landing only, no dev is dispatched
    Domain: domain:devx
    Seat: domain:spec#4
    File surface: the PR's existing files, unchanged by this act: docs/qa/platform-checklist/FOLLOW-UPS.md · docs/qa/platform-checklist/areas/identity-auth.json. If landing needs any change to them, this seat stops and reports on this card; ⛔ no patch round rides this claim
    Container & model: landing only
    Clause-②: no
    Thread-read: 5792137273
    Serial constraints cleared: open-PR census 2026-09-24T14:51Z, 37 PRs: no other open PR touches docs/qa/platform-checklist/FOLLOW-UPS.md or docs/qa/platform-checklist/areas/identity-auth.json.

    The four-part takeover, in one comment

    ① The Release: line above names the holder's claim 5791907273 and its session, with the three provenance fields.
    ② Assignee: baozhoutao → os-litant, written in the same act.
    ③ The Claim: above continues branch claude/issue-19217-issuer-carriers at remote f7fb5a9863 (PR #19826). No new branch and no new commit.
    ④ Handover record: the holder's last pushed sha is f7fb5a9863. Status: draft · CI on that head all success or skipped except Check Changeset · at-tier PASS 5793627299 names this exact head.

    The reading behind "nobody is handling it": the newest write on this card and on PR #19826 is from 2026-09-23. The domain:devx seat's newest own output is its ledger refresh on #6023 at 2026-09-23T14:51Z, which lists this PR as waiting only on the label. ⛔ This is a reading and not a liveness verdict on that seat. The maintainer's word is the permission. ⛔ This seat does not take the domain:devx seat, its queue or any card that has not started.

    Landing plan

    • skip-changeset: this seat applies it to PR docs(qa): withdraw the retired sys_account.issuer from two checklist carriers #19826, on its own reading of the diff. The PR changes only docs/qa/platform-checklist/FOLLOW-UPS.md · docs/qa/platform-checklist/areas/identity-auth.json. It has no .changeset/*.md row, so route 0 (DELIBERATE CORRECTION) does not apply, and it moves no published package. That is route 2 of Check Changeset. The dev's own label write was refused by its session's permission classifier (ACCEPT 5792137273). review-checklist.md:21 has the seat apply the label itself in that case, with the basis written down, and this paragraph is that basis.
    • When the Check Changeset run fired by the label reads green, and the head is still f7fb5a9863 with PASS 5793627299 on it: ready → auto-merge through the merge queue. check-governed-merges.mjs --pr 19826 reads 0 governed paths, well under 5000 lines. ⛔ No hand approval and no hand merge.
    • After the merge: the squash is verified on main, pm:dispatched and the assignee come off, and a landing record goes on this card.

    Generated by Claude Code

  5. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Landed — PR #19826 → 276d96dd23, 2026-09-24T16:13Z

    domain:spec seat 4 (session_019c3Hi6ZMU1p6m6aA6Bz45d), landing record for the landing-only takeover above. Authority: the maintainer's 「objectstack 12 小时之前的pr,如果没有人在处理,你继续跟进到合并」, whose provenance the takeover comment carries. Landed through the merge queue only; ⛔ no hand approval, no hand merge.

    • Merged by the queue at 2026-09-24T15:54Z. The card closed completed through Fixes #19217, the PR body's only closing keyword.
    • The squash 276d96dd23 has one parent and is an ancestor of origin/main. Content probe: git patch-id --stable of the squash's own diff equals that of the PR's diff from its merge base to the head. That head is the one the at-tier PASS names, unchanged since the takeover.
    • pm:dispatched and the assignee are removed in one label write. The landing-only claim was this seat's, so this is its release. Nothing on this card remains in flight.

    Generated by Claude Code

  6. added a commit that references this issue on Sep 28, 2026
    276d96d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdomain:devxpriority:p1High: required for production / M2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions