docs(overview): ORCH-105 — слайды Lite-установки и использования через Plane
All checks were successful
CI / test (push) Successful in 57s
CI / test (pull_request) Successful in 58s

Расширяю слайдо-источник презентации docs/overview/presentation.md тремя
слайдами в каноне ORCH-011 (16 → 19, сквозная нумерация сохранена):

- Слайд «Запуск и ведение задачи через Plane» (вход «To Analyse»,
  статусы = индикация, наблюдение: доска + Telegram-карточка + комментарии).
- Слайд «Что решает человек: гейты, авто-режим, отмена» (Approved /
  Confirm Deploy; autoApprove/autoDeploy/Bug — без пропуска тех. проверок; STOP).
- Слайд «Lite-установка скриптами» (два контейнера платформы; только конфиг;
  gen_secrets.py/onboard_project.py + docker compose up -d; runbook LITE_SETUP.md;
  одношаговый bootstrap — это смежный Bundled, не Lite).

Факты сверены с golden sources (LITE_SETUP.md, tech-pipeline.md,
tech-integrations.md, CLAUDE.md). Анти-дрейф — новая функция
test_presentation_covers_lite_and_plane_usage_bits в tests/test_system_docs.py
(существующие проверки без послаблений). CHANGELOG обновлён.

Docs+tests only: src/**/STAGE_TRANSITIONS/QG_CHECKS/check_*/схема БД —
байт-в-байт; python-pptx не в прод-образе; .pptx в git не коммитится.
Ручная сборка .pptx (TC-07) проверена в dev-venv: «Собрано слайдов: 19», exit 0.

Refs: ORCH-105

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 08:07:38 +03:00
parent 2795fc2cf7
commit adf7cc08b2
3 changed files with 73 additions and 9 deletions

View File

@@ -400,6 +400,39 @@ def test_presentation_covers_mandatory_narrative_bits():
assert bit in low, f"нормативный бит нарратива {bit!r} отсутствует (FR-4 / AC-7)"
def test_presentation_covers_lite_and_plane_usage_bits():
"""ORCH-105 (FR-5 / AC-4): новый обязательный контент презентации
зафиксирован анти-дрейфом — бесследное удаление слайда Lite-установки или
слайдов «как пользоваться орком через Plane» рвёт CI. Матч по lower-case
подстрокам (как `test_presentation_covers_mandatory_narrative_bits`);
маркеры — семантические корни и дословные имена статусов/лейблов (анти-
переобучение к формулировкам), все вне FORBIDDEN/секрет-эвристики."""
low = _read("presentation.md").lower()
# Слайд Lite-установки: корень `lite` + маркер развёртывания (FR-1 / AC-1).
assert "lite" in low, "слайд про Lite-установку отсутствует (FR-1 / AC-1)"
assert any(m in low for m in ("установк", "разверн")), (
"слайд Lite не несёт маркера установки/развёртывания (FR-1 / AC-1)"
)
# Слайды использования через Plane: корень `plane` + операторские маркеры.
# Точка входа, оба человеческих гейта и отмена — дословными именами статусов
# (FR-2 / AC-2; имена сверены с tech-pipeline.md / tech-integrations.md).
assert "plane" in low, "слайды использования через Plane отсутствуют (FR-2 / AC-2)"
assert "to analyse" in low, (
"слайды Plane-usage не называют точку входа «To Analyse» (FR-2 / AC-2)"
)
assert "approved" in low, (
"слайды Plane-usage не называют человеческий гейт «Approved» (FR-2 / AC-2)"
)
assert "confirm deploy" in low, (
"слайды Plane-usage не называют гейт прод-выкладки «Confirm Deploy» (FR-2 / AC-2)"
)
assert "stop" in low, (
"слайды Plane-usage не называют отмену задачи «STOP» (FR-2 / AC-2)"
)
def test_presentation_carries_reproducible_build_procedure():
text = _read("presentation.md")
assert "build_presentation.py" in text, (