# NOTIF-ADR-003 — ambiguous submission is a first-class state ## Status Accepted. ## Context The most common serious failure is not a rejection. It is a request whose body reached the provider and whose response never came back. The platform has no provider request id, and the user may or may not have received the notification. Treating that as a failure produces duplicates: a retry sends a second message, and a cross-channel fallback sends the SMS next to the push that already arrived. Treating it as a success loses real failures. ## Decision `AMBIGUOUS` is a stored `SubmissionOutcome` and `AttemptConfirmation`. Attempts record `requestStarted`, `requestBodyCommitted` and `providerResponseReceived`, each with an `EvidenceCertainty` of `PROVEN`, `INFERRED` or `UNKNOWN`, so an adapter that does not know is not forced to answer `false`. While an ambiguous attempt exists on a recipient delivery: - automatic retry is blocked unless the provider proves per-request idempotency - automatic cross-channel fallback is blocked unconditionally - reconciliation runs where the provider supports a status query - otherwise the delivery stops and waits for an operator Operator redrive of an ambiguous attempt requires explicit duplicate-risk approval. ## Consequences Some notifications stop in a state that needs a human or a reconciliation pass. That is the intended trade: an unresolved unknown is cheaper than a guaranteed duplicate, and the state is visible rather than silently resolved in either direction.