From 37c0730785a6f4d2743d1e6563f0c14370b3b720 Mon Sep 17 00:00:00 2001 From: Stream Date: Fri, 5 Jun 2026 20:50:01 +0300 Subject: [PATCH] auto-sync: 2026-06-05 20:50:01 --- memory/2026-06-05.md | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/memory/2026-06-05.md b/memory/2026-06-05.md index 88cd1f8..989f904 100644 --- a/memory/2026-06-05.md +++ b/memory/2026-06-05.md @@ -689,3 +689,50 @@ Dev (session orch9_docs_canon) отработал, я проверила не с - **ORCH-41** (id `17f9a73f`) — СДЕЛАНО/Done (конфигурируемые модели). - **ORCH-42** (id `1564136e`) — Telegram live-tracker режим **bump** (карточка падает вниз при обновлении, флаг `ORCH_TRACKER_MODE`=edit|bump, deleteMessage+sendMessage тихо). Слава: «bump нравится, пусть орк делает» — self-hosting через конвейер. - **ORCH-43** (id `d770a7a2`) — безопасная параллель в одном репо: merge-gate + auto-rebase + re-test + **single-flight per repo** (не стартовать новую задачу пока предыдущая не дошла до done). Флаг `ORCH_SERIALIZE_PER_REPO`. + +--- + +## 🔴 ИНЦИДЕНТ: ORCH-17 застряла на Analysis — ДВЕ причины (05.06 вечер ~17:00-17:35) + +Карточка ORCH-17 висела на Analysis ~30 мин. Аналитики стартовали (run 107/109/111) и **мгновенно умирали с пустым логом (0 байт)**, job 54 оставался `running`. Расследование выявило ДВА независимых корня: + +### Причина №1: 🔐 Авторизация claude слетела (ГЛАВНАЯ) +- При ребилде контейнера под ORCH-41 (16:45) пересоздание сломало claude-auth: + - `/home/slin/.claude/.credentials.json` стал **owner=root** (контейнер под uid=0 портит владельца смонтированных файлов — снова грабля ORCH-40!) + - `/root/.claude` в контейнере = ПУСТЫШКА (claude под `HOME=/root` создал болванку `.claude.json` 293 байта, настоящие creds лежат в `/home/slin/.claude*` но туда claude не смотрел) +- Симптом: claude → `"Not logged in · Please run /login"`, is_error, 57ms, пустой stdout. +- **ФИКС (двойной):** + 1. `chown slin:slin /home/slin/.claude/.credentials.json` (вернула владельца — токен внутри был ВАЛИДНЫЙ, дело только в правах) + 2. **ПОСТОЯННЫЙ:** в `docker-compose.yml` (prod+staging блоки) добавила монтирование `/home/slin/.claude → /root/.claude` и `.claude.json → /root/.claude.json` напрямую — переживёт рестарт (симлинки внутри контейнера НЕ переживают пересоздание). +- ⚠️ **ВАЖНО launcher.py:** агенты запускаются с принудительным `HOME=/home/slin` (env в launcher, ~стр.290-320). НО claude всё равно умудрялся читать `/root` в части случаев → надёжнее смонтировать creds в ОБА места. + +### Причина №2: ⚙️ `--effort` гасит вывод claude (РЕГРЕССИЯ ORCH-41) +- Флаг `--effort <любое: low/medium/high/xhigh/max>` + `--print` в CLI **2.1.142** → **ПУСТОЙ stdout, even stderr молчит**, мгновенно. +- Изолировано матрицей тестов: без effort работает ✅, с effort пусто ❌ (при любом значении). +- **ФИКС (временный):** отключила effort в проде через `.env`: `ORCH_AGENT_EFFORT_DEFAULT=""` + пустые per-agent → резолвер вернёт пусто → флаг `--effort` НЕ добавляется в cmd. Модель `claude-opus-4-8` ОСТАЛАСЬ. +- **TODO:** завести **ORCH-44** — корректная интеграция effort (возможно несовместим с `--output-format json`, или другой способ передачи). Сейчас effort отключён — не теряем фичу, просто не используем. + +### Грабля диагностики (моя): +- Промежуточные ручные тесты claude обрывались по **таймауту 40-50с** → выглядело как «зависание», сбивало диагноз. **Аналитик с system-prompt + task.md думает ~66с.** При таймауте 90с+ всё работает. ⚠️ НЕ ставить timeout <90с при ручной проверке claude-агента с полным контекстом. + +### Команда launcher (рабочая, проверена E2E): +- Полная команда launcher с `HOME=/home/slin`, `--print`, `--output-format json`, system-prompt + task.md, БЕЗ effort → работает (66с, 13 turns, is_error:false). + +### ИТОГ инцидента: +- ✅ ORCH-17 разблокирована: аналитик отработал (run 114, лог 3487 байт), job 54→done, BRD/ТЗ/AC написаны, Plane-комменты запощены, state→in_review (`c52e99b9`). **Ждёт Approved Славы.** +- ✅ Авторизация claude: починена + защищена монтированием (постоянно). +- ✅ effort: отключён в проде (конвейер работает на 4.8 без effort). +- ✅ ORCH-44 заведена (id `d8ad65a7`, Backlog) — «Надёжность запуска агента», 3 дыры: (1) preflight слеп к auth, (2) --effort фикс, (3) пустой лог → failed. Приоритет высокий. +- 📋 TODO: апрувнуть ORCH-17 (ждёт Approved Славы). + +### 🔍 ДЫРА В PREFLIGHT (разведано 05.06 — почему проверка не поймала сбой) +- `src/preflight.py` проверяет ТОЛЬКО: (a) `os.path.exists(CLAUDE_BIN)`, (b) `claude --version` (timeout 5s, без токенов). +- ⚠️ **`claude --version` ОТВЕЧАЕТ ДАЖЕ БЕЗ ЛОГИНА** (версия — локальная инфа). Поэтому preflight=ok, а реальный запуск падает `Not logged in`. **Preflight слеп к авторизации и к битым флагам** (--effort). +- Код прямым текстом: «🚫 deliberately do NOT do a prompt ping — would burn rate limit». Дизайн «дёшево, без токенов» → ценой слепоты к auth. +- Фикс (ORCH-44): дешёвая проверка auth без токенов — читаемость+права `.credentials.json` + дата истечения OAuth (`claudeAiOauth.expiresAt`) внутри. + +### КРИТИЧНЫЕ УРОКИ на будущее: +1. **Ребилд/пересоздание контейнера orchestrator ЛОМАЕТ claude-auth** (root-owned creds + `/root/.claude` пустышка). Теперь защищено монтированием в compose, НО проверять после каждого ребилда: `docker exec orchestrator bash -c 'cd /tmp && HOME=/home/slin /opt/claude-code/bin/claude.exe --print "ОК"'` (timeout 90с). +2. **claude бинарь:** реальный путь `/opt/claude-code/bin/claude.exe` (смонтирован ro, 232MB). `/usr/bin/claude` (env `ORCH_CLAUDE_BIN`) в контейнере НЕ существует — это хостовый симлинк, launcher хардкодит правильный путь. +3. **`--effort` НЕ использовать** с текущим CLI 2.1.142 + `--print`/`--output-format json` — гасит вывод. Ждёт ORCH-44. +4. **Пустой run-лог (0 байт) + job running + процесс мёртв** = claude упал на старте (auth ИЛИ битый флаг). Смотреть: сначала auth (`claude --print` вручную), потом флаги (effort).