auto-sync: 2026-06-06 20:10:01
This commit is contained in:
@@ -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"}`.
|
||||
|
||||
Reference in New Issue
Block a user