tester(ET): auto-commit from tester run_id=590
All checks were successful
CI / test (push) Successful in 54s
CI / test (pull_request) Successful in 53s

This commit is contained in:
2026-06-10 16:02:20 +03:00
committed by orchestrator-deployer
parent cc3ed42041
commit dd09e3da89

View File

@@ -0,0 +1,169 @@
---
result: PASS
work_item: ORCH-009
stage: testing
author_agent: tester
status: pass
created_at: 2026-06-10
model_used: claude-fable-5
type: test-report
work_item_id: 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.