diff --git a/docs/work-items/ORCH-044/13-test-report.md b/docs/work-items/ORCH-044/13-test-report.md new file mode 100644 index 0000000..294d645 --- /dev/null +++ b/docs/work-items/ORCH-044/13-test-report.md @@ -0,0 +1,84 @@ +--- +type: test-report +work_item_id: ORCH-044 +result: PASS +--- + +# Test Report — ORCH-044 + +Надёжность запуска агента: preflight auth (P1) + пустой лог = провал (P3). +**P2 (`--effort`) исключён из scope владельцем** (06.06) — вынесен в ORCH-50; +AC-7/AC-8/AC-9 и TC-09/TC-11 (effort) в этой задаче **не применяются (N/A)**. + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Branch: feature/ORCH-044-preflight-auth-effort +- Дата: 2026-06-06T08:39Z +- Прод-инстанс (8500): не трогался; smoke — read-only GET. + +## Результаты — Quality Gate тесты (04-test-plan.yaml) + +| TC ID | Описание | Тест(ы) | Результат | +|-------|----------|---------|-----------| +| TC-01 | Нет `.credentials.json` ⇒ FAIL про auth | `test_missing_credentials_fails` | PASS | +| TC-02 | Протухший OAuth `expiresAt` ⇒ FAIL | `test_expired_token_fails` | PASS | +| TC-03 | Валидный логин ⇒ OK без регрессии | `test_valid_login_ok` | PASS | +| TC-04 | Битый JSON ⇒ FAIL без исключения | `test_broken_json_fails_without_raising` | PASS | +| TC-05 | Token-free: нет сетевого вызова | `test_auth_check_makes_no_network_call` | PASS | +| TC-06 | Кеширование auth в пределах TTL | `test_auth_result_cached_within_ttl` | PASS | +| TC-07 | Путь credentials от HOME агента (/home/slin) | `test_credentials_path_follows_agent_home` | PASS | +| TC-08 | Worker не клеймит job при auth-fail | `test_worker_does_not_claim_when_auth_fails` | PASS | +| TC-09 | (effort) cmd без `--effort` | `test_effort_flag.py` | N/A — scope исключён владельцем (ORCH-50) | +| TC-10 | `resolve_agent_effort` согласован | `test_resolve_agent_effort.py` (11 тестов) | PASS — effort не тронут, тесты зелёные | +| TC-11 | (effort) дефолтный путь даёт непустой JSON | `test_effort_flag.py` | N/A — scope исключён владельцем (ORCH-50) | +| TC-12 | Пустой лог + exit0 ⇒ failed + алерт | `test_empty_log_exit0_terminal_failed_alerts` | PASS | +| TC-13 | Лог без result-JSON ⇒ провал | `test_garbage_log_exit0_not_done` | PASS | +| TC-14 | Провал ⇒ нет advance/успешного коммента | `test_empty_result_suppresses_advance_and_comment` | PASS | +| TC-15 | Валидный JSON ⇒ done без регрессии | `test_valid_result_done`, `test_success_advances_and_comments` | PASS | +| TC-16 | Никогда не вечный `running` | `test_never_running_after_empty_result` | PASS | +| TC-17 | Классификация permanent/transient | `test_empty_result_defaults_permanent`, `..._with_transient_marker_goes_transient` | PASS | +| TC-18 | Регресс preflight (bin/version) | `test_resilience.py::TestPreflight` | PASS | +| TC-19 | Полный `pytest tests/` зелёный | вся сюита | PASS (504 passed) | + +Дополнительно покрыто (вне нумерации плана): постфактум auth-маркер +(`test_is_auth_failure_text_*`, `TestAuthMarkerHandling`), тумблер +`ORCH_PREFLIGHT_CHECK_AUTH` (`test_auth_toggle_off_skips_check`), явный путь +credentials (`test_explicit_credentials_path_wins`). + +## Сопоставление с критериями приёмки +- **AC-1…AC-6** (preflight auth): PASS — TC-01…TC-08. +- **AC-7/AC-8/AC-9** (effort): N/A — исключены владельцем (см. 02-trz.md, 03-acceptance-criteria.md). +- **AC-10…AC-14** (пустой результат ⇒ провал): PASS — TC-12…TC-16. +- **AC-15** (документация в том же PR): PASS — подтверждено review (APPROVED): README/internals/INFRA/CHANGELOG/ADR обновлены. +- **AC-16** (тесты зелёные): PASS — 504 passed. +- **AC-17** (self-hosting): PASS — изменения в слое preflight/launch; прод-контейнер не рестартовался; smoke 8500 read-only. + +## Smoke test API (8500, read-only GET) +| Endpoint | Код | Замечание | +|----------|-----|-----------| +| GET /health | 200 | `{"status":"ok","service":"orchestrator"}` | +| GET /status | 200 | активна задача ORCH-044 (stage=testing) | +| GET /queue | 200 | counts ok (failed=0), `preflight_ok=true`, breaker=closed | + +> curl в окружении отсутствует — smoke выполнен через `urllib` (эквивалентные GET). + +## Вывод pytest +``` +======================= 504 passed, 1 warning in 10.82s ======================== +``` +Модули плана (детально): +``` +tests/test_preflight_auth.py ......... 18 passed +tests/test_resolve_agent_effort.py ... 11 passed +tests/test_empty_log_failure.py ...... 18 passed +tests/test_resilience.py ............. 31 passed +(итого по модулям плана: 78 passed) +``` +Warning: `PydanticDeprecatedSince20` в `src/config.py:4` — предсуществующий, +вне scope ORCH-044 (зафиксировано в review как P2/опционально). + +## Итог +**PASS** — все применимые тесты плана зелёные, существующая сюита не сломана, +smoke API исправен. TC-09/TC-11 (effort) корректно N/A: P2 исключён владельцем +и вынесен в ORCH-50. Задача готова к стадии **deploy-staging**.