From b04fae748e45ed0f126daaa2e3b9e55a1242fcd7 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Sun, 7 Jun 2026 14:21:29 +0000 Subject: [PATCH] tester(ET): auto-commit from tester run_id=309 --- docs/work-items/ORCH-021/13-test-report.md | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docs/work-items/ORCH-021/13-test-report.md diff --git a/docs/work-items/ORCH-021/13-test-report.md b/docs/work-items/ORCH-021/13-test-report.md new file mode 100644 index 0000000..a3d08c7 --- /dev/null +++ b/docs/work-items/ORCH-021/13-test-report.md @@ -0,0 +1,82 @@ +--- +type: test-report +work_item_id: ORCH-021 +result: 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` → **700 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 (+ полный прогон 700) | 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 (реестры/схема БД +не изменены) дополнительно подтверждён зелёным полным регрессом 700 тестов, включая +deploy/staging/merge-gate/reconciler. AC-18 (документация) — вне scope прогона тестов, +подтверждён ревью (12-review.md, verdict APPROVED). + +## Вывод pytest (хвост) +``` +======================= 700 passed, 1 warning in 14.10s ======================== +``` +``` +======================== 30 passed, 1 warning in 0.64s ========================= +``` + +## Итог +**PASS.** Все 21 тест-кейс плана зелёные, полный регресс (700) зелёный, smoke прод-эндпоинтов +OK (окружение живо). Существующие контракты не сломаны. Задача готова к стадии deploy-staging.