opencode-config/docs/handoff/pr-73-base-image-trixie-slim.md
Sergey 4b377f3e4d
fix(docs): commit tool staging truth + allow git restore --staged (#80)
Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 18:02:27 +03:00

32 lines
No EOL
6.4 KiB
Markdown
Raw Permalink 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`** — коммитит только уже staged файлы (`git diff --cached --name-only``git commit -m`). Staging ответственность агента: `git add <files>` явно перед `commit`. Если в индексе случайно оказались лишние файлы (например `package-lock.json` через `git add -A`), они уйдут в коммит. Урок: проверять `git status` перед `commit`. Для unstage лишнего: `git restore --staged <file>` (added to allow-list в PR#80, ADR-035) — `git reset *` заблокирован deny (`opencode.json:311-314`). См. ADR-035, memory `technical/commit-tool-staging-truth.md`.
- **Урок 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` (агент должен `git add` только целевые файлы, НЕ `git add -A`; `commit` tool коммитит только staged, не делая `git add` сам — см. Watch out выше).