review: a session log that cannot be read now is waited out

The worker marked a turn failed on any error reading its log. A missing log,
a damaged line or a turn not found still fail it; any other I/O error is now
waited out with the outage's doubling wait, logged once when it starts and
once when the log reads again (pointer session-log-damaged, whose runbook
entry now covers it), shown by bxctl memory sync, and the turn stays waiting.

read_records tells an unreadable file from a damaged line (read_log is
unchanged). The message helpers move from worker.rs to honcho/messages.rs,
re-exported, to keep worker.rs under 500 lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-28 14:15:04 -07:00
co-authored by Claude Opus 5.5
parent bd4cf9fb7f
commit 5e57cd69a3
8 changed files with 306 additions and 69 deletions
+2
View File
@@ -42,6 +42,7 @@ fn at(minute: u32) -> Timestamp {
const ALL: &str = "honcho sync: 0 decided: 0 sent, 0 waiting, 0 failed, 0 skipped
brokerd unanswered since 2026-09-28T10:01:00.000Z: turns wait undecided
honcho unreachable since 2026-09-28T10:02:00.000Z: sends wait and are retried
session log unreadable since 2026-09-28T10:03:00.000Z: sends wait and are retried
key refused (HTTP 401): trusted workspace boxmaker0-trusted: its sends wait until memoryd restarts
key refused (HTTP 403): fleet workspace fleet: its sends wait until memoryd restarts";
@@ -54,6 +55,7 @@ fn the_status_lines_are_exactly_these() {
let mut status = Status {
broker_down_since: Some(at(1)),
outage_since: Some(at(2)),
log_unreadable_since: Some(at(3)),
..Status::default()
};
status