From 9c19588bcd7a7b0f8e107467312fa4c7fb640958 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Tue, 9 Jun 2026 02:23:27 +0300 Subject: [PATCH] tester(ET): auto-commit from tester run_id=424 --- docs/work-items/ORCH-086/13-test-report.md | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/work-items/ORCH-086/13-test-report.md diff --git a/docs/work-items/ORCH-086/13-test-report.md b/docs/work-items/ORCH-086/13-test-report.md new file mode 100644 index 0000000..5f7a879 --- /dev/null +++ b/docs/work-items/ORCH-086/13-test-report.md @@ -0,0 +1,67 @@ +--- +type: test-report +work_item_id: ORCH-086 +result: PASS +--- + +# Test Report — ORCH-086 + +Терминал-скип и проброс/dedup `state_uuid` на пути F-1 реконсилятора (закрытие F-1-пробела +ORCH-068: ложное «ET-002 done разблокирована (потерян webhook)»). + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Repo / ветка: orchestrator @ `feature/ORCH-086-orch-86-reconciler-telegram-et` (worktree) +- Prod health (8500): `{"status":"ok","service":"orchestrator"}` — OK +- Дата: 2026-06-09 + +## Предусловия +- Review-вердикт (`12-review.md`): **APPROVED** (P0/P1/P2 — нет). + +## Результаты + +| TC ID | Описание | Тест | Результат | +|-------|----------|------|-----------| +| TC-86-01 | AC-1 — терминальная enduro-задача (group=completed), зелёный гейт: нет `_note_unblock`/Telegram | `test_tc86_01_terminal_in_plane_not_unblocked` | PASS | +| TC-86-02 | AC-2 — терминал-скип `++skipped_terminal_total`, нет `advance_if_gate_passed` | `test_tc86_02_terminal_skip_counter_no_advance` | PASS | +| TC-86-03 | AC-2/R1 — терминал по ГРУППЕ (cancelled), независимо от проекта | `test_tc86_03_terminal_by_group_cancelled` | PASS | +| TC-86-04 | AC-2/R1 — fallback по логическому ключу done/cancelled при пустых groups | `test_tc86_04_terminal_fallback_logical_key_empty_groups` | PASS | +| TC-86-05 | AC-2 — терминальность по стадии БД (`stage='cancelled'`) | `test_tc86_05_terminal_by_db_stage_cancelled` | PASS | +| TC-86-06 | AC-3 — легитимный unblock зовёт `_note_unblock` с непустым `state_uuid` | `test_tc86_06_legit_unblock_passes_state_uuid` | PASS | +| TC-86-07 | AC-3 — повторный тик для того же issue+state_uuid подавлен dedup (`++deduped_total`) | `test_tc86_07_repeat_tick_deduped` | PASS | +| TC-86-08 | AC-4 (анти-регресс) — реально застрявшая задача продвигается, ровно один Telegram, `++unblocked_total` | `test_tc86_08_legit_unblock_still_notifies` | PASS | +| TC-86-09 | AC-5 — never-raise: исключение в детекте не роняет тик и не шлёт ложного Telegram | `test_tc86_09_never_raise_no_false_notify` | PASS | +| TC-86-10 | AC-6 — форма `status()`/`GET /queue` неизменна (счётчики на месте) | `test_tc86_10_status_shape_unchanged` (test_reconciler_plane.py) | PASS | +| TC-86-11 | AC-6 — `reconcile_skip_blocked_enabled=False` НЕ отключает терминал-скип | `test_tc86_11_terminal_skip_independent_of_guard2_flag` | PASS | +| TC-86-12 | Полный регресс пакета reconciler/config зелёный | `pytest tests/test_reconciler.py tests/test_reconciler_plane.py tests/test_config.py` | PASS | + +## Smoke test API (prod 8500) +- `GET /health` → `{"status":"ok","service":"orchestrator"}` — OK +- `GET /status` → 200, валидный JSON (`active_tasks` присутствует) — OK +- `GET /queue` → 200, блок `reconcile` присутствует (`enabled`, `unblocked_total`, `last_unblocked`, `interval`) — OK + +## Вывод pytest + +Полный прогон: +``` +1069 passed, 1 warning in 26.16s +``` + +Целевой регресс-пакет (TC-86-12): +``` +78 passed, 1 warning in 2.38s +``` +(единственный warning — PydanticDeprecatedSince20 в `src/config.py:5`, не связан с задачей.) + +## Покрытие критериев приёмки +- AC-1 — TC-86-01 ✓ +- AC-2 — TC-86-02/03/04/05 ✓ +- AC-3 — TC-86-06/07 ✓ +- AC-4 — TC-86-08 ✓ +- AC-5 — TC-86-09 + зелёный полный прогон ✓ +- AC-6 — TC-86-10/11 + контракты (STAGE_TRANSITIONS/QG_CHECKS/схема БД/сигнатуры не тронуты) ✓ + +## Итог +**PASS** — все 12 тест-кейсов PASS, полный регресс `pytest tests/` зелёный (1069 passed), +smoke API OK. Задача готова к переходу на стадию `deploy-staging`.