7.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-057 | testing | tester | pass | 2026-06-10 | claude-opus-4-8 | test-report | ORCH-057 |
Test Report — ORCH-057
Нормализация legacy root-owned файлов при миграции на uid 1000 (детект + защита worktree).
Review-вердикт 12-review.md — APPROVED, P0/P1 findings нет.
Окружение
- Python: 3.12.13
- pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
- Дата: 2026-06-10
- Worktree:
/repos/_wt/orchestrator/feature_ORCH-057-bug-follow-up-orch-040-normali(веткаfeature/ORCH-057-bug-follow-up-orch-040-normali, тесты прогнаны из рабочего дерева именно этой задачи, НЕ из общего/repos/orchestrator)
Smoke API (read-only, прод-контейнер 8500 не тронут)
| Эндпоинт | Результат |
|---|---|
GET /health |
{"status":"ok","service":"orchestrator"} — OK |
GET /status |
OK — задача ORCH-057 (id 83) видна на стадии testing |
GET /queue |
OK — присутствуют блоки serial_gate (ORCH-088) ✓ и auto_labels (ORCH-089) ✓ |
Примечание: блок
fs_ownership(ORCH-057) на прод-контейнере 8500 отсутствует — это ожидаемо: ORCH-057 ещё не задеплоен, прод исполняет предыдущий образ. Read-only блокfs_ownershipприсутствует и протестирован в коде ветки (TC-12,test_api_queue.pyPASS). Это НЕ регресс смока: обязательные блокиserial_gate+auto_labelsна месте.
Результаты
Полный регресс
pytest tests/ -q → 1507 passed, 1 warning in 52.22s (warning — Pydantic V2 deprecation,
предсуществующий, не относится к ORCH-057). Прод-контейнер не трогался.
Профильные сюиты
pytest tests/test_git_worktree_perm.py tests/test_fs_normalize.py tests/test_fs_normalize_startup.py tests/test_api_queue.py -v
→ 25 passed — покрывают TC-01…TC-12.
Сопоставление с тест-планом (04-test-plan.yaml)
| TC ID | Описание | Тест-функция | Результат |
|---|---|---|---|
| TC-01 | ensure_worktree на git-fatal Permission denied → actionable RuntimeError |
test_git_worktree_perm::test_tc01_permission_git_fatal_becomes_actionable, test_tc01_makedirs_permission_error_becomes_actionable |
PASS |
| TC-02 | не-прав-ошибка сохраняет прежний raw-контракт | test_git_worktree_perm::test_tc02_non_permission_error_keeps_prior_contract, test_tc02_killswitch_off_keeps_raw_contract_even_for_permission |
PASS |
| TC-03 | scan_ownership на дереве с uid≠target → mismatch=True + корни |
test_fs_normalize::test_tc03_scan_detects_mismatch |
PASS |
| TC-04 | scan_ownership на чистом дереве → mismatch=False (идемпотентно) |
test_fs_normalize::test_tc04_clean_tree_no_mismatch |
PASS |
| TC-05 | never-raise при недоступном/несуществующем корне → WARNING | test_fs_normalize::test_tc05_never_raise_on_missing_root, test_tc05_never_raise_on_walk_error |
PASS |
| TC-06 | applies(repo): пустой CSV → self-hosting only; непустой — по списку |
test_fs_normalize::test_tc06_applies_empty_csv_self_hosting_only, test_tc06_applies_explicit_csv |
PASS |
| TC-07 | kill-switch OFF → scan/normalize инертны (1:1 как до ORCH-057) | test_fs_normalize::test_tc07_killswitch_off_scan_inert, test_tc07_killswitch_off_normalize_inert |
PASS |
| TC-08 | normalize без прав → no-op + честный лог, НЕ исключение |
test_fs_normalize::test_tc08_normalize_without_rights_is_noop_not_error |
PASS |
| TC-09 | TTL-кэш: повтор в окне TTL не пере-сканирует; ключ по roots+uid | test_fs_normalize::test_tc09_ttl_cache_avoids_rescan, test_tc09_cache_keyed_by_roots_and_uid |
PASS |
| TC-10 | startup-хук: mismatch → send_telegram + WARNING; ошибка детекта never-fatal | test_fs_normalize_startup::test_tc10_startup_mismatch_warns_and_telegrams, test_tc10_startup_detect_error_never_fatal, test_tc10_startup_clean_no_telegram |
PASS |
| TC-11 | гейт claim'а: mismatch без прав → внятный исход ДО launch, не сырой git-fatal | test_fs_normalize_startup::test_tc11_launch_permission_failure_is_actionable_not_raw |
PASS |
| TC-12 | GET /queue блок fs_ownership отдаёт поля и не 5xx-ит при выключенном флаге |
test_api_queue::test_tc12_queue_exposes_fs_ownership_block, test_tc12_queue_no_5xx_when_disabled, test_fs_normalize_check_endpoint |
PASS |
Доп. целевые тесты (сверх плана, усиливают покрытие): test_classify_worktree_error_markers,
test_is_permission_failure_from_exc, test_snapshot_shape — PASS.
Сопоставление с критериями приёмки (03-acceptance-criteria.md)
| AC | Покрыто | Результат |
|---|---|---|
| AC-1 — конвейер стартует без ручного chown / внятная блокирующая ошибка | TC-01, TC-11 | PASS |
AC-2 — ensure_worktree actionable-ошибка при отказе доступа, не-прав сохраняет контракт |
TC-01, TC-02 | PASS |
| AC-3 — детект несоответствия владельца (mismatch на грязной, no-op на чистой) | TC-03, TC-04, TC-05 | PASS |
AC-4 — наблюдаемость детекта (WARNING + Telegram + GET /queue) |
TC-10, TC-12 | PASS |
| AC-5 — self-hosting безопасность, нулевая регрессия enduro, зелёный регресс | TC-06, TC-07, TC-08 + 1507 passed | PASS |
| AC-6 — инварианты конвейера (STAGE_TRANSITIONS/QG_CHECKS/check_*/machine-key/схема БД) | полный регресс зелёный, guard-тесты пройдены | PASS |
| AC-7 — документированная процедура нормализации (INFRA.md + ADR) | проверено reviewer (12-review.md), вне scope pytest | PASS (док.) |
Вывод pytest
============================= test session starts ==============================
platform linux -- Python 3.12.13, pytest-8.3.3, pluggy-1.6.0
rootdir: /repos/_wt/orchestrator/feature_ORCH-057-bug-follow-up-orch-040-normali
plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8
collected 25 items (профильные сюиты)
... 25 passed, 1 warning in 2.19s
Полный регресс:
1507 passed, 1 warning in 52.22s
Итог
PASS — все 12 TC выполнены и сопоставлены с тест-планом и критериями приёмки; профильные
сюиты 25 passed; полный регресс 1507 passed; smoke (/health, /status, /queue c блоками
serial_gate + auto_labels) — зелёный. Задача переходит на deploy-staging.