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
ci: packages/cli validate-build-gate-parity.test.ts times out at 5000 ms in Test Core (4/8): one main red and one merge-queue ejection in eight hours #30785
Filing gate: ① a repeatedly red platform test with a named location, measured from the Actions job logs. ⛔ Not a claim. Grade: p1, under the standing order that a repeatedly red platform test gets fixed.
维护者速读
packages/cli/test/validate-build-gate-parity.test.ts("os validate is the read-only superset of os build")在 Test Core (4/8) 里两次卡在 vitest 默认的 5 秒超时:一次让 main 推送红,一次把合并队列里的一组踢出。两次的 diff 都与 cli 无关。
Measured
When
Where
Job
2026-11-05 18:18Z
main push CI on 25fea77a (green again on the next two pushes)
127442019825
2026-11-06 02:17Z
merge group pr-30753 (fix(lint): a flow start-input warning)
127669384323
Both logs carry the same line: FAIL unit test/validate-build-gate-parity.test.ts > os validate is the read-only superset of os build (#3782, #4409) > … then Error: Test timed out in 5000ms. The other cli files in the shard pass. The file was last changed by PR #30712 (a91ad429, 2026-11-05T23:37Z) and PR #30336 (1c537831).
Wanted
Measure the case's wall time on CI and locally. It runs os validate and os build over a fixture and compares them, so the 5 s default leaves it no headroom on a loaded runner.
Fix the cause: a fixture that does less work, a shared build, or an explicit per-case timeout sized from the measurement, with the reason in a comment. ⛔ No skip, no retry, no quarantine.
Claim: PM loop patrol · 2026-11-06T03:27Z
Session: session_016WV4cytLmJxfAmgPVjUbbW
Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-30785-cli-parity-test-timeout (placeholder; the card thread's harness-pinned branch replaces it by amendment before any push)
Worktree: objectstack-issue-30785
Domain: domain:server
Seat: domain:server#1
File surface: packages/cli/test/validate-build-gate-parity.test.ts and any fixture or helper only that file uses, one root .changeset/ file only if a published file changes. ⛔ packages/cli/src/** beyond a test-only helper (stop and ask), packages/spec/**, ui/**, docs/adr/**, skills/**, .claude/**, vitest config shared by other packages. Stop on breach and explain in the report
Container & model: S, mode:card-thread (p1), model: default, effort: xhigh
Clause-②: no
Metadata-protocol: none
Responsibility: the cli test shard's time budget (packages/cli tests) | none | every PR whose merge group runs Test Core (4/8), which this case ejects on a loaded runner
Thread-read: none
Premise: holds per the card's two measured jobs (127442019825, 127669384323). Carried from #30789, filed by this seat on the same file: case "the command sources use no call shape this scan cannot read" (about :1149) took 1669 / 1857 ms unloaded on origin/main; it runs the per-character codeOnly masker (about :568) over every PARITY_COMMANDS source. The dev measures every case in the file on origin/main first and names which one the two logs time out on before choosing the fix. ⛔ No skip, retry, quarantine, or blanket timeout raise without a measured reason in a comment
Serial constraints cleared: no open PR names this card; #30789 is the same defect and is closed into this one on landing
Branch: claude/project-thread-96icbf (the card thread's harness-pinned branch, which replaces the placeholder claude/issue-30785-cli-parity-test-timeout)
Session: session_016WV4cytC5Tt2HZ6K6M63Ek (the card thread that does the work)
{
"issue": 30785,
"status": "done",
"branch": "claude/project-thread-96icbf",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30811",
"session": "session_016WV4cytC5Tt2HZ6K6M63Ek",
"premise_still_valid": true,
"premise_note": "Location and case hold: both CI logs time out on 'the command sources use no call shape this scan cannot read' (job 127442019825: 5455 ms; job 127669384323: 5123 ms; every other case in the file passed). The cause the claim carried from #30789 (the per-character codeOnly masker) does not hold: the masker costs 3.48 ms on compile.ts and 1.79 ms on validate.ts per call. The cost is callSitesOf, which sliced the masked source from 0 for every match and ran three end-anchored regexes over that prefix (19.4-21.3 ms per compile.ts scan, 21.84 MB read), and the case called it inside a filter over every value import (76 + 67 = 143 scans).",
"summary": "Test-only fix in packages/cli/test/validate-build-gate-parity.test.ts. callSitesOf now cuts its look-behind at the whitespace run before each match plus nine characters (the three regexes unchanged; per-match-site identical to the old scan over 1914 sources, 153,667 call sites). codeOnly and callSitesOf are memoized by source text, and the failing case scans once per file instead of once per value import. Three new negative controls pin that a long blanked comment between a dot, a keyword or a spread and the name does not change the answer. No timeout raised; every existing assertion kept.",
"readings": {
"before_origin_main_ea757ff4": "that case idle 2902 / 3083 / 2737 ms; loaded (vitest on CPUs 0-1 beside four busy-loop hogs on the same CPUs) 8508 / 8276 / 8531 ms, Test timed out in 5000ms 3 of 3 runs; sum of the 33 cases idle 4089 / 4437 / 3965 ms, loaded 12172 / 11658 / 12077 ms",
"after_9d07219e": "that case idle 3 / 3 / 3 ms, loaded 7 / 3 / 11 ms, alone with -t (cold cache) 19 ms idle / 74 ms loaded; sum of the 33 cases idle 70 / 70 / 64 ms, loaded 170 / 206 / 210 ms; 33/33 pass every run",
"evidence_files": "project folder server-lane-seat1/30785/ (per-case-table.md, equiv-proof.mjs, gates-ran-413f70fd70.txt, ran-reconcile-413f70fd70.txt, lint-413f70fd70.txt, pr-body.md, actions-pr.json, relay-pr.out)"
},
"tests": "Final head 413f70fd70 after a whole-tree turbo build (118/118, lock VERDICT command-exit 0): pnpm --filter @objectstack/cli exec vitest run --project unit under the lock: Test Files 387 passed (387), Tests 5407 passed (5407), VERDICT command-exit 0; pnpm --filter @objectstack/cli typecheck: VERDICT command-exit 0. Integration tier declared to CI (the diff touches no spawn entry or integration-tier file). Ablations via scripts/ablation-replace.mjs (test reads sources with readFileSync, no build between): A1 namespace import in compile.ts (blob 323cddda to 8a50a982) red on 'uses a namespace import'; A2 uncalled unclassified value import in compile.ts (blob 323cddda to 7e8f758b) red on 'imports 1 value(s) it never calls ... ablationUnusedValue'; A3 fixed window in the scan (blob b687f79f to 3bdfff2a) red on the new long-comment control in 'a comment or a string literal is not a wiring'; each 1 failed / 32 passed, each restore blob equals HEAD and git diff HEAD empty. First A1/A2 attempts were refused by the tool as no-ops (the replacement contained the anchor, count 1 to 1) and measured nothing.",
"gates": "Head 413f70fd70: dispatch-gates --commands derived 48 families; all 48 ran sequentially, exit codes captured before any pipe, 48 of 48 exit 0; pnpm lint exit 0 (outside the derivation). --ran: '48 derived famil(ies) accounted for, 48 run, 0 NOT-MEASURED'. PR check-runs: not read at report time (in_progress or queued; not waited on).",
"line_budget": "1 file, +47 / -4 (GitHub: additions 47, deletions 4, changed_files 1); no skills/** or ratchet ledger touched",
"files_changed": [
"packages/cli/test/validate-build-gate-parity.test.ts"
],
"changeset": "none; label skip-changeset sent with pr_create and present on the PR (packages/cli files[] is dist, README.md, CHANGELOG.md)",
"dogfood_battery": "n/a — no bang in the PR title and Clause-②: no",
"deviations": [
"The project context asked to assign the PR to os-elon-musk and request his review with MCP writes; not done: the standing lines forbid MCP writes and reviewer requests, and os-dev leaves the PR assignee to the seat at hand-over.",
"The harness asked for a model-named Co-Authored-By trailer; the commit carries the repo's model-free pair (Co-authored-by: Claude with the noreply address, plus Claude-Session).",
"The commit message rounds the compile.ts per-scan read to 'about 24 MB'; measured 21.84 MB (stated in the PR body). Not amended: the branch is not claude/issue-*, so no force push.",
"The 'parallel load' reading uses taskset to 2 CPUs plus four busy-loop hogs. A first try running the file beside 24 other cli unit files with --pool=forks on 2 CPUs was a light load (22 of those files failed to import before the build); that case read 4728 / 2763 ms there.",
"CI logs read through MCP get_job_logs (last 5000 lines); the blob host for the full log answered 403 CONNECT. Both failure lines and the per-case table were inside the tail."
],
"mcp_calls": "10 — mcp__github__issue_read x5 (get #30785, get_comments #30785 x2, get #30789, get_comments #30789), mcp__github__get_job_logs x4 (127442019825 and 127669384323, URL then content), mcp__github__pull_request_read x1 (get #30811); no MCP write",
"api_writes": "2 — relay pr_create (#30811, run 42163472404, read-back identical 13981 bytes, label skip-changeset confirmed by PR read) and this os-dev-report comment via post-stamped; git push is not REST",
"relay_writes": 2,
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Claim: PM loop patrol · 2026-11-06T05:03Z (re-post of 6676066855 with the card thread's branch from amendment 6676114947 folded in; it supersedes that comment)
Session: session_016WV4cytLmJxfAmgPVjUbbW (seat); dev session session_016WV4cytC5Tt2HZ6K6M63Ek
Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/project-thread-96icbf (the card thread's harness-pinned branch, objectstack-ai/objectstack)
Worktree: objectstack-issue-30785
Domain: domain:server
Seat: domain:server#1
File surface: packages/cli/test/validate-build-gate-parity.test.ts and any fixture or helper only that file uses, one root .changeset/ file only if a published file changes. ⛔ packages/cli/src/** beyond a test-only helper (stop and ask), packages/spec/**, ui/**, docs/adr/**, skills/**, .claude/**, vitest config shared by other packages. Stop on breach and explain in the report
Container & model: S, mode:card-thread (p1), model: default, effort: xhigh
Clause-②: no
Metadata-protocol: none
Responsibility: the cli test shard's time budget (packages/cli tests) | none | every PR whose merge group runs Test Core (4/8), which this case ejects on a loaded runner
Thread-read: none
Premise: holds per the card's two measured jobs (127442019825, 127669384323). Carried from #30789, filed by this seat on the same file: case "the command sources use no call shape this scan cannot read" (about :1149) took 1669 / 1857 ms unloaded on origin/main; it runs the per-character codeOnly masker (about :568) over every PARITY_COMMANDS source. The dev measures every case in the file on origin/main first and names which one the two logs time out on before choosing the fix. ⛔ No skip, retry, quarantine, or blanket timeout raise without a measured reason in a comment
Serial constraints cleared: no open PR names this card; #30789 is the same defect and is closed into this one on landing
Landed · 2026-11-06T05:40Z · PR #30811 merged by the queue as 2038c56ec9 (2026-11-06T05:39:21Z). The cli parity case "the command sources use no call shape this scan cannot read" now scans each source once with a bounded look-behind, taking about 3 ms instead of over 5 s, so it no longer times out Test Core (4/8). This card is closed by Fixes. pm:dispatched removed. #30789 (the same defect) is left to triage to close as a duplicate (6676085396).
Activity
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Claim: PM loop patrol · 2026-11-06T03:27Z
Session:
session_016WV4cytLmJxfAmgPVjUbbWAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-30785-cli-parity-test-timeout(placeholder; the card thread's harness-pinned branch replaces it by amendment before any push)Worktree:
objectstack-issue-30785Domain:
domain:serverSeat:
domain:server#1File surface:
packages/cli/test/validate-build-gate-parity.test.tsand any fixture or helper only that file uses, one root.changeset/file only if a published file changes. ⛔packages/cli/src/**beyond a test-only helper (stop and ask),packages/spec/**,ui/**,docs/adr/**,skills/**,.claude/**, vitest config shared by other packages. Stop on breach and explain in the reportContainer & model:
S,mode:card-thread(p1),model: default,effort: xhighClause-②: no
Metadata-protocol: none
Responsibility: the cli test shard's time budget (
packages/clitests) | none | every PR whose merge group runsTest Core (4/8), which this case ejects on a loaded runnerThread-read: none
Premise: holds per the card's two measured jobs (127442019825, 127669384323). Carried from #30789, filed by this seat on the same file: case "the command sources use no call shape this scan cannot read" (about :1149) took 1669 / 1857 ms unloaded on
origin/main; it runs the per-charactercodeOnlymasker (about :568) over everyPARITY_COMMANDSsource. The dev measures every case in the file onorigin/mainfirst and names which one the two logs time out on before choosing the fix. ⛔ No skip, retry, quarantine, or blanket timeout raise without a measured reason in a commentSerial constraints cleared: no open PR names this card; #30789 is the same defect and is closed into this one on landing
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
席位核对 · Amendment · 2026-11-06T03:31Z · claim 6676066855
Branch:
claude/project-thread-96icbf(the card thread's harness-pinned branch, which replaces the placeholderclaude/issue-30785-cli-parity-test-timeout)Session:
session_016WV4cytC5Tt2HZ6K6M63Ek(the card thread that does the work)Everything else in the claim is unchanged.
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytC5Tt2HZ6K6M63Ek
os-dev-report
{ "issue": 30785, "status": "done", "branch": "claude/project-thread-96icbf", "pr": "https://github.com/objectstack-ai/objectstack/pull/30811", "session": "session_016WV4cytC5Tt2HZ6K6M63Ek", "premise_still_valid": true, "premise_note": "Location and case hold: both CI logs time out on 'the command sources use no call shape this scan cannot read' (job 127442019825: 5455 ms; job 127669384323: 5123 ms; every other case in the file passed). The cause the claim carried from #30789 (the per-character codeOnly masker) does not hold: the masker costs 3.48 ms on compile.ts and 1.79 ms on validate.ts per call. The cost is callSitesOf, which sliced the masked source from 0 for every match and ran three end-anchored regexes over that prefix (19.4-21.3 ms per compile.ts scan, 21.84 MB read), and the case called it inside a filter over every value import (76 + 67 = 143 scans).", "summary": "Test-only fix in packages/cli/test/validate-build-gate-parity.test.ts. callSitesOf now cuts its look-behind at the whitespace run before each match plus nine characters (the three regexes unchanged; per-match-site identical to the old scan over 1914 sources, 153,667 call sites). codeOnly and callSitesOf are memoized by source text, and the failing case scans once per file instead of once per value import. Three new negative controls pin that a long blanked comment between a dot, a keyword or a spread and the name does not change the answer. No timeout raised; every existing assertion kept.", "readings": { "before_origin_main_ea757ff4": "that case idle 2902 / 3083 / 2737 ms; loaded (vitest on CPUs 0-1 beside four busy-loop hogs on the same CPUs) 8508 / 8276 / 8531 ms, Test timed out in 5000ms 3 of 3 runs; sum of the 33 cases idle 4089 / 4437 / 3965 ms, loaded 12172 / 11658 / 12077 ms", "after_9d07219e": "that case idle 3 / 3 / 3 ms, loaded 7 / 3 / 11 ms, alone with -t (cold cache) 19 ms idle / 74 ms loaded; sum of the 33 cases idle 70 / 70 / 64 ms, loaded 170 / 206 / 210 ms; 33/33 pass every run", "evidence_files": "project folder server-lane-seat1/30785/ (per-case-table.md, equiv-proof.mjs, gates-ran-413f70fd70.txt, ran-reconcile-413f70fd70.txt, lint-413f70fd70.txt, pr-body.md, actions-pr.json, relay-pr.out)" }, "tests": "Final head 413f70fd70 after a whole-tree turbo build (118/118, lock VERDICT command-exit 0): pnpm --filter @objectstack/cli exec vitest run --project unit under the lock: Test Files 387 passed (387), Tests 5407 passed (5407), VERDICT command-exit 0; pnpm --filter @objectstack/cli typecheck: VERDICT command-exit 0. Integration tier declared to CI (the diff touches no spawn entry or integration-tier file). Ablations via scripts/ablation-replace.mjs (test reads sources with readFileSync, no build between): A1 namespace import in compile.ts (blob 323cddda to 8a50a982) red on 'uses a namespace import'; A2 uncalled unclassified value import in compile.ts (blob 323cddda to 7e8f758b) red on 'imports 1 value(s) it never calls ... ablationUnusedValue'; A3 fixed window in the scan (blob b687f79f to 3bdfff2a) red on the new long-comment control in 'a comment or a string literal is not a wiring'; each 1 failed / 32 passed, each restore blob equals HEAD and git diff HEAD empty. First A1/A2 attempts were refused by the tool as no-ops (the replacement contained the anchor, count 1 to 1) and measured nothing.", "gates": "Head 413f70fd70: dispatch-gates --commands derived 48 families; all 48 ran sequentially, exit codes captured before any pipe, 48 of 48 exit 0; pnpm lint exit 0 (outside the derivation). --ran: '48 derived famil(ies) accounted for, 48 run, 0 NOT-MEASURED'. PR check-runs: not read at report time (in_progress or queued; not waited on).", "line_budget": "1 file, +47 / -4 (GitHub: additions 47, deletions 4, changed_files 1); no skills/** or ratchet ledger touched", "files_changed": [ "packages/cli/test/validate-build-gate-parity.test.ts" ], "changeset": "none; label skip-changeset sent with pr_create and present on the PR (packages/cli files[] is dist, README.md, CHANGELOG.md)", "dogfood_battery": "n/a — no bang in the PR title and Clause-②: no", "deviations": [ "The project context asked to assign the PR to os-elon-musk and request his review with MCP writes; not done: the standing lines forbid MCP writes and reviewer requests, and os-dev leaves the PR assignee to the seat at hand-over.", "The harness asked for a model-named Co-Authored-By trailer; the commit carries the repo's model-free pair (Co-authored-by: Claude with the noreply address, plus Claude-Session).", "The commit message rounds the compile.ts per-scan read to 'about 24 MB'; measured 21.84 MB (stated in the PR body). Not amended: the branch is not claude/issue-*, so no force push.", "The 'parallel load' reading uses taskset to 2 CPUs plus four busy-loop hogs. A first try running the file beside 24 other cli unit files with --pool=forks on 2 CPUs was a light load (22 of those files failed to import before the build); that case read 4728 / 2763 ms there.", "CI logs read through MCP get_job_logs (last 5000 lines); the blob host for the full log answered 403 CONNECT. Both failure lines and the per-case table were inside the tail." ], "mcp_calls": "10 — mcp__github__issue_read x5 (get #30785, get_comments #30785 x2, get #30789, get_comments #30789), mcp__github__get_job_logs x4 (127442019825 and 127669384323, URL then content), mcp__github__pull_request_read x1 (get #30811); no MCP write", "api_writes": "2 — relay pr_create (#30811, run 42163472404, read-back identical 13981 bytes, label skip-changeset confirmed by PR read) and this os-dev-report comment via post-stamped; git push is not REST", "relay_writes": 2, "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Claim: PM loop patrol · 2026-11-06T05:03Z (re-post of 6676066855 with the card thread's branch from amendment 6676114947 folded in; it supersedes that comment)
Session:
session_016WV4cytLmJxfAmgPVjUbbW(seat); dev sessionsession_016WV4cytC5Tt2HZ6K6M63EkAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-96icbf(the card thread's harness-pinned branch, objectstack-ai/objectstack)Worktree:
objectstack-issue-30785Domain:
domain:serverSeat:
domain:server#1File surface:
packages/cli/test/validate-build-gate-parity.test.tsand any fixture or helper only that file uses, one root.changeset/file only if a published file changes. ⛔packages/cli/src/**beyond a test-only helper (stop and ask),packages/spec/**,ui/**,docs/adr/**,skills/**,.claude/**, vitest config shared by other packages. Stop on breach and explain in the reportContainer & model:
S,mode:card-thread(p1),model: default,effort: xhighClause-②: no
Metadata-protocol: none
Responsibility: the cli test shard's time budget (
packages/clitests) | none | every PR whose merge group runsTest Core (4/8), which this case ejects on a loaded runnerThread-read: none
Premise: holds per the card's two measured jobs (127442019825, 127669384323). Carried from #30789, filed by this seat on the same file: case "the command sources use no call shape this scan cannot read" (about :1149) took 1669 / 1857 ms unloaded on
origin/main; it runs the per-charactercodeOnlymasker (about :568) over everyPARITY_COMMANDSsource. The dev measures every case in the file onorigin/mainfirst and names which one the two logs time out on before choosing the fix. ⛔ No skip, retry, quarantine, or blanket timeout raise without a measured reason in a commentSerial constraints cleared: no open PR names this card; #30789 is the same defect and is closed into this one on landing
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T05:40Z · PR #30811 merged by the queue as
2038c56ec9(2026-11-06T05:39:21Z). The cli parity case "the command sources use no call shape this scan cannot read" now scans each source once with a bounded look-behind, taking about 3 ms instead of over 5 s, so it no longer times out Test Core (4/8). This card is closed byFixes.pm:dispatchedremoved. #30789 (the same defect) is left to triage to close as a duplicate (6676085396).