opencode-config/docs/handoff/pr-73-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

6.3 KiB
Raw Blame History


pr: 73 title: fix(docker): use node:22-trixie-slim instead of non-existent noble-slim

Что сделано

Follow-up к PR#71 (который переключил base image на node:22-trixie-slim, но коммитил через PR#71 с placeholder'ом в ADR). PR#73 закрывает хвосты PR#71: обновляет ADR-030 (переименован в 030-pr-71-base-image-trixie-slim.md, контент обновлён под реальный тег), переименовывает handoff pr-71-base-image-noble-slim.mdpr-71-base-image-trixie-slim.md, обновляет project map. Сам Docker base image (Dockerfile:1 FROM node:22-trixie-slim) уже был сменён в PR#71 — в PR#73 правок кода нет.

Конкретно:

  • Dockerfile:1 — без правок в этом PR (FROM node:22-trixie-slim уже стоит из PR#71)
  • docs/decisions/030-pr-71-base-image-trixie-slim.md — ADR-030 переименован с 030-pr-71-base-image-noble-slim.md, контент обновлён: указан реальный тег trixie-slim, пояснена ошибка PR#71 (noble-slim не существует в Docker Hub, node images публикуются только на Debian), chromium snap problem отпадает, добавлены альтернативы (node:lts-trixie-slim, node:trixie-slim)
  • docs/handoff/pr-71-base-image-trixie-slim.md — переименован с pr-71-base-image-noble-slim.md, контент обновлён под trixie-slim
  • docs/project-map/README.md — теги PR#73 на затронутых строках
  • этот handoff pr-73-base-image-trixie-slim.md — создан, потому что pipeline-status.py ищет handoff по PR номеру (pr-<PR>-*.md), а PR#71 handoff назван по issue/исходному PR и не матчится на PR#73

Почему

PR#71 изначально использовал несуществующий тег node:22-noble-slim — Docker Hub API возвращает count=0 для этого тега (node images публикуются только на Debian: bookworm, bullseye, trixie; Ubuntu noble — только для официального ubuntu образа, не для node). Пересборка падала с manifest unknown. node:22-trixie-slim — реальный тег (Debian 13 trixie, glibc 2.41 ≥ 2.39, Node 22 LTS), решает ту же задачу PR#71: @mathew-cf/rag-cli Rust native binary требует GLIBC_2.39, а node:20-slim (Debian Bookworm, glibc 2.36) слишком старый.

Debian 13 trixie НЕ использует snap (в отличие от Ubuntu noble) → chromium ставится через apt-get install -y chromium как обычный пакет, не transitional wrapper. Known limitation из PR#71 (chromium snap problem) отпадает.

Pending

— после merge PR#73:

  • Пересборка Docker образа локально (docker compose build), проверка что FROM node:22-trixie-slim резолвится с Docker Hub без manifest unknown
  • Проверка rag --version внутри контейнера (docker compose run --rm opencode rag --version) — подтверждает что GLIBC_2.39 доступен и semantic search работоспособен
  • memory update technical/opencode-log-subagent-stumbles-analysis.md (noble-slim не существует → trixie-slim) — на фазе MEMORY через memory-syncer subagent, если pipeline дойдёт

Watch out

  • commit tool делает git add -A под капотом — staged-группировка НЕ сохраняется. Если в индексе есть лишние файлы (например package-lock.json), они уйдут в коммит вместе с целевыми. Урок: проверять git status перед commit и git reset лишнее заранее. Но git reset * заблокирован deny в opencode.json:311-314 — нельзя перемотать неудачный коммит через raw bash. Workaround: новый commit --amend тоже не доступен (tool не принимает --amend), только новый коммит поверх.
  • Урок PR#71: проверять существование Docker тега через Docker Hub API перед коммитом. curl -s "https://hub.docker.com/v2/repositories/library/node/tags/noble-slim/" | jq .name: null = тег не существует. trixie-slim возвращает name: "trixie-slim". Также curl -s "https://hub.docker.com/v2/repositories/library/node/tags?page_size=100&name=trixie" — список реальных trixie тегов.
  • scaffold-handoff.sh создаёт и ADR, и handoff — для этого PR ADR уже существовал (030-pr-71-...), но паттерн поиска *-pr-<PR>-<slug>.md использует PR=73 → не нашёл 030-pr-71 → создал пустой файл 031-pr-73-*.md. Лишний файл 031-pr-73 удалён вручную (rm, не git rm — файл ещё не в индексе). Если scaffold запускается после переименования ADR с другим PR-номером — нужно либо переименовать ADR ДО scaffold под целевой PR, либо удалять дубликат после.
  • pipeline-status.py ищет handoff по PR-номеру, НЕ issue-номеру — конвенция репо: pr-<PR>-<slug>.md. PR#71 handoff назван по исходному PR#71 (который этот PR исправляет), поэтому pipeline-status для PR#73 не находил его → нужен отдельный pr-73-*.md. См. memory technical/video_uniq-pr51-channel-profile-discoveries.md §2.
  • .opencode/package-lock.json untracked — не относится к этому PR (зафиксировано в pr-69 handoff), не коммитить. git status показывает его как untracked — нужно игнорировать при commit (tool сделает git add -A, если файл не в .gitignore → уйдёт в коммит).