tester(ET): auto-commit from tester run_id=706
This commit is contained in:
71
docs/work-items/ORCH-112/13-test-report.md
Normal file
71
docs/work-items/ORCH-112/13-test-report.md
Normal file
@@ -0,0 +1,71 @@
|
||||
---
|
||||
result: PASS # PASS | FAIL — машинный вердикт, UPPERCASE
|
||||
work_item: ORCH-112
|
||||
stage: testing
|
||||
author_agent: tester
|
||||
status: pass
|
||||
created_at: 2026-06-15
|
||||
model_used: claude-opus-4-8
|
||||
type: test-report
|
||||
work_item_id: ORCH-112
|
||||
---
|
||||
|
||||
# Test Report — ORCH-112
|
||||
|
||||
Гигиена shared deploy-базы: устойчивость self-deploy `git pull` к грязному дереву
|
||||
(багфикс инцидента ORCH-111). Review-вердикт: **APPROVED** (`12-review.md`).
|
||||
|
||||
## Окружение
|
||||
- Python: 3.12.13
|
||||
- pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
|
||||
- Worktree: `/repos/_wt/orchestrator/feature_ORCH-112-bug-failed-cancelled-task-arti/`
|
||||
- Ветка: `feature/ORCH-112-bug-failed-cancelled-task-arti`
|
||||
- Дата: 2026-06-15
|
||||
|
||||
## Smoke API (read-only)
|
||||
| Endpoint | Результат |
|
||||
|----------|-----------|
|
||||
| `GET /health` | PASS — `{"status":"ok","service":"orchestrator"}` |
|
||||
| `GET /status` | PASS — задача 102 ORCH-112 на стадии `testing`, ветка совпадает |
|
||||
| `GET /queue` | PASS — блок `serial_gate` присутствует (ORCH-088); `auto_labels` присутствует |
|
||||
|
||||
Блок `checkout_hygiene`/`serial_gate`/`auto_labels` — все на месте в полезной нагрузке `/queue`,
|
||||
регресса смока нет.
|
||||
|
||||
## Покрытие ТЗ (TC из 04-test-plan.yaml ↔ 03-acceptance-criteria)
|
||||
|
||||
| TC ID | Описание | AC | Тест | Результат |
|
||||
|-------|----------|----|------|-----------|
|
||||
| TC-01 | Регресс ORCH-111: грязный tracked `src/config.py` + untracked → база сходится к чистому `origin/main`, pull не падает (red→green) | AC-1 | `test_tc01_dirty_tracked_edit_converges_and_deploys` (+ `test_tc01b_bare_pull_aborts_without_hygiene_documents_incident`) | PASS |
|
||||
| TC-02 | Untracked WIP-файлы не блокируют и не протекают в деплой | AC-2 | `test_tc02_untracked_wip_does_not_block` | PASS |
|
||||
| TC-03 | Сохранность `.deploy-prev-image-*`/`deploy-hook.log`/sibling `.deploy-state-*`/`.merge-lease-*.json`/`.git/worktrees/*` (NFR-2) | AC-3 | `test_tc03_preserves_rollback_and_sibling_artifacts` | PASS |
|
||||
| TC-04 | Happy-path: чистая база → fast-forward, exit-коды байт-в-байт | AC-4 | `test_tc04_clean_base_fast_forwards_no_op_hygiene` | PASS |
|
||||
| TC-05 | Self-hosting safety: нет операций над `main`/force-push/рестарта прода; `git clean -fd` (никогда `-x`); leaf чист | AC-5 | `test_tc05_hook_clean_is_never_destructive`, `test_tc05_leaf_is_a_pure_leaf` | PASS |
|
||||
| TC-06 | Kill-switch off → инертно; пустой CSV → self-hosting only; скоуп репо | AC-6 | `test_tc06_kill_switch_off_is_inert`, `test_tc06_empty_csv_is_self_hosting_only`, `test_tc06_csv_scope_limits_repos` | PASS |
|
||||
| TC-07 | Сходимость после cancel/failed → следующий self-deploy чист | AC-7 | `test_tc07_convergence_then_next_deploy_is_clean` | PASS |
|
||||
| TC-08 | Наблюдаемость: `read_report`/`alert_dirty`, Telegram best-effort/never-raise | AC-8 | `test_tc08_read_report_none_when_absent`, `test_tc08_read_report_parses_dirty_sentinel`, `test_tc08_alert_dirty_never_raises_on_send_failure` | PASS |
|
||||
| TC-09 | Инвариант конвейера: `STAGE_TRANSITIONS`/`QG_CHECKS`/`check_*`/machine-verdict/exit-code-контракт хука не тронуты | AC-9 | `test_tc09_pipeline_contracts_untouched`, `test_tc09_hook_exit_code_contract_intact` | PASS |
|
||||
| TC-10 | Документация-инвариант: INFRA.md и architecture/README.md содержат правило «main checkout — deploy-база, не workspace» | AC-10 | `test_tc10_docs_state_deploy_base_invariant` | PASS |
|
||||
|
||||
Каждый TC из `04-test-plan.yaml` выполнен и сопоставлен с критерием приёмки `03-acceptance-criteria.md`.
|
||||
TC-01 (обязательный red→green регресс инцидента ORCH-111) — зелёный; парный TC-01b документирует
|
||||
аборт голого pull без гигиены.
|
||||
|
||||
## Вывод pytest
|
||||
|
||||
### Целевой модуль `tests/test_deploy_checkout_hygiene.py`
|
||||
```
|
||||
collected 17 items
|
||||
... 17 passed, 1 warning in 7.51s
|
||||
```
|
||||
|
||||
### Полный регресс `pytest tests/ -q`
|
||||
```
|
||||
2018 passed, 1 warning in 342.01s (0:05:42)
|
||||
```
|
||||
(единственный warning — Pydantic V2 deprecation в `src/config.py:8`, существующий, не связан с задачей)
|
||||
|
||||
## Итог
|
||||
PASS — все 10 TC (17 тест-функций) зелёные, полный регресс 2018/2018 зелёный, smoke API OK
|
||||
(`/health`, `/status`, `/queue` с блоками `serial_gate` и `auto_labels`). Задача готова к переходу
|
||||
на `deploy-staging`.
|
||||
Reference in New Issue
Block a user