Skip to content

main red: plugin-auth account-identity-preflight-stored-issuer.test.ts "over a walk of several pages" times out at 10 s in the hourly full battery (schedule run 40092202961, abdc7f22a5) #25648

Closed

Description

@objectstack-fleet

Filing gate ①: main red, reproduced in the hourly full battery. Filed by the triage seat (seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim.

Reader who acts: the domain:server seat that owns packages/plugins/plugin-auth. One PR, test-only.

Measured

  • Run: CI schedule run 40092202961, 12:01Z, on main abdc7f22a5. Job Test Core (2/6) (120867081995), then the aggregate Test Core, failed.
  • The one failure, in @objectstack/plugin-auth:
    FAIL  src/account-identity-preflight-stored-issuer.test.ts > #25030 the verdict does not move > over a walk of several pages, with the colliding rows on its first and last page
    Error: Test timed out in 10000ms.
     ❯ src/account-identity-preflight-stored-issuer.test.ts:238:3
     Test Files  1 failed | 192 passed (193)
          Tests  1 failed | 3666 passed | 10 skipped (3677)
    
  • This is a timeout, not an assertion. The test writes 1,200 sys_account rows into a SQLite file, initialises the engine and walks the table twice. It sets no timeout of its own, so it uses vitest's 10 s default. In the same turbo run, objectql's 466 test files were running at the same time.
  • The push run on the same commit was green (40091915766, 11:56Z). It tests only the packages affected since the previous commit, and its logs do not show this file running live. The test was last changed in 4bf079c693 (fix(plugin-auth): os migrate apply's account-issuer pre-flight names each colliding row's stored issuer #25056, 2026-10-21). None of the five plugin-auth commits since e649c2d91e touch it.
  • Why this matters now: the release gate reads the newest completed schedule CI at or before a version commit, and the Version Packages PR chore: version packages #25640 (18.2.0) is open. A red schedule run at the commit before that merge refuses the release.

Wanted

The test's budget is met under the full battery's load. Prefer making the fixture cheaper over raising the limit:

  • Seed the 1,200 rows in one transaction or one multi-row insert, if arrangeAccountTable inserts row by row.
  • Or span "several pages" with fewer rows, if the walk's page size can be set for the probe.

If the remaining cost is real work, give this one test an explicit timeout sized from its measured duration under the full battery, and say so in the test. ⛔ Never skip, disable or quarantine it; "flake" is not a root cause.

Acceptance

  • The test passes in the hourly full battery. Read it on the next schedule CI runs after the merge.
  • Its local duration is recorded in the PR: before and after.

Dedupe

The titles and bodies of every objectstack-ai/objectstack issue and PR updated since 2026-10-15, matched on account-identity-preflight|stored-issuer|preflight … timed out|plugin-auth … timed out. Hits: #25030 (the closed defect this test pins), #25056 (its fix PR) and #25109 (an unrelated bump). None is this timeout. New.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    priority:p1High: required for production / M2
    area:identityLogin and identity — sign-up, sessions, organization membership, SSO
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Oct 24, 2026
  2. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01JVTd3PprStGa26aez5omLB
    Account: sunhaolin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-25648-preflight-walk-fixture-budget
    Worktree: objectstack-issue-25648
    Domain: domain:server
    Seat: domain:server#2
    File surface: packages/plugins/plugin-auth/src/account-identity-preflight-stored-issuer.test.ts only (its fixture arrangeAccountTable and the several-pages case); test-only, skip-changeset. ⛔ No product source (stop on breach; explain in the report)
    Container & model: S, mechanical, mode:subagent, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate … the tier stays the PM's per-card judgment call"), effort: xhigh (p1)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — a test's own fixture cost, not a product defect
    Thread-read: none
    Serial constraints cleared: no open PR touches packages/plugins/plugin-auth/src/account-identity-preflight* (every open PR's file list read this fire).
    Premise: re-read on origin/main 9dac9eb8d6: arrangeAccountTable inserts row by row (for (const row of rows) await knex(SYS_ACCOUNT_OBJECT).insert(…)), each an autocommit on a SQLite file; the several-pages case seeds 1,200 rows and sets no timeout. Schedule CI 12:01Z red on it (run 40092202961); 13:01Z and 14:01Z green, so the budget is missed under load, not every run. Release PR #25640 (18.2.0) is open.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25648,
      "status": "done",
      "branch": "claude/issue-25648-preflight-walk-fixture-budget",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25684",
      "session": "session_01JVTd3PprStGa26aez5omLB (subagent: the parent's id, as the relay payload carried it)",
      "premise_still_valid": true,
      "summary": "Premise measured on origin/main 9dac9eb8d6: arrangeAccountTable inserted row by row (for ... await knex(SYS_ACCOUNT_OBJECT).insert(...)), each an autocommit plus an fsync (better-sqlite3 here compiles DEFAULT_SYNCHRONOUS=2, and tmpdir() is on ext4). The fixture now seeds with knex.batchInsert(SYS_ACCOUNT_OBJECT, rows, SEED_CHUNK_ROWS = 200): one transaction, 200-row multi-row statements, inside MAX_COMPOUND_SELECT=500 and MAX_VARIABLE_NUMBER=32766 as this build compiles them. It is still straight knex, independent of the code under test. Every assertion is unchanged, and 1,200 rows stay: PAGE_SIZE = 500 is a module constant the probe's options (max only) cannot set, so the walk reads 500/500/200, with the colliding acc_0000 and acc_1199 on the first and last page. No timeout was added: the case is now about 50 ms (engine init plus the two walks), against the package's 10 s testTimeout. The cost was in the fixture, not in product code. The PR was opened as a draft, assignee sunhaolin, label skip-changeset.",
      "tests": "Single file, the same command before and after: `pnpm --filter @objectstack/plugin-auth exec vitest run src/account-identity-preflight-stored-issuer.test.ts --reporter=verbose`, three runs each, under os-verify-lock. The case: before (9dac9eb8d6) 1722 / 1895 / 1701 ms; after (8d612d65f1) 57 / 68 / 49 ms; merged head (ac38bbde12) 47 ms. The whole file's tests time: 1.96 / 2.16 / 1.95 s before, 299 / 299 / 269 ms after. 10/10 passed on every run. Under load, `pnpm --filter @objectstack/plugin-auth test --reporter=verbose` (the whole 193-file suite): the case went from 2090 ms (suite 302.86 s) to 82 ms (suite 359.34 s, a busier box). Both runs: Test Files 193 passed (193), Tests 3667 passed | 10 skipped (3677), VERDICT command-exit 0. On the final head ac38bbde12, `pnpm exec turbo run build --concurrency=2 --filter='@objectstack/plugin-auth...' && the single-file run && pnpm --filter @objectstack/plugin-auth typecheck` gave VERDICT command-exit 0, with 10/10 passed and `check:test-typecheck: OK — 10 file(s) / 88 error(s) held in test-typecheck-debt.json`. `tsc --listFiles -p tsconfig.test.json` lists the test file once, with 0 errors in it. These are shared-box seconds (4 cores, sibling agents running); the ratios (about 30x alone, about 25x under load) are the reading.",
      "ablation": "n/a — test-only budget",
      "gates": "Local, on head ac38bbde12: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 58 commands (the same 58 as on 8d612d65f1), exit 0. All 58 were run, each exit code captured before any pipe and recorded as `CMD :: exit N`. 57 exited 0. `pnpm check:dual-build-cjs-loads` exited 3, PREREQUISITE NOT MET: it needs dist/ for about 42 packages outside plugin-auth's closure. That makes it NOT MEASURED locally, a declared narrowing, and CI's reading stands. `--ran` gave: \"58 derived, 57 run, 1 NOT-MEASURED, 0 UNRUN\", exit 0. `eslint packages/plugins/plugin-auth --no-inline-config` exited 0 with no output. CI check-runs on ac38bbde12 when this report was written: success for Check Changeset, Check PR Size, Check Documentation Links, filter, 'No other open PR may claim the same issue', 'No other open PR may claim the same single-writer path', 'Part-of PR must not also close its card', and 'The card this PR closes must claim this branch'. in_progress for Build Core, Test Core (1/6 through 6/6), Governed Surface Queue Guard, the Lint lanes (ESLint, PM dispatch-gates, CI release and engine gates, docs and code guards, repo and tooling gates, the three scoped lanes), and the Type Check lanes (consumer gates, debt ledger, source gates, workspace). The full-battery-only jobs (Dogfood Regression Gate, Dogfood Verify CLI, Temporal Conformance, Console Pin Gate) were skipped on the PR event.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "files_changed": ["packages/plugins/plugin-auth/src/account-identity-preflight-stored-issuer.test.ts"],
      "line_budget": "+16 / -4 = 20 changed lines in 1 file (dispatch-gates: under the 3000 human-merge threshold); size S, test-only",
      "deviations": [
        "The worktree named in the dispatch (/home/user/objectstack-issue-25648) did not exist. I created it with `git worktree add --no-track` from origin/main 9dac9eb8d6 (BASE) and pushed the empty branch as the write probe.",
        "Conflict between the dispatch and os-dev.md, named rather than chosen silently: the dispatch said to ask for skip-changeset in the report and let the seat apply it; os-dev.md says to declare it in pr_create's labels on the same stroke, and os-dev.md wins on conflict. So skip-changeset rode on pr_create. The label leg: the relay run 40110329414 concluded success, and execute.mjs fails the action when a sent label is missing. The dispatch answer's read_back carries no label row (the row is in the run's own output). A second-channel GET /repos/objectstack-ai/objectstack/pulls/25684 lists labels [skip-changeset], draft true, assignees [sunhaolin].",
        "Merged origin/main (061cc94d31) before opening the PR (AGENTS.md section 10, and the stale-tree warning from dispatch-gates), giving merge commit ac38bbde12. The delta against main is still the one file, +16/-4. After the merge, plugin-auth's closure was rebuilt and the file, typecheck and every gate were re-run on ac38bbde12.",
        "check:dual-build-cjs-loads: NOT MEASURED locally (exit 3, PREREQUISITE NOT MET), a declared narrowing. I did not run a whole-workspace build on a shared box for a gate that reads built output this diff does not change. After building, plugin-auth's dist carries 0 occurrences of the touched symbols, against a positive control of 5.",
        "test:repo (the vitest repo project) was not run locally: the diff touches none of its tests, and it belongs to CI's Test Core.",
        "Attribution: the commit uses AGENTS.md's model-free trailer pair (`Claude-Session:` plus `Co-authored-by: Claude`), and the PR body uses AGENTS.md's session-URL footer, both instead of the harness reminder's model-bearing form, because the repo's instructions take precedence."
      ],
      "skip_changeset": "Requested and applied through pr_create labels. Criterion measured: plugin-auth files[] = dist, README.md, CHANGELOG.md. After building, `arrangeAccountTable` and `SEED_CHUNK_ROWS` appear in 0 of them, and the positive control `probeAccountIdentityCollisions` appears in 5. The diff publishes nothing.",
      "mcp_calls": "0 — no MCP GitHub tool was called",
      "api_writes": "2 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches. (1) pr_create (request fw-20261024T161029Z-341b88, run 40110329414, success): POST /repos/objectstack-ai/objectstack/pulls (draft), POST /repos/objectstack-ai/objectstack/issues/25684/assignees, POST /repos/objectstack-ai/objectstack/issues/25684/labels. (2) this os-dev-report: POST /repos/objectstack-ai/objectstack/issues/25648/comments through scripts/pm/post-stamped.mjs. Outside REST: 3 git pushes (the empty branch, 8d612d65f1, ac38bbde12). Reads were single-card REST GETs only.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #25684 → 1fbd9de05 · domain:server seat 2 · sunhaolin · session_01JVTd3PprStGa26aez5omLB · 2026-10-24T17:11Z

    reading result
    PR #25684 object merged: true, merge commit 1fbd9de050e50b218075314cfd14ee97eb70a326, merged 2026-10-24T17:11:11Z through the merge queue
    origin/main 1fbd9de05 is origin/main's tip, single parent (squash)
    queue branch no gh-readonly-queue/main/* head for PR 25684 remains
    • State: closed completed by Fixes #25648 on merge. pm:dispatched stripped in this act.
    • Delivered: the stored-issuer pre-flight fixture seeds its 1,200 rows in one transaction (knex.batchInsert, 200-row chunks) instead of one autocommit per row. The several-pages case went from about 1.7–2.1 s to about 50–80 ms (alone and under the whole plugin-auth suite); every assertion and the three-page walk are unchanged; no timeout added.
    • Acceptance still to read: the card asks for the case to pass in the hourly full battery after the merge. The next schedule CI runs at or after 1fbd9de05 are the reading; the release gate for the open Version Packages PR chore: version packages #25640 reads the newest one.
    • Dev: a local subagent; no cloud session to archive.

    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:identityLogin and identity — sign-up, sessions, organization membership, SSObugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority: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