SIGN IN SIGN UP

core: message lifecycle events — прослеживать обработку, а не только доставку

Транспорт доказывает, что конверт отдан брокеру; он не доказывает, что получатель
проснулся, разобрал и ответил. outbox трассирует доставку полностью (status/attempts/
last_error), local_messages не хранит ни статуса обработки, ни связи запрос-ответ.
Отсюда «нечем дебажить сообщения между агентами» — возражение Алексея Юрченко 14.08,
и наш же класс инцидентов, где acked принимали за прочитано.

Добавлено в SQLiteMessageStore (аддитивно, существующие БД открываются без миграции):
- таблица message_events: queued|delivered|woke|wake_failed|handled|replied|failed
- recordEvent() — события копятся, ничего не перезаписывается
- traceMessage() — полный жизненный цикл одного сообщения
- traceConversation() — цикл по разговору
- stalledOutbound() — доставленные и оставшиеся без ответа: вопрос, на который
  транспортные метрики ответить не могут
- relatesTo связывает вопрос с ответом

Тесты: 6 новых (включая delivered-без-woke и сосуществование со старыми строками),
вся сюита 92/92. Проверено на копии боевой БД: строки целы, таблица создаётся на лету.
A
alexfrmn committed
c623bfcdd68c08cb3fd7f52bdd37d996fb27e079
Parent: 7f97c72