--- result: PASS # PASS | FAIL — машинный вердикт, UPPERCASE work_item: ORCH-009 stage: testing author_agent: tester status: pass created_at: 2026-06-10 model_used: claude-opus-4-8 type: test-report work_item_id: ORCH-009 --- # Test Report — ORCH-009 — Turnkey-онбординг проектов (kit + CLI + runbook) > Машинный вердикт читается ТОЛЬКО из frontmatter (`result:`). Перепрогон стадии testing на > opus после сброса session-limit (ре-ран по запросу). Review-вердикт цикла 2 — `APPROVED` > (`12-review.md`, P0/P1 нет). Дельта цикла (герметизация ORCH-41-тестов `e903818`) перепроверена > полным регрессом под фактическим окружением worktree. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 (pytest-cov 5.0.0, asyncio 0.23.8) - Дата: 2026-06-10 - Worktree: `feature/ORCH-009-turnkey-plane` (`/repos/_wt/orchestrator/feature_ORCH-009-turnkey-plane`, HEAD `b97ffae`) - Прод-контейнер `orchestrator` (8500) — НЕ трогался (smoke read-only). ## Smoke API (read-only) - `GET /health` → `{"status":"ok","service":"orchestrator"}` ✅ - `GET /status` → отвечает; задача ORCH-009 (task 87) на стадии `testing` ✅ - `GET /queue` → блок `serial_gate` **присутствует** (ORCH-088) ✅; блок `auto_labels` присутствует ✅ (полный набор ключей: `auto_labels, bug_fast_track, build_cache_prune, counts, coverage, disk_monitor, fs_ownership, lessons, max_concurrency, merge_verify, poll_interval, post_deploy, reaper, recent, reconcile, resilience, serial_gate, stop, task_deps`). ## Результаты ### Полный регресс `pytest tests/ -q` → **1713 passed, 0 failed, 1 warning** за 65.40s (exit 0). Прод-контейнер не трогался. Средовая мина merge-gate цикла 1 обезврежена фиксом `e903818` — регресс зелёный. ### Профильные сюиты (онбординг) `pytest tests/test_onboarding_kit.py tests/test_onboarding_script.py tests/test_onboarding_invariants.py -v` → **83 passed, 0 failed** за 0.55s (exit 0). Сетевых вызовов нет (Plane/Gitea — фейк-клиенты, NFR-5). ### Сопоставление с тест-планом (`04-test-plan.yaml`) | TC ID | Описание | Тест-функция | Рез. | |-------|----------|--------------|------| | TC-01 | Kit содержит все элементы FR-1 (6 промптов + доки) | `test_tc01_kit_contains_all_required_elements`, `test_tc01_kit_readme_and_placeholder_dictionary_exist` | PASS | | TC-02 | Материализация добавляет live-копии `_templates`/`_standards`; форк канона отсутствует | `test_tc02_materialise_live_copies_canon`, `test_kit_does_not_fork_the_canon` | PASS | | TC-03 | 5 XML-секций в нормативном порядке (6 ролей) | `test_tc03_five_xml_sections_in_normative_order[*]` | PASS | | TC-04 | `` у dev/rev/tester; запреты «❌→✅» | `test_tc04_escalation_section_after_success_criteria[*]`, `test_tc04_bans_use_cross_check_format[*]` | PASS | | TC-05 | Директивы доки (читай паспорт/AGENTS/ADR; пиши в work-items; CHANGELOG) | `test_tc05_prompt_directs_agent_to_docs[*]`, `test_tc05_changelog_duty_present[*]`, `test_tc05_architect_carries_adr_rules` | PASS | | TC-06 | 6-польная схема 52c; verdict-ключи байт-в-байт; даты/модели — плейсхолдеры | `test_tc06_six_schema_fields_named[*]`, `test_tc06_schema_pins_role_author_and_stage[*]`, `test_tc06_machine_verdict_keys_byte_exact`, `test_tc06_dates_and_models_are_placeholders[*]` | PASS | | TC-07 | reviewer-gate: дока не обновлена → `REQUEST_CHANGES` | `test_tc07_reviewer_gate_docs_not_updated_means_request_changes` | PASS | | TC-08 | Языковая политика (5 ru + deployer en) | `test_tc08_ru_canon_for_five_roles[*]`, `test_tc08_deployer_is_english` | PASS | | TC-09 | Рендер подставляет все плейсхолдеры (нет неразрешённых) | `test_tc09_render_resolves_all_placeholders`, `test_render_is_a_pure_replace` | PASS | | TC-10 | Нет утечек орк-специфики (ORCH-/8500/8501/self-hosting) | `test_tc10_no_orchestrator_specific_leaks` | PASS | | TC-11 | Ссылочная целостность отрендеренных промптов/AGENTS | `test_tc11_referenced_paths_exist_in_materialised_tree` | PASS | | TC-12 | Registry round-trip через фактический `_parse_projects_json`; существующие записи целы | `test_tc12_registry_round_trip_through_actual_parser`, `test_tc12_merge_is_idempotent_no_duplicates` | PASS | | TC-13 | План Plane: все статусы `_PLANE_NAME_TO_KEY` (вкл. `Confirm Deploy`/`STOP`) + лейблы | `test_tc13_plan_covers_all_statuses_and_labels`, `test_state_groups_match_plane_name_to_key` | PASS | | TC-14 | Недоступный Plane-шаг → `manual-step` (не падение/не молча) | `test_tc14_plane_refusal_becomes_manual_step` | PASS | | TC-15 | План Gitea: репо + webhook (push/pr/status + HMAC) + initial push | `test_tc15_plan_contains_gitea_repo_webhook_and_push` | PASS | | TC-16 | dry-run (plan) — ноль мутаций | `test_tc16_plan_is_a_pure_dry_run`, `test_secret_never_leaks_into_report` | PASS | | TC-17 | Повторный apply: `skipped(exists)`, без дублей/удалений; отчёт created/skipped/manual | `test_tc17_second_apply_skips_everything_existing` | PASS | | TC-18 | Нет операций рестарта/правки прод-.env/push в существующие репо (NFR-2) | `test_tc18_fresh_apply_runs_git_only_inside_workdir`, `test_tc18_source_has_no_container_or_env_mutation_ops` | PASS | | TC-19 | INFRA.md шаблон: обязательные секции; INFRA орка не тронут | `test_tc19_infra_template_mandatory_sections`, `test_tc19_orchestrator_own_infra_untouched_sections` | PASS | | TC-20 | Runbook: слои предусловия→Plane→Gitea→kit→регистрация→верификация→откат | `test_tc20_runbook_exists_and_layer_order`, `test_tc20_runbook_manual_steps_and_selfhosting_warning`, `test_tc20_runbook_verification_and_smoke_journal` | PASS | | TC-21 | Снапшот `STAGE_TRANSITIONS`/`QG_CHECKS`; `src/**` не ссылается на онбординг; закрытый список импортов | `test_tc21_stage_transitions_snapshot`, `test_tc21_qg_checks_registry_snapshot`, `test_tc21_src_never_references_onboarding`, `test_tc21_cli_src_imports_stay_in_closed_list`, `test_tc21_kit_prompts_name_only_real_gates` | PASS | | TC-22 | Полный регресс `tests/` зелёный | весь прогон `pytest tests/` (1713 passed) | PASS | **Итого тест-плана: 22/22 TC выполнены и PASS.** ### Сопоставление с критериями приёмки (`03-acceptance-criteria.md`) | AC | Покрытие | Результат | |----|----------|-----------| | AC-1 Kit полон | TC-01 | PASS | | AC-2 Канон 52d/92 промптов | TC-03/04/05/06 | PASS | | AC-3 Reviewer-gate доки | TC-07 | PASS | | AC-4 Языковая политика | TC-08 | PASS | | AC-5 Материализация / нет утечек | TC-02/09/10/11 | PASS | | AC-6 Registry round-trip | TC-12 | PASS | | AC-7 План Plane (статусы/лейблы) | TC-13/14 | PASS | | AC-8 План Gitea + dry-run без мутаций | TC-15/16 | PASS | | AC-9 Идемпотентность/безопасность apply | TC-17/18 | PASS | | AC-10 INFRA.md шаблон | TC-19 | PASS | | AC-11 Runbook полон | TC-20 | PASS | | AC-12 `src/**` не тронут (снапшот + регресс) | TC-21/22 | PASS | | AC-13 Операторский smoke на песочнице | вне pytest (см. ниже) | DEFERRED (операторский гейт до `Confirm Deploy`) | ## AC-13 — операторский smoke (не блокирует ребро testing → deploy-staging) AC-13 по построению (ADR D8, scope-нота `04-test-plan.yaml`) — **документированный операторский прогон** на песочнице staging 8501 с реальными Plane/Gitea-вызовами. Это мутирующая операторская процедура → вне read-only smoke и автоматизированного скоупа тестера. «Журнал smoke-прогонов» в `docs/operations/ONBOARDING.md` сейчас — плейсхолдер (прогон не выполнен). - **Не блокирует данную стадию:** AC-13 обязателен **до `Confirm Deploy`** (человеческий гейт прод-деплоя, ORCH-059), который наступает ПОСЛЕ `deploy-staging`. Ребро `testing → deploy-staging` он не гейтит (это операторская страховка, а не Quality Gate; `QG_CHECKS` не содержит проверки AC-13). - **Handoff оператору:** выполнить runbook §5.2 (staging 8501, sandbox-префикс) и запротоколировать результат в «Журнале smoke-прогонов» `ONBOARDING.md` **перед** нажатием `Confirm Deploy`. ## Вывод pytest (итоги) ``` # полный регресс 1713 passed, 1 warning in 65.40s (exit 0) # профильные сюиты онбординга 83 passed, 1 warning in 0.55s (exit 0) ``` (Единственный warning — `PydanticDeprecatedSince20` в `src/config.py:8`, существующий, не связан с задачей.) ## Итог **PASS.** Полный регресс зелёный (1713 passed), все 22 TC тест-плана выполнены и PASS, все машинно-проверяемые AC (1–12) закрыты, read-only smoke API в норме (`serial_gate`/`auto_labels` в `/queue` присутствуют). AC-13 — операторский smoke, отложен к гейту `Confirm Deploy` (не блокирует переход на `deploy-staging`). Задача готова к стадии `deploy-staging`.