We discussed this in discord with the following summary:
Want to avoid storing the disposition in the metadata because it will add a constant factor to the I/O cost of a transient failure. In this case it will take it to 2x the IO because it will be logging the failure to the logs (as normal) as well as spooling out an updated copy of the metadata.
Persisting the info in the metadata is not necessary
Passing the info to the requeue_event should be sufficient
Having last error as a meta field on message object would allow flexible requeueing of messages to different egress pools based on SMTP response text.
The value can be ephemeral and does not need to be spooled to avoid IO overhead.