131 lines
8.3 KiB
Markdown
131 lines
8.3 KiB
Markdown
---
|
||
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 |
|