Mechanism 01
Run-log anatomy
Every conversation and every automation run writes a structured log: a run id, the trigger, each step with an input summary, output summary, duration, attempt number and status, the model and prompt version used, and the idempotency key of each write. Personal data is redacted before anything is logged. One run reads top to bottom as a story, so an operator can answer “what happened to this lead?” without asking an engineer.
| Criterion | Status | Note |
|---|---|---|
| 09:14:03 webhook.received | ok | Signature verified |
| 09:14:03 dedupe.check | ok: first delivery | Delivery id not seen before |
| 09:14:04 crm.upsert · attempt 1 | failed: rate limited | Backoff before the next attempt |
| 09:14:09 crm.upsert · attempt 2 | failed: rate limited | Longer backoff |
| 09:14:29 crm.upsert · attempt 3 | failed: timeout | Retries exhausted |
| 09:14:30 deadletter.park | parked | Payload, attempts and last error kept |
| 09:14:30 notify.owner | sent | Operations owner, by email |
| 10:02:11 crm.upsert · replay | ok: one contact, same key | Replayed by the operator after the CRM recovered |
What's the alternative? Plain-text application logs
Unstructured logs come free with every platform. Engineers who know what to search for can use them; the operations person who actually receives the customer’s complaint cannot.

