ADR 0038: уведомления и ограниченное управление обновлением
Статус: accepted. Owner: Ian Panaev. Дата: 2026-09-26.
Решение
Существующий привилегированный updater дополняется минутным tick и защищённым локальным mailbox. API никогда не запускает shell, systemctl, Docker или installer. Глобальный administrator получает ограниченный протокол check/configure/apply, видимый в OpenAPI, discovery и SDK. Это расширяет полномочия глобального администратора до управления кодом доверенного релиза; managed keys и делегированное администрирование доступа не получают.
Wire validation принадлежит contracts. apps/deploy теперь разрешено зависеть только от packages/contracts: это общий переносимый протокол, а не зависимость от API, БД или доменной реализации хранилища. UpdateMonitorPort отделяет расписание и состояния от GitHub, installation files и supervisor. API-адаптер ограничен чтением snapshot и атомарной публикацией запроса. UI разделяет контроллер и представление, не расширяя замороженные архитектурные исключения.
Раздельные права status/inbox сохраняют границу привилегий. Один mailbox ограничивает очередь. CAS revision защищает от устаревших настроек; UUID и последний acknowledged ID позволяют сверять повтор. Выбранный digest перепроверяется перед стадированием. Час UTC, лимит одной попытки в день и сохранение intent до остановки служб предотвращают бесконечные повторы. Аварийный lock/accepted request требуют операторской сверки.
Уведомления не являются установкой: проверка каждые 6 часов работает при automatic=false. Ошибка проверки сохраняет прежнюю информацию и явно маркируется. Планировщик не зависит от живого API, браузера или БД; API/worker могут быть остановлены и вновь запущены в процессе обновления.
Границы
Только stable GitHub Releases и та же схема БД (смену схемы после проверенной копии разрешает ADR 0059). Pin, проверка байтов, journal, rollback и отказ при неопределённом состоянии процессов сохраняют ADR 0031. Подпись релизов, HA orchestration, внешние каналы уведомлений и обновление системных зависимостей не добавляются. Первый переход старой установки на mailbox требует подключения в окно обслуживания. Эксплуатационные команды и ограничения: UPDATES.