--- type: test-report work_item_id: ORCH-047 result: PASS --- # Test Report — ORCH-047 `check_tests_passed` / `_parse_tests_verdict` читает `result:` наравне с `verdict:`/`status:`. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Ветка: feature/ORCH-047-check-tests-passed-gate-must-r - Среда: dev worktree (прод-контейнер `orchestrator` :8500 не затронут) - Дата: 2026-06-05 ## Smoke test API (prod :8500, read-only) | Endpoint | Результат | |----------|-----------| | `GET /health` | `{"status":"ok","service":"orchestrator"}` — OK | | `GET /status` | 200, активные задачи отдаются (ORCH-047 в testing) — OK | | `GET /queue` | 200, counts/breaker/preflight в норме (running:1, failed:0) — OK | ## Результаты (план `04-test-plan.yaml`) | TC ID | Описание | Тест | Результат | |-------|----------|------|-----------| | TC-01 | `result: PASS` без verdict/status → PASS (AC-01) | `test_result_pass_passes` | PASS | | TC-02 | `result: FAIL` → FAIL, reason содержит FAIL (AC-02) | `test_result_fail_fails` | PASS | | TC-03 | `result: PASS` + `verdict: BLOCKED` → negative авторитетен → FAIL (AC-03) | `test_result_pass_but_verdict_blocked_fails` | PASS | | TC-04 | `result: PASS` + `status: failed` → FAIL (AC-03) | `test_result_pass_but_status_failed_fails` | PASS | | TC-05 | `result: ready-to-deploy` → PASS (AC-04) | `test_result_ready_to_deploy_passes` | PASS | | TC-06 | Легаси `verdict: PASS` → PASS, без регресса (AC-05) | `test_verdict_pass_passes` | PASS | | TC-07 | `verdict: BLOCKED` + проза «23 passed» → FAIL (AC-05) | `test_passed_count_in_body_but_blocked_verdict_fails` | PASS | | TC-08 | Нет машинных полей, проза «Result: PASS» → FAIL (AC-06) | `test_no_machine_field_reason_mentions_result` | PASS | | TC-09 | Нет frontmatter → FAIL (AC-07) | `test_no_frontmatter_fails` | PASS | | TC-10 | Битый YAML → FAIL без исключения (AC-08) | `test_invalid_yaml_fails_no_exception` | PASS | | TC-11 | Отчёт отсутствует → FAIL «not found» (AC-09) | `test_no_report` | PASS | | TC-12 | Реестр `QG_CHECKS` неизменен (AC-10) | `test_qg_registry_snapshot.py` (3 теста) | PASS | | TC-13 | Полный регресс зелёный (AC-05, AC-12) | `pytest tests/` | PASS | ## Покрытие критериев приёмки | AC | Статус | |----|--------| | AC-01 `result: PASS` проходит | PASS | | AC-02 `result: FAIL` откатывает | PASS | | AC-03 negative авторитетен между полями | PASS | | AC-04 positive в любом из трёх полей → PASS | PASS | | AC-05 обратная совместимость (TestCheckTestsPassed) | PASS | | AC-06 ни одно поле не задано → FAIL | PASS | | AC-07 только проза без frontmatter → FAIL | PASS | | AC-08 битый YAML → FAIL без raise | PASS | | AC-09 отчёт отсутствует → FAIL | PASS | | AC-10 реестр гейтов неизменен | PASS | | AC-11 ADR/README/CHANGELOG обновлены | PASS | | AC-12 полный регресс зелёный | PASS | AC-11 проверено вручную: - `docs/work-items/ORCH-047/06-adr/ADR-001-result-field-in-tests-gate.md` — присутствует. - `docs/architecture/README.md` — строка вердикт-парсера перечисляет `result:`/`verdict:`/`status:`. - `CHANGELOG.md` — запись `fix:` про ORCH-047. ## Вывод pytest ``` tests/test_qg.py ............................... TestCheckTestsPassed (все PASS, включая новые test_result_* и легаси-кейсы) tests/test_qg_registry_snapshot.py::test_tc20_qg_callables_unchanged PASSED tests/test_qg_registry_snapshot.py::test_tc20_stage_transitions_unchanged PASSED ... ======================== 442 passed, 1 warning in 7.77s ======================== ``` (1 warning — предсуществующий PydanticDeprecatedSince20 в `src/config.py`, не связан с ORCH-047.) ## Итог PASS — все 13 TC и 12 AC выполнены, полный регресс зелёный (442 passed), smoke OK, реестр гейтов не изменён. Задача готова к стадии deploy-staging.