--- result: PASS # PASS | FAIL — машинный вердикт, UPPERCASE work_item: ORCH-091 stage: testing author_agent: tester status: pass created_at: 2026-06-09 model_used: claude-opus-4-8 type: test-report work_item_id: ORCH-091 --- # Test Report — ORCH-091 BUG: заголовок-строка live-карточки трекера застревает на «To Analyse» на `stage=deploy-staging` (нет ключа в `_STAGE_STATUS_LABEL`) + ложные `✅`-строки после отката + занижение метрик строки стадии (последний прогон вместо суммы попыток). ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Worktree: `/repos/_wt/orchestrator/feature_ORCH-091-bug-to-analyse-stage-deploy-st` - Ветка: `feature/ORCH-091-bug-to-analyse-stage-deploy-st` - Дата: 2026-06-09 ## Предусловия - Вердикт reviewer (`12-review.md`): **APPROVED** (P0=0, P1=0) ✅ - Тесты прогнаны из worktree ветки задачи (не из общего `/repos/orchestrator`) ✅ ## Smoke API (read-only) | Эндпоинт | Результат | |----------|-----------| | `GET /health` | `{"status":"ok","service":"orchestrator"}` — OK | | `GET /status` | 200, активные задачи отдаются (ORCH-091 = `testing`) — OK | | `GET /queue` | 200; блок `serial_gate` присутствует (ORCH-088) ✅; блок `auto_labels` присутствует (ORCH-089) ✅ | `serial_gate.per_repo.orchestrator.active_task = ORCH-091/testing`, регресс смока отсутствует. ## Покрытие тест-плана (`04-test-plan.yaml`) ↔ критерии приёмки (`03-acceptance-criteria.md`) | TC ID | Описание | AC | Тест(ы) | Результат | |-------|----------|----|---------|-----------| | TC-01 | Полнота карты: каждый ключ `STAGE_TRANSITIONS` (программная итерация) → непустой лейбл ≠ «To Analyse» (кроме `created`) | AC-1 | `test_tracker_status_line::test_orch091_tc01_every_stage_has_meaningful_label[*]` (9 параметров) + `test_orch091_tc01_created_stays_to_analyse` | PASS | | TC-02 | `stage='deploy-staging'` → осмысленный staging-лейбл ≠ «To Analyse» и ≠ лейбла `deploy` | AC-2 | `test_tracker_status_line::test_orch091_tc02_deploy_staging_label` | PASS | | TC-03 | Неизвестная стадия (`__bogus__`) → нейтральный фолбэк (не «To Analyse»); never-raise на битом/None входе | AC-3 | `test_orch091_tc03_unknown_stage_neutral_not_to_analyse` + `test_orch091_tc03_cancelled_offline_label` + `test_tc09c_plane_status_label_never_raises` | PASS | | TC-04 | Регресс ветвей `plane_status_label`: analysis+brd-clock→In Review; deploy→Awaiting Deploy; done→Done; created→To Analyse | AC-6 | `test_tracker_status_line::test_tc06_stage_to_plane_status[*]` (8) + `test_tc07_in_review_from_brd_clock` + `test_tc08_awaiting_deploy_offline` | PASS | | TC-05 | Откат `deploy-staging→development`: Разработка активна (`🔄`), Тестирование/Внедрение НЕ `✅`; Анализ/Архитектура остаются `✅` | AC-4 | `test_tracker_rollback_metrics::test_tc05_rollback_suppresses_later_stage_checkmarks` + `test_tc05_forward_progress_keeps_earlier_checkmarks` + `test_tc05_deploy_staging_keeps_deployer_row` | PASS | | TC-06 | Суммирование метрик: developer с 3 `agent_runs` (фикстура ORCH-069) → строка «Разработка» = Σ стоимости ≈ $3.98, Σ токенов, Σ времени | AC-5 | `test_tracker_rollback_metrics::test_tc06_stage_line_sums_all_developer_runs` | PASS | | TC-07 | Сходимость тоталов карточки (💰/🔢/⏱ Агенты) с `SUM(agent_runs)` по `task_id` при ретраях | AC-5 | `test_tc07_totals_converge_with_sum_agent_runs` + `test_tc07_sum_of_stage_lines_equals_totals_on_done` | PASS | | TC-08 | `render_task_tracker` never-raise: NULL timestamps / отсутствующий stage → строка-фолбэк без исключения | AC-7 / NFR-1 | `test_tc08_render_survives_null_timestamps_and_runs` + `test_tc08_render_survives_bogus_stage` | PASS | | TC-09 | Регресс строк карточки: формат строк стадий, эффорт-суффикс (ORCH-087), «Подтверждение BRD», блок тоталов — без изменений | AC-6 | `test_telegram_tracker.py` + `test_tracker_effort_time.py` (эффорт по ролям, capped review-time, done-time labels) — все зелёные | PASS | Каждый TC из `04-test-plan.yaml` выполнен и сопоставлен с критериями `03-acceptance-criteria.md`. ## Вывод pytest ``` $ cd /repos/_wt/orchestrator/feature_ORCH-091-bug-to-analyse-stage-deploy-st $ pytest tests/ -v --tb=short tests/test_tracker_rollback_metrics.py::test_tc05_rollback_suppresses_later_stage_checkmarks PASSED tests/test_tracker_rollback_metrics.py::test_tc05_forward_progress_keeps_earlier_checkmarks PASSED tests/test_tracker_rollback_metrics.py::test_tc05_deploy_staging_keeps_deployer_row PASSED tests/test_tracker_rollback_metrics.py::test_tc06_stage_line_sums_all_developer_runs PASSED tests/test_tracker_rollback_metrics.py::test_tc07_totals_converge_with_sum_agent_runs PASSED tests/test_tracker_rollback_metrics.py::test_tc07_sum_of_stage_lines_equals_totals_on_done PASSED tests/test_tracker_rollback_metrics.py::test_tc08_render_survives_null_timestamps_and_runs PASSED tests/test_tracker_rollback_metrics.py::test_tc08_render_survives_bogus_stage PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[analysis] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[architecture] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[development] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[review] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[testing] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[deploy-staging] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[deploy] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[done] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_every_stage_has_meaningful_label[cancelled] PASSED tests/test_tracker_status_line.py::test_orch091_tc01_created_stays_to_analyse PASSED tests/test_tracker_status_line.py::test_orch091_tc02_deploy_staging_label PASSED tests/test_tracker_status_line.py::test_orch091_tc03_unknown_stage_neutral_not_to_analyse PASSED tests/test_tracker_status_line.py::test_orch091_tc03_cancelled_offline_label PASSED ... (полный набор регресса трекера/usage/webhooks/verdict-status зелёный) ======================= 1370 passed, 1 warning in 39.33s ======================= ``` (1 warning — PydanticDeprecatedSince20 в `src/config.py:8`, преэкзистный, не связан с ORCH-091.) ## Итог PASS - Все 1370 тестов зелёные; новые тесты ORCH-091 (TC-01…TC-08) присутствуют и проходят. - Каждый TC из тест-плана выполнен и сопоставлен с AC-1…AC-7. - Smoke read-only OK; блоки `serial_gate` и `auto_labels` присутствуют в `GET /queue` (без регресса). - Изменение indication-only / never-раise; регресс существующих меток карточки (AC-6) подтверждён. **Вердикт: `result: PASS`** → задача переходит на `deploy-staging`.