---
name: twohost-web-helper-stall-shared-a-identity-stale-path
description: "the ~63 s two_host_web_helper_role_a stall = six 10 s QUIC bounds on B's dial; every A cell shares ONE node identity on different ports, B holds stale paths for it — CONFIRMED by hertz one-variable discriminator 2026-09-08 14:38Z (63.4 s -> 3.4 s, 6 -> 1)"
metadata: 
  node_type: memory
  type: project
  originSessionId: b8201d4f-8b73-4b24-b257-ffeee9448400
  modified: 2026-09-08T14:34:06.968Z
---

**CONFIRMED 2026-09-08 14:38Z** (hertz, one variable: A filtered to the helper cell alone, rig source unchanged by `diff --stat`, same tree and pool): helper wall 63.371 s -> 3.379 s, "A not ready" 6 -> 1; the survivor decomposes by b.raw's own CONN_LIFECYCLE stamps into one 10 s bound + one 2 s sleep, the ordinary first-dial miss. A's readiness and the pump are both exonerated. The narrowed-A run's b.exit 100 / role_b "1 timed out" is the FILTER (B waits for five served cells), not a red. Rulings: fix on its own thin lane (per-cell A identity + expected-cell count follows the filter), NOT on the :920 rider; battery = the discriminator repeated unfiltered on both OSes against the fd296557 raws (6/6, ~64 s) as the before; register entry filed at release close as a QUESTION with hertz's measurement design; the rider drops its "65 s" name.

State as of 2026-09-08 14:40Z (the derivation, kept for the mechanism): hertz's r1 refuted the pump linkage (web rig runs no pump, twohost_web.rs:794; zero PUMP_ lines beside 30 CONN_LIFECYCLE lines). The preserved B raws (.spt/preserved/w3-fd296557/web-win/b.raw and gate/k-web/b.raw) show EXACTLY SIX "A not ready … broker QUIC op exceeded the 10s bound (peer unresponsive)" then "ADMITTED (Spooled)" — same count on both OSes, deterministic; 6 x (10 s nethost.rs:1478 + 2 s sleep twohost_web.rs:524). Source: twohost_web.rs:686 mints EVERY A cell with `rig.id_a` on port_a+offset; the deny (7482) and fetch (7480) cells dial B and die in 0.3 s before helper cell 3 (7483) is up, so B's node-keyed iroh magicsock holds stale paths for id_a and (hypothesis) chases them until expiry.

**Discriminator dispatched to hertz (zero code):** A filtered to the helper cell alone. Vanishes = confirmed, rig fix = per-cell A identity (hertz's lane under the dispatch split). Persists = QUIC dial from a FRESH endpoint beside B's broker's dial (not a TCP port poll). Product candidate for docs/INFRA-REGISTER.md only if confirmed: a same-key daemon restarting on a new port unreachable ~60 s to peers holding the old path. hertz's :920 wall_ms/mono_ms commit stands as a ladder instrument, unlanded until deployah's golden ref. Verify the state with hertz before acting on this.

**SECOND FACE, golden 34239258523 twohost legs 2026-09-08 (both RED):** under `cargo test` the four role-A cells run as THREADS in one process, all alive at once, all keyed id_a, only cell 3 with a dispatch loop; B's dial to id_a landed on a live same-key sibling that accepted the stream and never replied; A printed no HELPER_SERVE_FOR; B hung in request_wan's unbounded reply read (wan.rs:295-307, NoReply only on EOF) for 21 min against a 900 s rig deadline, until A's process death propagated. Under nextest (per-process cells, siblings dead) the same collision wore six 10 s dead-path bounds and a 63 s stall. Lane 3 (17443615) rides r2 as FIX-SET. Separate pre-existing product hazard (ec360f16, 2026-06-30): request_wan's reply read has no deadline — filed as a bugfix request via alchemy for todlando's next lane.
