--- work_item: ORCH-113 stage: architecture author_agent: architect status: proposed created_at: 2026-06-15 model_used: claude-opus-4-8 --- # 08 — Требования к данным: ORCH-113 — reaper finalizer-liveness ownership Work Item: **ORCH-113** · Repo: **orchestrator** · Стадия: architecture > When-applicable / информационный (гейтом не парсится). ## Изменения схемы БД **N/A — нулевое изменение схемы.** Сознательное архитектурное решение (ADR-001 / adr-0043): сигнал владения финализацией — **in-memory** (leaf `src/finalizer_liveness.py`), а не durable-колонка. Ни новых таблиц, ни новых колонок, ни индексов; `init_db()` / `_ensure_column` не трогаются. Схема существующих таблиц (`jobs`, `agent_runs`, `tasks`, …) и их семантика — **байт-в-байт** (NFR-2/AC-5). ## Новые/изменённые сущности **Процесс-локальный реестр владения** (не БД): `finalizer_liveness` хранит `{job_id: {"run_id", "stage", "started_ts"}}` под `threading.Lock`. Запись/снятие — живой монитор-поток (`launcher._monitor_agent`); чтение — reaper-поток (`job_reaper`). Ключ — `jobs.id` (существующая сущность). Никаких новых персистентных данных. ## Совместимость данных / миграции - **Миграций нет** — нечего мигрировать (нет схемных изменений); общая прод-БД (self-hosting + enduro-trails) не затрагивается. - **Restart-safe без durable (NFR-5):** in-memory реестр сбрасывается при рестарте процесса, что **безопасно** по существующему контракту: `main.lifespan` вызывает `requeue_running_jobs()` (`running → queued`, `main.py:59`) **до** старта reaper (`main.py:144`). После рестарта нет ни одного `running`-job, ссылающегося на потерянный маркер → отсутствие маркера корректно (нет живых finalizer'ов). Гибель **потока** монитора (не процесса) покрыта `try/finally`-снятием маркера; гибель **процесса** → рестарт → requeue. - **Авторитетность in-memory** опирается на одно-процессную модель (один uvicorn-воркер, общая SQLite-БД; проверено: CMD без `--workers`). Условие задокументировано как инвариант сопровождения — при вводе `--workers>1` сигнал должен стать durable (см. `10-tech-risks.md` TR-3).