From d9bb8d5fe36b535716cc5100bfadf1c46766ea5c Mon Sep 17 00:00:00 2001 From: claude-bot Date: Tue, 9 Jun 2026 10:02:13 +0300 Subject: [PATCH] tester(ET): auto-commit from tester run_id=433 --- docs/work-items/ORCH-087/13-test-report.md | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 docs/work-items/ORCH-087/13-test-report.md diff --git a/docs/work-items/ORCH-087/13-test-report.md b/docs/work-items/ORCH-087/13-test-report.md new file mode 100644 index 0000000..b0af90c --- /dev/null +++ b/docs/work-items/ORCH-087/13-test-report.md @@ -0,0 +1,88 @@ +--- +type: test-report +work_item_id: ORCH-087 +result: PASS +--- + +# Test Report — ORCH-087 + +Багфикс live-трекера: зачистка осиротевших карточек (G1), эффорт в строке стадии +(BR-EFF), честное итоговое время (BR-G5), плюс deploy-цикл на карточке (G3). +Review-вердикт `12-review.md` — **APPROVED**. Прогнан полный регресс + smoke API. + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Ветка: `feature/ORCH-087-orch-87-to-analyse-bump` +- Репозиторий: orchestrator (worktree) +- Прод-инстанс (8500): health `ok` — деструктивных операций не выполнялось +- Дата: 2026-06-09 + +## Результаты — тест-план (04-test-plan.yaml) + +| TC ID | Описание | Тест(ы) | Результат | +|-------|----------|---------|-----------| +| TC-01 | bump удаляет ВСЕ незакрытые message_id, не только последний | `test_notifications_orphans.py` | PASS | +| TC-02 | send→None → учёт mid не теряется (BR-6/R-3) | `test_notifications_orphans.py` | PASS | +| TC-03 | delete=False (transient) остаётся в учёте; «already gone» исключается | `test_notifications_orphans.py` | PASS | +| TC-04 | повторные вызовы → одна живая карточка, ≤1 send, без дублей | `test_notifications_orphans.py` | PASS | +| TC-05 | учёт mid переживает «рестарт» (читается из БД) | `test_notifications_orphans.py` | PASS | +| TC-06 | plane_status_label детерминирован для created..done; deploy→Awaiting Deploy | `test_tracker_status_line.py` (parametrized) | PASS | +| TC-07 | заголовок/статус соответствуют tasks.stage (нет застывшего To Analyse) | `test_tracker_status_line.py` | PASS | +| TC-08 | live-overlay рисует Deploying/Monitoring; деградирует на offline при kill-switch | `test_tracker_status_line.py` | PASS | +| TC-09 | миграция agent_runs.effort идемпотентна (_ensure_column) | `test_launcher.py` / db-fallback тесты | PASS | +| TC-10 | launcher стампит resolve_agent_effort в agent_runs.effort при запуске | `test_launcher.py` (effort, 2 теста) | PASS | +| TC-11 | строка стадии рендерит эффорт рядом с моделью; dev=xhigh, tester/deployer=medium, прочие=high | `test_tracker_effort_time.py` | PASS | +| TC-12 | пустой/неизвестный effort → суффикс опускается, рендер не падает | `test_tracker_effort_time.py` | PASS | +| TC-13 | brd_review ~6ч (застой) → «твоё время» НЕ показывает ~6ч (cap) | `test_tracker_effort_time.py` | PASS | +| TC-14 | agent-время = Σ agent_runs точно; 💰-итоги без регресса | `test_tracker_effort_time.py` | PASS | +| TC-15 | done-строка: wall помечен «общее (с ожиданием)»; числа согласованы | `test_tracker_effort_time.py` | PASS | +| TC-16 | update_task_tracker/render никогда не raise при ошибке Telegram/БД | `test_tracker_status_line.py` / `test_notifications_orphans.py` | PASS | +| TC-17 | ссылки ORCH-067 (plane_issue_link) и disable_web_page_preview ORCH-080 сохранены | `test_tracker_issue_link.py` | PASS | +| TC-18 | staging-воспроизведение (G0): одна актуальная карточка без сирот | ADR-001 (таблица воспроизведения) | PASS (по ADR) | +| TC-19 | merge-gate: ветка поверх origin/main с ORCH-86; reconciler не эродирован; pytest зелёный | `git merge-base` + регресс | PASS | + +## Критерии приёмки (03-acceptance-criteria.md) +- **G0 (AC-0.x):** ADR-001 присутствует, отвечает на 4 вопроса §4 BRD, содержит таблицу + staging-воспроизведения и known-limitation 48ч → PASS. +- **G1 (AC-1.x):** леджер `tracker_messages`, мульти-mid зачистка, send→None защита, + unit-покрытие зелёное → PASS. +- **G2/G3 (AC-2.x/3.x):** plane_status_label детерминирован для всех стадий; ключ + `confirm_deploy` в `_LIVE_BRANCH_LABELS`; deploy→Awaiting Deploy offline → PASS. +- **BR-EFF (AC-E.x):** колонка `agent_runs.effort` идемпотентна, стамп в `_spawn`, + рендер `· model · effort`, значения по ORCH-41/081 → PASS. +- **BR-G5 (AC-5.x):** три подписанных метрики, cap `tracker_brd_review_cap_s`, + agent-сумма точна → PASS. +- **BR-G6 (AC-6.x):** `git merge-base --is-ancestor origin/main HEAD` → TRUE; + `src/reconciler.py` — 35 вхождений маркеров ORCH-086 (`skipped_terminal_total`/ + `state_uuid`), логика не эродирована → PASS. +- **Сквозные (AC-X.x):** одна карточка/≤1 send; полный pytest зелёный (never-raise); + доки обновлены; ссылки/preview сохранены; STAGE_TRANSITIONS/QG_CHECKS не тронуты → PASS. + +## Smoke test API (прод 8500, read-only) +- `GET /health` → `{"status":"ok","service":"orchestrator"}` +- `GET /status` → отвечает; active_tasks включает ORCH-087 (stage `testing`) +- `GET /queue` → отвечает; `counts.running=1`, reconcile/reaper/post_deploy/merge_verify + блоки в норме; `skipped_terminal_total` присутствует (ORCH-086 наблюдаемость жива) + +## Вывод pytest +``` +============================= test session starts ============================== +platform linux -- Python 3.12.13, pytest-8.3.3 +collected 1090 items +... +======================= 1090 passed, 1 warning in 29.87s ======================= +``` +(1 warning — PydanticDeprecatedSince20 в `src/config.py`, не связана с задачей.) + +ORCH-087-специфичные модули (повторный прогон): +- `test_notifications_orphans.py` — 7 passed +- `test_tracker_effort_time.py` — 12 passed +- `test_tracker_status_line.py` — 18 passed +- `test_tracker_bump.py` + `test_tracker_bump_default.py` — 21 passed +- `test_launcher.py -k effort` — 2 passed + +## Итог +**PASS** — все 1090 тестов зелёные, smoke API OK, все критерии приёмки выполнены, +инварианты (never-raise, одна карточка, STAGE_TRANSITIONS/QG неизменны, BR-G6 +свежий main без эрозии reconciler) соблюдены. Задача готова к стадии deploy-staging.