# NOTIF-ADR-002 — append-only event ledger with channel projectors ## Status Accepted. ## Context A single linear delivery status has to be updated in place, which forces a rule for deciding whether a new event outranks the stored one. The natural rule — compare ordinals — is wrong for real provider traffic. Twilio does not guarantee callback ordering, so `sent` arrives after `delivered`. Email generates complaints after deliveries. Both cases lose information under an ordinal rule. ## Decision Provider events are appended to an immutable ledger before any projection runs. Channel-specific projectors merge events into `SubmissionOutcome`, `DeliveryOutcome`, `EvidenceLevel`, `EngagementFacts` and `SuppressionFacts` using explicit transition tables. Projection is idempotent and can be replayed from the ledger. ## Consequences Duplicate, out-of-order and late events are normal inputs rather than defects. A projector bug is recoverable, because the events it mis-projected are still stored. Projector versions can be migrated by replay. The cost is a second write per event and a projection that can lag its ledger.