6.4 KiB
result, work_item, stage, author_agent, status, created_at, model_used, type, work_item_id
| result | work_item | stage | author_agent | status | created_at | model_used | type | work_item_id |
|---|---|---|---|---|---|---|---|---|
| PASS | ORCH-123 | testing | tester | pass | 2026-06-16 | claude-opus-4-8 | test-report | ORCH-123 |
Test Report — ORCH-123
Bugfix инцидента ORCH-116: детерминированный staging-runner (ORCH-115) вызывал docker exec
изнутри прод-контейнера orchestrator, где нет docker CLI → FileNotFoundError → постоянный
environment-дефект ложно маршрутизировался как код-фейл-откат deploy-staging → development.
Фикс — host-side ssh-исполнение + трёхсторонняя классификация (suite-ran / permanent-env /
transient-infra). Review-вердикт: APPROVED.
Окружение
- Python: 3.12.13
- pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.14.0, asyncio-0.23.8)
- Worktree:
/repos/_wt/orchestrator/feature_ORCH-123-bug-staging-runner-assumes-doc - Branch:
feature/ORCH-123-bug-staging-runner-assumes-doc(HEAD820e534) - Дата: 2026-06-16
Smoke API (read-only)
| Endpoint | Результат |
|---|---|
GET /health |
PASS — {"status":"ok","service":"orchestrator"} |
GET /status |
PASS — задача ORCH-123 (id=110) на стадии testing |
GET /queue |
PASS — блоки serial_gate (ORCH-088), auto_labels (ORCH-089), staging_runner (ORCH-115/123) присутствуют в полезной нагрузке |
Результаты (покрытие test-plan 04-test-plan.yaml ↔ AC)
| TC ID | Описание | AC | Тест | Результат |
|---|---|---|---|---|
| TC-01 | РЕГРЕСС red→green: исполнение сюиты без docker CLI в контейнере; spawn-error → permanent-env, без advance/defer/retry |
AC-6/AC-1 | test_tc01_regression_no_docker_cli_in_container |
PASS |
| TC-02 | Стратегия исполнения не зависит от docker CLI внутри контейнера (host-side argv/канал) | AC-1 | test_tc02_host_side_command_does_not_assume_in_container_docker |
PASS |
| TC-03 | environment/tool-error НЕ даёт код-фейл-отката; нет developer-retry; инфра-алерт | AC-3 | test_tc03_env_defect_no_code_fail_rollback_and_alerts |
PASS |
| TC-04 | Анти-over-tolerance: сюита исполнилась + exit≠0 → FAILED → прежний откат + developer-retry; exit=1 с env-маркером ≠ код-фейл |
AC-4 | test_tc04_real_suite_failure_still_rolls_back, test_tc04_exit1_with_env_marker_is_not_a_code_fail |
PASS |
| TC-05 | Happy-path: exit 0 → staging_status: SUCCESS → штатный advance (контракт ORCH-115 D7) |
AC-2 | test_tc05_happy_path_success_advances |
PASS |
| TC-06 | Классификация три-way; постоянный env-дефект ≠ транзиент ≠ код-фейл; never-raise; transient → DEFER не откат | AC-3 | test_tc06_classification_three_way, ..._never_raises, ..._transient_infra_defers_not_rolls_back |
PASS |
| TC-07 | Prod-like preflight сигнализирует ДО ложного отката (success/failure/no-target/disabled/in-container) | AC-5 | test_tc07_preflight_* (5 тестов) |
PASS |
| TC-08 | Self-hosting safety: нет compose/--build/8500/force-push/main/.env в argv |
AC-8 | test_tc08_host_side_command_has_no_dangerous_literals |
PASS |
| TC-09 | Kill-switch/область: staging_runner_enabled=False → _spawn; flag default = боевое; host-side off / no-target → in-container fallback |
AC-10 | test_tc09_killswitch_scope_and_flag_default, ..._host_side_off_falls_back_to_in_container, ..._host_side_on_but_no_target_falls_back |
PASS |
| TC-10 | Контракт артефакта 15-staging-log.md (staging_status: UPPERCASE + 52c, author_agent: staging-runner/model_used: n/a) |
AC-7 | test_tc10_artifact_contract_unchanged |
PASS |
| TC-11 | Анти-регресс конвейера: STAGE_TRANSITIONS/QG_CHECKS/check_staging_status/_parse_staging_status/machine-keys/схема БД — не тронуты |
AC-7 | test_tc11_pipeline_contract_unchanged |
PASS |
| TC-12 | never-raise / очередь не клинится; snapshot различает классы (failed/deferred/permanent_env) |
AC-11 | test_tc12_run_gate_never_raises, ..._snapshot_distinguishes_classes, ..._snapshot_never_raises |
PASS |
| TC-13 | Документация-инвариант: INFRA.md + README.md описывают границу исполнения (host-side vs in-container) | AC-12 | test_tc13_docs_describe_execution_boundary |
PASS |
| TC-14 | Анти-дрейф ORCH-115: структурные тесты staging-runner остаются зелёными | AC-7 | test_tc14_orch115_invariants_intact + полный test_orch115_staging_runner.py (24 теста) |
PASS |
| R-2 | Held deploy-staging-задача не откатывается reconciler'ом при infra-HOLD |
AC-3 | test_r2_held_deploy_staging_not_rolled_back |
PASS |
Все 14 TC из 04-test-plan.yaml выполнены и сопоставлены с критериями приёмки
03-acceptance-criteria.md. Обязательный регресс-фиксатор дефекта (TC-01, ORCH-019 BR-4) присутствует
и зелёный.
Вывод pytest
Целевой набор:
tests/test_orch123_staging_runner_exec.py ... (26 tests)
tests/test_orch115_staging_runner.py ... (24 tests)
======================== 50 passed, 1 warning in 3.17s =========================
Полный регресс (NFR-1, AC-11):
python -m pytest tests/ -q --tb=short
........................................................................ [100%]
2131 passed, 1 warning in 91.73s (0:01:31)
(Единственное warning — PydanticDeprecatedSince20 в src/config.py:8, унаследованное,
не относится к задаче.)
Итог
PASS — полный регресс 2131 passed, целевой набор 50 passed, smoke /health /status
/queue (с блоками serial_gate/auto_labels/staging_runner) OK, каждый TC из test-plan выполнен
и сопоставлен с AC. Задача готова к переходу на deploy-staging.