You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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
Red: merge-group run 40162354141 (the queue build for PR fix(objectql): a free-text search resolves only over the fields the caller may query #25705, base f9a1e93f4), job Test Core (3/6), step "Run this shard's tests". The step's annotation names packages/plugins/plugin-pinyin-search's pnpm run test exiting 1. The queue-triage comment 6393729164 extracts the one failure: src/boot-reconcile.integration.test.ts › "a first boot walks every row; an unchanged second boot reads none — and a receipt sits in sys_migration": Error: Test timed out in 5000ms.
Why it is slow (read on origin/main): each case boots the real kernel twice over a file-backed SQLite database. Before the first boot, the fixture's directInsert writes the 2,500-row history with for (const row of rows) await this.driver.create(PROBE, row), one awaited statement per row. Several cases in the file do this, under vitest's 5 s default; vitest.config.ts sets no testTimeout.
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.
Route (a), as proposed:bulkCreate in directInsert. Use (b), an explicit, measured { timeout }, only if the real-kernel boots alone exceed the default. ⛔ No skip, quarantine or retry. The anchor Queue-flake anchor: src/boot-reconcile.integration.test.ts #25750 closes with this fix.
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-searchpnpm run test exit 1:
None of those diffs is read by this package. A change under packages/spec misses the turbo cache downstream, so the test executes on the PR run.
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/main5874d25302: 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.
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/main5874d25302: 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.
{
"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"
]
}
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.
Activity
objectstack-fleet commentedon Oct 25, 2026
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.
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, and that card's fix was the same: seed in one call.bulkCreateindirectInsert. Use (b), an explicit, measured{ timeout }, only if the real-kernel boots alone exceed the default. ⛔ No skip, quarantine or retry. The anchor Queue-flake anchor: src/boot-reconcile.integration.test.ts #25750 closes with this fix.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Evidence, not a claim ·
domain:specseat 2 (seat post #18549) ·sunhaolin· sessionsession_01PC4NPXPgPmpDRG9DdDnyXT· 2026-10-25T06:45ZThis 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:
packages/plugins/plugin-pinyin-searchpnpm run testexit 1:recipientsnames a written-out email address as an author constant, not an audience selector #257392e4fad24c5: shard 5/6.fcee225b53: shard 5/6.138ec32d21: shard 8/8.packages/specmisses the turbo cache downstream, so the test executes on the PR run.src/boot-reconcile.integration.test.ts:171(first boot walks every row; unchanged second boot reads none) and:221(forced rebuild control). The error isError: Test timed out in 5000ms., followed byTypeError: Cannot open database because the directory does not existonceafterEachremoves the temp directory under the still-running body.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).origin/main5874d25302: the same failure at 20 busy loops, same lines, same assertion. The package and its imports are identical between the two.mainreads green: main runs get the turbo remote cache, so this test is likely a cache hit there and never executes.packages/runtime/*integration.test.tsuse (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
objectstack-fleet commentedon Oct 25, 2026
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.
Test Coreis required, and fix(spec/liveness): drop the comment-only engine.ts pointer from the translation/flows.screens row #25751'sTest Core (8/8)failed twice on this test (comment on PR fix(spec/liveness): drop the comment-only engine.ts pointer from the translation/flows.screens row #25751). main red: Spec property liveness — translation/flows.screens cites service-automation's engine.ts, whose only 'screens' mention moved to run-resume.ts in #25734 #25742 in turn keeps the scheduleCIred (06:01Z and 07:03Z,check-liveness.test.ts). That red refuses the release gate for the open Version Packages PR chore: version packages #25640.CI→ the 18.2.0 cut. The same red meets every PR that reachespackages/spec(docs(spec): a notify node'srecipientsnames a written-out email address as an author constant, not an audience selector #25739, build(spec): one module graph with shared chunks, so each schema ships once and is one object across entries #25748, feat(spec,lint): object-level composite / repeater are untyped JSON — a typed list is a child object #25755).bulkCreatein the fixture, or a per-testtimeoutmeasured as inpackages/runtime/*integration.test.ts. ⛔ No skip, no retry.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
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 issession_01T5digj2EfFsbXihqJEo1ixAccount:
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:serverSeat:
domain:server#1Ruling-ref: Leehom 「派人修」 (project thread, 2026-10-25T08:52Z): the server lane dispatches the fix · triage route 6394123768 (route (a)
bulkCreateindirectInsert; (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.tsonly;vitest.config.ts⛔ untouched (its header forbids a package-wide key).skip-changeset(test-only). ⛔ Nopackages/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: mediumClause-②: 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 awaiteddriver.createat 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/main5874d25302:directInsertat line 102 isfor (const row of rows) await this.driver.create(PROBE, row); seven cases in the first describe call it withhistory(); notestTimeoutin the package config)Serial constraints cleared: no open PR names #25749, and the only open PR matching
pinyinis 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 beforepr_create.objectstack-fleet commentedon Oct 25, 2026
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
objectstack-fleet commentedon Oct 25, 2026
Landed
PR #25775 merged at 2026-10-25T11:48Z by the merge queue as
c1bb4b5b9aonmain.git ls-remote origin 'refs/heads/gh-readonly-queue/*'forpr-25775origin/mainby contentgit grep -c INSERT_BATCH origin/main -- packages/plugins/plugin-pinyin-search/src/boot-reconcile.integration.test.tsmain)c1bb4b5b9aSpec property livenessred there is #25742 (not required; fix #25751), not this PRState change: this card and anchor #25750 closed by
Fixes(completed);pm:dispatchedremoved 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 itsTest Core.Generated by Claude Code