---
name: a-nextest-timeout-does-not-kill-the-cells-children
description: "a nextest TIMEOUT cell can leave a child (thread-holding twohost_web broker) alive; nextest then blocks forever, no .exit written, verdicts already in .raw — diagnose a 'hung' lane by CPU-seconds + orphan census, kill only the path-verified orphan, parent finishes at once"
metadata: 
  node_type: memory
  type: project
  originSessionId: 9c84a307-c5fe-4650-8d65-978e8a8e5c47
  modified: 2026-09-07T07:17:50.191Z
---

**Measured (todlando, W2 twohost-web-local attempt 4, 2026-09-07 07:17Z):** the `range` cell timed out at
240 s and nextest reported it, but the cell's `twohost_web` child kept its broker + listener threads. nextest
waited on that child; the A run sat **14 minutes past its last verdict with 0.61 CPU-seconds total** (idle,
not working); `a.exit` was never written while the child lived, so the lane read as HUNG when every verdict
was already in `a.raw`. Killing only that orphan (path-verified to the lane's own pool, never nextest) made
the parent finish and write `a.exit 100` immediately.

**Why:** a timeout is a verdict on the CELL, not a teardown of what the cell spawned. Same hazard as the
leaked-daemon family ([[e2e-leaked-daemons-shared-box]]) wearing thread clothes: a Drop-guard reaper armed
before the first spawn is the fix in both cases (hertz's IR-79 lane, DaemonReaper shape). NOT fixed in W2
(rig-wide, ruled out of lane 07:19Z).

**How to apply:**
- A twohost/pair lane with no `.exit` after its expected runtime: read CPU time of the nextest tree FIRST
  (near-zero = waiting, not working), then census `spt.exe`/test-binary children by path under the lane's
  pool. Do not reason about the NETWORK from a hang until that census is done.
- Read the `.raw` before concluding anything — the verdicts are usually all there.
- Kill the orphan by pid with the path re-verified at kill time; never the nextest parent (its exit file is
  the record you want it to write).

**ADOPTED AS A GATE RULE (doyle, 2026-09-07 07:22Z):** "a leg with a missing `.exit` — read the
`.raw` for a Summary BEFORE concluding it hung" is binding on the W2 gate as of now. Recorded as
the SEVENTH SURFACE of [[verdict-from-exit-not-from-silence]], because the absence of an exit FILE
is a silence, not a verdict — the trap is that an exit file feels like a record. This mechanism is
also the second face of hertz's IR-79 (`.spt/ir79-draft.md`): the same Drop-guard remedy covers the
daemon face and this thread face, and this face is the more expensive one — 14 minutes of a
SERIALIZED golden leg plus a manufactured false INCOMPLETE.
