opencode-config/docs/handoff/pr-71-base-image-trixie-slim.md
Sergey 92d21a142c
fix(docker): use node:22-trixie-slim instead of non-existent node:22-noble-slim (#73)
* fix(docker): use node:22-trixie-slim instead of non-existent noble-slim

* docs(adr): update ADR-030 for trixie-slim base image

* docs(handoff): update handoff for trixie-slim and add watch out note

* docs(handoff): set PR number

* docs(handoff): add handoff for PR#73

* fix(ci): drop dangling ADR-031 ref in pr-73 handoff

* docs(adr): add ADR-031 for PR#73 trixie-slim base image

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 04:43:03 +03:00

5.4 KiB
Raw Permalink Blame History


pr: 71 title: fix(docker): switch base image to node:22-trixie-slim for rag-cli GLIBC compat

Что сделано

Сменён Docker base image с несуществующего node:22-noble-slim (Ubuntu 24.04 Noble, glibc 2.39) на реальный node:22-trixie-slim (Debian 13 trixie, glibc 2.41, Node 22 LTS) — однострочное изменение FROM в Dockerfile:1. Все остальные RUN layers, apt-пакеты, npm install, ENV, ENTRYPOINT — без изменений (проверено по пакетам: docker.io, ffmpeg — ✓; uv, gh, cloudflared — ставятся вне apt; chromium — обычный apt-пакет на Debian, не snap).

  • Dockerfile:1FROM node:22-noble-slimFROM node:22-trixie-slim
  • docker-compose.yml — без правок (service opencode использует build: { context: ., dockerfile: Dockerfile }, base image берётся из Dockerfile; pinned тегов image или упоминаний Node 20/Debian 12 в compose нет)
  • README.md — без правок (упоминаний «Node 20», «node:20», «Debian 12», «bookworm» в README нет)
  • docs/decisions/030-pr-71-base-image-trixie-slim.md — обновлённый ADR-030: указан реальный тег trixie-slim, пояснена ошибка PR#71 (noble-slim не существует в Docker Hub, node images только на Debian), chromium snap problem отпадает, добавлены альтернативы (node:lts-trixie-slim, node:trixie-slim)

Почему

@mathew-cf/opencode-memory plugin тянет @mathew-cf/rag-cli как dependency для semantic search. RAG CLI — Rust native binary, требует GLIBC_2.39, но node:20-slim (Debian Bookworm) поставляется с GLIBC 2.36 → binary падает, semantic search молча неработоспособен, memory_search деградирует к keyword-only (grep).

ADR-024 (PR #57) зафиксировал это как «известная проблема, НЕ блокер» и явно отметил: «Полный fix semantic search (смена base image) — вне scope этого PR». PR #71 = тот самый follow-up.

Все 5 опубликованных версий @mathew-cf/rag-cli-linux-x64 (0.4.0, 0.5.0, 0.6.0, 0.7.0, 1.0.0) требуют GLIBC_2.39. Сменить хост нельзя: opencode работает внутри контейнера, хост изолирован. Смена base image на node:22-trixie-slim (Debian 13 trixie, glibc 2.41 ≥ 2.39) — минимальное изменение, изолированное от хоста, без сборки rag-cli из исходников.

Pending

  • Файл docs/decisions/030-pr-71-base-image-trixie-slim.md и этот handoff содержат placeholder PR#73 — после create_pr полученный PR номер вписан в ADR (PR#73 (этот)). Frontmatter handoff (pr: 71) сохранён — это номер исходного PR#71, который этот PR исправляет, а не номер текущего PR.

Watch out

  • PR#71 использовал несуществующий тег node:22-noble-slim — пересборка падала с not found. Исправлено в PR#73 (этот PR) на реальный тег node:22-trixie-slim. Урок: проверять существование тега через Docker Hub API перед коммитом.
  • chromium snap problem отпадает на Debian 13 trixie — Debian НЕ использует snap (в отличие от Ubuntu noble). chromium ставится через apt-get install -y chromium как обычный пакет, реальный browser, не transitional wrapper. Puppeteer-интеграция (PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium, PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true) работает as-is. Known limitation из PR#71 отпадает.
  • Тесты tests/test_dockerfile.py НЕ проверяют FROM строку — тесты проверяют только npm install -g line (3 пакета: opencode-ai, repomix, @mathew-cf/opencode-memory) + regression guards. Смена FROM не сломает существующие тесты. Регрессионный тест на FROM node:22-trixie-slim НЕ добавлен (issue не просит, не плодить лишнее).
  • package-lock.json untracked (.opencode/package-lock.json) — не относится к этому PR (зафиксировано в pr-69 handoff), не коммитить.
  • Node 20 → 22 LTS — мажорное обновление Node. Все установленные npm-пакеты (opencode-ai, repomix, @mathew-cf/opencode-memory) совместимы с Node 22 (проверено по их package.json engines). Если обнаружится несовместимость — отдельный fix PR.
  • scaffold-handoff.sh — нумерация ADR по ls docs/decisions | grep -E '^[0-9]{3}-' | wc -l + 1 = 030 (после ADR-029). ADR создан вручную ДО scaffold с placeholder в имени (030-pr-71-...), scaffold нашёл существующий файл по *-pr-71-base-image-trixie-slim.md паттерну и не создал дубликат.