# Outbox

## Назначение

`libs/go/outbox` содержит общий runtime доставщика сервисного outbox для Go-сервисов платформы.

Пакет не владеет доменными событиями и не знает о конкретной БД сервиса. Сервис-владелец передаёт в библиотеку адаптер своего outbox-хранилища и publisher, а библиотека обеспечивает:

- claim пачки событий короткой арендой;
- `StoreAdapter` для приведения service-owned outbox entity к общему `Event` без копирования dispatcher-кода;
- publish с отдельным timeout;
- отметку успешной публикации;
- повтор transient-сбоев с exponential backoff;
- фиксацию permanent-сбоев без бесконечных повторов;
- ограничение размера текста последней ошибки.

## Граница ответственности

Сервис-владелец отвечает за запись outbox-события в своей БД в одной транзакции с изменением агрегата. `libs/go/outbox` отвечает только за доставку уже записанных событий.

Штатный MVP publisher для доменных событий — `libs/go/eventlog.PostgresPublisher`, который пишет событие в отдельный `platform-event-log`. Диагностический publisher допустим только для локальной отладки и должен включаться отдельным подтверждающим флагом в сервисной конфигурации.

## Проверки

```bash
cd libs/go/outbox && go test ./...
```
