- один инстанс на два сайта, gc-main и gc-photo: нужный выбирается по Host
- домены ведутся в goatcounter_sites (group_vars), оттуда же рендерятся имена в Caddyfile
- сайты и первый пользователь заводятся идемпотентно, креды из vault
- AGENTS.md: homepage/transcriber собираются ролью app_image, registry-плейбуков
и vars/transcriber.images.yml больше нет
- local-image-build: закрыты шаги по homepage и transcriber, остался вынос
yc_*-переменных из vault; добавлены замеры архивов
- container-hardening-nits: снят пункт про плавающий `:latest` у homepage
- подписка в SYNCED_ROLES + копия из канона ansible-roles (inv roles-pull)
- роль собирает образ приложения на control-хосте по контракту `task image`
и везёт его на сервер через docker save/load, без реестра
- docs/conventions/ с индексом: чем конвенция отличается от ADR и drafts,
статусы (рекомендуемая / обязательная), когда заводить
- app-directories.md: конфигурация / данные / кеш по принципу создания и
ценности; из категорий выводится backup-targets
- раздел «Конвенции» в AGENTS.md со ссылкой на склад
- 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 инвентаря теперь имеют приоритет над общими переменными