Files
orchestrator/docs/work-items/ORCH-102/13-test-report.md
claude-bot a5f904b56a
All checks were successful
CI / test (push) Successful in 59s
CI / test (pull_request) Successful in 1m1s
tester(ET): auto-commit from tester run_id=623
2026-06-11 00:42:15 +03:00

8.9 KiB
Raw Blame History

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-102 testing tester pass 2026-06-11 claude-opus-4-8 test-report ORCH-102

Test Report — ORCH-102 — ORCH-10a Lite-тираж: LITE_SETUP.md + канон watchdog-конфига + анти-дрейф контур

Окружение

  • Python: 3.12.13
  • pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
  • Дата: 2026-06-11
  • Worktree: /repos/_wt/orchestrator/feature_ORCH-102-orch-10a-lite-watchdog
  • Ветка: feature/ORCH-102-orch-10a-lite-watchdog (HEAD e67c026)
  • Прогон выполнен в worktree ветки задачи (не в общем /repos/orchestrator).
  • Вердикт ревью (12-review.md): APPROVED (P0/P1 — нет).

Smoke API (read-only)

Проверка Результат
GET /health PASS — {"status":"ok","service":"orchestrator"}
GET /status PASS — задача ORCH-102 (task 89) на стадии testing
GET /queue PASS — отдаёт полезную нагрузку, штатные счётчики
Блок serial_gate в /queue (ORCH-088) PASS — присутствует; orchestrator.active_task = ORCH-102 (testing), не заморожен
Блок auto_labels в /queue (ORCH-089) PASS — присутствует
GET /metrics PASS — schema_version: 1
GET /health staging (8501) PASS — {"status":"ok","service":"orchestrator"}

Smoke-процедура Lite-тиража (AC-4 / FR-5, TC-09)

Воспроизводимость smoke-runbook LITE_SETUP.md подтверждена на текущей инфре (read-only, stateless, без переноса данных/секретов; прецедент ORCH-101 AC-3). Docs+tests-задача — src/** не тронут, полноценный e2e на новом железе заказчика заменён прогоном артефактов smoke-цепочки:

Шаг smoke (REPLICATION §4 / LITE_SETUP §1012) Результат
docs/deployment/LITE_SETUP.md существует по канонному пути (33 КБ, 13 разделов) PASS
.env.watchdog.example существует (канон watchdog-конфига, ADR D5) PASS
scripts/gen_secrets.py запускается в безопасном (print) режиме PASS — exit 0, файлы не тронуты (git status чист)
Webhook-секреты крипто-случайны (64 hex = 32 байта) PASS — ORCH_PLANE_WEBHOOK_SECRET/ORCH_GITEA_WEBHOOK_SECRET
Внешние токены/боевые секреты в доке отсутствуют (плейсхолдеры) PASS (подтверждено TC-05)
Конфиг резолвится, инстанс поднят, health-check зелёный (см. Smoke API) PASS
GET /metricsschema_version: 1 PASS
Compose-подмножество (ровно орк+watchdog, staging за профилем) PASS — структурно через TC-04 (yaml-парс; docker CLI в песочнице tester'а недоступен, свойство фиксируется тестом)

Результаты (покрытие TC из 04-test-plan.yaml)

TC ID Описание Покрывающие тесты Результат
TC-01 LITE_SETUP.md существует по канонному пути и несёт ВСЕ 13 нормативных разделов FR-1 (AC-1/FR-1) test_lite_setup_doc::test_doc_exists_with_all_13_sections_in_order, test_doc_carries_all_mandatory_bricks PASS
TC-02 Форма «каждый шаг — команда/проверка»: fenced-команды + маркеры PASS/FAIL/«Проверка», ключевые кирпичи (AC-1/FR-1, NFR-6) test_every_normative_section_carries_commands, test_doc_carries_explicit_check_markers PASS
TC-03 Согласованность env-канона: каждый ORCH_*/WATCHDOG_* в доке есть в .env.example; обязательный набор нового хоста явно (AC-1/AC-6/FR-1.4/FR-6.2) test_every_env_token_in_doc_exists_in_env_example, test_mandatory_new_host_keys_are_explicit, test_watchdog_example_keys_sync_with_env_example_block PASS
TC-04 Compose-подмножество: ровно {orchestrator, orchestrator-watchdog, orchestrator-staging}, staging за profiles:[staging], без plane*/gitea* (AC-2/FR-2) test_compose_services_are_exactly_the_lite_set, test_compose_staging_is_strictly_behind_profile, test_compose_has_no_plane_or_gitea_services, test_doc_documents_default_up_composition PASS
TC-05 Stateless и секрет-гигиена: нормативная строка «не копируются», чистая БД + новые секреты, проверка чистоты, нет боевых литералов/секретов в код-блоках (AC-3/FR-3/NFR-3) test_doc_has_stateless_normative_line, test_doc_prescribes_clean_db_and_fresh_secrets, test_fenced_blocks_carry_no_forbidden_literals, test_fenced_blocks_carry_no_secret_like_values, test_secret_heuristic_is_not_evergreen, test_watchdog_example_secrets_are_placeholders_only PASS
TC-06 Канон не форкается: статусы ссылкой на ONBOARDING §1 + fail-closed Confirm Deploy/STOP; «22 статуса» сверены импортом plane_sync._PLANE_NAME_TO_KEY; env/smoke ссылкой на REPLICATION (AC-6/FR-4/NFR-4) test_plane_canon_is_linked_not_forked, test_status_count_claim_matches_plane_sync, test_env_map_and_smoke_are_linked_to_replication PASS
TC-07 Раздел Gitea: события push/pull_request/status, ОДИН глобальный webhook-секрет, норматив «branch protection НЕ включать» (ADR D10 ORCH-009) (AC-1/AC-7/FR-1.6/§3.8 А-1) test_gitea_section_fixes_platform_invariants, test_gitea_section_forbids_branch_protection PASS
TC-08 Перекрёстная документация: REPLICATION §1 ссылается на LITE_SETUP; CHANGELOG несёт ORCH-102 (AC-5/FR-7) test_replication_boundaries_reference_lite_setup, test_changelog_has_orch_102_entry PASS
TC-09 Приёмочный smoke-прогон по LITE_SETUP на чистом контуре; вердикт фиксируется tester'ом (процедура, не pytest) (AC-4/FR-5) см. раздел «Smoke-процедура Lite-тиража» + «Smoke API» выше PASS
TC-10 Полный регресс pytest tests/ -q зелёный; существующие структурные тесты не ослаблены; дифф не трогает машину стадий/QG/вердикты/схему БД (AC-5/AC-7/NFR-2) весь набор — 1789 passed PASS

Соответствие критериям 03-acceptance-criteria.md: AC-1 (TC-01/02/03), AC-2 (TC-04), AC-3 (TC-05), AC-4 (TC-09 + smoke-процедура), AC-5 (TC-08/TC-10), AC-6 (TC-03/06), AC-7 (TC-07/TC-10) — все покрыты и зелёные.

Вывод pytest

============================= test session starts ==============================
platform linux -- Python 3.12.13, pytest-8.3.3, pluggy-1.6.0
rootdir: /repos/_wt/orchestrator/feature_ORCH-102-orch-10a-lite-watchdog
configfile: pytest.ini
plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8
........................................................................ [100%]
================== 1789 passed, 1 warning in 64.06s (0:01:04) ==================

(единственный warning — PydanticDeprecatedSince20 в src/config.py:8, предсуществующий, не связан с задачей.)

Целевой модуль задачи (отдельный прогон):

tests/test_lite_setup_doc.py
======================== 25 passed, 1 warning in 0.44s =========================

(25 структурных тестов покрывают TC-01…TC-08; заявление CHANGELOG «25 структурных тестов» совпадает с фактом.)

Итог

PASS — полный регресс зелёный (1789 passed), все 10 TC из 04-test-plan.yaml выполнены и сопоставлены с критериями 03-acceptance-criteria.md. Smoke API read-only (включая блоки serial_gate и auto_labels в /queue, /metrics schema_version:1) и smoke-процедура Lite-тиража (LITE_SETUP.md + безопасный прогон gen_secrets.py, stateless, без переноса данных) зелёные. Задача переходит на deploy-staging.