Мутации ревьюера проходили гейт насквозь:
- к шагу `POST /-/reload` дописано `|| true` — все 7 тестов зелёные. Regex
заканчивался на URL и хвост строки не смотрел; сегодня спасает `set -e`, но
именно так («зелёная сводка ≠ зелёный выход») в этом репозитории уже ломали
гейты. Добавлен отрицательный lookahead на `||` в той же строке;
- новый одиночный файловый маунт БЕЗ суффикса `:ro` — тест зелёный, потому что
распознавание маунта требовало `:ro`. Права к типу маунта отношения не имеют:
инод он держит одинаково. Требование снято.
Проверка promtool переехала ВЫШЕ `docker compose up -d`: прежнее место (между
подъёмом и перезагрузкой) не спасало от битого конфига, потому что `up -d`
пересоздаёт контейнер при смене образа. Новый тест сторожит и это.
Якоря границ серверной джобы и блока триггеров читаются через find с внятным
assert: при переименовании шага гейт скажет, что сломалось, а не даст ValueError.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Правки ops/metrics/prometheus/** доезжали до диска и не вступали в силу:
контейнер Prometheus не перезапускался с 2026-08-27, а деплой перезагружал
один Caddy. Правила из #3464 лежали и на диске, и внутри контейнера, а
/api/v1/rules отдавал прежние — при зелёном деплое и без единого
отрицательного признака.
- проверка promtool (check config + check rules) одноразовым контейнером того
же образа по файлам с диска, затем POST /-/reload; провал проверки роняет
шаг и перезагрузки не делает — работающий Prometheus остаётся на прежней
конфигурации;
- сверка инода у одиночных файловых маунтов (prometheus.yml, loki-config.yml,
alert-ack/app.py) с пересозданием контейнера: маунт ОДНОГО файла держит
старый инод, а у Loki ручки перезагрузки нет вовсе (404 на /reload);
- датасорсы Grafana перечитываются штатной ручкой: их провиженинг применяется
только при старте, дашборды же провайдер пересканирует сам;
- гейт backend/tests/ops/test_3467_prometheus_reload.py краснеет, если
перезагрузка исчезла, оторвалась от проверки конфигурации или у нового
файлового маунта нет пути доезда.
Closes#3467
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>