# 🧹 Закрепить версию рантайм-базы образа

- **Тип:** chore
- **Категория:** Очередь — Встаёт прямо перед spa-skeleton: частые пересборки образа начинаются с приложением, и до него незакреплённая база ничего не ломает.
- **Зачем:** Финальный слой 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`. Это законный исход.
