DBOSify — это готовая замена Temporal Python, только вместо сервера Temporal используется обычный Postgres (через DBOS Transact).
Импортируешь dbosify вместо temporalio, подключаешь воркеры и клиенты к базе — и всё. Никакой дополнительной инфраструктуры не нужно: durable-воркфлоу, активности, сигналы, обновления, повторные попытки и восстановление работают на одном Postgres.
Как это устроено внутри: каждый Temporal-воркфлоу запускается как DBOS-воркфлоу на Postgres. Детерминированный интерпретатор гоняет основной корутин и обработчики сигналов/обновлений/запросов на виртуальном event loop, который срабатывает только когда приходит событие. Все недетерминированные действия сохраняются в Postgres до того, как воркфлоу их увидит. Активности и таймеры превращаются в шаги DBOS и durable-сны — чекпоинтятся после завершения. Сигналы, обновления и отмены — это durable-сообщения через LISTEN/NOTIFY прямо в Postgres.
Восстановление после сбоя: новый воркер перезапускает воркфлоу, интерпретатор повторяет ту же последовательность операций по сохранённым чекпоинтам. Выполнение продолжается с того места, где прервалось, и завершается ровно один раз. Неймспейсы — отдельные схемы Postgres, Client оборачивает DBOS-клиент, Worker — DBOS-рантайм.
Тесты покрывают всё: портировали все релевантные юнит- и интеграционные тесты Temporal Python, портировали примеры приложений (проверяют, что DBOSify действительно drop-in), добавили новые тесты с убийством воркера и восстановлением, а также механическую проверку идентичности публичных API (с задокументированными исключениями).
Чего нет: wire-совместимости по gRPC. SDK на других языках не подключатся — это замена сервера Temporal и Python SDK целиком, только для Python-приложений. Нет Temporal Web UI, temporal CLI или tctl. Вместо этого воркфлоу управляются через DBOS-API и DBOS Conductor.
Минимум зависимостей, максимум детерминизма. Если у тебя уже есть Postgres, считай, Temporal уже есть.