fix(server): recover each heartbeat round rather than ending it on first error

Cursor Bugbot on the previous commit: Effect.catch sat outside Effect.repeat,
and Effect.repeat terminates a failing effect, so the first transient read or
utimes error stopped the heartbeat for the rest of the process. Once the
heartbeat stops, the lock it protects can be reclaimed out from under a live
holder.

Recovery now lives inside the round: each tick is caught individually, and
the repeat wraps the recovered tick. Verified: serverSingleton suite 14/14,
typecheck exit 0.
88780e3ec2NoahLinckeScout committed on 9/14/2026, 8:27:20 PMparent5dd4ca7
2 files changedLine totals unavailable