14 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-009 | testing | tester | pass | 2026-06-10 | claude-fable-5 | test-report | ORCH-009 |
Test Report — ORCH-009 — Turnkey-онбординг проектов (kit + CLI + runbook)
Машинный вердикт — в frontmatter (
result: PASS). Ниже — факты, на которых он основан.
Окружение
- Python: 3.12.13
- pytest: 8.3.3
- Дата: 2026-06-10
- Worktree:
/repos/_wt/orchestrator/feature_ORCH-009-turnkey-plane/(веткаfeature/ORCH-009-turnkey-plane) — прогон в worktree ветки задачи, НЕ в общем чекауте/repos/orchestrator(анти-гонка checkout). - Прод
http://localhost:8500/health→{"status":"ok","service":"orchestrator"}✅ - Staging
http://localhost:8501/health→{"status":"ok","service":"orchestrator"}✅ - Прод-контейнер не трогался (read-only smoke, NFR self-hosting).
Результаты
Полный регресс (pytest tests/ -v --tb=short)
1712 passed, 1 failed (средовое, pre-existing — не регресс PR), 1 warning, 69.90s.
Единственное падение — tests/test_resolve_agent_effort.py::test_flags_present_when_configured:
assert "--model claude-opus-4-8 " in flags
E AssertionError: assert '--model claude-opus-4-8 ' in
'--model claude-fable-5 --effort xhigh --fallback-model claude-sonnet-4-6 '
Диагноз (подтверждает handoff-пункт №2 reviewer'а в 12-review.md): падение вызвано
env-переменными агент-раннера (ORCH_AGENT_MODEL_DEFAULT=claude-fable-5,
ORCH_AGENT_FALLBACK_MODEL, ORCH_AGENT_EFFORT_*), а не кодом ветки. Контрольный перепрогон
с полностью очищенной средой (env -u ORCH_AGENT_*):
pytest tests/test_resolve_agent_effort.py tests/test_resolve_agent_model.py -q
49 passed, 1 warning in 0.44s
Дополнительно проверено: git diff --name-only origin/main...HEAD НЕ содержит src/**,
.openclaw/**, tests/test_resolve_agent_* — PR эти файлы не трогает (pre-existing средовой
эффект; авторитетен CI с чистой средой). С учётом контрольного прогона эффективный регресс —
полностью зелёный.
Профильные сюиты задачи
| Модуль | Результат |
|---|---|
tests/test_onboarding_kit.py |
60/60 PASSED |
tests/test_onboarding_script.py |
18/18 PASSED |
tests/test_onboarding_invariants.py |
5/5 PASSED |
| Итого профильных | 83/83 PASSED |
Smoke API (read-only, прод 8500)
| Проверка | Результат |
|---|---|
GET /health |
✅ {"status":"ok"} |
GET /status |
✅ активные задачи отдаются (ORCH-009 stage=testing, ORCH-101 analysis) |
GET /queue → блок serial_gate (ORCH-088) |
✅ присутствует: enabled: true, per-repo картина корректна (активная ORCH-009, ожидающая ORCH-101 — FIFO, заморозок нет) |
GET /queue → блок auto_labels (ORCH-089) |
✅ присутствует (autoApprove/autoDeploy) |
GET /health staging 8501 (контур smoke D8) |
✅ ok |
Регресса смока нет.
Сопоставление с тест-планом (04-test-plan.yaml) — каждый TC
| TC ID | Описание (кратко) | Тест-функция(и) | Результат |
|---|---|---|---|
| TC-01 | Состав kit: все элементы FR-1 | 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 (6 параметров) |
PASS |
| TC-04 | <escalation> у dev/reviewer/tester; «❌ → ✅» |
test_tc04_escalation_section_after_success_criteria, test_tc04_bans_use_cross_check_format |
PASS |
| TC-05 | Директивы доки: паспорт/AGENTS/ARCHITECTURE/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_machine_verdict_keys_byte_exact, test_tc06_schema_pins_role_author_and_stage, 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 (ADR D9) | 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, test_placeholder_dictionary_bijection |
PASS |
| TC-10 | Нет утечек орк-специфики (ORCH-, 8500/8501, self-hosting) | test_tc10_no_orchestrator_specific_leaks |
PASS |
| TC-11 | Ссылочная целостность отрендеренного каркаса | 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: все 22 статуса _PLANE_NAME_TO_KEY (incl. Confirm Deploy, STOP→cancelled) + лейблы |
test_tc13_plan_covers_all_statuses_and_labels, test_state_groups_match_plane_name_to_key |
PASS |
| TC-14 | CE-отказ Plane → manual-step со ссылкой на runbook, не молча |
test_tc14_plane_refusal_becomes_manual_step |
PASS |
| TC-15 | План Gitea: репо + webhook (push/pull_request/status, HMAC вне гита) + initial push | test_tc15_plan_contains_gitea_repo_webhook_and_push, test_secret_never_leaks_into_report |
PASS |
| TC-16 | plan — чистый dry-run: ноль мутаций |
test_tc16_plan_is_a_pure_dry_run |
PASS |
| TC-17 | Повторный apply → skipped(exists), без дублей/удалений |
test_tc17_second_apply_skips_everything_existing |
PASS |
| TC-18 | Нет рестартов/правки .env/push в существующие репо |
test_tc18_source_has_no_container_or_env_mutation_ops, test_tc18_fresh_apply_runs_git_only_inside_workdir |
PASS |
| TC-19 | INFRA.md шаблон: обязательные секции; INFRA орка не тронут | test_tc19_infra_template_mandatory_sections, test_tc19_orchestrator_own_infra_untouched_sections |
PASS |
| TC-20 | Runbook: все слои в порядке, ручные шаги помечены, журнал smoke | 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/** и .openclaw/ не тронуты |
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/ зелёный |
весь прогон: 1712 passed (+1 средовой pre-existing, с чистой средой 49/49 — см. выше) | PASS |
22/22 TC выполнены, все PASS.
Сопоставление с критериями приёмки (03-acceptance-criteria.md)
| AC | Покрытие | Результат |
|---|---|---|
| AC-1 (состав kit) | TC-01 | ✅ PASS |
| AC-2 (канон 52d/92) | TC-03…TC-06 | ✅ PASS |
| AC-3 (reviewer-gate доки) | TC-07 | ✅ PASS |
| AC-4 (языковая политика, ADR D9) | TC-08 | ✅ PASS |
| AC-5 (плейсхолдеры/утечки/целостность) | TC-09…TC-11 | ✅ PASS |
| AC-6 (registry round-trip) | TC-12 | ✅ PASS |
| AC-7 (план Plane: статусы/лейблы) | TC-13, TC-14 | ✅ PASS |
| AC-8 (план Gitea + dry-run без мутаций) | TC-15, TC-16 | ✅ PASS |
| AC-9 (идемпотентность/безопасность apply) | TC-17, TC-18 | ✅ PASS |
| AC-10 (INFRA.md шаблон) | TC-19 | ✅ PASS |
| AC-11 (runbook полон) | TC-20 | ✅ PASS |
AC-12 (инварианты src/**) |
TC-21, TC-22 + diff-проверка (origin/main...HEAD: src/**, .openclaw/** — пусто) |
✅ PASS |
| AC-13 (операторский smoke, ADR D8) | вне pytest-скоупа (по 04-test-plan.yaml: «выполняется вручную и протоколируется») |
⚠️ NOT RUN — открытый операторский шаг (см. ниже) |
⚠️ AC-13 — открытый ОБЯЗАТЕЛЬНЫЙ операторский шаг (ADR-001 D8)
«Журнал smoke-прогонов» в docs/operations/ONBOARDING.md (§ строка 186) на момент отчёта
содержит плейсхолдер — операторский smoke на песочнице (runbook §5.2: онбординг sandbox
onboarding-smoke/SMK → регистрация в .env.staging → рестарт staging → тестовая задача →
стадия analysis) не выполнен и не запротоколирован.
- Прогон по построению мутирующий (создание сущностей Plane/Gitea, правка
.env.staging, рестарт staging-контейнера) и в04-test-plan.yaml/AC-13 явно классифицирован как ручной операторский — он вне полномочий tester-агента (read-only smoke) и не покрывается ни одним TC; дефекта кода нет, поэтомуFAIL/откат на development не обоснован. - Контур smoke готов: staging 8501 жив (health ok),
verify-режим CLI и runbook протестированы структурно (TC-13…TC-20). - Эскалация оператору: по D8 первый протокол в «Журнале smoke-прогонов» обязателен для
приёмки ORCH-009 — выполнить прогон по runbook §5.2 и заполнить журнал ДО прод-деплоя
(гейт
Confirm Deploy— человеческий, точка контроля сохраняется). Ссылка по требованию D8:docs/operations/ONBOARDING.md§ «Журнал smoke-прогонов».
Вывод pytest
$ cd /repos/_wt/orchestrator/feature_ORCH-009-turnkey-plane && pytest tests/ -v --tb=short
...
tests/test_onboarding_invariants.py — 5 PASSED
tests/test_onboarding_kit.py — 60 PASSED
tests/test_onboarding_script.py — 18 PASSED
...
=================================== FAILURES ===================================
______________________ test_flags_present_when_configured ______________________
tests/test_resolve_agent_effort.py:190: in test_flags_present_when_configured
assert "--model claude-opus-4-8 " in flags
E AssertionError: assert '--model claude-opus-4-8 ' in
'--model claude-fable-5 --effort xhigh --fallback-model claude-sonnet-4-6 '
=========================== short test summary info ============================
FAILED tests/test_resolve_agent_effort.py::test_flags_present_when_configured
============= 1 failed, 1712 passed, 1 warning in 69.90s (0:01:09) =============
# Контрольный перепрогон средового падения с чистой средой (handoff reviewer):
$ env -u ORCH_AGENT_* pytest tests/test_resolve_agent_effort.py tests/test_resolve_agent_model.py -q
49 passed, 1 warning in 0.44s
Итог
PASS.
- 22/22 TC тест-плана выполнены и зелёные; AC-1…AC-12 подтверждены.
- Полный регресс эффективно зелёный (1712 passed; единственное падение — средовое pre-existing,
с чистой средой проходит; PR
src/**/.openclaw/**/файлы этих тестов не трогает). - Smoke API без регрессов:
/health,/status,/queue(блокиserial_gateиauto_labelsприсутствуют); staging 8501 жив. - ⚠️ AC-13 (операторский smoke, D8) — не закрыт: обязателен к выполнению и протоколированию
оператором до прод-деплоя (
Confirm Deploy). Дефекта кода нет — вердикт стадии testing PASS.