# 07 — Инфра-требования: ORCH-089 (авто-режим по лейблам) ## I-1. Создать лейблы в Plane-проекте ORCH (однократно, обязательно) Авто-режим управляется лейблами на задаче. В Plane-проекте ORCH сейчас лейблов `autoApprove`/`autoDeploy` **нет** — их нужно создать один раз через labels API: ``` POST {PLANE_BASE}/workspaces/{WORKSPACE}/projects/{ORCH_PROJECT_ID}/labels/ Headers: PLANE_HEADERS Body: {"name": "autoApprove"} POST {PLANE_BASE}/workspaces/{WORKSPACE}/projects/{ORCH_PROJECT_ID}/labels/ Body: {"name": "autoDeploy"} ``` Имена должны **точно** соответствовать `auto_approve_label` / `auto_deploy_label` (дефолты `autoApprove` / `autoDeploy`). Сопоставление в коде — по нормализованному имени (`strip().casefold()`), т.е. регистр/пробелы не критичны, но рекомендуется создать ровно как в дефолте. **Fail-safe при отсутствии:** если лейбл в проекте не создан, `labels.has_label` всегда вернёт `False` → задача идёт ручным путём (нулевой риск, без ошибок). То есть создание лейблов — предусловие активации фичи, а не условие стабильности конвейера. ## I-2. Сброс кэша состояний/лейблов после создания (рекомендуется) `get_project_labels` кэширует карту лейблов проекта с TTL `auto_label_states_ttl_s` (дефолт 300с). После создания новых лейблов карта подтянется автоматически в течение TTL; для немедленного эффекта — рестарт не требуется, достаточно дождаться TTL или (если будет добавлен) вызвать reload-хелпер кэша лейблов по образцу `reload_project_states`. ## I-3. Конфигурация (env, хост mva154) По умолчанию фича включена (`auto_label_enabled=True`) и применима только к self-hosting репо (`auto_label_repos=""` → `orchestrator`). Управляющие env (опционально, в `.env`): | Env | Дефолт | Эффект | |-----|--------|--------| | `ORCH_AUTO_LABEL_ENABLED` | `true` | Глобальный kill-switch. `false` → оба гейта ручные, нулевой сетевой оверхед. | | `ORCH_AUTO_APPROVE_LABEL` | `autoApprove` | Имя лейбла гейта BRD. | | `ORCH_AUTO_DEPLOY_LABEL` | `autoDeploy` | Имя лейбла гейта деплоя. | | `ORCH_AUTO_LABEL_REPOS` | `` (пусто) | CSV scope. Пусто → self-hosting only. | | `ORCH_AUTO_LABEL_STATES_TTL_S` | `300` | TTL кэша карты лейблов проекта. | ## I-4. Сетевые/доступ Новых endpoint оркестратора нет. Дополнительные **исходящие** вызовы к Plane API v1 (те же креды `PLANE_HEADERS`, таймаут 10с): - `GET …/issues/{issue_id}/` (поле `labels`) — чтение лейблов задачи на гейте; - `GET …/projects/{pid}/labels/` — карта лейблов проекта (кэш с TTL); - `PATCH …/issues/{issue_id}/` `{"state": }` — индикация авто-аппрува. Вызовы — только когда `applies(repo)==True` (kill-switch off / репо вне scope → нет вызовов). Недоступность Plane → fail-safe к ручному гейту (конвейер не блокируется). ## I-5. Топология / прод-риск Self-hosting не меняется: autoDeploy лишь авто-инициирует **существующий** Phase B (detached host-деплой через `scripts/orchestrator-deploy-hook.sh`). Никакого нового пути рестарта прод-контейнера не вводится. Phase C / merge-verify / regression-guard / post-deploy monitor продолжают верифицировать результат. Раскат — под kill-switch (`ORCH_AUTO_LABEL_ENABLED`), деплой self — через обязательный staging-гейт (8501), как всегда.