7.7 KiB
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, HEADa153c8e, fix2040de3в истории) — тесты прогнаны из рабочего дерева именно этой задачи, НЕ из общего/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.