f4907d098c
FasterLogHistorizationOutbox.PeekBatchAsync held the state lock across the FasterLog scan. Once a backlog's head ages out of FasterLog's in-memory window (any multi-minute historian outage), GetNext reads pages from disk synchronously, and the recorder's appends (which index under the same lock) blocked on an Akka dispatcher thread once per drain pass, exactly during outage recovery. The peek now snapshots the head under the lock, scans unlocked, and re-takes the lock only when it met undecodable records, to reconcile them with the index in O(records scanned) and drop one still at the head (re-checked, since an ack or drop-oldest may have moved it). A test seam pauses the scan and proves an append completes meanwhile; wrapping the scan in the lock again fails it. Rebased from the unpushed remed/lane-H2 branch (originally authored 2026-10-22 in session_01Ub9hGmYLQvn9XETzw7CMsT) onto current master. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV