diff --git a/docs/work-items/ORCH-040/12-review.md b/docs/work-items/ORCH-040/12-review.md new file mode 100644 index 0000000..3e47f0b --- /dev/null +++ b/docs/work-items/ORCH-040/12-review.md @@ -0,0 +1,70 @@ +--- +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 выполнено с запасом.