diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index 4c1852a0..2f011b62 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -783,6 +783,16 @@ search cannot find a *schedule*. been running; **T74 and T75 move off a semaphore onto an event** (the only threads that change what *kind* of object they wait for → chase these first); T50 drops `WaitMultiple(XEvent,XEvent)` → `Wait(XEvent)`. +* 🔴 **(2026-08-25) WITHDRAWN: the T74/T75 signature.** It does **not** reproduce + — in run 2 they are on `Wait(XEvent)` while **healthy** and stay there. My + error: the healthy state is not fixed either, so a **one-sample-per-state** + diff cannot separate a freeze transition from ordinary variation between two + instants. ✅ **What survives two independent captures:** T68 and T69 go from + not-waiting to waiting in *both* runs (T69 on a semaphore, T68 on an event, + both times), and the bulk of threads are untouched (17/24 run 1, **21/24** run + 2) ⇒ **not a whole-emulator stall** now has two captures behind it. **Next: + repeat the capture several times inside ONE healthy run** to learn which thread + states are stable before reading any frozen diff as meaningful. * ✅ **(2026-08-25) CORRECTION: `screen_id == flight` is NOT a freeze test.** The previous entry used it to rule out a freeze. `frozen.py` exists precisely because a frozen mission still classifies as `flight` (its docstring: 724 s of @@ -794,7 +804,11 @@ search cannot find a *schedule*. Run flew **~670 s clean** with only the pilot; a heavy-CPU inducer (`heavy_read.py cpu`) started at 08:59:54 and it froze at **09:00:48 — 54 s later**, inside the 27–255 s band. Consistent with the existing tally but - **n=1, not causal** (confounder: elapsed mission time). ✅ **Refuted en route: + **n=1, not causal** (confounder: elapsed mission time). ⬆️ **UPGRADED to n=2 + (2026-08-25)**: run 2 put the inducer **on from flight start** and froze + **~96 s** in (10:07:20 → 10:08:56). Both freezes sit inside the 27–255 s band; + the only long clean stretch is the only window with no inducer. Contrast is + sharp, confounder still untouched. ✅ **Refuted en route: the I/O was never the cost** — a full uncapped walk of every allocated extent is **371 MB in 0.1 s**, all page cache; the expense is Python-level CPU, ~4.2 s a pass. **Settle it with:** alternating inducer-on/off windows within a run,