From f036defefd59d260cc2a7718c5f6c0ed08d07d03 Mon Sep 17 00:00:00 2001 From: Stream Date: Tue, 9 Jun 2026 19:20:01 +0300 Subject: [PATCH] auto-sync: 2026-06-09 19:20:01 --- memory/2026-06-09.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/memory/2026-06-09.md b/memory/2026-06-09.md index 3824543..ba3e97a 100644 --- a/memory/2026-06-09.md +++ b/memory/2026-06-09.md @@ -157,3 +157,23 @@ - ⚠️ 063 уже на development (job 1110), не architecture — продвинулась пока разбирала 72/91. - 091 несёт autoApprove+autoDeploy → пройдёт автономно (BRD сама подтвердит, прод сама задеплоит после тех-гейтов). - ⚠️ Хвост старых ET-задач (task 2,3,5,6,18,31) висит в analysis/development БЕЗ активных job — старые смоук-тесты, не наш конвейер, не трогаю (serial-gate их игнорит т.к. репо enduro≠orchestrator, либо это мусор для будущей чистки). + +## 🚨→✅ ORCH-063 «deploy succeeded but not merged» — транзиент Gitea 405, домержила штатно (09.06 ~16:11 MSK) +- **Алерт:** deploy прошёл, но main не получил коммит задачи → HOLD на `deploy` (защита ORCH-81). Слава: «А это?». +- **Корень (из docker logs orchestrator):** `merge_pr: PR #98: HTTP 405 {"message":"Please try again later"}` — **транзиентная ошибка Gitea** (мерж временно недоступен, часто пока пересчитывается mergeable после пуша). НЕ конфликт, НЕ баг кода. Финализатор-актор one-shot (не ретраит мерж) → HOLD сработал корректно как защита (не пометил done вслепую). +- **Проверка:** PR #98 = open, mergeable=True, конфликтов нет, транзиент давно прошёл. Безопасно домержить. +- **Фикс (штатно, не руками-через-API):** + 1. `merge_gate.merge_pr()` повторно → merged PR #98, `verify_merged_to_main`=True, `check_main_regression`=True (markers intact 5). disk_watchdog.py в main ✅, нет unmerged-коммитов. + 2. `stage_engine.run_deploy_finalizer({task_id:74})` идемпотентно → merge_pr=already-merged → CONFIRMED → **deploy→done**, Plane→Done→Monitoring after Deploy (post-deploy monitor job 1116 armed). + 3. Прибрала побочный PR #99 (финализатор создал т.к. #98 уже merged+closed, ensure_open_pr не нашёл открытого → создал пустой; closed). +- ✅ **ORCH-063 в проде, task done.** disk-watchdog (мониторинг диска mva154 + Telegram-алерт ≥85%) задеплоен — особенно вовремя, диск был 89%. +- ⚠️ **УРОК / кандидат на follow-up:** merge-актор финализатора НЕ ретраит транзиентные ошибки Gitea (405 "try again later") — one-shot → ложный HOLD при инфра-икоте Gitea, требует ручного домержа. Стоит добавить ретрай merge_pr на 405/5xx (как breaker у агентов) ИЛИ ensure_open_pr не создавать новый PR если ветка уже в main (PR #99 — мусор). Если повторится — завести ORCH-задачу. + +## 📝 ORCH-93 заведена — merge-актор ретрай транзиентов Gitea (Слава: «заведи задачу да», 09.06 ~16:18 MSK) +- Follow-up по инциденту 063 (Gitea 405 → ложный HOLD). seq=93, id=d4deab67-2f51-4c44-b4fd-ea103ec67a94, Backlog, MEDIUM. +- **2 дефекта (верифицированы по src/merge_gate.py прода):** + - Деф.1: `merge_pr` (~685) one-shot — на 405/5xx/таймаут сразу return False, нет ретрая (у агентов breaker есть, у мержа нет). G1/G2: ретраить транзиенты (405/408/409-not-mergeable-yet/5xx) с backoff, НЕ ретраить реальный конфликт. + - Деф.2: `ensure_open_pr` (~590) плодит пустой PR на уже влитой ветке (PR #99 сегодня). G3: гард «ветка уже в main» (нет diff origin/main..branch) → no-op «already-in-main». +- AC-1..6 (ретрай 405×2→200, не-ретрай конфликта, HOLD при исчерпании, already-in-main, kill-switch, never-raise+зелёный pytest). Зацепки: check_ci_green как образец ретрая, config флаги ORCH_MERGE_RETRY_*. +- Не-цель: НЕ убирать защиту ORCH-81 (корректна), не ретраить реальный конфликт, INV-4 (только Gitea API, не push main). +- Запуск по решению Славы. Скрипт: temp/create_merge_retry.py.