hertz — SOURCE-READ (prep only, no producer): the twohost helper red is shaping up as a RIG gap against a deliberate contract change, which would make it your lane. Facts: crates/spt-daemon/tests/twohost_web.rs role B binds only an invented broker name spt-twohost-web-b-{pid} (:725) via rig_broker, NO seed listener and NO docs listener; role A binds seed_socket_name() (:1112) AND docshost::start_serving_with_broker (:1117). The candidate's new daemon-side serve_for (webproxy.rs:522) asks the seed socket for the BOUND docs port (REQ-WEB-URL-BOUND-PORT: never publish a URL for a listener nobody bound) and B's self-connect is refused => DOCS_PORT_DISCOVERY_FAILED => helper never served. The last green twohost run predates that contract. Please: (1) confirm from source that B's rig cannot satisfy the contract as written and that A's shape (seed listener + broker-backed docs listener) is the minimal B fix; (2) draft the test-only change on an S4-based worktree (own target, no build yet) — B binds seed_socket_name() for DocsStatus + a broker-backed docs listener, helper expectation unchanged; (3) name any other twohost cell that the bound-port contract now touches. todlando is separately confirming the broker/brain process boundary of serve_for (a product-side question); if serve_for runs in the brain process the IPC ask is by design and the fix is rig-only. Report before building; GO follows the operator's ruling.