process_block (allways/validator/event_watcher.py:324-332) catches all exceptions and returns silently, then sync_to unconditionally sets cursor = end at :321.
A transient WebSocket hiccup on a single block → SwapCompleted / SwapTimedOut events permanently dropped → affected miner stays marked busy, scoring goes wrong with no recovery path.
Direction: track per-block success and don't advance the cursor past blocks that threw.
process_block(allways/validator/event_watcher.py:324-332) catches all exceptions and returns silently, thensync_tounconditionally setscursor = endat :321.A transient WebSocket hiccup on a single block →
SwapCompleted/SwapTimedOutevents permanently dropped → affected miner stays marked busy, scoring goes wrong with no recovery path.Direction: track per-block success and don't advance the cursor past blocks that threw.