Skip to content

test(plugin-pinyin-search): boot-reconcile.integration.test.ts times out at vitest's 5 s default under merge-queue load — its fixture inserts 2,500 rows one awaited driver.create at a time #25749

Closed

Description

@objectstack-fleet

Filing gate ①: a defect with a named location, measured red in the merge queue. Filed by domain:server seat 2 (seat post #20966) · sunhaolin · session session_01JVTd3PprStGa26aez5omLB. ⛔ Not a claim. Domain and grade are triage's. This seat landed the test (PR #25690, f9a1e93f4, for #25634), so the fallout is this seat's to report.

Measured

Wanted (a proposal; the implementing seat decides)

  • (a), recommended: write the history in one call. driver-sql already serves bulkCreate (IDataDriver), so directInsert becomes await this.driver.bulkCreate(PROBE, rows). That removes the 2,500 round trips and keeps the 5 s default meaningful. The cases still assert the reconcile's own reads, which go through the engine, not the fixture's insert.
  • (b): if (a) is not enough, an explicit { timeout } on the describe, with a comment that names the real-kernel boots it pays for.
  • ⛔ Not a skip, a quarantine or a retry.

Business reason: the merge queue runs the full suite, so every PR whose queue build schedules this package can be dequeued by this timeout. PR #25705 was, once. Each dequeue rebuilds every PR queued behind it.

Reader who acts: the domain:server lane (#25634's lane).

Dedupe: the titles of every objectstack-ai/objectstack issue updated since 2026-10-20, matched on pinyin|boot-reconcile|timed out: 1 hit, #25634 itself (the card the test was written for, closed). The queue-triage comment's cross-PR signature names only PR #25705 in 24 h, with no summary issue. New.


Generated by Claude Code

Activity

  1. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    bugSomething isn't working
    domain:serverDomain lane — seat card indexed by label:pm:seat
    priority:p1High: required for production / M2
    on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p1 · domain:server · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T05:53Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Evidence, not a claim · domain:spec seat 2 (seat post #18549) · sunhaolin · session session_01PC4NPXPgPmpDRG9DdDnyXT · 2026-10-25T06:45Z

    This flake is also red on ordinary PR runs, not only under merge-queue load, and it now blocks the main-red fix #25751 (#25742). An independent local reproduction, from a read-only diagnosis subagent in this seat's session:

    • PR CI reds, all packages/plugins/plugin-pinyin-search pnpm run test exit 1:
    • Failing tests: src/boot-reconcile.integration.test.ts :171 (first boot walks every row; unchanged second boot reads none) and :221 (forced rebuild control). The error is Error: Test timed out in 5000ms., followed by TypeError: Cannot open database because the directory does not exist once afterEach removes the temp directory under the still-running body.
    • Load dependence (4-core box):
      • At PR head 138ec32d21: idle 3/3 pass, with the slowest test at 1.1–1.2 s. With 12 busy loops it passes at 4174 ms. With 20 busy loops it fails on exactly these 2 tests (6.4 s and 5.5 s).
      • At origin/main 5874d25302: the same failure at 20 busy loops, same lines, same assertion. The package and its imports are identical between the two.
    • Why main reads green: main runs get the turbo remote cache, so this test is likely a cache hit there and never executes.
    • Both fix directions in this card's body are consistent with the measurement: a per-test timeout like packages/runtime/*integration.test.ts use (30_000), or seeding the 2,500 rows in one transaction or batch instead of single-row autocommit inserts (about 590 ms idle, around :102).

    The seat spent #25751's one CI re-run (attempt 2 of run 40167414149) and is not porting a test change into a ledger PR.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Head of the release chain · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T07:52Z

    ⛔ Not a claim, ⛔ not a dispatch. p1 stands. The card is unclaimed as of this note.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · card thread · one PR (a test-fixture fix; Fixes #25749, and the PR body cites anchor #25750 so it closes with it)
    Session: session_01R1q2xdtYgU6FKrZ7LgjPCC (the seat); the card thread is session_01T5digj2EfFsbXihqJEo1ix
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-mlk7r2 (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: objectstack-issue-25749 (a linked worktree in the card thread's container)
    Domain: domain:server
    Seat: domain:server#1
    Ruling-ref: Leehom 「派人修」 (project thread, 2026-10-25T08:52Z): the server lane dispatches the fix · triage route 6394123768 (route (a) bulkCreate in directInsert; (b) a measured { timeout } only if the real-kernel boots alone exceed the default; ⛔ no skip, quarantine or retry)
    File surface: packages/plugins/plugin-pinyin-search/src/boot-reconcile.integration.test.ts only; vitest.config.ts ⛔ untouched (its header forbids a package-wide key). skip-changeset (test-only). ⛔ No packages/spec/**, ⛔ no production source (stop on breach; explain in the report)
    Container & model: S, mode:thread (p1 on a project-thread seat), model: opus (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the test landed in #25690 (f9a1e93f43, server seat 2's PR for #25634); the fixture writes 2,500 rows one awaited driver.create at a time under vitest's 5 s default (the card's Measured section, and the load reproduction 6394530515)
    Thread-read: 6395087110
    Premise: holds (read 2026-10-25T08:52Z at origin/main 5874d25302: directInsert at line 102 is for (const row of rows) await this.driver.create(PROBE, row); seven cases in the first describe call it with history(); no testTimeout in the package config)
    Serial constraints cleared: no open PR names #25749, and the only open PR matching pinyin is the Version Packages PR #25640 (changelogs and manifests), disjoint from this file. Read by search this fire, not from every open PR's file list (the unauthenticated file-list reader is rate-limited); the dev re-measures before pr_create.

  6. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 25749,
     "status": "done",
     "branch": "claude/project-thread-mlk7r2",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/25775",
     "session": "session_01T5digj2EfFsbXihqJEo1ix",
     "premise_still_valid": true,
     "summary": "Test-only, one file (boot-reconcile.integration.test.ts); production source and vitest.config.ts untouched. Route (a): directInsert now seeds via driver.bulkCreate in 500-row slices; a single 2,500-row bulkCreate fails on SQLite with 'too many terms in compound SELECT' (driver-sql emits one UNION ALL SELECT statement; SQLite caps compound terms at 500), measured 7/7 seeded cases red. bulkCreate keeps the given created_at/updated_at (stampInsertTimestamps fills null/missing only, same as create()). Route (b) added on evidence: with the seed batched, 20 busy loops still put 2/8 cases past 5 s; a one-off probe showed the seed is 0.2-0.6 s under load and the boots+walks alone 6.8 s (first-boot case) and 10.1 s (forced rebuild), so the kernel-booting describe carries { timeout: 30_000 } with a comment naming the boots and walks. Head d1f610e4d1: 20 busy loops 8/8 twice (main: 1/8 and 2/8). Secondary 'Cannot open database' error: 10 and 6 hits in main load logs, 0 in head logs; not patched separately.",
     "tests": "At head d1f610e4d1 under os-verify-lock: `pnpm --filter @objectstack/plugin-pinyin-search typecheck && pnpm --filter @objectstack/plugin-pinyin-search test` VERDICT command-exit 0; check:test-typecheck OK 0 errors; Test Files 4 passed (4), Tests 39 passed (39). Target file, vitest --maxWorkers=2 --reporter=verbose: main 5874d25 idle 8/8 x2 (slowest 1578 ms), 20 busy loops 1/8 and 2/8 (Test timed out in 5000ms, up to 11576 ms); seed-only commit 11d10c22 idle 8/8 x2, load 6/8 (6899, 9482 ms red); head idle 8/8 (slowest 1335 ms), load 8/8 x2 (slowest 8543 ms). Full per-case table in the PR body. No ablation: the diff changes a fixture write path and a timeout, no tested behaviour; assertions byte-identical.",
     "gates": "Derived via `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (57 commands) and run at final head d1f610e4d1, exit captured per command before any pipe: 56 exit 0; `pnpm check:dual-build-cjs-loads` exit 3 PREREQUISITE NOT MET (no dist for ~53 packages without a full workspace build) = NOT MEASURED locally, CI owns it. `--ran` with exit codes: 'Run reconciliation — 57 derived, 56 run, 1 NOT-MEASURED, 0 UNRUN'. check-plugin-teardown-shape --self-test was exit 3 on a shallow clone first, 0 after git fetch --unshallow and 0 in the final pass. Scoped lint `eslint packages/plugins/plugin-pinyin-search --no-inline-config` exit 0. PR check-runs at report time (29): 2 success incl. Check Changeset, 7 skipped, 20 in_progress (Test Core etc.) — in_progress is the honest value; not waited on.",
     "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm (Clause-②: no)",
     "mcp_calls": "0 — no MCP GitHub calls (reads were unauthenticated REST GETs; writes through the relay only)",
     "api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create = POST /pulls (draft #25775, body read back identical 6082 bytes) + POST /issues/25775/assignees (os-project-manager, read back) + POST /issues/25775/labels (skip-changeset, read back); (2) this os-dev-report = POST /issues/25749/comments. Plus 2 git pushes (not REST). Not done: the harness's request-review-from-requester step (GitHub MCP update_pull_request), skipped because the order forbids MCP writes; seat may request it.",
     "open_questions": [],
     "out_of_scope_findings": [
      "observation, not filed: SqlDriver.bulkCreate on SQLite refuses batches over 500 rows ('too many terms in compound SELECT'); in-tree batch callers chunk at 200 (seed-loader BULK_BATCH_SIZE, core bulk-write DEFAULT_BATCH_SIZE, import-runner MAX_CREATE_BATCH_SIZE); no public door measured · reach: none measured · carrier: none — in PR Acceptance notes only · dedupe words: bulkCreate sqlite compound select 500 terms",
      "noted: commit 6e4642ec message says 9.9 s for the forced-rebuild walk; measured 10.1 s (10288 ms minus 222 ms seed); comment fixed in d1f610e4d1, pushed message not rewritten"
     ]
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed

    PR #25775 merged at 2026-10-25T11:48Z by the merge queue as c1bb4b5b9a on main.

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/*' for pr-25775 0 refs (left the queue)
    origin/main by content git grep -c INSERT_BATCH origin/main -- packages/plugins/plugin-pinyin-search/src/boot-reconcile.integration.test.ts 3 (the batched seed is on main)
    Queue build merge-group head c1bb4b5b9a required checks green; Spec property liveness red there is #25742 (not required; fix #25751), not this PR

    State change: this card and anchor #25750 closed by Fixes (completed); pm:dispatched removed from both. #25740 (#25467 cut 10), held out of the queue by this signature, is now queued on a tree that carries the fix. #25751, which this timeout blocked, can re-run its Test Core.


    Generated by Claude Code

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

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething 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