From 27bfd96ff8b7c16912fc37d0f7d15277323551b5 Mon Sep 17 00:00:00 2001 From: Stream Date: Sat, 6 Jun 2026 20:10:01 +0300 Subject: [PATCH] auto-sync: 2026-06-06 20:10:01 --- memory/2026-06-06.md | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/memory/2026-06-06.md b/memory/2026-06-06.md index de7d3a8..fecb567 100644 --- a/memory/2026-06-06.md +++ b/memory/2026-06-06.md @@ -113,3 +113,52 @@ - Рекомендация Стрим: A и B — этапы, не «или/или». B оформить отдельным крупным эпиком, зависящим от ORCH-51(A) и ORCH-36. - Связи: ORCH-36/21/48/28/1b/40. - ⚠️ Пока ORCH-51 не сделана — прод-ребилд под ORCH-44 (трогает src/) спрашивать у Славы вручную. + +--- + +## ORCH-40 применён к проду (uid 1000) + регрессия → ORCH-43 запущена — 16:00-17:00 UTC + +### Эпик ORCH-54 (автономное внедрение) — порядок: 40 → 43 → 36 → 53(∥) → 51 → approve-политика + +### ORCH-40 (права, контейнер под host uid 1000) — ПРОВЕРЕНА + ПРИМЕНЕНА В ПРОД ✅ +- **Проверка качества кода (PR #53):** агенты учли ВСЕ 3 мины из моего scope (+4-ю сами доразведали): + - `user: "1000:1000"` на prod+staging; `group_add: ["999"]` сохранён (МИНА 1 docker.sock=gid999) + - SSH-маунт перенесён `/root/.ssh` → `/home/slin/.ssh` (агент сам нашёл, я не указывала) + - ADR честно зафиксировал блокер P-1: `chown -R 1000:1000 /home/slin/.claude` ПЕРЕД рестартом + - тесты `test_orch040_compose.py`, ADR, INFRA.md на месте +- **Применение к проду (Слава дал «да», деструктивная прод-операция), порядок:** + 1. chown creds: `.credentials.json` был `root:root 0600` → не читался под uid 1000 (МИНА P-1). `sudo -S` с паролем slin → `slin:slin`. (`.claude.json` и ssh-ключи уже были slin:slin) + 2. merge PR #53 → main (`39cb5dd`), `user:"1000:1000"` в main compose + 3. рестарт `docker compose up -d --no-build orchestrator` (код не менялся — только compose, образ не пересобирать) + 4. проверки ВСЕ зелёные с 1-го захода: uid=1000, health 200 ok, preflight=True (claude 2.1.142 залогинен под 1000), docker.sock present +- **Скрипт с авто-откатом:** `temp/apply_orch40.sh` (откат = sed comment user: → recreate под root). Откат НЕ понадобился. + +### 🔴 РЕГРЕССИЯ от ORCH-40 (поймана на первом запуске ORCH-43, починена вручную) +- Первый job под uid 1000 упал: `fatal: could not create leading directories ... /repos/_wt/.../.git: Permission denied` +- **Причина:** старые worktree-папки в `/repos/_wt/` остались `root:root` (созданы прежним root-контейнером) → uid 1000 не может создать папку рядом. +- **Пробел ORCH-40:** задача сменила compose, но НЕ нормализовала legacy root-файлы (ADR упоминал, deployer не сделал). +- **Fix (one-time cleanup, sudo):** `chown -R 1000:1000` на `/repos/_wt`, `.git`-объекты ОБОИХ репо (orchestrator + enduro-trails), `data/runs/*.log` (37 root-логов). Теперь 0 root-файлов везде. Удалила stale локальную ветку `feature/ORCH-043`. +- **TODO:** дописать legacy-чистку как follow-up к ORCH-40 в Plane (на чистой среде грабли повторятся). Слава спрошен — ждёт ответ. + +### ⚠️ УРОК: миграция uid контейнера = нормализовать ВСЕ существующие файлы +- Смена `user:` в compose НЕ трогает уже созданные root-файлы в bind-mount. Любой git/worktree/data затык с Permission denied → chown -R на host под новый uid. Проверять `/repos/_wt`, `.git/objects`, `.git/worktrees`, `data/runs`. + +### ORCH-43 (merge-gate feature→main) — ЗАПУЩЕНА в конвейер (task 42, analyst бежит после fix) +- **Разведка (важно для будущего):** сейчас deployer мержит в main ТОЛЬКО docs-артефакты (14-deploy-log, 15-staging-log) отдельным PR (`qg/checks.py:_deploy_log_from_main:431`). **Сам feature-код (src/) в main НЕ мержится автоматически** — я делала руками (PR #52, #53). check_deploy_status пишет «бумажный» SUCCESS. +- **Дыры:** (1) нет реального мержа кода фичи; (2) нет проверки свежести main vs точка ответвления → гонка при max_concurrency>1. +- **Scope ORCH-43:** реальный мерж feature→main + merge-gate (свежесть main, auto-rebase, re-test, откат на development при конфликте/красном). Файлы: `stage_engine.py`, `qg/checks.py`, `git_worktree.py`, `webhooks/gitea.py`. Скрипт запуска: `temp/launch_orch43.py`. +- Точка ответвления: `git worktree add -b branch wt origin/main` (`git_worktree.py:ensure_worktree`). + +### Баги в бэклог (Слава просил) +- **ORCH-55** — Telegram bump не сработал (карточка ORCH-040 #17216 осталась вверху, регресс ORCH-42). Копать `notifications.py` — вероятно флаг bump в проде выключен. Код bump В ПРОДЕ ЕСТЬ (4 вхождения в `/app/src/notifications.py`), но не отрабатывает. +- **ORCH-56** — я (Стрим) узнаю о завершении задачи только на heartbeat (~30 мин), не в реал-тайм. Рекомендация: вариант B (орк пингует мою сессию sessions_send на done → реагирую сама без вопроса Славы). Скрипт: `temp/create_bugs.py`. + +### Watchdog за конвейером (HEARTBEAT.md) — поставлен ранее этой сессии +- На каждом heartbeat: `docker exec orchestrator python3 /tmp/orch_watch.py` → активные ORCH (stage!=done) + очередь (queued/running) + последние failed/transient. State: `memory/heartbeat-state.json`. +- ⚠️ Ограничение: heartbeat = таймер, НЕ push. Между событием и докладом до 30 мин (это и есть баг ORCH-56). + +### Прод-доступ (закрепить) +- `slin@82.22.50.71`, пароль `motoZ@yaz2010`, ConnectTimeout=15. Репо `/home/slin/repos/orchestrator`. docker через `sg docker -c`. +- 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"}`.