Инженерная задача
Нужны единый CLI, понятные статусы WAN/DNS/MAIN, журнал инцидентов и уведомления в Telegram. При этом отказ Telegram, health-движка или управляющего интерфейса не должен прерывать интернет.
Control plane для домашнего роутера на OpenWrt: наблюдение за WAN, DNS, сетевыми сервисами и состоянием системных компонентов без вмешательства в основной поток трафика.
Домашний шлюз управляет критичными сетевыми процессами. Диагностика и удалённый интерфейс полезны только при сохранении их независимости от маршрутизации.
Нужны единый CLI, понятные статусы WAN/DNS/MAIN, журнал инцидентов и уведомления в Telegram. При этом отказ Telegram, health-движка или управляющего интерфейса не должен прерывать интернет.
Status/Health собирают наблюдения; Incident Engine применяет debounce/hysteresis; Projection формирует события; persistent queue отделяет инцидент от отправки сообщения. Действия управления проходят отдельный ограниченный путь.
Наблюдение не равно инциденту: кратковременный сбой проверки не должен немедленно превращаться в тревогу.
Health Core нормализует WAN, DNS, MAIN и дополнительные сервисы до OK, DEGRADED, DOWN, UNKNOWN или MAINTENANCE; учитывает свежесть внешних проверок.
Incident Engine открывает DEGRADED/DOWN после трёх последовательных наблюдений; восстановление OK требует двух наблюдений.
OPEN, STATE_CHANGED или RECOVERED попадают в persistent journal и могут быть восстановлены после перезапуска.
Инцидент преобразуется в отдельную запись уведомления. Очередь хранит pending/inflight/terminal receipts и поддерживает повторную обработку.
Notification adapter учитывает retry, backoff, 429 и неопределённость доставки. LIVE-приёмка транспорта на устройстве остаётся отдельным этапом.
Главные решения сформированы условиями реального устройства и ограничениями безопасного удалённого управления.
Telegram и health-слой не участвуют в принятии решений об основном трафике. Отказ control plane не должен менять data plane.
Debounce, hysteresis и состояния UNKNOWN/MAINTENANCE помогают отличать краткий сбой проверки от устойчивого инцидента.
Telegram sendMessage не поддерживает ключ идемпотентности. После неопределённого ответа возможен дубль; система не обещает exactly-once.
Управляющий интерфейс ограничен заранее описанными командами. Опасные действия требуют отдельного подтверждения и не входят в read-only сценарии.
Матрица ACCEPTANCE.md разделяет проверенные в изоляции контракты и работу текущего кода на реальном OpenWrt. Это не стабильный релиз v1.0.0.
В roadmap задокументированы проверки ранних версий на CUDY; они не подтверждают работу всех изменений текущего HEAD.
Для уведомлений, инцидентов и контроля состояний задокументированы автоматические проверки, включая сбои и восстановление.
Нужны подтверждения реальной отправки, перезагрузки, persistence и сценариев восстановления на устройстве.
Проект не объявляется законченным production-продуктом: приёмка 0.5 и последующих этапов содержит открытые условия.
Потеря ответа Telegram после принятия сообщения может привести к повторной доставке, несмотря на durable receipts.
OpenWrt TLS/SOCKS, worker/reboot, persistent queue, sysupgrade и recovery должны проверяться на устройстве отдельно.
0.7 реализует часть контрактов с disabled-by-default и не имеет полной LIVE-приёмки; 0.8 в публичной документации ограничен read-only planner.
Необходимы закрытые критические gates, длительное наблюдение и подтверждённый recovery drill.
Ценность кейса в разделении ответственности, явном описании состояний и доказательств, а не в количестве команд Telegram или обещании полной автоматизации.
В репозитории находятся README, архитектура, инженерные решения, документация инцидентов, уведомлений и открытая матрица ACCEPTANCE.