# NOTIF-ADR-001 — `submit()` means durable acceptance ## Status Accepted. ## Context The obvious API for a notification platform is `send()` returning success or failure. Every channel this platform supports makes that return value a lie: - SES accepts a request, returns a `MessageId`, and can still decline to send. - Twilio separates `accepted`, `sent` and `delivered` into distinct, later events. - APNs accepts a notification and may then deliver, store or discard it. - Web Push separates push-service acceptance from user-agent acknowledgement at the protocol level. ## Decision `submit()` and `schedule()` return once the logical request and its recipient jobs are committed to the database. The receipt carries `notificationId`, `RequestStatus` and `acceptedAt`, and has no `delivered`, `sent` or `read` component. No provider is contacted while the transaction is open. ## Consequences Callers cannot mistake acceptance for delivery, because the type does not offer that reading. Delivery state is a separate query against the projection built from the provider event ledger. The cost is that "did it arrive?" is a second question — which is the honest number of questions.