# .env.watchdog — конфигурация sidecar-watchdog (контейнер orchestrator-watchdog).
# Канонический example (ORCH-102, ADR-001 D5; симметрия .env.example/.env.staging.example).
#
# ⚠️ СЕМАНТИКА ФАЙЛА-НОСИТЕЛЯ: sidecar-контейнер читает ТОЛЬКО этот файл
# (compose: env_file {path: .env.watchdog, required: false}). Ключ WATCHDOG_*,
# положенный в .env, для sidecar ИНЕРТЕН (его видит лишь контейнер орка).
# Отсутствие файла НЕ ломает `docker compose up` (required: false); нет токена →
# fail-safe: watchdog пишет алерты в логи, но не отправляет.
#
# Создание на хосте: cp .env.watchdog.example .env.watchdog → заполнить два токена.
# DO NOT COMMIT реальный .env.watchdog — этот файл только шаблон (зеркало
# .env.staging.example); реальные значения живут на хосте.
#
# Нормативы:
#   * C-1 (ORCH-100): у watchdog СВОЙ Telegram-бот — независимый канал алертов.
#     Переиспользовать токен орка (ORCH_TELEGRAM_BOT_TOKEN) ЗАПРЕЩЕНО: упавший
#     орк не сможет сообщить о себе своим же ботом.
#   * Когерентность порта: WATCHDOG_METRICS_URL следует за прод-портом
#     (ORCH_DEPLOY_PROD_TARGET_PORT) — сменил порт орка → обнови URL здесь.
#   * Key-set этого файла = блок WATCHDOG_* в .env.example (канон ключей);
#     синхронность держит tests/test_lite_setup_doc.py (key-sync, TC-02b).
#     Значения = дефолты watchdog/config.py.

WATCHDOG_ENABLED=true
WATCHDOG_INTERVAL_S=30
WATCHDOG_HTTP_TIMEOUT_S=5
WATCHDOG_COOLDOWN_S=1800
WATCHDOG_METRICS_URL=http://127.0.0.1:8500/metrics
WATCHDOG_ORCH_DOWN_TICKS=3
WATCHDOG_MEM_PCT=90
WATCHDOG_DISK_CRIT_ENABLED=false
WATCHDOG_DISK_CRIT_PCT=97
WATCHDOG_DISK_PATHS=/repos,/app/data
WATCHDOG_AGENT_HUNG_MIN=20
WATCHDOG_AGENT_CPU_FLOOR=0.01
WATCHDOG_STAGE_STUCK_MIN=120
WATCHDOG_QUEUE_DEPTH=20
WATCHDOG_CONTAINERS=orchestrator
WATCHDOG_DOCKER_SOCK=/var/run/docker.sock
WATCHDOG_DEPS=
# proc_blocking (ORCH-111): opt-in алерт на долго живущий осиротевший тест-процесс
# (pytest), репарентированный на хост. Требует `pid: host` на сервисе
# orchestrator-watchdog (compose) — привилегия только у наблюдателя, read-only.
# Дефолт-off → нулевая регрессия. PROC_AGE_MIN ОБЯЗАН превышать
# max(merge_retest_timeout_s=600, coverage_run_timeout_s=900)/60 = 15 мин, иначе
# легитимный прогон даст ложный алерт. 60 мин = 4× запас.
WATCHDOG_PROC_ENABLED=false
WATCHDOG_PROC_AGE_MIN=60
WATCHDOG_PROC_PATTERNS=pytest
WATCHDOG_PROC_COOLDOWN_S=1800
WATCHDOG_TG_BOT_TOKEN=
WATCHDOG_TG_CHAT_ID=
