tester(ET): auto-commit from tester run_id=742
This commit is contained in:
72
docs/work-items/ORCH-116/13-test-report.md
Normal file
72
docs/work-items/ORCH-116/13-test-report.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
result: PASS
|
||||
work_item: ORCH-116
|
||||
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-116
|
||||
---
|
||||
|
||||
# Test Report — ORCH-116
|
||||
|
||||
Детерминированный test-раннер вместо LLM-тестера (стадия `testing`).
|
||||
|
||||
## Окружение
|
||||
- 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-116-orch-replace-llm-tester-with-d`
|
||||
- Ветка: `feature/ORCH-116-orch-replace-llm-tester-with-d`
|
||||
- Дата: 2026-06-16
|
||||
|
||||
## Smoke API (read-only)
|
||||
- `GET /health` → `{"status":"ok","service":"orchestrator"}` — **OK**
|
||||
- `GET /status` → активные задачи отданы (ORCH-116 на `testing`) — **OK**
|
||||
- `GET /queue` → отдан; блок `serial_gate` присутствует (ORCH-088), блок `auto_labels` присутствует,
|
||||
блок `test_runner` присутствует (ORCH-116 наблюдаемость) — **OK**
|
||||
|
||||
## Результаты по тест-плану (04-test-plan.yaml)
|
||||
|
||||
| TC ID | Описание | Тест(ы) | Результат |
|
||||
|-------|----------|---------|-----------|
|
||||
| TC-01 | `applies(repo)`: kill-switch/скоуп/тест-контракт (BR-9), never-raise | `test_tc01_applies_killswitch_scope_and_contract`, `test_tc01_applies_never_raises` | PASS |
|
||||
| TC-02 | Маппинг exit-кода 0→PASS / иначе/None→FAIL (fail-closed, единый контракт) | `test_tc02_map_exit_code` | PASS |
|
||||
| TC-03 | Рендер `13-test-report.md`: `result:` UPPERCASE + 52c-схема + хвост stdout/smoke | `test_tc03_report_render_schema_and_status_alignment` | PASS |
|
||||
| TC-04 | Артефакт читается неизменённым `_parse_tests_verdict` для PASS/FAIL | `test_tc04_gate_parser_unchanged`, `test_tc04_status_field_never_false_negatives_a_pass` | PASS |
|
||||
| TC-05 | `launch_job` перехватывает tester-джоб до `_spawn`; `agent_runs` не создаётся, None | `test_tc05_launch_job_intercepts_before_spawn` | PASS |
|
||||
| TC-06 | Дискриминатор: не-`testing`/не-tester/не-self не перехватываются; never-raise→False | `test_tc06_*` (4 теста) | PASS |
|
||||
| TC-07 | PASS→advance(`tester`)→`deploy-staging`; FAIL→откат `testing→development` + retry | `test_tc07_advance_initiated_like_llm[0-PASS]`, `[1-FAIL]` | PASS |
|
||||
| TC-08 | Kill-switch `test_runner_enabled=False` → `_spawn` (LLM-путь байт-в-байт) | `test_tc08_killswitch_falls_back_to_spawn` | PASS |
|
||||
| TC-09 | Анти-дрейф NFR-1: `STAGE_TRANSITIONS`/`QG_CHECKS`/`check_tests_passed`/токены/схема БД целы | `test_tc09_pipeline_contract_unchanged` | PASS |
|
||||
| TC-10 | Two-level (анти-ORCH-110): tool-error→bounded DEFER; исчерпание→fail-closed FAIL+alert | `test_tc10_nonzero_exit_is_fail_and_advances`, `test_tc10_timeout_defers_without_advance`, `test_tc10_tool_error_budget_exhausted_fails_closed` | PASS |
|
||||
| TC-11 | never-raise/fail-safe: pytest-бросок/таймаут/worktree-ошибка → FAIL/DEFER, не клинит | `test_tc11_run_gate_never_raises`, `test_tc11_launcher_contains_runner_fault` | PASS |
|
||||
| TC-12 | Изоляция/таймаут: proc_group tree-kill в worktree; малформ→дефолт 900+WARNING | `test_tc12_resolve_timeout_default_on_bad_value`, `test_tc12_pytest_runs_in_worktree_via_proc_group` | PASS |
|
||||
| TC-13 | Self-hosting safety: нет опасных литералов; smoke строго read-only GET; push в фичеветку | `test_tc13_*` (5 тестов) | PASS |
|
||||
| TC-14 | Наблюдаемость+гибрид: блок `test_runner` в `/queue`; структурный лог; LLM вне control-path | `test_tc14_*` (4 теста) | PASS |
|
||||
| TC-15 | Анти-дрейф LLM-карты: `llm-call-sites`/roadmap/policy зелёные после правок | `test_tc15_llm_map_anti_drift_green`, `test_llm_call_site_inventory.py`, `test_llm_determinization_docs.py` | PASS |
|
||||
|
||||
Каждый TC из `04-test-plan.yaml` выполнен и сопоставлен с критериями `03-acceptance-criteria.md`.
|
||||
|
||||
## Вывод pytest
|
||||
|
||||
### Полный регресс
|
||||
```
|
||||
$ python -m pytest tests/ -q --tb=short
|
||||
........................................................................ [ 97%]
|
||||
................................................. [100%]
|
||||
2137 passed, 1 warning in 84.57s (0:01:24)
|
||||
```
|
||||
(единственный warning — несвязанный Pydantic V2 deprecation в `src/config.py:8`)
|
||||
|
||||
### Тесты ORCH-116 (verbose)
|
||||
```
|
||||
$ python -m pytest tests/test_orch116_test_runner.py tests/test_llm_call_site_inventory.py tests/test_llm_determinization_docs.py -v
|
||||
45 passed, 1 warning in 2.20s
|
||||
```
|
||||
|
||||
## Итог
|
||||
PASS — полный регресс зелёный (2137 passed), smoke read-only OK (`/health`/`/status`/`/queue`,
|
||||
блок `serial_gate` присутствует), все 15 TC выполнены и сопоставлены с критериями приёмки.
|
||||
Задача переходит на `deploy-staging`.
|
||||
Reference in New Issue
Block a user