---
work_item: ORCH-105
stage: analysis
author_agent: analyst
status: ready-for-review
created_at: 2026-06-12
model_used: claude-opus-4-8
---

# 03 — Критерии приёмки (Acceptance Criteria): ORCH-105 — Подготовка презентации по орку

Work Item: **ORCH-105** · Repo: **orchestrator** · Стадия: analysis

Формат: каждый критерий имеет **PASS** (что должно быть истинно для приёмки) и **FAIL**
(что считается провалом). Любой машинный/ручной reviewer проверяет их буквально по файлам
репозитория.

---

## AC-1 — Слайд про Lite-установку присутствует и точен

**Условие:** `docs/overview/presentation.md` содержит выделенный слайд про Lite-установку.
- **PASS:** есть слайд (блок `## Слайд N: …`), посвящённый Lite-установке, с тезисами,
  отражающими: два контейнера платформы (`orchestrator` + `orchestrator-watchdog`),
  развёртывание без правки кода (только конфиг), скрипты-помощники (`gen_secrets.py`,
  `onboard_project.py`) и/или `docker compose`, пошаговый runbook `LITE_SETUP.md` с проверкой
  шагов. Факты согласованы с `docs/deployment/LITE_SETUP.md`.
- **FAIL:** слайда нет; ИЛИ слайд называет Lite «единым монолитным инсталлятором»/упоминает
  несуществующий скрипт; ИЛИ путает Lite с Bundled; ИЛИ факты расходятся с `LITE_SETUP.md`.

---

## AC-2 — Слайды «как пользоваться орком через Plane» присутствуют и точны

**Условие:** `presentation.md` содержит ≥ 2 слайда оператор-инструкции по работе через Plane.
- **PASS:** ≥ 2 слайда покрывают (суммарно): запуск задачи («To Analyse»), статусную модель
  «индикация ≠ управление», **оба** человеческих гейта (Approved на `analysis` и Confirm
  Deploy на `deploy`), авто-лейблы (`autoApprove`/`autoDeploy`/`Bug`), отмену **STOP**,
  наблюдение за ходом (статусы доски + живая Telegram-карточка + комментарии в задаче). Имена
  статусов/лейблов точны и согласованы с `tech-pipeline.md`/`tech-integrations.md`/`CLAUDE.md`.
- **FAIL:** слайдов нет или один; ИЛИ пропущен любой из двух человеческих гейтов; ИЛИ
  перепутаны имена статусов/лейблов (напр. «Approved выкатывает прод»); ИЛИ утверждается, что
  авто-лейблы пропускают технические проверки.

---

## AC-3 — Сквозная нумерация и формат слайдов валидны

**Условие:** канонический парсер `parse_slides` разбирает источник без нарушений.
- **PASS:** `tests/test_system_docs.py::test_presentation_source_parses_with_canonical_parser`
  зелёный — слайдов ≥ 12, номера `[1..N]` строго сквозные, у каждого слайда непустой заголовок
  и ≥ 1 тезис.
- **FAIL:** тест падает — пропуск/дубль в нумерации, пустой заголовок, слайд без тезисов, или
  слайдов < 12.

---

## AC-4 — Обязательный нарратив и процедура сборки сохранены + новые биты зафиксированы

**Условие:** обязательные биты нарратива на месте; процедура сборки цела; новый контент
анти-дрейф-защищён.
- **PASS:** `test_presentation_covers_mandatory_narrative_bits` и
  `test_presentation_carries_reproducible_build_procedure` зелёные (биты `проблем`/`решени`/
  `конвейер`/`сценари`/`тираж`/`статус` присутствуют; раздел сборки несёт `build_presentation.py`
  и «Проверка»). Добавлены проверки присутствия **Lite-установки** и **использования через
  Plane**, и они зелёные.
- **FAIL:** любой из этих тестов красный; ИЛИ новые биты Lite/Plane не покрыты тестом (можно
  бесследно удалить новый слайд, CI не заметит).

---

## AC-5 — `.pptx` собирается с новыми слайдами (ручная dev-venv проверка)

**Условие:** документированная сборка вне рантайма даёт валидный `.pptx`, включающий новые
слайды.
- **PASS:** в dev-venv `.venv-pptx/bin/python scripts/build_presentation.py` печатает
  `Собрано слайдов: N → build/orchestrator-overview.pptx` (N = числу слайдов источника, включая
  новые), `exit code 0`; открытый файл показывает тёмную тему, корректную кириллицу, новые
  слайды Lite/Plane — присутствуют и редактируемы.
- **FAIL:** скрипт печатает `ОШИБКА: …` / ненулевой код возврата; ИЛИ N не совпадает с числом
  слайдов; ИЛИ новых слайдов нет в собранном файле; ИЛИ кириллица/тема сломаны.

---

## AC-6 — Анти-дрейф и гигиена витрины зелёные

**Условие:** структурный контур витрины проходит целиком.
- **PASS:** весь `tests/test_system_docs.py` зелёный, включая:
  `test_showcase_carries_no_forbidden_host_literals` (нет боевых хост-литералов),
  `test_showcase_carries_no_secret_like_values` (нет секретоподобных значений),
  `test_all_relative_links_resolve_to_existing_files` (ссылки резолвятся),
  `test_build_script_toplevel_imports_are_stdlib_only` (top-level скрипта без `pptx`).
- **FAIL:** любой из перечисленных тестов красный (запрещённый литерал/секрет/битая ссылка/
  `pptx` на top-level скрипта).

---

## AC-7 — Self-hosting безопасность: рантайм и образ нетронуты

**Условие:** изменение остаётся docs-only.
- **PASS:** `git diff` не содержит изменений в `src/**`, `STAGE_TRANSITIONS` (`src/stages.py`),
  `QG_CHECKS`/`check_*` (`src/qg/checks.py`), схеме БД (`src/db.py`);
  `test_no_pptx_dependency_in_prod_image` зелёный (`python-pptx` нет в `requirements*`/
  `Dockerfile`); собранный `.pptx` **не** добавлен в git (`build/` в `.gitignore`).
- **FAIL:** затронут любой рантайм-модуль/стадия/гейт/схема; ИЛИ `python-pptx` появился в
  прод-образе; ИЛИ `.pptx`-бинарь закоммичен.

---

## AC-8 — Сопровождение выполнено в том же PR

**Условие:** доки сопровождения обновлены.
- **PASS:** `CHANGELOG.md` несёт запись `docs:` по ORCH-105; при изменении `presentation.md`
  норматив витрины соблюдён; полный `pytest tests/ -q` зелёный.
- **FAIL:** нет записи в `CHANGELOG.md`; ИЛИ полный регресс `tests/` красный.

---

## Сводная матрица AC ↔ FR/BR

| AC | Покрывает |
|----|-----------|
| AC-1 | BR-2 / FR-1 |
| AC-2 | BR-3 / FR-2 |
| AC-3 | NFR-2 / FR-3 |
| AC-4 | BR-5 / FR-3 / FR-5 |
| AC-5 | BR-4 / FR-4 |
| AC-6 | NFR-4 / FR-5 |
| AC-7 | NFR-1 / NFR-3 |
| AC-8 | BR-6 / FR-6 |
