Skip to content

fix(scanner): auto-restart block sync on crash instead of stopping#4

Merged
j4ys0n merged 1 commit into
mainfrom
claude/nice-darwin-rfikv4
Jun 17, 2026
Merged

fix(scanner): auto-restart block sync on crash instead of stopping#4
j4ys0n merged 1 commit into
mainfrom
claude/nice-darwin-rfikv4

Conversation

@j4ys0n

@j4ys0n j4ys0n commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Catch-up sync ran inside a single try/catch alongside the WebSocket startup. When a block failed (e.g. a sustained RPC outage that exhausted the per-request retries), runCatchup re-threw, the outer catch logged "API will run without scanner", and the real-time WS path never even started — sync stopped for good until a process restart.

Wrap catch-up in a supervisor that restarts it with exponential backoff. Progress is checkpointed per block, so each restart resumes from the last synced block with no lost or duplicated work. Once catch-up completes, the (self-healing) WS subscription path starts as before. The supervisor runs detached so a slow/retrying catch-up never blocks startup, and a shutdown flag stops the loop cleanly on SIGINT/SIGTERM.

Backoff is configurable via SCANNER_RESTART_BASE_DELAY_MS (5s) and SCANNER_RESTART_MAX_DELAY_MS (60s).

Claude-Session: https://claude.ai/code/session_01BEG3HfBuwNhijzL168Rkvv

Catch-up sync ran inside a single try/catch alongside the WebSocket
startup. When a block failed (e.g. a sustained RPC outage that exhausted
the per-request retries), runCatchup re-threw, the outer catch logged
"API will run without scanner", and the real-time WS path never even
started — sync stopped for good until a process restart.

Wrap catch-up in a supervisor that restarts it with exponential backoff.
Progress is checkpointed per block, so each restart resumes from the last
synced block with no lost or duplicated work. Once catch-up completes, the
(self-healing) WS subscription path starts as before. The supervisor runs
detached so a slow/retrying catch-up never blocks startup, and a shutdown
flag stops the loop cleanly on SIGINT/SIGTERM.

Backoff is configurable via SCANNER_RESTART_BASE_DELAY_MS (5s) and
SCANNER_RESTART_MAX_DELAY_MS (60s).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BEG3HfBuwNhijzL168Rkvv
@j4ys0n j4ys0n merged commit 83b9df5 into main Jun 17, 2026
1 check passed
@j4ys0n j4ys0n deleted the claude/nice-darwin-rfikv4 branch June 17, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants