6.4 KiB
type, work_item_id, result
| type | work_item_id | result |
|---|---|---|
| test-report | ORCH-021 | PASS |
Test Report — ORCH-021
Post-deploy наблюдение прода + реакция на деградацию (reserved-agent job
post-deploy-monitor, leaf-модуль src/post_deploy.py).
Окружение
- Python: 3.12.13
- pytest: 8.3.3 (asyncio mode=AUTO, anyio 4.13.0)
- Ветка: feature/ORCH-021-post-deploy-rollback
- Дата: 2026-06-07
Прогон
pytest tests/ -v --tb=short→ 701 passed, 1 warning (Pydantic V2 deprecation, не относится к задаче).- Целевые модули
tests/test_post_deploy.py+tests/test_post_deploy_integration.py→ 30 passed.
Smoke-test (read-only, прод 8500)
curl в окружении недоступен — опрос через python urllib (read-only, прод-контейнер не трогается).
| Эндпоинт | Результат |
|---|---|
GET /health |
200 {"status":"ok","service":"orchestrator"} |
GET /status |
200, активная задача ORCH-021 на стадии testing |
GET /queue |
200, counts/resilience/reconcile присутствуют |
Примечание: блок
post_deployв живом/queueотсутствует — это ожидаемо: прод сейчас работает на коде ДО ORCH-021 (задача ещё не задеплоена, стадия testing). Наличие блока (AC-14) проверяется интеграционным тестом TC-20 против кода ветки → PASS. Smoke-проверка подтверждает живость окружения, не версию ветки.
Результаты по тест-плану (04-test-plan.yaml)
| TC ID | Описание | Покрывает AC | Тест-функция | Результат |
|---|---|---|---|---|
| TC-01 | HEALTHY: серия без провалов < порога | AC-3 | test_tc01_healthy_no_failures | PASS |
| TC-02 | DEGRADED: N посл. провалов health == threshold | AC-4 | test_tc02_degraded_consecutive_health_failures | PASS |
| TC-03 | DEGRADED по 5xx при health=200 | AC-5 | test_tc03_degraded_by_5xx_ratio_even_when_health_200 | PASS |
| TC-04 | Нет ложного срабатывания: одиночный глюк + восстановление | AC-6 | test_tc04_no_false_trip_single_glitch_then_recovery | PASS |
| TC-05 | Пороги из Settings меняют вердикт на тех же данных | AC-11 | test_tc05_thresholds_change_verdict_on_same_data, test_classify_uses_settings_thresholds | PASS |
| TC-06 | не-self + auto_rollback=True + DEGRADED → ROLLBACK | AC-7 | test_tc06_nonself_auto_rollback_degraded_rolls_back | PASS |
| TC-07 | self-hosting + DEGRADED → ALERT_ONLY (никогда не авто-rollback) | AC-8 | test_tc07_self_hosting_degraded_never_rolls_back | PASS |
| TC-08 | HEALTHY → NONE для любого репо | AC-3 | test_tc08_healthy_means_none_for_any_repo, test_nonself_default_policy_alert_only | PASS |
| TC-09 | post_deploy_applies: пусто → только orchestrator | AC-2 | test_tc09_applies_empty_repos_only_self_hosting, test_tc09_applies_explicit_repos_csv | PASS |
| TC-10 | kill-switch: monitor_enabled=False → applies()=False для всех | AC-10 | test_tc10_kill_switch_disables_for_everyone | PASS |
| TC-11 | Откат exit 0 → ROLLBACK_OK | AC-7 | test_tc11_rollback_exit0_is_ok | PASS |
| TC-12 | Откат exit 1/2 → ROLLBACK_FAILED + эскалация | AC-9 | test_tc12_rollback_exit_nonzero_is_failed | PASS |
| TC-13 | 16-post-deploy-log.md: валидный YAML-frontmatter | AC-13 | test_tc13_log_frontmatter_parses | PASS |
| TC-14 | Опрос при сетевой ошибке → консервативный, не raise | AC-16 | test_tc14_probe_network_error_is_conservative_not_raise, test_tc14_classify_junk_input_swallowed | PASS |
| TC-15 | Ошибка записи артефакта → False, не raise | AC-16, AC-13 | test_tc15_write_log_no_worktree_returns_false | PASS |
| TC-16 | advance_stage deploy→done армит наблюдение (self), не армит (non-self) | AC-1, AC-2 | test_tc16_arm_for_self_hosting, test_tc16_no_arm_for_nonself, test_tc16_no_arm_when_kill_switch_off | PASS |
| TC-17 | Идемпотентность: повторный арм не задваивает | AC-15 | test_tc17_double_arm_is_noop | PASS |
| TC-18 | Полный цикл DEGRADED → не-self откат + лог + уведомление | AC-7, AC-13, AC-17 | test_tc18_degraded_nonself_rolls_back | PASS |
| TC-19 | Self-hosting DEGRADED → НЕ рестарт/откат, алерт+approve | AC-8, AC-17 | test_tc19_degraded_self_hosting_alert_only | PASS |
| TC-20 | GET /queue содержит блок post_deploy | AC-14 | test_tc20_queue_block_present | PASS |
| TC-21 | Регресс: deploy/staging/merge-gate/reconciler зелёные; STAGE_TRANSITIONS/QG_CHECKS не изменены | AC-12 | tests/test_stages.py (+ полный прогон 701) | PASS |
Доп. тесты ветки (не из плана, подтверждают контракты): test_series_append_and_read_roundtrip,
test_mark_done_idempotency_marker, test_healthy_tick_requeues_without_finishing,
test_finished_window_tick_is_noop — все PASS.
Покрытие критериев приёмки
AC-1…AC-18 — все покрыты прошедшими тестами (см. таблицу). AC-12 (реестры/схема БД не изменены) дополнительно подтверждён зелёным полным регрессом 701 теста, включая deploy/staging/merge-gate/reconciler. AC-18 (документация) — вне scope прогона тестов, подтверждён ревью (12-review.md, verdict APPROVED).
Вывод pytest (хвост)
======================= 701 passed, 1 warning in 12.71s ========================
======================== 30 passed, 1 warning in 0.58s =========================
Итог
PASS. Все 21 тест-кейс плана зелёные, полный регресс (701) зелёный, smoke прод-эндпоинтов OK (окружение живо). Существующие контракты не сломаны. Задача готова к стадии deploy-staging.