Files
wiki/memory/2026-06-10.md
2026-06-10 11:50:01 +03:00

50 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-06-10
## ✅ ORCH-100 (F1b sidecar-watchdog) BRD APPROVED (Слава: «проверь и если ок подтверждай», 05:41 UTC)
- Первая задача эпика саморазвития, прошедшая аналитику. BRD/ТЗ/AC — ЭТАЛОН.
- **Аналитик ПРОЧИТАЛ концепцию из репо** (docs/epics/self-evolution.md) и идеально усвоил архрамки: C-1 sidecar отдельный контейнер / код в репо watchdog/ / C-2 без плеча / C-3 тонкий не-Grafana / свой Telegram-канал / read-only docker.sock / орк-down=тревога. → подтвердило: класть концепцию в репо было правильным решением.
- **Верифицировала кодом (урок дня):**
- F1a /metrics РЕАЛЬНО в проде (ORCH-099 done, HTTP 200, конверт schema_version:1/generated_at/clk_tck:100/stages/queue/agents/cost — точно как в ТЗ). Контракт под F1b работает. ✅
- disk_watchdog.decide_action (src:105) — образец решающей функции реален (ТЗ звал 'decide', факт 'decide_action' — по сути верно). ✅
- watchdog/ папки ещё нет — верно, F1b создаёт. ✅
- Аналитик грамотно: анти-дубль диск-алерта с ORCH-063 (BR-10/FR-9/AC-5, тонкость!), вынес в зону архитектора стек Python/Go + владельца диск-алерта + mem_limit + топологию сети. 14 TC, 7 AC.
- Закрыла brd-clock → Approved (200) → architect job 1526 running, stage=architecture, ветка feature/ORCH-100-fnd-f1b-sidecar-watchdog. autoApprove? нет — был ручной approve Славы (на 100 не вешали autoApprove, только запускали F1a в авто). Идёт автономно дальше (autoDeploy если был навешен).
## 🎯 Концепция: скоуп наблюдения (3 слоя) + атрибуция уроков (Слава 10.06 06:01)
- **Вопрос Славы:** F1a/F1b мониторят только орк, или проекты (ET-контейнер) тоже? + саморазвитие может катить ET: фича в ET деградировала ET — это орк недоработал процесс или в ET усилить тесты?
- **Вписала в концепцию (docs/epics/self-evolution.md, обновлён в репо):**
- **Скоп наблюдения 3 слоя:** Слой1 проекты как ЗАДАЧИ в конвейере (ET в /metrics stages) — ✅ в скопе F1a/F1b (здоровье конвейера). Слой2 проекты как КОНТЕЙНЕРЫ на хосте (enduro-app через docker.sock) — ✅ в скопе F1b (жив/мёртв, общий хост впритык). Слой3 ВНУТРЕННЕЕ бизнес-здоровье продукта (эндпоинты ET 200? latency?) — ❌ НЕ фундамент, это мониторинг ПРОДУКТА = будущая фича D4/D5 (per-project health, опция заказчику).
- **Атрибуция уроков (новый шаг петли 8A):** деградация продукта после фичи → петля различает: А) platform-level (орк недоработал ПРОЦЕСС — нет регресс-гейта/перф-бенчмарка → чинить в D1/D2, польза ВСЕМ) vs Б) project-level (в ET мало тестов → усилить тесты в бэклоге ET, польза только ET). Бывает ОБА. Без слоя-3 детекции петле нечего атрибутировать → слой3 нужен и петле, не только заказчику. E2-ретроспективщик несёт классификацию, спорное → Стрим/Слава.
- Commit в main. Аналитик увидит свежую версию.
## 🚀 ORCH-98 (F2 журнал уроков) ЗАПУЩЕНА в авто (Слава: «запускаем, учти выводы, авто», 06:18 UTC)
- Перед запуском УЧЛА выводы обсуждения: дописала в ТЗ ОБЯЗАТЕЛЬНОЕ поле атрибуции в схему журнала с самого начала (иначе переделывать):
- attribution: platform-level / project-level / both / unknown (нуллабельно — классификацию позже ставит ретроспективщик/Стрим, но КОЛОНКИ сразу).
- проект/repo (кого касается), целевой домен (slug модуля D1-D5).
- связь со слоем-3 детекции (деградация продукта = тип урока).
- autoApprove+autoDeploy, HIGH → task 86, analyst job 1528 queued, ветка feature/ORCH-098-fnd.
- ⚠️ F1b (ORCH-100) уже на **developer** (job 1531 running) — architect отработал, sidecar-код пишется. Очередь serial: 100(dev)→98(analyst).
- Фундамент: F1a ✅ done · F1b 🔵 developer · F2 🔵 queued. Все 3 кирпича в движении.
- Скрипт: temp/launch_f2.py.
## ✅ ORCH-100 (F1b sidecar-watchdog) В ПРОДЕ — КОД (Слава: «проверь и подтверждай», 06:57 UTC)
- Проверила перед Confirm: reviewer APPROVED, tester PASS (66 поставочных + 1617 регресс зелёный, src/ НЕ тронут байт-в-байт). watchdog/ создан (Dockerfile/__main__/core/config/collectors), отдельный сервис orchestrator-watchdog в compose, network_mode host, docker.sock:ro, mem_limit 128m, kill-switch WATCHDOG_ENABLED.
- **Ключевая проверка безопасности:** deploy-hook поднимает только $TARGET_SERVICE (orchestrator) с явным именем `up -d --no-build` → Confirm Deploy перезапускает ТОЛЬКО орк, watchdog НЕ трогает. Confirm = мёрж кода watchdog/ в main + рестарт орка. Безопасно.
- Confirm Deploy (200) → deploy→done, merge-verify CONFIRMED сам (watchdog/ в main YES, орк health 200), Monitoring after Deploy (post-deploy job 1536).
- ⚠️ **ОСТАЁТСЯ РУЧНОЙ ИНФРА-ШАГ (Слава/Стрим на хосте) — sidecar ЕЩЁ НЕ ЗАПУЩЕН как контейнер:**
1. Создать ОТДЕЛЬНОГО Telegram-бота watchdog + chat-id → положить WATCHDOG_TG_BOT_TOKEN/CHAT_ID в .env.watchdog на хосте.
2. Заполнить пороги (дефолты годятся), WATCHDOG_ENABLED=true.
3. `docker compose up -d --build orchestrator-watchdog` (ТОЛЬКО этот сервис, НЕ трогать орк!).
4. Проверка: docker logs orchestrator-watchdog (старт+тики), тестовый алерт, на staging остановка орка → orch_down.
- Анти-дубль диска: WATCHDOG_DISK_CRIT_ENABLED=false дефолт (85%-алерт остаётся за disk_watchdog ORCH-063).
- **Фундамент: F1a ✅ · F1b ✅ КОД в проде (контейнер ждёт ручного старта) · F2 🔵 в работе (analyst).**
## 🚀 Sidecar-watchdog ПОДНЯТ боем (Слава: «Поднимай», 08:46 UTC)
- Создан /home/slin/repos/orchestrator/.env.watchdog (канон из .env.example + chat_id=126472752, токен ПУСТ fail-safe). WATCHDOG_CONTAINERS расширен: orchestrator,orchestrator-staging,gitea,enduro-trails-app-1,plane-app-api-1,plane-app-plane-db-1.
- `docker compose up -d --build orchestrator-watchdog` (ТОЛЬКО watchdog) → собрался, Up. Орк НЕ задет (health 200).
- **Память 17.7/128 MiB** — тонкий, как задумано. Тики каждые 30s, demon живёт.
- 🔥 **Sidecar сразу поймал мёртвый хвост ET** (stage_stuck ET-001/003/004/010/013 — смоук-тесты в analysis ~20 дней). Наблюдаемость работает боем.
- ⚠️ Алерты НЕ шлются: `telegram token/chat not configured -> skip send` (нет своего бота, BR-8 — свой канал не токен орка). chat_id прописан, нужен ТОЛЬКО токен отдельного бота от Славы (@BotFather /newbot → токен → впишу в .env.watchdog → рестарт watchdog).
- **Фундамент: F1a ✅ · F1b ✅ КОД в проде + КОНТЕЙНЕР ПОДНЯТ (молчит без бота) · F2 🔵 в работе.**
- ⚠️ Прод main HEAD b915503 — после рестарта орк подтянул; origin af949af (чуть впереди — проверить рассинхрон позже, орк жив).