6.3 KiB
type, work_item_id, result
| type | work_item_id | result |
|---|---|---|
| test-report | ORCH-061 | PASS |
Test Report — ORCH-061
BUG: устранение петли deploy-staging → development при self-hosting self-deploy.
Реализован Direction (б) из ADR-001: классификация staging-проверок на REAL
(fail-closed) и SANDBOX_INFRA (allowlist {C9a, C9b}, waivable) + толерантный,
но fail-closed вердикт (src/staging_verdict.py), kill-switch
staging_infra_tolerance_enabled (env ORCH_STAGING_INFRA_TOLERANCE_ENABLED).
Окружение
- Python: 3.12.13
- pytest: 8.3.3
- Дата: 2026-06-07T13:19Z
- Ветка:
feature/ORCH-061-bug-deploy-staging-development - Review verdict: APPROVED (12-review.md)
Smoke test API (prod 8500, read-only)
| Endpoint | Результат |
|---|---|
| GET /health | HTTP 200 {"status":"ok","service":"orchestrator"} |
| GET /status | HTTP 200 (ORCH-061 в стадии testing) |
| GET /queue | HTTP 200 (counts/resilience/reconcile present) |
Прод-контейнер 8500 не перезапускался и не трогался (self-hosting safety, AC-12).
Результаты по тест-плану (04-test-plan.yaml)
| TC ID | Описание | Тест | Результат |
|---|---|---|---|
| TC-01 | Корректный self-deploy: staging SUCCESS → advance к deploy, без отката | test_stage_engine.py::test_tc01_healthy_self_deploy_advances_no_rollback |
PASS |
| TC-02 | Страховка ORCH-35: реальный FAIL → откат deploy-staging→development | test_stage_engine.py::test_tc02_real_staging_failed_rolls_back |
PASS |
| TC-03 | Классификация REAL vs SANDBOX_INFRA (C9a/C9b отличимы) | test_staging_check_b6.py::test_tc03_classify_infra_checks (+ records/override/strict) |
PASS |
| TC-04 | Падают только C9a/C9b → итог не-FAILED (нет ложного отката) | test_qg_checks.py::test_tc04_only_infra_failures_waived_to_success |
PASS |
| TC-05 | Падает реальная pipeline-проверка → FAILED (fail-closed) | test_qg_checks.py::test_tc05_any_real_failure_fails_closed (+ _even_alone) |
PASS |
| TC-06 | no-changes на action-стадии (deploy-staging/deploy) не есть недовыполнение | test_launcher.py::test_tc06_deploy_staging_self_deploy_returns_note / test_tc06_deploy_self_deploy_returns_note |
PASS |
| TC-07 | regression-guard: на code-стадии (development) поведение прежнее | test_launcher.py::test_tc07_development_stage_returns_none |
PASS |
| TC-08 | Не-self-hosting репо: check_staging_status остаётся (True, "N/A …") | test_qg.py (no-op N/A) |
PASS |
| TC-09 | Kill-switch выкл → 1:1 прежнее строгое поведение, безопасный дефолт | test_qg_checks.py::test_tc09_infra_failure_strict_mode_fails_closed + test_config.py::test_staging_infra_tolerance_* |
PASS |
| TC-10 | БАГ-8: deploy_status FAILED → откат deploy→development | test_deploy_rollback.py |
PASS |
| TC-11 | Снапшот QG_CHECKS / STAGE_TRANSITIONS не изменён; frontmatter-контракты целы | test_qg_registry_snapshot.py |
PASS |
| TC-12 | never-raise: вердикт-логика при мусоре → безопасный детерминированный FAILED | test_qg_checks.py::test_tc12_compute_verdict_never_raises_on_garbage + test_stage_engine.py::test_tc12_retry_and_rollback_behavior_unchanged |
PASS |
| TC-13 | Сквозной self-deploy: deploy-staging→deploy→done без единого отката | test_stage_engine.py::test_tc13_end_to_end_self_deploy_no_single_rollback |
PASS |
| TC-14 | Наблюдаемость: «зелёный с допущением» отличим от честного зелёного | test_stage_engine.py::test_tc14_waived_green_distinguishable_from_honest_green |
PASS |
Все 14 TC присутствуют и зелёные.
Сопоставление с критериями приёмки (03-acceptance-criteria.md)
| AC | Критерий | Покрытие | Статус |
|---|---|---|---|
| AC-1 | Проход self-deploy без петли | TC-01, TC-13 | PASS |
| AC-2 | Инфра-FAIL (C9a/C9b) не откатывает | TC-03, TC-04 | PASS |
| AC-3 | Реальный провал staging откатывает | TC-02, TC-05 | PASS |
| AC-4 | no-changes на action-стадии ≠ недовыполнение | TC-06, TC-07 | PASS |
| AC-5 | БАГ-8: провал прод-деплоя откатывает | TC-10 | PASS |
| AC-6 | Условность self-hosting сохранена | TC-08 | PASS |
| AC-7 | Kill-switch возвращает прежнее поведение | TC-09 | PASS |
| AC-8 | Контракты не сломаны (реестр/frontmatter/exit-code) | TC-11 | PASS |
| AC-9 | Схема БД не меняется | миграций нет (флаг — конфиг) | PASS |
| AC-10 | never-raise | TC-12 | PASS |
| AC-11 | Наблюдаемость (INFRA-WAIVED / waived list) | TC-14 | PASS |
| AC-12 | Безопасность self-hosting (прод 8500 не трогается) | smoke + код пути | PASS |
| AC-13 | Документация обновлена (golden source) | подтверждено в 12-review.md | PASS |
| AC-14 | Регрессионные тесты зелёные | pytest tests/ -q → 670 passed |
PASS |
Вывод pytest
$ python -m pytest tests/ -v --tb=short
...
======================= 670 passed, 1 warning in 12.15s ========================
Единственный warning — PydanticDeprecatedSince20 (class-based Config в src/config.py),
не относится к ORCH-061, существовал ранее.
Итог
PASS — полный регресс зелёный (670 passed, 0 failed), все 14 TC из плана и все 14 критериев приёмки выполнены. Страховка цела (реальный регресс staging и БАГ-8 откатывают), условность self-hosting сохранена, kill-switch работает, never-raise покрыт. Smoke API prod — 200, прод-контейнер не затронут.
Задача готова к переходу на стадию deploy-staging.