Files
orchestrator/docs/work-items/ORCH-102/04-test-plan.yaml

147 lines
9.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
work_item: ORCH-102
stage: analysis
author_agent: analyst
status: ready-for-review
created_at: 2026-06-10
model_used: claude-opus-4-8
title: "ORCH-10a Lite-тираж: инструкция LITE_SETUP + compose-подмножество — план тестов"
framework: pytest
scope: >
Покрывается: существование и полнота docs/deployment/LITE_SETUP.md (нормативные
разделы FR-1, форма «команда+проверка», generic-команды без боевых литералов),
согласованность упомянутых env-ключей с каноном .env.example, структурная
фиксация compose-подмножества (ровно орк+watchdog, staging за профилем, без
Plane/Gitea-сервисов), stateless-нормативы и секрет-гигиена дока, перекрёстные
ссылки (REPLICATION.md §1, CHANGELOG), воспроизводимый smoke-чек-лист и его
приёмочный прогон на чистом контуре, полный регресс. Вне покрытия: реальный
e2e-тираж на новом железе заказчика (заменён прогоном на staging-песочнице —
прецедент ORCH-101 AC-3), установка Plane/Gitea как таковых, задача 10b
(Bundled), перенос данных (stateless по решению 10.06).
notes: >
Задача docs-first: ожидаемый дифф — docs/** + tests/** + CHANGELOG.md
(+ .env.watchdog.example при исходе А-4); src/** не меняется. Имя нового
тест-модуля tests/test_lite_setup_doc.py — предложение analyst; developer может
переименовать/разбить, сохранив покрытие TC (образец структурных док-тестов —
tests/test_replication_smoke.py). Тесты детерминированы, без сети/LLM.
Полный регресс tests/ обязан остаться зелёным; STAGE_TRANSITIONS/QG_CHECKS/
check_*/machine-verdict не меняются — новые тесты входят в существующие гейты
(check_ci_green / merge-gate re-test / coverage-гейт ORCH-027) автоматически.
TC-09 — процедурная приёмка AC-4: прогон фиксируется tester'ом в
13-test-report.md / 15-staging-log.md, а не автоматизируется в pytest.
tests:
- id: TC-01
type: unit
description: >
LITE_SETUP.md существует по канонному пути (docs/deployment/, исход А-3 —
синхронизировать с ADR) и несёт ВСЕ нормативные разделы FR-1: рамка/границы
Lite, предусловия хоста (зависимости, uid/gid, getent group docker), перенос
кода, конфигурация (.env с нуля + gen_secrets.py + ORCH_PROJECTS_JSON),
Plane (статусы/токен/webhook+HMAC), Gitea (репо/токен/webhook), LLM
(claude CLI), Telegram (трекер + watchdog-бот + chat-id), запуск+health-чек,
регистрация проекта, smoke, stateless-проверка, траблшутинг (AC-1 / FR-1).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-02
type: unit
description: >
Форма «каждый шаг — команда/проверка»: нормативные разделы содержат fenced
code blocks с исполняемыми командами и явные маркеры проверки
(PASS/FAIL/«Проверка:»); ключевые кирпичи присутствуют: docker compose,
/health, /queue, /metrics, gen_secrets.py, onboard_project.py,
X-Plane-Signature, X-Gitea-Signature (AC-1 / FR-1, NFR-6).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-03
type: unit
description: >
Согласованность env-канона: каждый ключ ORCH_*/WATCHDOG_*, упомянутый в
LITE_SETUP.md, существует в .env.example; обязательный набор нового хоста
упомянут явно (ORCH_PROJECTS_JSON, ORCH_PLANE_WEBHOOK_SECRET,
ORCH_GITEA_WEBHOOK_SECRET, ORCH_PLANE_API_TOKEN, ORCH_GITEA_TOKEN,
ORCH_TELEGRAM_BOT_TOKEN, ORCH_TELEGRAM_CHAT_ID, WATCHDOG_TG_BOT_TOKEN,
WATCHDOG_TG_CHAT_ID) (AC-1, AC-6 / FR-1.4, FR-6.2).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-04
type: unit
description: >
Compose-подмножество (AC-2): docker-compose.yml парсится; множество сервисов
ровно {orchestrator, orchestrator-watchdog, orchestrator-staging};
orchestrator-staging строго за profiles: [staging] (дефолтный up -d поднимает
ровно орк+watchdog); ни одного сервиса/образа plane*/gitea*; LITE_SETUP.md
документирует состав дефолтного запуска (AC-2 / FR-2).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-05
type: unit
description: >
Stateless и секрет-гигиена (AC-3): док несёт нормативную строку «боевые
данные/задачи/секреты не копируются» и предписывает чистую БД + выпуск
новых секретов (gen_secrets.py); проверка чистоты инстанса (первый GET
/queue без задач) описана; в копируемых код-блоках нет боевых литералов
(mva154, duckdns, 82.22.50.71) и секретоподобных значений — только
плейсхолдеры <...>/$ENV_VAR (AC-3 / FR-3, NFR-3).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-06
type: unit
description: >
Канон не форкается (AC-6): раздел Plane-статусов ссылается на golden source
(ONBOARDING.md §1 / onboard_project.py) и явно упоминает fail-closed имена
Confirm Deploy и STOP; при наличии дубля таблицы статусов в доке — дубль
сверяется с plane_sync._PLANE_NAME_TO_KEY импортом (22 имени, нулевой
дрейф); карта env и smoke даны ссылкой на REPLICATION.md (AC-6 / FR-4,
NFR-4).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-07
type: unit
description: >
Раздел Gitea соответствует инвариантам платформы: события
push/pull_request/status, ОДИН глобальный webhook-секрет на все репо,
и норматив защиты main согласован с исходом А-1 ADR задачи (канон: branch
protection НЕ включать — ADR D10 ORCH-009; инструкция не предписывает
запрещённого) (AC-1, AC-7 / FR-1.6, §3.8 А-1).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-08
type: unit
description: >
Перекрёстная документация (AC-5): REPLICATION.md §1 (границы 10-common vs
Lite vs Bundled) ссылается на LITE_SETUP.md / отмечает Lite реализованным;
CHANGELOG.md содержит запись ORCH-102 (AC-5 / FR-7).
module: tests/test_lite_setup_doc.py
expected: PASS
- id: TC-09
type: integration
description: >
Приёмочный smoke-прогон по LITE_SETUP.md на чистом контуре (минимум:
staging-песочница ORCH_STAGING_PORT с изолированной БД ./data/staging +
одноразовый sandbox-проект; прецедент ORCH-101 AC-3): чек-лист REPLICATION
§4 шаги 05 — конфиг резолвится, /health 200, /queue+/metrics штатны,
onboard verify зелёный, тестовая задача дошла до артефактов 0104; вердикт
и контур зафиксированы в 13-test-report.md / 15-staging-log.md. Процедурная
приёмка (исполняет tester по чек-листу), не pytest-модуль (AC-4 / FR-5).
module: tests/manual/lite-smoke-checklist (процедура; протокол в 13/15)
expected: PASS
- id: TC-10
type: integration
description: >
Полный регресс: pytest tests/ -q зелёный; существующие структурные тесты
(test_no_host_hardcodes, test_replication_smoke, test_infra_parametrization,
test_onboarding_*) не ослаблены/не правлены под задачу; дифф не трогает
src/** (или каждое отклонение обосновано ADR), STAGE_TRANSITIONS/QG_CHECKS/
machine-verdict/схему БД (AC-5, AC-7 / NFR-2).
module: tests/
expected: PASS