97 lines
8.4 KiB
Markdown
97 lines
8.4 KiB
Markdown
---
|
||
work_item: ORCH-102
|
||
stage: architecture
|
||
author_agent: architect
|
||
status: proposed
|
||
created_at: 2026-06-10
|
||
model_used: claude-opus-4-8
|
||
---
|
||
|
||
# adr-0037: Канон Lite-тиража — `docs/deployment/LITE_SETUP.md` + `.env.watchdog.example` (ORCH-102, 10a)
|
||
|
||
## Статус
|
||
Proposed
|
||
|
||
## Контекст
|
||
|
||
Эпик ORCH-10 (D5 «Масштаб»), тип **A — Lite**: раздача орк+watchdog заказчику-тестеру, окружение
|
||
(Plane/Gitea/LLM/Telegram) он донастраивает сам. Фундамент 10-common (ORCH-101, adr-0036) в
|
||
`main`: технически платформа разворачивается без правки кода, но операционно знания размазаны по
|
||
4 operations-докам, писанным для оператора НАШЕГО хоста, — заказчик не может развернуть Lite без
|
||
доп-вопросов. Решения Владельца 10.06: оба типа тиража stateless; главный продукт ORCH-102 —
|
||
инструкция-golden-source в репо.
|
||
|
||
Сквозной характер: вводится новый docs-раздел, новый канонический example-файл и нормативы,
|
||
обязательные для всех будущих задач эпика ORCH-10 и для любого агента, меняющего шаги тиража.
|
||
Детальный пакет решений (D1…D9, исходы вопросов ТЗ А-1…А-6) — work-item ADR:
|
||
`docs/work-items/ORCH-102/06-adr/ADR-001-lite-setup-doc-canon.md`.
|
||
|
||
## Решение
|
||
|
||
1. **Новый docs-раздел `docs/deployment/` — витрина тиража.** Семантика: `deployment/` — «как
|
||
развернуть платформу у себя» (читатель — внешний оператор), `operations/` — «как
|
||
эксплуатировать наш прод». Golden source Lite — **`docs/deployment/LITE_SETUP.md`**:
|
||
сквозной маршрут «голый хост → работающий конвейер» из 13 нормативных разделов (рамка →
|
||
предусловия → код → конфиг/секреты → Plane → Gitea → LLM → Telegram → запуск → онбординг →
|
||
smoke → stateless-проверка → траблшутинг); каждый шаг = fenced-команда + явная проверка
|
||
(PASS/FAIL); хост-специфика — только плейсхолдеры. Канон не форкается: статусы/env/вебхуки —
|
||
ссылками на ONBOARDING/REPLICATION/SETUP_WEBHOOKS (`REPLICATION.md` остаётся в
|
||
`operations/`; перекрёстные ссылки в обе стороны). **Норматив сопровождения:** изменение
|
||
шагов тиража → обновление LITE_SETUP.md в том же PR (правило агентов №2).
|
||
2. **Compose не форкается.** `docker-compose.yml` сам является Lite-подмножеством (ровно
|
||
`orchestrator` + `orchestrator-watchdog` + `orchestrator-staging` за `profiles: [staging]`;
|
||
дефолтный `up -d` поднимает орк+watchdog; сервисов Plane/Gitea нет) — отдельный
|
||
`docker-compose.lite.yml` не вводится; свойство становится CI-гарантией (структурный тест
|
||
через `yaml.safe_load`).
|
||
3. **`.env.watchdog.example` — третий канонический env-example** (рядом с `.env.example`/
|
||
`.env.staging.example`): закрывает ловушку файла-носителя (sidecar читает ТОЛЬКО
|
||
`.env.watchdog`; ключ `WATCHDOG_*` в `.env` для него инертен). Key-set = ровно блок
|
||
`WATCHDOG_*` из `.env.example` (равенство множеств держит тест); токены — плейсхолдеры;
|
||
шапка несёт C-1 ORCH-100 (отдельный watchdog-бот, токен орка переиспользовать запрещено)
|
||
и когерентность `WATCHDOG_METRICS_URL` ⇄ `ORCH_DEPLOY_PROD_TARGET_PORT`.
|
||
4. **Норматив тиражной инсталляции Gitea: branch protection на `main` НЕ включать; pre-receive
|
||
хуки не вводятся** (подтверждение ORCH-009 ADR-001 D10 для чужих инсталляций:
|
||
required-approvals/status-checks ломают PR-merge API merge-актора → ложные HOLD; защита
|
||
`main` — конвенция + скоуп токенов + INV-4).
|
||
5. **Staging-контур в Lite опционален:** базовый контур заказчика = prod-оркестратор + watchdog;
|
||
песочница 8501 нужна только при self-hosting развитии платформы у заказчика (регистрация
|
||
проекта `orchestrator`); guard ORCH-058 (staging-порт ≠ прод-порт) действует.
|
||
6. **Анти-дрейф — постоянная CI-гарантия:** `tests/test_lite_setup_doc.py` (структурный, без
|
||
сети/LLM): разделы/кирпичи дока, env-ключи дока ⊂ `.env.example`, key-sync watchdog-example,
|
||
compose-подмножество, stateless-норматив + отсутствие секретов/боевых литералов в
|
||
fenced-блоках (реюз центрального `FORBIDDEN` из `tests/test_no_host_hardcodes.py` импортом),
|
||
перекрёстность REPLICATION→LITE_SETUP + CHANGELOG.
|
||
|
||
### Что НЕ меняется
|
||
`src/**`, `docker-compose.yml`, `Dockerfile`, `scripts/**`; `STAGE_TRANSITIONS`, состав
|
||
`QG_CHECKS`, семантика `check_*`, machine-verdict ключи, схема БД — байт-в-байт. Новый QG не
|
||
регистрируется (структурные тесты попадают в существующие гейты). Прод-контейнер в рамках
|
||
задачи не рестартуется (выкат — штатно: staging 8501 → `Confirm Deploy`).
|
||
|
||
## Альтернативы
|
||
- **Инструкция в `docs/operations/`** — отвергнуто: другой целевой читатель; путь зафиксирован
|
||
Владельцем (D-4).
|
||
- **`docker-compose.lite.yml`** — отвергнуто: вторая правда о сервисах = дрейф-поверхность.
|
||
- **Pre-receive/branch protection как «защита `main`»** — отвергнуто: класс инцидента ORCH-063
|
||
(ложные HOLD merge-актора); пересмотр — только отдельным ADR.
|
||
- **Без example-файла watchdog (шаг прозой)** — отвергнуто: двусмысленность файла-носителя
|
||
остаётся; example + key-sync тест надёжнее.
|
||
|
||
## Последствия
|
||
- Type A эпика ORCH-10 закрыт продуктом-инструкцией; Type B (Bundled) строится поверх
|
||
(переиспользует разделы Lite). Полнота инструкции и compose-подмножество защищены CI.
|
||
- Цена: новый golden source требует сопровождения (норматив «в том же PR» + структурный тест
|
||
рвёт CI при дрейфе); осознанный дубль ключей `WATCHDOG_*` в двух example-файлах — под
|
||
key-sync тестом.
|
||
- Откат: удалить `docs/deployment/`, тест и `.env.watchdog.example`, вернуть строку
|
||
REPLICATION.md §1 — состояние 1:1 (docs+tests, без миграций).
|
||
|
||
## Связи
|
||
adr-0036 (ORCH-101 — фундамент 10-common; этот ADR строит слой Lite поверх), adr-0035
|
||
(ORCH-009 — onboarding-CLI/kit переиспользуются маршрутом §5/§6/§10; D10 подтверждён п.4),
|
||
adr-0033 (ORCH-100 — sidecar-watchdog; C-1 независимый Telegram-канал закреплён в example),
|
||
adr-0008 (ORCH-058 — staging-порт guard, вилка staging п.5), adr-0027/INV-4 (merge-актор —
|
||
основание запрета branch protection). Детально —
|
||
`docs/work-items/ORCH-102/06-adr/ADR-001-lite-setup-doc-canon.md`,
|
||
`docs/work-items/ORCH-102/10-tech-risks.md`.
|