diff --git a/memory/2026-06-05.md b/memory/2026-06-05.md index e03cc68..175f401 100644 --- a/memory/2026-06-05.md +++ b/memory/2026-06-05.md @@ -307,3 +307,44 @@ 4. Ни одного «молчаливого» деплоя (каждый → Plane + Telegram) 5. Период ≥10 деплоев ИЛИ ≥2 недели без инцидентов Связи: ORCH-7/21/34/35. Ждёт когда вернёмся. + + +--- + +## ORCH-35 ДОРАБОТКА — условный staging-гейт (Вариант А) ✅ проверено лично (05.06 ~07:40 UTC) + +### Решение Славы: Вариант А — условный гейт +Гейт `deploy-staging` срабатывает реально ТОЛЬКО для self-hosting (проект orchestrator). Для остальных проектов (enduro-trails и пр.) — мгновенный зелёный pass, чтобы их задачи НЕ застряли на откате. + +### Что сделал Dev (коммит `e0c14fa` в той же ветке `feature/ORCH-35-staging-gate`) +- `src/qg/checks.py:451-455` — `SELF_HOSTING_REPO = "orchestrator"` + `is_self_hosting_repo(repo)` (case-insensitive) +- `check_staging_status`: если repo НЕ self-hosting → сразу `(True, "Staging gate N/A for ")`, файл `15-staging-log.md` даже не читается. Если orchestrator → реальная проверка как было. +- `STAGE_TRANSITIONS` НЕ трогали — стадия остаётся в цепочке для всех, условность зашита в QG. +- `tests/test_qg.py` — +7 новых тестов под условную логику + +### Проверено МНОЙ лично на проде (прод-образ орка + примонтированы исходники ветки) +- **319 passed, 0 failed** (было 312, +7 новых) +- Условность вживую (через `docker cp` файла в контейнер, НЕ `-v` mount — volume-mount файла НЕ подхватывается, урок!): + - `check_staging_status("enduro-trails", ...)` → (True, "Staging gate N/A...") БЕЗ файла ✓ + - `check_staging_status("orchestrator", ...)` без файла → (False) ✓, с `staging_status: SUCCESS` → (True) ✓ +- repo приходит как plain gitea name (`ProjectConfig.repo` из реестра `projects.py`) — подтверждено, сравнение корректное +- Доработка тронула только `qg/checks.py` + `tests/test_qg.py`. git diff ветки показывает 6 файлов — это НАКОПЛЕННЫЙ diff всей ветки против main (первый коммит e0b6e92 + доработка e0c14fa), сама доработка stages.py НЕ меняла. + +### projects.py (разведано, реестр проектов из ORCH-6 фикса 02.06) +Связывает Plane-проект uuid ↔ Gitea-репо ↔ префикс. `ProjectConfig` (frozen): plane_project_id, repo, work_item_prefix, name. Источник: env `ORCH_PROJECTS_JSON` → settings.projects_json, fallback `_DEFAULT_PROJECTS` (enduro-trails ET первый намеренно, orchestrator ORCH). Парсер устойчив (битый элемент скип, пусто→дефолт). Отсюда берётся способ отличить self-hosting (repo=="orchestrator"). + +### СТАТУС: ✅ СМЕРЖЕНО И ЗАКРЫТО (05.06 ~07:43 UTC) +- PR `#31` СМЕРЖЕН (merge commit `f1b3146`, merged=True/closed). main HEAD = `f1b3146`, под ним `e0c14fa` + `e0b6e92`. +- ORCH-35 переведён Backlog→Done напрямую (HTTP 200, state `3738cd3c`). Мимо In Progress — webhook не дёрнут. +- ORCH-35 id `4ead9be7-e1bf-4a28-8c76-88bda1c1fc2c` + +### 🏁 СЕРИЯ САМОДЕПЛОЯ — ФИНАЛ +Все 5 этапов готовы и проверены лично: +- Этап 1 ORCH-31 ✅ Done (PR #28) +- Этап 2 ORCH-32 ✅ Done (песочница staging 8501) +- Этап 3 ORCH-33 ✅ Done (PR #29, staging_check.py) +- Этап 4 ORCH-34 ✅ Done (PR #30, deploy-hook.sh + авто-rollback) +- Этап 5 ORCH-35 ✅ DONE (PR #31 смержен `f1b3146`, условный staging-гейт, 319 тестов) +- Вариант B вынесен в ORCH-36 (Backlog) — исполняемый деплой, на потом + +🏁🏁🏁 СЕРИЯ САМОДЕПЛОЯ ПОЛНОСТЬЮ ЗАВЕРШЕНА 05.06.2026. Орк имеет staging-предохранитель: прод-деплой недостижим, пока staging-гейт не зелёный (для self-hosting). Следующий шаг когда вернёмся — ORCH-36 (исполняемый деплой) с 5 метриками доверия.