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