# 🧹 Закрепить версию рантайм-базы образа - **Тип:** chore - **Категория:** Очередь — Закрепление базы образа окупается при частых пересборках, а они начнутся с приложением. - **Зачем:** Финальный слой Dockerfile собирается на alpine:latest, а task image идёт с --pull, поэтому два образа из одного коммита с разницей в неделю несут разный ffmpeg — регрессия конвертации после такой пересборки выглядит как задачи в failed при пустом диффе репозитория, и откат на прежний коммит её не чинит. Класс тот же, ради которого задача `go-1-26-upgrade` завела шаг сверки версий: объявленное и собранное расходятся, а сверять некому. Разница в том, что там расходились числа внутри репозитория, а здесь репозиторий вообще не называет числа — версия рантайм-базы задана словом «последняя». Цена названа условием, а не замером: сколько именно и как часто меняется `ffmpeg` в `alpine:latest`, никто не мерил. Известно, что он в таблице отказов `docs/architecture.md` стоит со столбцом «Отдаёт мусор»: «Выходной файл пуст, отказ вылезет на распознавании». Перечень мест, где объявлена версия Go, эта задача не расширяет: он закрыт решением `go-1-26-upgrade`, и рантайм-база — другой предмет. ## Затрагивает - финальный слой `Dockerfile` — тег базового образа; - раздел «Деплой» в `docs/architecture.md`. ## Критерии приёмки - Репозиторий называет версию рантайм-базы числом, а не словом «последняя». Оракул — `grep` по `Dockerfile`: тег финального слоя содержит мажор и минор. - Два образа, собранные из одного коммита, несут один `ffmpeg`. Оракул — собрать `task image` дважды с интервалом и сравнить `ffmpeg -version` внутри обоих. - Решение записано там, где его найдёт разбор отказа конвертации. Оракул — раздел «Деплой» `docs/architecture.md` называет закреплённую базу и причину. - Гейт зелёный целиком. Оракул — `task gate`. ## Рамки Версию базы выбирает человек: перескок на минор новее может принести другой `ffmpeg` ровно с тем же исходом, ради предотвращения которого задача и заведена. Выкладку не запускаем. Если решено оставить `latest`, задача кончается записью принятого остатка в `docs/architecture.md`, а не правкой `Dockerfile`. Это законный исход.