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

32 lines
No EOL
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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.md``pr-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` → уйдёт в коммит).