* 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>
6.3 KiB
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-slimdocs/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
committool делает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. См. memorytechnical/video_uniq-pr51-channel-profile-discoveries.md§2. .opencode/package-lock.jsonuntracked — не относится к этому PR (зафиксировано в pr-69 handoff), не коммитить.git statusпоказывает его как untracked — нужно игнорировать приcommit(tool сделаетgit add -A, если файл не в.gitignore→ уйдёт в коммит).