tester(ET): auto-commit from tester run_id=752
This commit is contained in:
81
docs/work-items/ORCH-123/13-test-report.md
Normal file
81
docs/work-items/ORCH-123/13-test-report.md
Normal file
@@ -0,0 +1,81 @@
|
||||
---
|
||||
result: PASS
|
||||
work_item: ORCH-123
|
||||
stage: testing
|
||||
author_agent: tester
|
||||
status: pass
|
||||
created_at: 2026-06-16
|
||||
model_used: claude-opus-4-8
|
||||
type: test-report
|
||||
work_item_id: 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` (HEAD `820e534`)
|
||||
- Дата: 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`.
|
||||
Reference in New Issue
Block a user