# RCA — golden #4 (35372054865 @ 7e35ba43) Windows test leg: `spt-daemon::sync` pair red at sync.rs:109 — doyle 2026-09-18 18:03Z

**Verdict: TEST-SHAPE red (known lineage), product path not implicated, #235 not causal. Same-sha rerun of the failed jobs is authorized once the run is terminal; test fix dispatched to hertz as a rider (post-ship, or the golden #5 shape if the rerun reds again).**

## Subject
- Job 105688249400, step 19 "Phase A (light pool)" 17:13:27–17:37:46Z, 3472/3474 pass.
- FAIL [20.297s] `concurrent_writes_reconcile_on_elected_node_and_converge`; FAIL [55.624s] `two_tier_sync_lands_and_gate_refuses_server_side`; both `panicked at crates\spt-daemon\tests\sync.rs:109:5: sync stream never appeared at the responder's broker` (`wait_for_stream_except`: 400 polls × (brain.net_streams() IPC + 25 ms sleep)). Log: `deployah-windows-job.log` lines 2854–2913.
- Lineage: identical panic + 55.685 s duration in gate-r2 `34481993681` (2026-09-10, `.spt/preserved/gate-r2-34481993681-20260910/PROVENANCE.md:92`); v0.69.0 shipped over the same red by explicit operator SHIP (#294 comment 5627775116, UNCLASSIFIED); hertz instrumented it in `.spt/preserved/hertz-294-sync-stages/` (unlanded diag branch).

## Delta test
- Product delta since golden #3's GREEN Windows Phase A (71165e35): only #235 = `crates/spt/src/api/startup.rs` (+1 test, docs, toml). `spt` depends on `spt-daemon`; `spt-daemon::sync` is in-process (hermetic loopback NetHost, in-proc brokers, no `spt` binary) ⇒ #235 cannot reach it. #236 is workflow-only.

## Discriminating measurement (same box, same day, same tests)
| run | Windows Phase A result | two_tier | concurrent_writes | box |
|---|---|---|---|---|
| golden #1 35299506382 03:05Z | PASS | 91.4 s | 102.5 s | loaded (Phase A parallel) |
| golden #2 35313912102 06:41Z | PASS | 99.4 s | 114.7 s | loaded |
| golden #3 35349501073 13:49Z | PASS | 121.8 s | 132.4 s | loaded (>120 s SLOW) |
| golden #4 35372054865 17:31Z | FAIL | 55.6 s | 20.3 s | cpu 32–39 %, diskidle 69–77 % |
| Linux golden #3 | PASS | 1.5 s | 1.9 s | — |

Every pass is SLOW; the red is the FAST case. The bound is iteration-counted, not wall-clocked: when the box is loaded each `net_streams()` IPC costs tens of ms, so 400 polls span far more than 10 s and the stream is observed inside the budget; on a quiet box the 400 polls exhaust in ~10 s wall. What the responder's poll is actually waiting on is the REQUESTER thread's pre-send phase — `ContextStore::open_or_init_in` + ref-tip resolution inside `request_sync` (hertz's Windows instrumentation: store_init 1.93 s + tips 2.46 s = 4.4 s from poll_start to send_api_entry; registration→observation 14 ms once sent). That phase is filesystem-bound (git init/commits under Defender) and unbounded by the test; when it exceeds the poll's wall span, the assertion fires with the product's stream path never exercised. Dominant hypothesis, not yet directly measured on the red (no instrumentation in the golden shape); the fix below doubles as the instrument.

## Ruling
1. **Same-sha rerun** (`gh run rerun 35372054865 --failed`, deployah) once twohost-a/b are terminal; twohost re-run as dependents. Reserved-runner window extends to the rerun's terminal. A green rerun ships 7e35ba43 tested==shipped. Odds are not certainty: 3 pass / 1 fail today.
2. **hertz rider (test-only):** `wait_for_stream_except` bound in WALL time (≥60 s, early exit unchanged) with one printed line on exit/exhaustion (elapsed, iterations, ipc ms) so a future exhaustion names its phase; keep the nextest 240 s backstop margin in mind (golden #3 already at 132 s). Author git-only during the reserved window; prove in a Windows cell after the rerun's terminal; lands post-ship as a rider, or becomes the golden #5 shape if the rerun reds.
3. Register: fold into IR-95's lineage or mint IR-145 at the close (doyle).
