Found while adjudicating a Slice 4a review advisory (PR #106, run ledger Task 4).
Reproduction:
loop scaffold ws
- write invalid UTF-8 bytes to
ws/.loop/terminal_state.json (e.g. \xff\xfe{})
loop doctor ws -> exit 1 with a raw UnicodeDecodeError traceback
Expected: a typed doctor issue (an unreadable record is a finding, not a crash) — same family as the #27–#30 strict-UTF-8 work and the 'an errored check fails, it never skips' rule. doctor_report raises the exception out of its read path instead of appending an issue.
Note: loop verdict is NOT affected — its doctor wrapper converts the escape to a typed VerdictError, and scripts/test_verdict.py::test_terminal_record_with_invalid_utf8_raises_verdict_error pins that contract site-agnostically.
https://claude.ai/code/session_01JK76jSm45nHcoRoP1SdxXF
Found while adjudicating a Slice 4a review advisory (PR #106, run ledger Task 4).
Reproduction:
loop scaffold wsws/.loop/terminal_state.json(e.g.\xff\xfe{})loop doctor ws-> exit 1 with a rawUnicodeDecodeErrortracebackExpected: a typed doctor issue (an unreadable record is a finding, not a crash) — same family as the #27–#30 strict-UTF-8 work and the 'an errored check fails, it never skips' rule.
doctor_reportraises the exception out of its read path instead of appending an issue.Note:
loop verdictis NOT affected — its doctor wrapper converts the escape to a typed VerdictError, andscripts/test_verdict.py::test_terminal_record_with_invalid_utf8_raises_verdict_errorpins that contract site-agnostically.https://claude.ai/code/session_01JK76jSm45nHcoRoP1SdxXF