## Gate arm r2 — golden 34481993681 — **RED** (measurements + classification)

Filed by deployah. **Measurements only plus doyle's classification — no state-label changes, no
milestone work, no close-out.** `34445961595` **remains the verdict of record**; this run is a
**second red at the same cell**, not a replacement verdict.

### What r2 was

Pushed the OBJECT `a9e786b24fe4e541dcd394ef428f225d72f3024a` to `refs/heads/golden/crossnode-294-r2`
(`* [new branch]`; ls-remote sha matched, tree `74fa640f78b0a588cd01b90c5898f9ea73e5dc08` ==
`a9e786b2^{tree}`, all verified before the run id was recorded). `golden/crossnode-294` already
pointed at a9e786b2, so re-pushing that ref would have fired nothing.

This restores the record run's **workflow configuration** — `event=push`, twohost unconditional on
that path. It does **not** restore prior machine state.

### Verdict: RED — 8 of 9 jobs green, one red

Run terminal; scored from **per-job conclusions**, never the run-level field.

| job | conclusion |
|---|---|
| traceability, changes, n1-gate (Windows), n1-gate (Linux) | success |
| test (self-hosted, Linux, kitsubito) | success |
| **test (self-hosted, Windows, hfenduleam)** | **FAILURE** |
| twohost-a, twohost-b | **success** |
| notify | success |

### r2 is strictly better than the verdict of record on the twohost legs

Independently re-measured from the jobs endpoint at 14:32:18Z, not relayed:

| run | test (Windows) | twohost-a | twohost-b | reds |
|---|---|---|---|---|
| 34445961595 (record) | failure | **failure** (08:13:18Z) | **failure** (07:36:16Z) | **3** |
| 34481993681 (r2) | failure | **success** | **success** | **1** |

Both twohost legs failed on the run of record. Both passed on r2. The cross-node population the
entire twohost question was about is green at this sha.

### The failing leg, under the reporting contract

Summary count **1** against an expected **2** (Phase A + Phase B). The mapping does not close, and
the direction is a **deficit — a missing execution, not the doubled-execution poison shape.**

- Phase A Summary (structural position: `test-phase-a` group opens line 760, `Starting 3381 tests`
  line 798): `Summary [ 756.587s] 3381 tests run: 3380 passed (6 slow, 5 leaky), 1 failed, 1 skipped`
  — full population accounted.
- No Phase B, read structurally: `error: test run failed` → `##[error]Process completed with exit
  code 1`, next step group is FLOOR_END, not a second nextest. `--no-fail-fast` let Phase A finish
  its population; the step's nonzero exit ended the job before Phase B started.
- Corroboration: this job carries 4 CI-CENSUS phases where both bare arms carry 10 — the prerelink
  cycles belong to Phase B.
- Failure classes, suffix allowed: `FAIL + LEAK [` ×2 occurrences, `LEAK [` ×5, `panicked at` ×1.
  The two `FAIL + LEAK` occurrences are **one unique cell** (in-stream + final recap) = the
  Summary's own `1 failed`. Reconciliation closes.
- A bare `grep -c 'FAIL \['` on this log returns **0**. The failing row is `FAIL + LEAK`, so a
  FAIL-prefix grep reports no failures on a job that failed.

**The cell:**

```
FAIL + LEAK [  55.685s] (1987/3381) spt-daemon::sync two_tier_sync_lands_and_gate_refuses_server_side
crates\spt-daemon\tests\sync.rs:109:5
panic: sync stream never appeared at the responder's broker
```

Same cell passed on **Linux in this same run** at `1.523s`, and passed SLOW on both bare arms
(arm 1 `91.375s`, arm 2 `94.000s`). Linux leg clean: 2 Summaries against an expected 2, mapping
closes, zero failure-class rows.

Disk floor PASS (`free_bytes=62937976832` vs `floor_bytes=34359738368`).

### The wait, read at the candidate sha

`git show a9e786b2:crates/spt-daemon/tests/sync.rs` — line 109 is the panic. (`sync.rs` differs
between `main` and the candidate by 2 insertions / 1 deletion, so line numbers shift; only the
sha-correct read is reported.)

`wait_for_stream_except` is `for _ in 0..400 { net_streams(); sleep(25ms) }`. **The budget is an
iteration count, not a wall-clock deadline** — 400 × 25 ms = 10.0 s nominal only if the IPC call
returns instantly; actual wall time is 400 × (call + 25 ms) and is unbounded above.

### Classification (doyle's, recorded here — not deployah's)

**Finding 1 is no longer unclassified: DELAYED PUBLICATION, measured.** The wait budget sits inside
the measured tail of Windows sync-stream publication latency. Supporting rows (IR95-SYNC): rep1
first wait 176/400 at 4.448 s (ipc 0.53 %) PASS; rep2 392/400 at 9.940 s (ipc 0.48 %) PASS — eight
iterations of headroom, 200 ms on a 10,000 ms budget; instrumented CI 400/400 at 10.156–10.200 s,
FAIL 2/2; Linux same cell same run 1.523 s. IPC under 1 % everywhere means the wait is genuinely
waiting, so the budget measures the product's publication latency, whose observed Windows
distribution runs 4.4 s to past 10 s against a 10 s threshold. Pass/fail is jitter — hence 2-of-3 at
one sha on one box with the green sample chronologically between the two reds, and 0/12 local
because local reps land at 4.4–9.9 s as near-misses.

**The previously recorded gap "no arm tested the record's own conditions (twohost=true,
event=push)" is closed — both variables measure INERT on the test job at this sha.** twohost:
`twohost-a`/`twohost-b` are `needs: test` and the test job body carries no `inputs.twohost`
reference. event: the only event-keyed conditions in the test job body are golden.yml 674/681/691,
the three Dormancy budget steps, all gated on `contains(github.event.head_commit.message,
'[budget]')`, and a9e786b2's commit message contains that marker zero times — false on push and
dispatch alike, and below Phase A in the skip cascade regardless.

**The gate red is genuine, not void.**

### Status

**Release stays HELD** — not because the classification is open (it is closed), but because the gate
is red at the candidate sha and the red sits inside a shipping test's acceptance window. v0.69.0 not
cleared, core#218 unmerged, no tag, no publish, no board close-out. Scope unchanged: a gate failure
is not a scope change, so no relocation and no eval move is owed.

Preserved: `.spt/preserved/gate-r2-34481993681-20260910/` — both test job logs (Windows 578,896
bytes, Linux 682,195, both rc=0, empty stderr), `PROVENANCE.md`, and doyle's
`CLASSIFICATION-doyle.md`.
