e74b2f3832
#4 a missing/corrupt .since OR a failed room_read now resumes from the newest id / backs off — never resets to 0 (which re-ran the ENTIRE history through the model). room_read/_read_since return None on failure to distinguish it from an empty room. #2 posts are rc-checked; the offset advances past a message only after its reply actually lands (3 retries) — a transient lmcp/sic failure retries, never silently drops. #3 dispatch/run exceptions no longer skip the message (offset is reply-gated, not advanced-then-maybe-fail). #5 offset is persisted per fully-handled message — a restart mid-batch resumes exactly, no duplicate ack / re-run. #6 lurker reply capped at 6000 chars (long Fable reviews no longer blow room limits). tests/test_worker_reliability.py locks the #4/#2 core (read-fail != empty; rc checks). 6/6. Also: bp timeouts for testdesigner/py. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE