- обе секции llm ходят в одну модель вместо разных, комментарии
переписаны под именование моделей через Bifrost
- обновлены секреты в group_vars/all/secrets.yml
- контейнер запускается от своего пользователя, доступ к docker.sock
через дополнительную группу docker
- добавлен data/ под /data, он же попадает в backup-targets
- в 0.16 расширился набор правил по умолчанию: 29 срабатываний там, где 0.15
давал "All checks passed"
- subprocess.run без явного check (PLW1510) — проставлен check=False там, где
код и так разбирает returncode сам
- слепые except Exception в оркестраторе бэкапов и скриптах помечены
noqa: BLE001 с объяснением, почему перехват намеренно широкий
- EXE001 и TRY004 отключены в pyproject: бит исполняемости в репозитории
ничего не решает, а ValueError при разборе config.toml — про содержимое
конфига, а не про тип аргумента
- ruff format в 0.16 форматирует python внутри markdown, из-за чего
переформатирован пример в docs/drafts/gitea-runner-on-demand.md
- первый вызов после простоя занял 65,9 с и был оборван минутным умолчанием,
следующие уложились в 6–10 с
- по журналу запросов шлюза попытка была одна: 65,5 с ждал провайдер,
накладные шлюза 0,46 с
- playbook-diet.yml и files/diet: образ через app_image, uid=gid=1111,
каталоги config/data/cache, backup-targets со строкой data/
- блок сайта в Caddy разделён: /api/* идёт мимо Authelia под собственную
аутентификацию, клиентские Remote-* срезаются на уровне сайта
- правило Authelia one_factor без subject: пользователи шире группы admins
- bothub заведён custom-провайдером (base_provider_type openai, адрес без /v1):
из него ходит diet, нативному DeepSeek снимки еды не по силам
- client.log_retention_days = 30: тело запроса пишется в logs.db целиком,
снимок в 2500 px даёт запись около 911 КБ
- gobackup.template.yml и backup.template.sh не применялись: плейбук сам
удалял backup.sh, а бэкап давно идёт через backup-targets
- шаблон gobackup остался копипастой от gramps, с его путями в комментариях
- задача удаления легаси-файлов оставлена, чтобы снять их с сервера
- netdata слал в бандл server, удалённый при переименовании в backups,
и все health-алерты уходили в 404
- бандлы теперь рендерятся циклом: backups для отчётов backup-all.py,
alerts для netdata
- сниппет access_log переименован в common, туда добавлен заголовок
Strict-Transport-Security на год; без includeSubDomains — под
vakhrushev.me есть имена не с этого сервера
- у edge-контейнера убрана capability NET_ADMIN, reverse-proxy её не требует
- убран leftover-листенер :29999 у status.vakhrushev.me
- задача caddy-hardening-nits удалена из беклога
- `admin :2019` слушал всю web_proxy_network: любой контейнер мог POST-ом в
/config/ переписать маршрутизацию и снять forward_auth. Теперь
`admin localhost:2019`.
- Метрики для netdata отдаёт отдельный site-блок `http://:2020 { metrics
/metrics }`, netdata скрейпит новый порт.
- Порт для метрик именно 2020, а не 2019, как предлагала задача: сайт на :2019
перехватывает IPv6-петлю (admin висит только на IPv4), из-за чего
`caddy reload` внутри контейнера возвращает 0 и молча ничего не применяет —
проверено на caddy:2.11.4.
- debug-логи содержат детали аутентификации, имена пользователей и внутренности
OIDC-потоков — в обычной эксплуатации не нужны, а через docker logs/dozzle это
лишняя поверхность утечки.
- Задача убрана из беклога.
- METRICS_ALLOWED_NETWORKS не помогает: за прокси Miniflux видит IP Caddy,
а netdata скрейпит по той же web_proxy_network — по IP их не различить
- задача убрана из беклога
Мажорное обновление homepage. Единственное ломающее изменение 2.0.0 —
встроенная аутентификация, она включается только через HOMEPAGE_AUTH_ENABLED,
так что дашборд остаётся за Authelia как прежде.
- dashboard и wanderer брали имя образа и версию из переменных плейбука;
теперь, как у остальных сервисов, они видны прямо в compose
- переменные homepage_image и wanderer_version удалены за ненадобностью