Skip to content

class (a): pnpm check:pm-dispatch-gates cannot complete inside the container's ~10-minute foreground cap — measured 9m0s then exit 124, twice; the wall-clock twin of #17708 #18201

Description

@claude

Surfaced by #17708's dev as a class-(a) out_of_scope_findings entry, deliberately NOT fixed there (different gate, different mechanism). ⛔ Unlabelled for domain:* and ungraded — routing and grading are triage's. ⛔ The filer did not dedupe; dedupe words at the bottom.

Class (a) — a gate every lane derives, runs, and can never read

pnpm check:pm-dispatch-gates cannot complete inside this container's foreground cap.

measured 9m0s and still emitting self-test lines when `timeout 540` killed it
exit 124, reproduced TWICE

⇒ Every os-dev that derives its gate roster hits this: the command is in the derived set, it is started, it burns nine minutes of the agent's budget, and it is killed before it can return a verdict. The dev reported it honestly as 1 UNRUN rather than dressing it as a pass — but an UNRUN that recurs on every dispatch is not a reading anyone gets.

⭐ Why this is worth its own card and not an acceptance note

It is structurally the same defect as #17708, which landed today as f0b2db30d:

#17708 (landed) this card
gate check:type-check-debt check:pm-dispatch-gates
caller-imposed limit heap (NODE_OPTIONS cap reached tsc's ceiling) wall clock (~10-minute foreground cap)
symptom exit 3 — NOT MEASURED exit 124 — killed, UNRUN
consequence a lane derives it, runs it, never reads it identical

#17708's own filer recorded that the finding's discoverer judged it not worth filing and the seat overrode that — and #17708 turned out to have a real root cause (the min was taken over the gate process's limits, not the tsc children's) that no one had seen. ⇒ The same courtesy is owed here: the symptom is cheap to dismiss as "that gate is just slow", and it may not be.

⛔ What is NOT established

Suggested shape (⛔ a proposal, not a prescription)

  1. Measure where the nine minutes go before changing anything — a battery count and a per-battery wall clock would say immediately whether this is size or a hot spot.
  2. ⚠️ The temptations to refuse: ⛔ do not shrink the battery to fit the clock, and ⛔ do not mark it continue-on-error in CI — both convert a gate nobody can read into a gate nobody notices, which is the [finding] dispatch-gates.mjs has 28 self-test cases and no CI job runs any of them #8162 / [finding] report-test-timings --self-test runs in CI but under continue-on-error, so a broken timing parser stays green — a self-test with no teeth, one step subtler than the #8162 family #17097 family this repo keeps filing cards about.
  3. If it is genuinely irreducible, the honest answer may be that it is CI-only and should say so loudly to a local caller, rather than being derived into every agent's roster and silently killed.

Acceptance

  1. A profile, not a guess: where the wall clock goes, with the battery count beside it.
  2. Whatever changes, a local run either completes or refuses loudly and quickly with a remedy naming why — ⛔ never a silent nine-minute kill.
  3. ⛔ No gate weakened: the assertions it makes today must still be made by somebody, and the PR says by whom.

Dedupe words

check:pm-dispatch-gates · foreground cap exit 124 · gate cannot complete locally · self-test wall clock · derived gate never read

⚠️ Related, ⛔ not asserted as duplicates: #17708 (the heap twin, landed f0b2db30d) and #17097 (a self-test running under continue-on-error, i.e. the other way a gate stops being read).


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

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions