tester(ET): auto-commit from tester run_id=179
This commit is contained in:
94
docs/work-items/ORCH-040/13-test-report.md
Normal file
94
docs/work-items/ORCH-040/13-test-report.md
Normal file
@@ -0,0 +1,94 @@
|
||||
---
|
||||
type: test-report
|
||||
work_item_id: ORCH-040
|
||||
result: PASS
|
||||
---
|
||||
|
||||
# Test Report — ORCH-040
|
||||
|
||||
Тема: agent-файлы конвейера создаются под uid хоста (`1000:1000`, slin),
|
||||
а не `root:root`. Реализация — Вариант 1 (`user: "1000:1000"` в обоих
|
||||
compose-сервисах), правка только в `docker-compose.yml` + тесты.
|
||||
|
||||
## Окружение
|
||||
- Python: 3.12.13
|
||||
- pytest: 8.3.3
|
||||
- Сервис (prod 8500): `/health` → 200 `{"status":"ok"}`; preflight_ok=true (`2.1.142 (Claude Code)`)
|
||||
- Дата: 2026-06-06T15:06:25Z
|
||||
- Ветка: feature/ORCH-040-root-git
|
||||
|
||||
## Smoke test API (read-only GET, прод-контейнер не трогался)
|
||||
| Endpoint | Результат |
|
||||
|----------|-----------|
|
||||
| GET /health | 200 — `{"status":"ok","service":"orchestrator"}` |
|
||||
| GET /status | 200 — активная задача ORCH-040 (stage=testing) |
|
||||
| GET /queue | 200 — counts ok, max_concurrency=1, breaker=closed, preflight_ok=true |
|
||||
|
||||
> curl в окружении тестера отсутствует; smoke выполнен эквивалентным запросом
|
||||
> через `python -m urllib.request` (только GET, без побочных эффектов).
|
||||
|
||||
## Результаты (по 04-test-plan.yaml)
|
||||
|
||||
| TC ID | Описание | Тип | Результат |
|
||||
|-------|----------|-----|-----------|
|
||||
| TC-01 | compose: оба сервиса `user: "1000:1000"` (Вариант 1) | unit | PASS |
|
||||
| TC-02 | compose: оба сервиса сохраняют `group_add: ["999"]` (МИНА 1, docker.sock) | unit | PASS |
|
||||
| TC-03 | compose: SSH-маунт target под `/home/slin/.ssh`, согласован с HOME | unit | PASS |
|
||||
| TC-04 | launcher: форсимый HOME совместим с claude/SSH-маунтами (`/home/slin`) | unit | PASS |
|
||||
| TC-05 | полный регресс `pytest tests/` зелёный (нет регресса конвейера/launcher) | unit | PASS (501 passed) |
|
||||
| TC-06 | staging E2E: артефакты worktree/docs создаются `1000:1000` (AC-1) | integration | DEFERRED → deploy-staging |
|
||||
| TC-07 | хост под slin: `git pull/status/reset` без Permission denied (AC-2) | integration | DEFERRED → deploy-staging |
|
||||
| TC-08 | claude preflight/auth под uid 1000, агент exit_code=0 (AC-3, МИНА 2) | integration | DEFERRED → deploy-staging |
|
||||
| TC-09 | docker.sock + ssh-деплой под uid 1000 (AC-4, AC-5) | integration | DEFERRED → deploy-staging |
|
||||
|
||||
**О TC-06…TC-09:** по дизайну test-plan'а это ops/integration-проверки на
|
||||
staging (8501) и хосте, касающиеся прав ФС хоста и docker-рантайма. Они
|
||||
относятся к стадии `deploy-staging` (их PASS фиксируется в `15-staging-log.md`,
|
||||
`staging_status:`) и не воспроизводимы в окружении стадии `testing` без
|
||||
рестарта контейнера под новым uid. Это совпадает с замечанием ревью
|
||||
(12-review.md, P3): runtime/host-критерии AC-1…AC-5 подтверждаются на
|
||||
`deploy-staging`, а не при тестировании кода. Запуск деструктивных операций /
|
||||
рестарт self в рамках стадии testing запрещён (CLAUDE.md, self-hosting).
|
||||
|
||||
## Покрытие критериев приёмки (03-acceptance-criteria.md)
|
||||
| AC | Статус на стадии testing |
|
||||
|----|--------------------------|
|
||||
| AC-1 (артефакты под uid хоста) | runtime — проверяется на deploy-staging |
|
||||
| AC-2 (git под slin) | runtime — проверяется на deploy-staging |
|
||||
| AC-3 (claude preflight ok) | preflight_ok=true в `/queue`; полное E2E — deploy-staging |
|
||||
| AC-4 (docker.sock доступен) | конфиг подтверждён TC-02; runtime — deploy-staging |
|
||||
| AC-5 (SSH-деплой) | конфиг подтверждён TC-03; runtime — deploy-staging |
|
||||
| AC-6 (конвейер без регресса, pytest зелёный) | **PASS** — 501 passed |
|
||||
| AC-7 (проверено на staging до прода) | стадия deploy-staging |
|
||||
| AC-8 (документация/ADR обновлены) | **PASS** — подтверждено ревью (APPROVED) |
|
||||
| AC-9 (прод не уронен вне окна тишины) | стадия deploy/окно тишины |
|
||||
| AC-10 (host-prerequisites зафиксированы) | **PASS** — P-1…P-4 в ADR/INFRA |
|
||||
|
||||
## Вывод pytest
|
||||
```
|
||||
$ python -m pytest tests/ -v --tb=short
|
||||
platform linux -- Python 3.12.13, pytest-8.3.3, pluggy-1.6.0
|
||||
configfile: pytest.ini
|
||||
plugins: anyio-4.13.0, asyncio-0.23.8
|
||||
...
|
||||
======================== 501 passed, 1 warning in 8.54s ========================
|
||||
|
||||
$ python -m pytest tests/test_orch040_compose.py -v
|
||||
tests/test_orch040_compose.py::test_tc01_service_runs_as_host_uid[orchestrator] PASSED
|
||||
tests/test_orch040_compose.py::test_tc01_service_runs_as_host_uid[orchestrator-staging] PASSED
|
||||
tests/test_orch040_compose.py::test_tc02_group_add_keeps_docker_gid[orchestrator] PASSED
|
||||
tests/test_orch040_compose.py::test_tc02_group_add_keeps_docker_gid[orchestrator-staging] PASSED
|
||||
tests/test_orch040_compose.py::test_tc03_ssh_mount_under_home[orchestrator] PASSED
|
||||
tests/test_orch040_compose.py::test_tc03_ssh_mount_under_home[orchestrator-staging] PASSED
|
||||
tests/test_orch040_compose.py::test_tc04_launcher_home_matches_mounts PASSED
|
||||
========================= 7 passed, 1 warning in 0.31s =========================
|
||||
```
|
||||
(1 warning — Pydantic V2 deprecation в `src/config.py`, не относится к ORCH-040.)
|
||||
|
||||
## Итог
|
||||
**PASS** — все автоматизируемые тесты (TC-01…TC-05) зелёные, полный регресс
|
||||
501 passed, smoke API ok, документация/ADR подтверждены ревью. Runtime/host
|
||||
критерии (TC-06…TC-09, AC-1…AC-5/7/9) корректно отложены на обязательную
|
||||
стадию `deploy-staging` (8501) — страховку self-hosting перед прод-деплоем.
|
||||
|
||||
Задача переходит на стадию **deploy-staging**.
|
||||
Reference in New Issue
Block a user