c584d15cdc
message_agent callers previously got provider prose (a raw 401 paragraph, a missing-provider essay) and could not branch on the failure class. Now the #93091 item-1 reason enum rides the whole relay roundtrip: - Desktop relay drain forwards bot_relay.deliver's error.data.reason into bot_relay.reply (and prefers it for the attention badge over free-text re-parsing); - write_reply already persisted reason / classified fallbacks; - the sender-side waiter prints "[reason: <code>]" ahead of the free text, so the completion notification the sending agent receives is machine-branchable. Additive everywhere: healthy replies unchanged, reasonless errors classify to a code, old consumers keep working.