c3579db99b
copytruncate loses log records twice per rotation: everything written since the tailer's last poll (kept in mail.log.1, but skipped because the descriptor points at the truncated inode) and whatever lands between the copy and the truncate (gone for good). Those records carry the final delivery statuses the send log is reconciled from, so a dropped line means a row stuck in "queued" — not just a gap in the monitoring view, as the item previously assumed. Decision recorded, implementation deferred to its own step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>