# Email Evidence Canon ## Rule Email events are evidence, not result satisfaction. The scanner reports email-channel facts and uncertainty. A downstream coordination runtime decides whether those facts satisfy a coordination case. ## Initial Message Classes - `hard_bounce` - `soft_bounce` - `delayed_delivery_notice` - `final_delivery_failure` - `out_of_office` - `human_reply` - `complaint_or_abuse` - `unsubscribe_or_opt_out` - `challenge_response` - `unknown_return_message` - `unrelated_message` - `parse_failed` ## Initial Normalized Events | Message class | Normalized event | Assessment | | --- | --- | --- | | `hard_bounce` | `notification.endpoint.rejected_permanent` | `fail.hard_bounce` | | `soft_bounce` | `notification.endpoint.rejected_temporary` | `undef.deferred` | | `delayed_delivery_notice` | `notification.endpoint.deferred` | `undef.deferred` | | `final_delivery_failure` | `notification.endpoint.rejected_permanent` | `fail.expired_without_delivery` | | `out_of_office` | `interaction.out_of_office_received` | `undef.out_of_office` | | `human_reply` | `interaction.reply_received` | `success.reply_received` | | `complaint_or_abuse` | `notification.channel.complaint_received` | `fail.complaint_received` | | `unsubscribe_or_opt_out` | `notification.channel.unsubscribe_received` | `fail.unsubscribed` | | `unknown_return_message` | `notification.endpoint.unknown` | `undef.conflicting_evidence` | | `challenge_response` | `interaction.unverified_actor_interaction` | `undef.identity_uncertain` | | `parse_failed` | `diagnostic.message.parse_failed` | `undef.parse_failed` | ## Overclaim Prevention - No bounce found does not mean delivery success. - Provider acceptance does not mean endpoint acceptance. - Endpoint acceptance does not mean inbox placement. - Out-of-office does not prove recipient awareness or action. - Human reply does not prove legal acceptance. - Unknown return messages remain visible. - Parse failures are diagnostic rows, not delivery or interaction outcomes. - Scanner and proxy interactions must stay below identity-bound interaction. ## Endpoint Quality Hints Endpoint quality rows are diagnostic state, not verdicts: | Evidence | Quality hint | | --- | --- | | Hard bounce or final failure | `reachability = unreachable`, `last_failure_at` | | Soft bounce or delayed delivery | `reachability = degraded`, `last_failure_at` | | Complaint | `suppression_state = suppressed` | | Unsubscribe | `suppression_state = opted_out` | | Human reply | `last_success_at` | | Out-of-office | `reachability = uncertain`, `last_auto_reply_at` | These hints can guide future suppression and review workflows, but they do not prove human awareness, authority, payload access, or coordination success.