diff --git a/memory/2026-06-06.md b/memory/2026-06-06.md index e56aeaa..e729c1f 100644 --- a/memory/2026-06-06.md +++ b/memory/2026-06-06.md @@ -177,3 +177,35 @@ - Plane In Progress state id = `e331bfb3-e17e-4699-ba48-4abb89c21b7b` (flip туда = автозапуск конвейера через webhook). Проект ORCH id `8da6aa25-a60e-44d6-a1e2-d8ae59aa7d6a`. - Health: `http://localhost:8500/health`, очередь+resilience: `http://localhost:8500/queue`. - Gitea API: `http://localhost:3000/api/v1`, токен env `ORCH_GITEA_TOKEN`, repo `admin/orchestrator`. Merge PR: POST `/repos/admin/orchestrator/pulls/{N}/merge` body `{"Do":"merge"}`. + +### 🏆 ORCH-36 (исполняемый деплой) + ORCH-53 (sweeper/reconciler) — ОБА В ПРОДЕ (21:24 UTC) +- **Вечерний марафон:** обе задачи прошли конвейер автономно (через рабочий merge-gate ORCH-43), Слава апрувил на гейтах. Эпик ORCH-54: **4 из 6 в проде**. +- **ORCH-53 (sweeper) — DONE с первого захода:** analyst→arch→dev→reviewer→tester→deployer, реворка НЕ было. Файл назван `src/reconciler.py` (НЕ sweeper.py!). PR #56 merged первым (чистый). +- **ORCH-36 (деплой) — через реворк (review отработал!):** + - 1-й заход developer упёрся в **таймаут 1800с (30 мин)** → SIGKILL (exit -9), система сама ушла в attempt 2 (resilience ORCH-1b), наработки в worktree сохранились → 2-й заход добил. + - reviewer завернул REQUEST_CHANGES (2 реальных P1: sentinel-маркеры self-deploy не чистятся на rollback; нет .env.example для новых флагов + процедуры approve в INFRA) → конвейер сам откатил dev→review→fix→APPROVED. + - Код: `src/self_deploy.py` (+338), `src/stage_engine.py` (+247), config.py, launcher.py, `scripts/orchestrator-deploy-hook.sh`, deployer.md. +2888/-8, 35 файлов. CI green, review APPROVED, tester PASS. + - **approve-механизм для прод-деплоя 8500 = Telegram-кнопка** (решение Славы), флаг `DEPLOY_REQUIRE_MANUAL_APPROVE=true` (дефолт). +- **🔴 BOOTSTRAP-ПАРАДОКС (важный урок):** ORCH-36 застряла в петле deploy→development. deployer на стадии deploy не писал `14-deploy-log.md` (старая логика в проде ≠ новая в ветке) → гейт check_deploy_status FAILED → откат. Self-репо НЕ может задеплоить сам себя через старую логику — нужен ручной разрыв цикла (мерж+деплой один раз, дальше катит своей же логикой). Как с ORCH-40/43. +- **🔴 MERGE-CONFLICT при ручном мерже (урок):** после мержа PR #56 main ушёл вперёд → PR #55 дал CONFLICT 409 (`.env.example`, CHANGELOG, README, INFRA, **src/config.py**). Разрулила НЕ rebase (9 коммитов = 9 конфликтов), а **merge main→ветку** (1 разбор). config.py-конфликт был чисто аддитивный: HEAD добавлял self_deploy-настройки, main — reconcile-настройки → нужны ОБА блока, склеить убрав маркеры. Скрипт разрешения на хосте. ⚠️ grep `=======` в docs/*/13-test-report.md = ЛОЖНОЕ срабатывание (markdown-разделители, не git-маркеры). PR #55 merged после rebase+CI green. +- **Деплой:** `temp/deploy_36_53.sh` (pull→build→up→health+preflight+проверка обоих файлов+reconciler в логах, авто-rollback). Откат не понадобился. self_deploy.py yes, reconciler.py yes, uid 1000, health ok, preflight True. +- **🔥 RECONCILER ДОКАЗАЛ СЕБЯ СРАЗУ:** в первую секунду после старта в логах: `reconciler: ORCH-036 development разблокирована (потерян webhook)` + `ET-013 development разблокирована`. Sweeper нашёл и разблокировал ДВЕ застрявшие задачи, включая саму ORCH-36 из bootstrap-петли. Ручной heartbeat-watchdog больше не нужен — система чинит себя сама. + +### Уроки вечера (закрепить): +- **Заголовки ORCH-задач ≤80 символов** — иначе QG-0 (check title length) заворачивает старт. ORCH-53 был 83 → завернул, подрезала до 71. +- **Время хоста ≠ UTC:** файлы worktree датированы по мск (+3), БД/системное в UTC. Не баг, но путает сверки etime/updated_at. +- **Developer-таймаут 1800с** мал для мясных задач (деплой-хук+кнопка+callback). Если упрётся — поднять `agent_timeout_seconds` override или дробить на под-задачи. Пока спас resilience-ретрай (наработки в worktree не теряются между attempt). +- **Gitea merge auth:** `Authorization: token ` (буквально, НЕ маскировать `***` → 401). Скрипт: `temp/merge_both.py`. + +### Эпик ORCH-54 — статус на конец 06.06: +``` +✅ ORCH-40 — права (uid 1000) → прод +✅ ORCH-43 — merge-gate → прод +✅ ORCH-36 — исполняемый деплой → прод (Telegram-кнопка approve) +✅ ORCH-53 — sweeper/reconciler → прод (уже чинит зависания) +☐ ORCH-51 — окно/HA → бэклог (на свежую голову) +☐ обкатка автономного деплоя → следующая задача поедет через новый деплой сама +``` +- **Что конвейер умеет САМ теперь:** мержит feature→main (merge-gate+rebase), реально катит в прод (build+restart+health), прод-деплор спросит Telegram-кнопку перед рестартом 8500, чинит застрявшие задачи (reconciler при потере webhook). +- **Последний ручной шаг — мой деплой — уходит.** Со следующей задачи конвейер катит сам. +- Слава: «Оставим concurrency=1, не рискуем» — НЕ поднимать max_concurrency (одна БД/очередь на все проекты, последовательно надёжнее).