tester(ET): auto-commit from tester run_id=590
This commit is contained in:
169
docs/work-items/ORCH-009/13-test-report.md
Normal file
169
docs/work-items/ORCH-009/13-test-report.md
Normal 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.
|
||||
Reference in New Issue
Block a user