Skip to content

test(cli): quarantine the never-read-reader hang case behind #14832 (maintainer ruling A, 2026-09-03) - #14871

Merged
os-project-manager merged 2 commits into
mainfrom
claude/issue-14832-quarantine-never-read-case
Sep 3, 2026
Merged

os-project-manager merged 2 commits into
mainfrom
claude/issue-14832-quarantine-never-read-case

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Part of #14832

Ruling and provenance

Maintainer ruling A on #14832 (2026-09-03, live PM chat with the director seat, verbatim 「A,你现在就派发处理」), recorded at 14832#issuecomment-5521280392: until the hang in bin/run-dev.js is fixed, the one case that has been ejecting every merge-queue batch is quarantined so main can advance. This is a gate-weakening act taken by the maintainer and recorded as such; the quarantine is not a resting state.

What changes (tests only, one file)

packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts:

  • describe('the mirror direction: a reader that is never coming back') › it('gives up and exits instead of waiting forever') → it.skip(...), with a note stating the ruling, why (the 'never-read' child hangs under CI load — a product defect in bin/run-dev.js, not a cap set too low — and each occurrence ejected a whole merge-queue batch), and the re-enable condition. The case body and its comments are untouched, so lifting the quarantine is it.skip → it plus one spawn line.
  • The 'never-read' spawn in beforeAll is commented out verbatim (that spawn is where the 180 s UNREAD_HARD_CAP_MS is paid; the skipped case is its only consumer — unread is read nowhere else in the file). The 'destroy-read-end' spawn and every other case stay live.
  • let unread!: Lifetime — a definite-assignment assertion so the file stays strict-clean while nothing assigns it; it goes when the spawn is restored.

⛔ bin/run-dev.js, RUN_TIMEOUT_MS, UNREAD_HARD_CAP_MS, STDERR_DRAIN_STALL_MS and every other test are untouched. No changeset: tests-only (skip-changeset).

Re-enable condition

The PR that fixes the hang in bin/run-dev.js (the domain:cli lane's, branch claude/issue-14832-run-dev-unread-reader-hang) un-skips the case and restores the spawn in the same change; if that PR must not touch this test file, the director seat lands the one-line un-skip the moment the fix merges. #14832 stays open until then.

Verification

Branch head edf00951 (two commits, both by the dispatched os-dev). The dispatched dev's local run (the file's suite with the case reported as skipped and no 180 s wait, package typecheck, the derived gate family) is posted on #14832 as its os-dev-report; the merge queue's own CI on this PR is the landing evidence — with the spawn removed, Test Core (1/6) no longer carries the three-minute tax.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ShyhexkB2d1AeRZ85tgAAe


Generated by Claude Code

…maintainer ruling A)

The `'never-read'` case in run-dev-unbuilt-workspace.e2e.test.ts hangs under
CI load and was SIGKILLed at the 180 s cap on `Test Core (1/6)`, ejecting a
whole merge-queue batch each time. The product hang lives in
`packages/cli/bin/run-dev.js` and is fixed separately; until it lands the case
is skipped and its `beforeAll` spawn — the only place the 180 s is paid, and
consumed by that case alone — is commented out verbatim beside a restore note.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ShyhexkB2d1AeRZ85tgAAe
…ignment assertion

With the `'never-read'` spawn commented out nothing assigns `unread`, and
`strict` then reports TS2454 at each of the three reads inside the skipped
case. The package's own `typecheck` is `include: ["src"]`, so it never
compiles this file and reported exit 0 either way; measured against an
equivalent strict program the pristine file is 0 errors, the quarantine
without this assertion is 3, and with it 0 again.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ShyhexkB2d1AeRZ85tgAAe
@github-actions github-actions Bot added the size/s label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 2263ca4d679026335f559184c0bed4e76d35a242 → packageMentionDocs.

@os-project-manager os-project-manager added tests skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s labels Sep 3, 2026 — with Claude
@os-project-manager
os-project-manager added this pull request to the merge queue Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants