--- result: PASS work_item: ORCH-103 stage: testing author_agent: tester status: pass created_at: 2026-06-11 model_used: claude-opus-4-8 type: test-report work_item_id: ORCH-103 --- # Test Report — ORCH-103 — ORCH-10b Bundled-тираж: весь стек одним комплектом + bootstrap-скрипт > Машинный вердикт читается ТОЛЬКО из `result:` во frontmatter (`check_tests_passed`). ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Worktree: `/repos/_wt/orchestrator/feature_ORCH-103-orch-10b-bundled-bootstrap/` (ветка задачи, не общий чекаут) - Дата: 2026-06-11 ## Smoke API (read-only) | Endpoint | Результат | |----------|-----------| | `GET /health` | PASS — `{"status":"ok","service":"orchestrator"}` | | `GET /status` | PASS — активная задача ORCH-103 (`stage: testing`) видна | | `GET /queue` | PASS — валидный JSON; блок `serial_gate` присутствует (ORCH-088, `orchestrator.active_task = ORCH-103`), блок `auto_labels` присутствует | Смок-регресс ORCH-088: блок `serial_gate` присутствует в полезной нагрузке `/queue` наряду с `auto_labels` — регресса нет. ## Результаты (покрытие каждого TC из 04-test-plan.yaml) | TC ID | Тип | Описание (кратко) | AC | Модуль | Результат | |-------|-----|-------------------|----|--------|-----------| | TC-01 | unit | Bundle-compose существует/парсится; обязательные сервисы (орк/watchdog/Gitea/Plane-стек); staging не в дефолтном up | AC-1 | test_bundle_compose.py | PASS | | TC-02 | unit | Корневой docker-compose.yml не изменён; нет подстрок plane/gitea (зеркало TC-04 lite) | AC-6 | test_bundle_compose.py | PASS | | TC-03 | unit | Все сторонние образы пиннованы (нет latest/безтегового) | AC-9 | test_bundle_compose.py | PASS | | TC-04 | unit | Тома именованные с bundle-префиксом, без bind прод-контура; key-set-sync `${VAR}` ⊆ bundle-канон | AC-9 | test_bundle_compose.py | PASS | | TC-05 | unit | BUNDLED_SETUP.md: обязательные разделы FR-4 (требования к хосту с цифрами/портами/~14 контейнеров, bootstrap, smoke, stateless, сброс, траблшутинг); fenced + «Проверка:» | AC-4 | test_bundled_setup_doc.py | PASS | | TC-06 | unit | Гигиена (док+compose+bootstrap): нет FORBIDDEN-литералов (импорт из test_no_host_hardcodes); нет секрет-литералов (hex≥32/alnum≥40) | AC-9 | test_bundled_setup_doc.py | PASS | | TC-07 | unit | Bootstrap ссылается на gen_secrets.py/onboard_project.py; нет своего списка статусов/лейблов; нет delete-операций в обычном прогоне | AC-7 | test_bootstrap_script.py | PASS | | TC-08 | unit | Чистые функции bootstrap: грязный хост → отказ ДО мутаций; чистый → план; контракт exit 0/2/1 | AC-8 | test_bootstrap_script.py | PASS | | TC-09 | unit | Каждый env-ключ из дока есть в `.env.example` ∪ bundle-канон; число статусов сверяется импортом `plane_sync._PLANE_NAME_TO_KEY` | AC-9 | test_bundled_setup_doc.py | PASS | | TC-10 | unit | Кросс-ссылки: BUNDLED_SETUP → LITE_SETUP/ONBOARDING/REPLICATION; REPLICATION §1 отметка Type B → ORCH-103 | AC-7 | test_bundled_setup_doc.py | PASS | | TC-11 | unit | CHANGELOG.md содержит запись ORCH-103 | AC-5 | test_bundled_setup_doc.py | PASS | | TC-12 | integration | Полный регресс `pytest tests/ -q` зелёный; существующие анти-дрейф (test_lite_setup_doc.py, test_no_host_hardcodes.py, канон ORCH-009) без правки ассертов | AC-5 | tests/ | PASS | Все 12 TC выполнены и сопоставлены с критериями приёмки 03-acceptance-criteria.md. Структурная/файловая часть AC-4…AC-9 покрыта зелёными TC-01…TC-12. e2e-часть AC-1/AC-2/AC-3/AC-8 (фактический подъём bundle на чистом хосте/VM) — ручная приёмка вне CI по рамке самих AC (docker/LLM в CI не гоняются), как зафиксировано в test-plan `scope/notes` и ревью P2-2. ## Целевые модули ORCH-103 (детально) - `tests/test_bundle_compose.py` — 14 passed (TC-01..04) - `tests/test_bundled_setup_doc.py` — 16 passed (TC-05/06/09/10/11) - `tests/test_bootstrap_script.py` — 19 passed (TC-07/08) - Анти-дрейф (без правки ассертов): `tests/test_lite_setup_doc.py` — 26 passed; `tests/test_no_host_hardcodes.py` — 8 passed - Итого по целевому срезу: **88 passed, 0 failed** (0.91s) ## Вывод pytest (полный регресс) ``` $ python -m pytest tests/ -v --tb=short ... ================== 1844 passed, 1 warning in 70.33s (0:01:10) ================== ``` - 1844 passed, 0 failed, 1 warning (Pydantic V2 deprecation, не относится к задаче). ## Итог PASS — полный регресс зелёный (1844 passed / 0 failed), smoke read-only (`/health`, `/status`, `/queue` с блоками `serial_gate` и `auto_labels`) в норме, все 12 TC из 04-test-plan.yaml выполнены и сопоставлены с критериями приёмки. Задача переходит на `deploy-staging`.