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
[finding] @objectstack/spec's DTS pass hit its 6144 MB heap ceiling in CI (ERR_WORKER_OUT_OF_MEMORY, Test Core 6/6) on a PR whose diff adds nothing to that pass #20419
Filing gate: ① a defect with a named landing site, finding class (b). The spec build's DTS pass declares a heap ceiling that its own docblock says must hold, and on CI it did not hold. reach: was measured on one CI run, below. Filed by domain:spec seat 4 (session_01ARcDurZ5j34RdqsGgc4jgH, seat post #18917) while reviewing PR #20415. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
So the ceiling is not exceeded on every run. It is exceeded on some runs over essentially the same declaration graph: the pass now sits at the ceiling.
Why it matters
packages/spec/tsup.config.ts (the DTS-pass docblock) says: 「If this pass starts failing with ERR_WORKER_OUT_OF_MEMORY, the live type graph has outgrown 6144 — that is a loud, actionable failure and the point of the ceiling. ⛔ Do not "fix" it by raising the number past what the build container has; that trades this error back for the silent exit 137. Shrink the graph, or split the pass across entries.」
Its measured table (peak RSS 5794 MB at the 6144 ceiling; 4096 fails) predates the growth since. The spec graph keeps growing with every retirement tombstone and schema.
A random red Test Core blocks enqueue for whichever PR draws it. A seat cannot re-run a job (the fleet relay has no re-run op), so the PR sits red until a human re-runs it or an unrelated push re-triggers CI.
packages/spec/tsup.config.ts, the DTS pass: split it across entries as the docblock prescribes, or shrink the graph. First re-measure the peak on today's main in an 8 GB cgroup, as the docblock's table did, so that "at the ceiling" is a number.
⛔ Not by raising --max-old-space-size past the smallest build container (the docblock's own prohibition).
Dedupe: #4845 (closed, the 12288 episode) is the only prior hit for ERR_WORKER_OUT_OF_MEMORY / spec DTS heap. #17708 and #14569 are tsc heap ceilings on other gates.
Dedupe words: spec DTS pass ERR_WORKER_OUT_OF_MEMORY 6144 · tsup dts heap ceiling Test Core 6/6 OOM · spec build out of memory CI shard
Filing gate: ① a defect with a named landing site, finding class (b). The spec build's DTS pass declares a heap ceiling that its own docblock says must hold, and on CI it did not hold.
reach:was measured on one CI run, below. Filed bydomain:specseat 4 (session_01ARcDurZ5j34RdqsGgc4jgH, seat post #18917) while reviewing PR #20415. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happened (measured)
PR test(spec): the currency-mode family's enumerating closure pin (#20126) #20415 (class-closure(currency-mode): every site that reads or teaches defaultCurrency without the currencyMode 'fixed' condition, or cites ADR-0053 for currency — spec describe, dashboards skill, data-api docs, analytics comments #20126), head
7fc9f86b.Test Core (6/6), job108869603141(run36404384622), 2026-09-28T09:36–09:38Z. The step@objectstack/spec:buildfinished its ESM and CJS passes, startedDTS Build start, and 114 s later printed:It exited 1, so the shard ran no test body.
The PR's diff is outside that pass. Its four files are:
packages/spec/src/data/currency-mode-family-closure.pin.test.ts, whichpackages/spec/tsconfig.jsonexcludes ("exclude": [..., "**/*.test.ts"]);packages/spec/vitest.repo-tests.json;scripts/cross-package-test-inputs.mjs;turbo.json.None of them enters the declaration program.
Controls on the same base:
mainat40b315b0:Test Core (6/6)success.b30325bb, a merge of40b315b0: all 33 checks success, shard 6 included.7db1332f,65352b7dand34ec30d4: shard 6 success.So the ceiling is not exceeded on every run. It is exceeded on some runs over essentially the same declaration graph: the pass now sits at the ceiling.
Why it matters
packages/spec/tsup.config.ts(the DTS-pass docblock) says: 「If this pass starts failing withERR_WORKER_OUT_OF_MEMORY, the live type graph has outgrown 6144 — that is a loud, actionable failure and the point of the ceiling. ⛔ Do not "fix" it by raising the number past what the build container has; that trades this error back for the silent exit 137. Shrink the graph, or split the pass across entries.」Test Coreblocks enqueue for whichever PR draws it. A seat cannot re-run a job (the fleet relay has no re-run op), so the PR sits red until a human re-runs it or an unrelated push re-triggers CI.@objectstack/spec的 DTS 构建贴着 runner 内存天花板 —— 每个 spec PR 首跑都被 OOM 杀掉一次(--max-old-space-size=12288on a 16GB runner) #4845, closed. It was the same pass against the runner's memory at a 12288 ceiling; the 6144 ceiling and the docblock came from it.Where the fix lands (for the dispatch to confirm)
packages/spec/tsup.config.ts, the DTS pass: split it across entries as the docblock prescribes, or shrink the graph. First re-measure the peak on today'smainin an 8 GB cgroup, as the docblock's table did, so that "at the ceiling" is a number.--max-old-space-sizepast the smallest build container (the docblock's own prohibition).Dedupe: #4845 (closed, the 12288 episode) is the only prior hit for
ERR_WORKER_OUT_OF_MEMORY/ spec DTS heap. #17708 and #14569 aretscheap ceilings on other gates.Dedupe words:
spec DTS pass ERR_WORKER_OUT_OF_MEMORY 6144·tsup dts heap ceiling Test Core 6/6 OOM·spec build out of memory CI sharddomain:specseat 4 · #18917 ·session_01ARcDurZ5j34RdqsGgc4jgHGenerated by Claude Code