# ADR-031 (PR #73): Fix Docker base image — node:22-noble-slim → node:22-trixie-slim

## Статус
Accepted (2026-07-26)

## Контекст

ADR-030 (PR #71) зафиксировал переход base image на Debian trixie ради glibc ≥ 2.39 для `@mathew-cf/rag-cli`. Но PR#71 указал `FROM node:22-noble-slim` — тег, **не существующий** в Docker Hub:

- Проверка через Docker Hub API: `count=0` для `node:22-noble-slim`.
- Официальные образы `node` базируются **только на Debian**, не Ubuntu. Тегов `*-noble-slim` в официальном репо `library/node` нет вообще.
- При пересборке Dockerfile падает: `failed to resolve source metadata for docker.io/library/node:22-noble-slim: not found`.

Результат: PR#71 не собирается. Нужен реальный тег с glibc ≥ 2.39 (требование `@mathew-cf/rag-cli`, см. ADR-024 / ADR-030) и Node 22 LTS. PR#73 — fix follow-up к PR#71.

## Решение

```dockerfile
FROM node:22-trixie-slim
```

- `node:22-trixie-slim` — реальный тег, проверен через Docker Hub API (`count>0`).
- Debian 13 trixie → glibc 2.41 ≥ 2.39 — удовлетворяет требованию `@mathew-cf/rag-cli`.
- Node 22 LTS — совпадает с каналом PR#71, без мажорного обновления.
- Однострочное изменение в `Dockerfile`, остальное без правок.
- Дополнительно: Debian 13 **не использует snap** → chromium ставится через `apt-get install -y chromium` как обычный пакет, реальный browser, не transitional wrapper. Puppeteer-интеграция (`PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium`) работает as-is. На Ubuntu noble chromium — snap-пакет, что создавало known limitation; Debian trixie эту проблему снимает.

## Альтернативы

- **`node:lts-trixie-slim` (Node 24 LTS)** — отклонено: мажорное обновление Node 22→24. Установленные npm-пакеты (opencode-ai, repomix, `@mathew-cf/opencode-memory`) тестировались на Node 22 LTS; Node 24 не валидирован, риск несовместимости.

- **`node:trixie-slim` (latest = Node 26)** — отклонено: latest-тег = не LTS. Для production-образа требуется long-term support; latest дополнительно не pinned → drifting risk при `docker build`.

- **`node:22.23.1-trixie-slim` (pinned)** — отклонено: избыточная детализация для публичного репо. Pin патч-версии Node усложняет обслуживание (ручной bump) без выгоды; `node:22-trixie-slim` уже даёт детерминированный major+distro.

- **`debian:trixie-slim` + Node вручную (NodeSource или nvm)** — отклонено: сложнее, больше правок в Dockerfile (apt node = старая версия, нужен NodeSource apt-репозиторий или download tarball). `node:22-trixie-slim` уже включает Node 22 LTS — нулевая настройка.

- **`cargo install rag-cli` из исходников** — отклонено: +500MB Rust toolchain (rustc, cargo, crates.io deps), +10 мин build на каждом `docker build`, +image size. Смена base image — 0 дополнительных MB, готовый prebuilt binary работает as-is.