6.2 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-063 | testing | tester | pass | 2026-06-09 | claude-opus-4-8 | test-report | ORCH-063 |
Test Report — ORCH-063 — INFRA: disk-watchdog мониторинг диска mva154 + алерт при ≥85%
Машинный вердикт читается ТОЛЬКО из
result:во frontmatter.PASS→ задача переходит наdeploy-staging.
Окружение
- Python: 3.12.13
- pytest: 8.3.3 (pytest-asyncio 0.23.8, anyio 4.13.0)
- Worktree:
/repos/_wt/orchestrator/feature_ORCH-063-infra-mva154-85/(веткаfeature/ORCH-063-infra-mva154-85) - Дата: 2026-06-09
Smoke API (read-only)
| Endpoint | Результат |
|---|---|
GET /health |
PASS — {"status":"ok","service":"orchestrator"} |
GET /status |
PASS — отвечает; ORCH-063 (task 74) виден в active_tasks на stage=testing |
GET /queue |
PASS — блок serial_gate присутствует (ORCH-088) рядом с auto_labels (ORCH-089); существующие ключи counts/reconcile/reaper/post_deploy/merge_verify/task_deps на месте |
serial_gate.per_repo.orchestrator.active_task = ORCH-063 (testing) — регресса смока нет.
Результаты по тест-плану (04-test-plan.yaml)
Все TC прогнаны в tests/test_disk_watchdog.py (18 кейсов покрывают TC-01..TC-12). Сопоставление с
критериями приёмки 03-acceptance-criteria.md:
| TC ID | Тип | Описание | Тест(ы) | AC | Результат |
|---|---|---|---|---|---|
| TC-01 | unit | Алерт при пересечении порога (ниже→на/выше) → should_alert=True | test_tc01_alert_on_crossing_up |
AC-2/AC-3 | PASS |
| TC-02 | unit | Анти-спам: выше порога, прошло < realert_s → should_alert=False | test_tc02_antispam_within_cooldown |
AC-3 | PASS |
| TC-03 | unit | Повтор по cooldown: прошло ≥ realert_s → should_alert=True | test_tc03_realert_after_cooldown |
AC-3 | PASS |
| TC-04 | unit | Recovery: выше→ниже → сброс + ровно одно recovery; ниже устойчиво → не повторяется | test_tc04_recovery_and_no_repeat, test_tick_antispam_then_realert_then_recovery |
AC-4 | PASS |
| TC-05 | unit | Граница порога: == threshold алертит; == threshold-1 молчит |
test_tc05_threshold_boundary_inclusive |
AC-2 | PASS |
| TC-06 | unit | Замер по путям через (мок) shutil.disk_usage; дедуп по устройству |
test_tc06_measure_and_dedup_by_device |
AC-8 | PASS |
| TC-07 | unit | never-raise: битый путь и исключение в send_telegram не пробрасываются |
test_tc07_broken_path_does_not_kill_tick, test_tc07_send_failure_does_not_raise |
AC-6 | PASS |
| TC-08 | unit | Формат алерта: путь/used_pct/свободно/порог; notifying (не silent) | test_tc08_alert_message_actionable_and_notifying, test_tc08_format_helpers |
AC-2 | PASS |
| TC-09 | unit | Kill-switch: enabled=False → демон не стартует / /queue enabled=false |
test_tc09_killswitch_does_not_start, test_tc09_killswitch_status_block |
AC-5 | PASS |
| TC-10 | unit | status(): dict с enabled/threshold_pct/interval_s/paths/alerting/last_alert_at; never-raise |
test_tc10_status_shape, test_tc10_status_reflects_last_measurement |
AC-7 | PASS |
| TC-11 | integration | GET /queue содержит блок disk_monitor; существующие ключи не изменены |
test_tc11_queue_has_disk_monitor_block |
AC-7 | PASS |
| TC-12 | integration | Тик при ≥85% → send_telegram один раз; при выключенном флаге disk_monitor.enabled=false, алертов нет |
test_tc12_queue_disabled_block, test_tick_antispam_then_realert_then_recovery |
AC-5/AC-2 | PASS |
Доп. кейсы (вне номерных TC, усиливают покрытие): test_parse_paths_default_and_csv (парс CSV/дефолт путей) — PASS.
Покрытие: все 12 TC из тест-плана выполнены, каждый сопоставлен с AC; AC-1 (heartbeat-демон,
lifecycle) и AC-9 (документация) — структурно подтверждены review (12-review.md, вердикт APPROVED)
и не требуют отдельного рантайм-теста.
Вывод pytest
Целевой файл:
tests/test_disk_watchdog.py ... 18 items
test_tc01_alert_on_crossing_up PASSED
test_tc02_antispam_within_cooldown PASSED
test_tc03_realert_after_cooldown PASSED
test_tc04_recovery_and_no_repeat PASSED
test_tc05_threshold_boundary_inclusive PASSED
test_tc06_measure_and_dedup_by_device PASSED
test_tc07_broken_path_does_not_kill_tick PASSED
test_tc07_send_failure_does_not_raise PASSED
test_tc08_alert_message_actionable_and_notifying PASSED
test_tc08_format_helpers PASSED
test_tc09_killswitch_does_not_start PASSED
test_tc09_killswitch_status_block PASSED
test_tc10_status_shape PASSED
test_tc10_status_reflects_last_measurement PASSED
test_tick_antispam_then_realert_then_recovery PASSED
test_parse_paths_default_and_csv PASSED
test_tc11_queue_has_disk_monitor_block PASSED
test_tc12_queue_disabled_block PASSED
======================== 18 passed, 1 warning in 0.40s =========================
Полный регресс:
======================= 1296 passed, 1 warning in 31.97s =======================
(Единственный warning — PydanticDeprecatedSince20 в src/config.py:7, предсуществующий, не связан
с ORCH-063, не влияет на функциональность.)
Итог
PASS — все 12 TC выполнены и зелёные, полный регресс 1296 passed, smoke API (read-only)
исправен, блоки serial_gate/auto_labels в /queue на месте. Регрессов и обоснованных
FAIL не выявлено. Задача готова к переходу на deploy-staging.