From 2aacb39c2aa5435cd9d8f1a58a53ede881d44e99 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Tue, 9 Jun 2026 21:27:56 +0300 Subject: [PATCH] tester(ET): auto-commit from tester run_id=502 --- docs/work-items/ORCH-090/13-test-report.md | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 docs/work-items/ORCH-090/13-test-report.md diff --git a/docs/work-items/ORCH-090/13-test-report.md b/docs/work-items/ORCH-090/13-test-report.md new file mode 100644 index 0000000..3a2039d --- /dev/null +++ b/docs/work-items/ORCH-090/13-test-report.md @@ -0,0 +1,95 @@ +--- +result: PASS +work_item: ORCH-090 +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-090 +--- + +# Test Report — ORCH-090 — Механизм отмены задачи: статус STOP (остановка + полный сброс) + +> Машинный вердикт читается ТОЛЬКО из frontmatter (`result:`). Гейт `check_tests_passed` +> (`_parse_tests_verdict`) парсит его. Review-вердикт предшественника — `APPROVED` (`12-review.md` v2). + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Дата: 2026-06-09 +- Worktree: `feature/ORCH-090-stop-plane` (`/repos/_wt/orchestrator/feature_ORCH-090-stop-plane/`) +- Прод-контейнер `orchestrator` (8500) не трогался (smoke только read-only). + +## Результаты + +### Полный регресс +`pytest tests/ -q` (из worktree ветки задачи) — **1349 passed, 1 warning** (37.91s). +Warning — известный pydantic v2 deprecation в `src/config.py:8` (не относится к ORCH-090, не регресс). +`STAGE_TRANSITIONS` / `QG_CHECKS` / `check_*` анти-регресс-снапшоты — зелёные (NFR-1). + +### Профильные сюиты +`pytest tests/test_stop_status.py -v` — **30 passed** (1.72s): TC-01…TC-14 + 7 кейсов D7 +(безопасное прерывание merge/deploy, P1-фикс «merge-lease критичен только при бегущем акторе», +P2-фикс «нет дубль-уведомлений в deferred-ветке»). + +### Smoke API (read-only, прод 8500) +| Проверка | Результат | +|----------|-----------| +| `GET /health` | `{"status":"ok","service":"orchestrator"}` — OK | +| `GET /status` | OK (active_tasks отдаётся; ORCH-090 видна на `testing`) | +| `GET /queue` → блок `serial_gate` (ORCH-088) | присутствует — OK | +| `GET /queue` → блок `auto_labels` (ORCH-089) | присутствует — OK | + +> Блок `stop` (ORCH-090) в проде 8500 отсутствует — ожидаемо: фича этой задачи ещё не задеплоена +> (прод несёт предыдущий образ). В коде ветки блок присутствует (`src/main.py:198 "stop": cancel.snapshot()`) +> и покрыт тестом `test_tc09_queue_has_stop_block_and_keeps_keys` — это НЕ регресс смока. + +## Сопоставление с тест-планом (`04-test-plan.yaml`) + +| TC ID | Описание | Тест-функция(и) | Результат | +|-------|----------|-----------------|-----------| +| TC-01 | STOP распознаётся/маршрутизируется; прочее → no-op, never-raise | `test_tc01_stop_routed_and_unknown_is_noop` | PASS | +| TC-02 | Остановка агента: SIGTERM по `jobs.pid` через каскад `_watchdog`; idle → no-op | `test_tc02_stop_active_agent_by_pid`, `test_tc02_idle_agent_no_stop` | PASS | +| TC-03 | Отмена job'ов: queued+running → терминал; `claim_next_job` их не выбирает | `test_tc03_jobs_cancelled_and_claim_skips`, `test_tc03_cancel_jobs_helper_only_queued` | PASS | +| TC-04 | Запрет авто-requeue: `_finalize`/reaper не возвращают в `queued` | `test_tc04_reaper_does_not_requeue_terminal_task` | PASS | +| TC-05 | Полный сброс: `remove_worktree`+удаление ветки; `main` не тронут, нет force-push | `test_tc05_full_reset_removes_branch_and_worktree`, `test_tc05_delete_remote_branch_refuses_main` | PASS | +| TC-06 | Docs-артефакты (01..17) сохраняются при сбросе | `test_tc06_docs_and_task_row_survive` | PASS | +| TC-07 | Идемпотентность: повторный STOP на cancelled/done/missing → no-op | `test_tc07_idempotent_on_cancelled_done_missing` | PASS | +| TC-08 | Kill-switch `stop_status_enabled=False` нейтрален; `True` → отмена; scope CSV | `test_tc08_kill_switch_off_inert`, `test_tc08_kill_switch_off_handle_stop_noop`, `test_tc08_scope_csv` | PASS | +| TC-09 | Наблюдаемость: `GET /queue` несёт блок `stop`; never-raise при ошибке | `test_tc09_queue_has_stop_block_and_keeps_keys`, `test_tc09_snapshot_never_raises` | PASS | +| TC-10 | Дыра релонча закрыта: ручной перевод в mid-стадию НЕ порождает job | `test_tc10_relaunch_hole_closed_midpipeline` | PASS | +| TC-11 | Единственный вход — To Analyse → `start_pipeline`; analysis idle релончит analyst | `test_tc11_new_task_starts_pipeline`, `test_tc11_analysis_idle_relaunches_analyst` | PASS | +| TC-12 | Терминал-скип/restart-safe: reconciler F-1 и reaper не оживляют cancelled | `test_tc12_reconciler_skips_cancelled`, `test_tc12_requeue_running_does_not_revive_cancelled` | PASS | +| TC-13 | End-to-end STOP: агент остановлен, job'ы отменены, ветка убрана, статус durable, уведомления | `test_tc13_end_to_end_stop` | PASS | +| TC-14 | Аддитивность БД: миграция идемпотентна; существующие контракты целы | `test_tc14_migration_idempotent_and_columns_present`, `test_tc14_existing_contracts_intact` | PASS | +| — (D7) | Безопасное прерывание merge/deploy + P1/P2-фиксы | `test_d7_*` (7 кейсов) | PASS | + +Все 14 TC из тест-плана выполнены и сопоставлены; ожидаемый `expected: PASS` совпадает с фактом. + +## Сопоставление с критериями приёмки (`03-acceptance-criteria.md`) + +| AC | Критерий | Покрытие | Результат | +|----|----------|----------|-----------| +| AC-1 | STOP останавливает активного агента (SIGTERM-каскад по `jobs.pid`) | TC-02, TC-13 | PASS | +| AC-2 | Все job'ы отменены без авто-requeue (claim не выбирает) | TC-03, TC-04 | PASS | +| AC-3 | Таймеры/мониторы сняты; отменённая задача не реконсилируется | TC-12 | PASS | +| AC-4 | Полный сброс: ветка/worktree убраны, прогресс durable, docs сохранены | TC-05, TC-06, TC-13 | PASS | +| AC-5 | Единственный вход — To Analyse; дыра релонча закрыта | TC-10, TC-11 | PASS | +| AC-6 | Идемпотентность STOP (cancelled/done/missing) | TC-07 | PASS | +| AC-7 | Безопасное прерывание merge/deploy (нет half-merge/рестарта прода/force-push) | TC-05, D7 (`test_d7_*`) | PASS | +| AC-8 | Kill-switch и нулевая регрессия (полный pytest зелёный) | TC-08, полный регресс 1349 passed | PASS | +| AC-9 | Аддитивность БД и restart-safe | TC-14, TC-12 | PASS | +| AC-10 | Наблюдаемость STOP (`GET /queue` блок, уведомления) | TC-09, TC-13 | PASS | + +Все AC-1…AC-10 покрыты и зелёные. + +## Итог + +**PASS.** Полный регресс зелёный (1349 passed), профильная сюита `tests/test_stop_status.py` зелёная +(30 passed), smoke read-only OK (`/health`, `/status`, `/queue` с блоками `serial_gate`/`auto_labels`), +каждый TC тест-плана выполнен и сопоставлен с AC. Регрессов (`STAGE_TRANSITIONS`/`QG_CHECKS`/`check_*`, +авто-requeue, оживание отменённой задачи, касание `main`/прод-контейнера) не обнаружено. + +`result: PASS` → задача переходит на `deploy-staging`.