Files
orchestrator/docs/work-items/ORCH-100/13-test-report.md
claude-bot 0ef1cf6698
All checks were successful
CI / test (push) Successful in 1m1s
CI / test (pull_request) Successful in 58s
tester(ET): auto-commit from tester run_id=571
2026-06-10 09:36:02 +03:00

7.7 KiB
Raw Blame History

result, work_item, stage, author_agent, status, created_at, model_used, type, work_item_id
result work_item stage author_agent status created_at model_used type work_item_id
PASS ORCH-100 testing tester pass 2026-06-10 claude-opus-4-8 test-report ORCH-100

Test Report — ORCH-100 — FND/F1b: sidecar-watchdog (re-test)

Повторный прогон после цикла testing → development → review. Прежний блокер прошлого прогона (tests/test_queue.py::TestRetry::test_finalize_job_requeue_then_fail) снят fix-коммитом 2040de3 (test-only autouse-фикстура _isolate_runs_dir в tests/conftest.py, изолирующая settings.runs_dir от ambient prod-log pollution; src/** не тронут). Полный регресс снова зелёный.

Окружение

  • Python: 3.12.13
  • pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
  • Дата: 2026-06-10
  • Worktree: /repos/_wt/orchestrator/feature_ORCH-100-fnd-f1b-sidecar-watchdog (ветка feature/ORCH-100-fnd-f1b-sidecar-watchdog, HEAD a153c8e, fix 2040de3 в истории) — тесты прогнаны из рабочего дерева именно этой задачи, НЕ из общего /repos/orchestrator.

Smoke API (read-only)

Эндпоинт Результат
GET /health OK — {"status":"ok","service":"orchestrator"}
GET /status OK — валидный JSON, активный набор задач отдан
GET /queue OK — блоки serial_gate (ORCH-088) И auto_labels (ORCH-089) присутствуют в полезной нагрузке (анти-регресс смока соблюдён)

Smoke зелёный, прод-контейнер не трогался (только чтение).

Результаты

Профильная сюита F1b — tests/watchdog/

66 passed (0 failed) — собственно поставка F1b: решающая функция, парсинг /metrics, детект orchestrator-down, never-raise, read-only docker, изолированный транспорт, kill-switch, compose-инвариант, анти-дубль диск-алерта.

Полный регресс орка — pytest tests/

1617 passed (0 failed, 1 warning — pre-existing Pydantic V2 deprecation в src/config.py:8, не относится к ORCH-100). src/** не изменён за всю ветку (git diff origin/main...HEAD -- 'src/**' → пусто) ⇒ контракт /metrics (ORCH-099), STAGE_TRANSITIONS/QG_CHECKS/check_*/схема БД — целы.

Сопоставление с тест-планом (04-test-plan.yaml)

TC ID Описание Тест-функция / модуль Покрытый AC Результат
TC-01 not-alerting & ≥threshold → ALERT (один на пересечение) test_decision.py::test_tc01_* (active + inactive→none) AC-2 PASS
TC-02 alerting & cooldown НЕ истёк → NONE (throttle) test_decision.py::test_tc02_alerting_active_in_cooldown_is_none AC-2 PASS
TC-03 alerting & cooldown истёк → REALERT test_decision.py::test_tc03_* (elapsed + no_last_alert) AC-2 PASS
TC-04 alerting & вернулось ниже порога → RECOVERY test_decision.py::test_tc04_alerting_recovers_when_inactive AC-2 PASS
TC-05 детект orchestrator-down (timeout/refused/5xx/нечит. тело) → ALERT + debounce test_orch_down.py (7 тестов) AC-2/AC-3 PASS
TC-06 never-raise per-source/per-tick/per-send test_never_raise.py (3 теста) AC-3 PASS
TC-07 kill-switch инертен; пороги/интервалы/таймауты из env (не хардкод) test_config_killswitch.py (4 теста) AC-4 PASS
TC-08 интеграция: полный тик при down орке (1 алерт + throttle + recovery; всё ломается — тик не падает) test_tick_orch_down_integration.py (2 теста) AC-2/AC-3 PASS
TC-09 self-hosting safety: docker GET-only, без start/stop/restart/exec test_docker_readonly.py (5 тестов) AC-6 PASS
TC-10 независимый транспорт: свои токен/chat, без импорта src/notifications.py/src test_notify_isolation.py (6 тестов) AC-2/AC-6 PASS
TC-11 толерантность /metrics: неизвестное поле игнор, опц. отсутствие ок, рост schema_version → warning test_metrics_parse.py (10 тестов) AC-1 PASS
TC-12 compose-инвариант: отдельный сервис orchestrator-watchdog, build watchdog/, restart, mem_limit, docker.sock :ro test_compose_service.py (7 тестов) AC-1/AC-4/AC-6 PASS
TC-13 анти-дубль диск-алерта (согласовано с ORCH-063) test_disk_alert_dedup.py (3 теста) AC-5 PASS
TC-14 регресс орка: полный pytest tests/ зелёный; src/** не изменён; /metrics-контракт цел tests/ (1617 passed) AC-7 PASS

Покрытие: все 14 TC из 04-test-plan.yaml выполнены, сопоставлены с AC-1…AC-7 (03-acceptance-criteria.md) и зелёные.

Сопоставление с критериями приёмки (03-acceptance-criteria.md)

AC Покрытие Результат
AC-1 — sidecar отдельным контейнером собирает 4 источника TC-11/12 + коллекторы host/deps/docker/metrics PASS
AC-2 — пороговый алерт: один на пересечение + throttle + recovery + орк-down TC-01…TC-05/08/10 PASS
AC-3 — изоляция: падение орка не роняет sidecar TC-05/06/08 PASS
AC-4 — тонкость, kill-switch, конфиг-пороги TC-07/12 PASS
AC-5 — анти-дубль диск-алерта (ORCH-063) TC-13 PASS
AC-6 — self-hosting safety (только чтение/алерт) TC-09/10/12 PASS
AC-7 — инфра-доки + pytest зелёный + docs/CHANGELOG 07-infra-requirements.md , CHANGELOG , доки , полный pytest tests/ 1617 passed PASS

Вывод pytest

Полный регресс (pytest tests/ -q)

........................................................................ [100%]
1617 passed, 1 warning in 65.33s (0:01:05)

Профильная сюита (pytest tests/watchdog/ -v)

collected 66 items
... (все 66 PASSED) ...
======================== 66 passed, 1 warning in 0.57s =========================

Эскалация

Нет открытых эскалаций. Прежний pre-existing красный тест (test_finalize_job_requeue_then_fail) снят fix-коммитом 2040de3 (изоляция settings.runs_dir, test-only, src/** не тронут) и независимо подтверждён зелёным в этом прогоне. Отдельная баг-задача более не требуется.

Итог

PASS — полный регресс pytest tests/ зелёный (1617 passed), профильная сюита sidecar-watchdog 66/66 PASS, smoke API (/health//status//queue с блоками serial_gate + auto_labels) read-only прошёл без регресса. Каждый TC (TC-01…TC-14) выполнен и сопоставлен с AC-1…AC-7. Блокеров нет. Задача готова к переходу на deploy-staging.