- набор правил ruff расширен по канону rp-local-env (ANN, PTH, C90, G и др.),
в lefthook добавлен job ruff check --fix
- код приведён под новые правила: логирование через %s вместо f-строк,
os.path заменён на pathlib, run_backup_process и initialize разбиты
на функции по порогу цикломатической сложности
- константа AUTHELIA_DOCKER была прибита к 4.39.4, а сервис уже на 4.39.20 — конфиг валидировался чужим бинарником
- authelia-validate-config сам создаёт temp/: директория в .gitignore, на свежем клоне задача падала
- invoke оставлял на внешнем терминале ixon, и Ctrl+S/Ctrl+Q съедал драйвер
терминала как XOFF/XON — до micro они не доходили
- код возврата ansible-vault теперь пробрасывается наружу
- подписка в SYNCED_ROLES + копия из канона ansible-roles (inv roles-pull)
- роль собирает образ приложения на control-хосте по контракту `task image`
и везёт его на сервер через docker save/load, без реестра
- production.yml переписан на живой Timeweb-хост, timeweb.yml удалён,
HOSTS_FILE в tasks.py и примеры в README поправлены
- host-vars application_dir и mount_external_storage не перенесены: это
наследие YC-диска, а после переезда в group_vars инвентарь их перебивает
- ansible.cfg: inventory по умолчанию, чтобы забытый -i не уводил в никуда
- vars/vars.yml → group_vars/all/main.yml, vars/secrets.yml →
group_vars/all/secrets.yml; boilerplate vars_files убран из всех плейбуков
- имя secrets.yml сохранено намеренно: pre-commit-хук и .crushignore ищут
слово secret(s) в имени файла
- host_vars инвентаря теперь имеют приоритет над общими переменными