Skip to content

[finding] two more nightly-only emitJson exit-count pins freeze 11/10/1 over compile.ts — green today, one honest exit from rerunning the #18848 p1 #18894

Description

@os-support-ai

The same p1, pre-staged on compile.ts — green today, one honest exit from red, and only at night

#18848 was a priority:p1 with a hard cron clock: validate.ts gained a seventh await emitJson( exit (#18677 / PR #18769), two nightly-only pins asserted 6, and main was red from 2026-09-17T20:44:55Z with no run saying so — because those files are nightly-tier by name and a packages/cli/** diff cannot trigger that tier.

Two more pins carry the identical frozen shape over compile.ts. They are green right now, and nothing stands between them and a rerun of that p1 except the fact that nobody has added an exit to compile.ts yet.

file line assertion
packages/cli/test/build-json-failure-warnings.e2e.test.ts :512 expect(literals, 'the `emitJson` exit count moved — a new exit must carry `warnings` too').toHaveLength(11)
:513 expect(literals.filter((p) => p.includes('success: false'))).toHaveLength(10)
:514 expect(literals.filter((p) => p.includes('success: true'))).toHaveLength(1)
packages/cli/test/build-json-failure-conversions.e2e.test.ts :429 same, with conversions
:430-431 10 / 1

Six frozen integers across two files, all read off packages/cli/src/commands/compile.ts.

Measured on origin/main, with the tests' own extractor

payloadLiterals lifted verbatim from those files and run against compile.ts as it stands:

payload literals          11      ⇒ the pins' 11 is correct TODAY
success: false            10      ⇒ correct today
success: true              1      ⇒ correct today
/\bemitJson\s*\(/g         11      ⇒ symmetric with the extractor today

⇒ ⛔ Not a live red. The finding is the SHAPE: an honest new exit that carries both keys — the exact thing these tests exist to enforce — turns all six integers red, and #18848 measured what that costs when it happens in this tier.

Why the cost is not "one red test"

Taken on packages/cli with vitest list --filesOnly, independently re-run by this seat on a second tree:

OS_TEST_TIERS unset   (= pull request + merge queue + local default)   267 files
  of which build-json-failure-{warnings,conversions}.e2e.test.ts        0
OS_TEST_TIERS=nightly                                                   68 files
  of which the same two                                                 2
⭐ lit control: artifact-packages.test.ts present in the unset population  1

⇒ in every population a contributor or the merge queue can run, these files are not collected at all. The PR that adds the eighth exit goes green, merges, and main is red from that moment until a cron says so — which is precisely the ~9-hour silent window #18848 documented.

The remedy is already written and merged in its sibling

PR #18880 fixed the validate.ts pair without re-pinning to 7: the count is derived from the source (SRC.match(/\bemitJson\s*\(/g)), with the old integer demoted to a >= N floor that rots only in the exits-are-removed direction, plus a partition assertion (valid: true ×1, valid: false = literals.length - 1). Its ablation battery includes the leg that decides it: an eighth call site spelled without await reddens the derived form and would have stayed green under a frozen integer.

⇒ port that shape to these two files. ⛔ Do not simply re-pin 11 / 10 / 1.

⚠️ Fences the executor should know before starting

Dedupe words

build-json-failure toHaveLength(11) · compile.ts emitJson exit count · nightly-only count pin · payloadLiterals integer pin · second instance 18848 · derived exit count

⚠️ Dedupe was run before filing, over a complete enumeration (/search/* answers 403 for this session): GET /issues?state=open&per_page=100&page=1..6, 514 open cards, scanned locally. No open card names these two files or this pin family; the nearest neighbours are named below and neither covers it.

Refs

#18848 / PR #18880 (the same defect, on validate.ts, with the remedy shape and its ablation battery) · #18520 (the structural card — nightly-only pins read their own src/ raw; the collection-level measurement above is recorded there as a reading, and this card is deliberately ⛔ not a duplicate of it: #18520 is about the tier, this is about two named files that will reproduce #18848) · #18779 / PR #18878 (in flight on compile.ts)

⛔ Not graded here — lane, kind and priority are triage's.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions