hertz -> doyle + todlando + liam. STOPPED-CELL PREDICATE REPORTED AS WRITTEN, AND IT IS WORSE THAN A DURATION ASSERTION. Fixed before the arm, not during it. New blob named below. 1. THE PREDICATE AS WRITTEN, verbatim from twohost_bootstrap.rs @1b636dc2, the state it would have run in: fn bootstrap_stopped_from_second_machine() { let budget = Duration::from_secs(1); let (face, elapsed) = rig.attempt("stopped/attempt1", budget); match face { Face::Stopped => eprintln!("refused in {} ms - STOPPED is distinct from ADMISSION-BLOCKED"), Face::Blocked => panic!("expected STOPPED, saw ADMISSION-BLOCKED (timed out at {} ms) - THIS IS THE FINDING, not a flake: the two refusals share a face at the wire ... Report the measured times; do not soften this assertion."), There is NO assertion on elapsed anywhere in the cell - todlando was looking for the right thing and it is not there. The sub-second bound is the CONNECT BUDGET ITSELF, which is strictly worse: a refusal arriving at 2 s does not merely red, it is classified Face::Blocked and reds AS THE LEG'S HEADLINE FINDING, under a message that instructs the reader not to soften it. That is the sidecar-parser class escalated one level - a predicate that cannot express the right answer, wired to the conclusion we most wanted to be able to trust. 2. WHERE THE ~2 s LIVES - one candidate eliminated, by measurement, on my own box only. todlando's two numbers (2.042 s loopback, 2.023 s own-LAN) are both Windows-CLIENT measurements, so they cannot separate "Windows is slow to emit RST" from "curl/Windows is slow to report one". They also do not transfer to my cell, whose client is Linux and whose library is not curl. So I measured MY client's contribution locally on kitsubito - a connect to a closed localhost port, no LAN, no Windows, an unmodified subject that references nothing in the rig: local_refused attempt0 0.242 ms attempt1 0.031 ms attempt2 0.027 ms (ConnectionRefusedError) My client contributes ~0. So the ~2 s is on the peer side of the wire in some form, and which form is still open. I am NOT proposing an arm for it - see 4, it answers itself for free. 3. FIX APPLIED, smallest diff that is correct under BOTH remaining readings: budget 1 s -> 6 s, matching the blocked arm. A genuine refusal returns the instant the RST lands whatever its latency, so raising the budget cannot cost discrimination; only a true drop now consumes the full 6 s. The discriminator stays the FACE (RST vs timeout) and elapsed stays logged-never-asserted. The comment records both measurements by hand and date so the next reader cannot re-tighten it. blob 1b636dc235908f3b6217feb780c1d9af081c9bbd -> 49102e395c3778a8378f3cc5ed06b95ac5a00bbe check/clippy --workspace --all-targets running now; I will name the exit codes before I fire, and the population must still read 4 cells. If either is nonzero I do not fire. NOTE so nobody misreads it later: 6 s is now BOTH arms' per-attempt budget, so a stopped-timeout and a blocked-timeout take the same wall. That is intended - the wall was never the discriminator - but no one should read the 6 s as distinguishing anything. 4. FREE DATUM FROM A3b, not a criterion. If my cell passes it logs elapsed_ms beside the face. A few ms there proves the ~2 s is the Windows CLIENT path and Windows emits RST promptly; a ~2 s reading proves the peer is genuinely slow to refuse. Either way the cell PASSES and liam's residual question about where that 2 s lives gets answered by an arm already in the sequence, at no extra cost. 5. Labelling, per doyle's (4): my stopped cell runs at F-PRESENT state and is labelled THROUGH THE HAND RULE exactly as the admitted cell was. It witnesses the product's refusal semantics; it does not witness the product's admission, and no green from it may be cited for REQ-WEB-LAN-BOOTSTRAP-FIREWALL's admitted leg. Same sentence, same place, in the source paragraph todlando asked me to keep. Standing: fire only on todlando's stamp, after liam's F re-add. Nothing of mine on HFENDULEAM.