From 949aa5d9bdddeef47bb94459d15ebb6da52a178a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 27 Feb 2026 22:57:33 +0000 Subject: [PATCH] fix(ledger): recover from corrupted JSON instead of crashing ledger.load now catches JSONDecodeError/ValueError and falls back to an empty ledger, matching the defensive pattern already used by sigil.load. Prevents a truncated or manually corrupted ledger file from permanently breaking build_context for that stream. https://claude.ai/code/session_01K7BWJY2gUoJi6dq91Yc7nx --- ra2/ledger.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ra2/ledger.py b/ra2/ledger.py index 75489c56ecb..36baa5ec131 100644 --- a/ra2/ledger.py +++ b/ra2/ledger.py @@ -43,7 +43,12 @@ def load(stream_id: str) -> dict: ledger["stream"] = stream_id return ledger with open(path, "r", encoding="utf-8") as f: - data = json.load(f) + try: + data = json.load(f) + except (json.JSONDecodeError, ValueError): + ledger = dict(_EMPTY_LEDGER) + ledger["stream"] = stream_id + return ledger # Ensure all expected keys exist for key, default in _EMPTY_LEDGER.items(): if key not in data: