Filing gate: ① a defect with a repro: scripts/check-error-status-conformance.mjs, walk(). It is a race that turns a required CI check red for a diff that did not cause it. Filed by the domain:spec execution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
The failure, read from CI
On PR #19906, head ebd7fc2fa8, job 107291871777 (Test Core (1/6)), @objectstack/spec:test:repo:
FAIL repo src/api/error-catalog-docs.test.ts
Error: ENOENT: no such file or directory, stat '…/packages/spec/tsup.config.bundled_pl88v2k715.mjs'
- the error is annotated at
scripts/check-error-status-conformance.mjs line 1802
The PR's diff touches view.zod.ts, one new test, a changeset and a generated doc page. It touches nothing the walker reads by content.
The cause, read at source on origin/main 8490127962
function walk(dir, out) {
for (const e of readdirSync(dir)) {
if (SKIP_DIRS.has(e)) continue;
const p = join(dir, e);
const s = statSync(p);
…
readdirSync lists an entry, then statSync runs on it. tsup writes tsup.config.bundled_<random>.mjs next to tsup.config.ts while it bundles the config, then deletes it. A spec build running concurrently in the same CI job can create and remove that file between the two calls. The file would be filtered out anyway, because it is .mjs, not .ts / .tsx. But the stat happens before the filter.
Suggested shape (⛔ not a ruling)
readdirSync(dir, { withFileTypes: true }) and Dirent.isDirectory() stat nothing for plain files, so the race cannot hit a file the walker was going to drop anyway. Apply the name filter before any stat, and treat an ENOENT on a vanished entry as absent rather than fatal. Other scanners in scripts/ with the same readdir-then-stat shape are worth a census in the same round.
Dedupe
MCP issue search in this repo, closed included, at 2026-09-23T18:25Z: tsup.config.bundled ENOENT error-catalog-docs test race check-error-status-conformance → 0 hits.
Dedupe words: tsup.config.bundled ENOENT · walk readdir stat race · error-catalog-docs flake
Generated by Claude Code
Filing gate: ① a defect with a repro:
scripts/check-error-status-conformance.mjs,walk(). It is a race that turns a required CI check red for a diff that did not cause it. Filed by thedomain:specexecution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.The failure, read from CI
On PR #19906, head
ebd7fc2fa8, job107291871777(Test Core (1/6)),@objectstack/spec:test:repo:FAIL repo src/api/error-catalog-docs.test.tsError: ENOENT: no such file or directory, stat '…/packages/spec/tsup.config.bundled_pl88v2k715.mjs'scripts/check-error-status-conformance.mjsline 1802The PR's diff touches
view.zod.ts, one new test, a changeset and a generated doc page. It touches nothing the walker reads by content.The cause, read at source on
origin/main8490127962readdirSynclists an entry, thenstatSyncruns on it. tsup writestsup.config.bundled_<random>.mjsnext totsup.config.tswhile it bundles the config, then deletes it. A spec build running concurrently in the same CI job can create and remove that file between the two calls. The file would be filtered out anyway, because it is.mjs, not.ts/.tsx. But thestathappens before the filter.Suggested shape (⛔ not a ruling)
readdirSync(dir, { withFileTypes: true })andDirent.isDirectory()stat nothing for plain files, so the race cannot hit a file the walker was going to drop anyway. Apply the name filter before anystat, and treat anENOENTon a vanished entry as absent rather than fatal. Other scanners inscripts/with the same readdir-then-stat shape are worth a census in the same round.Dedupe
MCP issue search in this repo, closed included, at 2026-09-23T18:25Z:
tsup.config.bundled ENOENT error-catalog-docs test race check-error-status-conformance→ 0 hits.Dedupe words:
tsup.config.bundled ENOENT·walk readdir stat race·error-catalog-docs flakeGenerated by Claude Code