--- type: review work_item_id: ORCH-040 verdict: APPROVED version: 1 --- # Review ORCH-040 ## Summary Фикс переводит оба compose-сервиса (`orchestrator`, `orchestrator-staging`) на `user: "1000:1000"` (Вариант 1 из ADR-001 / adr-0005), чтобы артефакты конвейера создавались как `slin:slin` и git на хосте работал без ручного `chown`. Реализация точно соответствует ТЗ и ADR, документация (INFRA.md, CHANGELOG.md, work-item ADR-001, глобальный adr-0005) обновлена в том же PR, host-prerequisites (P-1…P-4) задокументированы. Полный прогон `pytest tests/ -q` — **501 passed**. Блокеров и must-fix нет. ## Findings ### P0 — Blocker - нет ### P1 — Must fix - нет ### P2 — Should fix - нет ### P3 — Nice to have - [ ] (опц.) AC-1/2/3/4/5 — это runtime/host-критерии; их фактическое PASS подтверждается на стадиях `testing` и `deploy-staging` (`15-staging-log.md`, `staging_status:`), а не ревью кода. Зафиксировано как ожидание к следующим стадиям, не как замечание к PR. ## Проверка по осям **1. Соответствие ТЗ (02-trz.md §4):** - §4.1 `docker-compose.yml`: оба сервиса получили `user: "1000:1000"` ✅; `group_add: ["999"]` сохранён (МИНА 1 — не удалён) ✅; SSH-маунт target `/root/.ssh` → `/home/slin/.ssh` ✅; claude-маунты (`/home/slin/.claude`, `.claude.json:ro`) не тронуты ✅. - §4.3 `src/agents/launcher.py` не менялся; `HOME=/home/slin` остаётся на стр. 326 и 513 (подтверждено grep) — согласован с новым SSH target ✅. - §4.4 `Dockerfile` не менялся (numeric uid не требует записи в `/etc/passwd`, `safe.directory '*'` уже есть) — в полном соответствии с решением ADR ✅. - §5/§6/§7: изменений API/БД/QG нет — подтверждено ✅. **2. Соответствие ADR (ADR-001 + global adr-0005):** - Выбран и реализован Вариант 1 ровно как описано в ADR (compose-only, без нового кода в launcher и Dockerfile) ✅. - Host-prerequisites P-1…P-4 из ADR перенесены в INFRA.md как обязательная процедура Owner ✅. - Нарушений глобальных ADR нет; связи с adr-0003 (staging-гейт как страховка) учтены ✅. **3. Качество кода:** - Изменения декларативные, с поясняющими комментариями и ссылкой на ADR ✅. - Тесты `tests/test_orch040_compose.py` содержательные: проверяют `user`, сохранение `group_add 999`, SSH target под HOME и согласованность HOME launcher'а с маунтами (TC-01…TC-04, привязаны к AC) — не тривиальные ✅. - Регресс отсутствует: `pytest tests/ -q` → 501 passed ✅. ## Документация Обновлена корректно и в том же PR (golden source соблюдён, AC-8 PASS): - `docs/operations/INFRA.md` — добавлен блок «Рантайм-uid (ORCH-040)», host-prerequisites, блок volumes/SSH target приведён к `/home/slin/.ssh` ✅; - `CHANGELOG.md` — запись в разделе Fixed ✅; - `docs/work-items/ORCH-040/06-adr/ADR-001-run-agents-as-host-uid.md` — выбор варианта + обоснование + P-1…P-4 ✅; - глобальный `docs/architecture/adr/adr-0005-container-runs-as-host-uid.md` (+ запись в `adr/README.md`) — сквозное решение зафиксировано ✅. Изменения `src/` Python-кода нет (правка только в `docker-compose.yml` + тесты), но документация всё равно обновлена — требование §2 CLAUDE.md выполнено с запасом.