work_item: ORCH-040
description: >
  Инфра-фикс: контейнер/агенты не плодят root-файлы в хостовом репо.
  Часть проверок автоматизируема через pytest (валидация compose-конфига),
  часть — обязательные ops/integration проверки на staging и хосте (manual),
  т.к. касаются прав файловой системы хоста и рантайма docker.

tests:
  # --- Автоматизируемые (pytest, парсинг docker-compose.yml) ---
  - id: TC-01
    type: unit
    description: >
      docker-compose.yml: оба сервиса (orchestrator, orchestrator-staging)
      имеют user: "1000:1000" (при выборе Варианта 1).
    module: tests/test_orch040_compose.py
    expected: PASS

  - id: TC-02
    type: unit
    description: >
      docker-compose.yml: оба сервиса сохраняют group_add со значением "999"
      (доступ к docker.sock не потерян — МИНА 1).
    module: tests/test_orch040_compose.py
    expected: PASS

  - id: TC-03
    type: unit
    description: >
      docker-compose.yml: SSH-маунт согласован с HOME агента — target каталога
      .ssh лежит под /home/slin (а не /root/.ssh), для обоих сервисов.
    module: tests/test_orch040_compose.py
    expected: PASS

  - id: TC-04
    type: unit
    description: >
      launcher: HOME, форсимый в окружении агента и git_env, указывает на каталог,
      совместимый с SSH/claude-маунтами (/home/slin) — нет рассинхрона HOME vs uid.
    module: tests/test_orch040_compose.py
    expected: PASS

  # --- Регресс существующего поведения ---
  - id: TC-05
    type: unit
    description: >
      Весь существующий набор тестов зелёный (нет регресса логики конвейера/launcher).
    module: tests/  # pytest tests/ -q
    expected: PASS

  # --- Integration / ops (staging 8501, затем хост) ---
  - id: TC-06
    type: integration
    description: >
      На staging (8501) прогнать тестовую задачу конвейером end-to-end; артефакты
      worktree и docs создаются под 1000:1000 (НЕ root:root). Проверка AC-1.
    module: scripts/staging_check.py  # + ls -ld на хосте
    expected: PASS

  - id: TC-07
    type: integration
    description: >
      После staging-прогона на хосте под slin: git -C /home/slin/repos/orchestrator
      pull/status/reset без Permission denied. Проверка AC-2.
    module: manual/host-check
    expected: PASS

  - id: TC-08
    type: integration
    description: >
      claude preflight/auth проходит под новым uid: агент стартует и завершается
      exit_code=0 (creds /home/slin/.claude читаются). Проверка AC-3 (МИНА 2).
    module: manual/staging-agent-run
    expected: PASS

  - id: TC-09
    type: integration
    description: >
      docker.sock доступен из контейнера под uid 1000 (docker ps работает) и
      ssh-деплой-хук выполняется. Проверка AC-4, AC-5 (МИНА 1 + SSH).
    module: manual/staging-deploy-path
    expected: PASS
