8.9 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-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(HEADe67c026) - Прогон выполнен в 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 §10–12) | Результат |
|---|---|
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 /metrics → schema_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.