- Anna's 403 whose body is not a key/membership error disables Anna's for
the run (annas_left=0) instead of raising AnnasAuthError.
- run() isolates each item: any exception rolls the transaction back,
unlinks scratch files, ledgers outcome=error with the exception text,
and continues; AnnasAuthError still aborts.
- attach_file writes rows before copying so a failed copy rolls back
cleanly instead of orphaning a storage dir.
- Notes (miss vs error) from resolve/deliver land in every ledger line;
an item whose lookups/deliveries errored (transport, 5xx, throttle
page) is 'error' and retried next run rather than a 30-day miss.
- resolve tolerates non-dict file entries and non-numeric filesize.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>