Files
wiki/tasks/orchestrator/DEV_TASK_ORCH_CLEANUP_L1L2L3.md
2026-06-03 10:00:01 +03:00

6.7 KiB
Raw Blame History

DEV TASK — финальная гигиена: L-1 (комментарий) + L-2 (ротация логов) + L-3 (эмодзи-константы)

Проект: orchestrator | Сервер: slin@82.22.50.71 | Репо: /home/slin/repos/orchestrator | Контейнер: orchestrator (8500) Ветка: feature/ORCH-cleanup-L1L2L3 из свежего main (git checkout main && git pull && git checkout -b feature/ORCH-cleanup-L1L2L3).

Три мелких независимых пункта, отдельными коммитами. Низкий риск, но аккуратность та же.

⚠️ ГРАБЛЯ push (ORCH-7, НЕ повтори): после push git log origin/main..origin/feature/ORCH-cleanup-L1L2L3 ДОЛЖЕН показать твои коммиты ДО отчёта «PR готов».


L-1 — поправить врущий комментарий в stages.py (1 строка)

Где: src/stages.py:8 — в docstring/шапке STAGE_TRANSITIONS:

  - agent: the agent to launch when entering the NEXT stage

Проблема: это НЕВЕРНО и именно этот нейминг породил баг ORCH-4 (launcher брал агента не той стадии). Строка 33 уже верная: «agent to launch when advancing FROM this stage». Фикс: привести шапку (стр.8) в соответствие с фактической семантикой:

  - agent: the agent to launch when advancing FROM this stage (NOT the next stage's agent)

Никакого кода не менять — только комментарий. STAGE_TRANSITIONS и логику НЕ трогать. Коммит: docs(stages): fix misleading STAGE_TRANSITIONS comment (L-1)


L-2 — ротация логов прогонов (реальная гигиена)

Где: логи пишутся в /app/data/runs/{run_id}.log (src/agents/launcher.py:143 и др.). Накапливаются без ограничения. Что сделать:

  • Добавить функцию очистки старых логов в runs/ — например prune_run_logs(runs_dir, keep_days=30, keep_max=500): удаляет .log старше keep_days ИЛИ оставляет только keep_max самых свежих (что наступит раньше). Безопасно: только *.log в этом каталоге, не трогать другие файлы.
  • Вызывать её в подходящий момент: либо при старте приложения (init/lifespan), либо после финализации job (_finalize_job). Выбери наименее инвазивный — вызов при старте проще и безопаснее. Best-effort: ошибка ротации НЕ должна ронять приложение (обернуть try/except + logger.warning).
  • Параметры (keep_days/keep_max) — через env/config с разумными дефолтами (по образцу resilience-ключей в ORCH-1b, если такой паттерн есть; иначе константы с комментарием).
  • НЕ удалять лог текущего/активного прогона. Тест: tests/test_log_rotation.py — создать tmp-каталог с N фейковыми .log разного возраста (touch с mtime), вызвать prune, проверить что старые/лишние удалены, свежие и не-.log файлы целы. Коммит: feat(launcher): prune old run logs (L-2)

L-3 — эмодзи-литералы → константы (косметика)

Где: src/plane_sync.py — захардкоженные эмодзи в строках:

  • стр.197 f"🔄 Stage: {old_stage} → {new_stage}"
  • стр.235 f"⚠️ QG failed at {stage}: ..."
  • стр.242 "✅ Task completed! ..." Что сделать: вынести эмодзи в именованные константы в начало модуля (или в маленький общий модуль src/emoji.py если хочешь переиспользовать), например:
EMOJI_STAGE = "🔄"
EMOJI_QG_FAIL = "⚠️"
EMOJI_DONE = "✅"

и подставить в f-строки. Текст сообщений НЕ менять — байт-в-байт тот же вывод. Это чисто читаемость. Тест: не обязателен (поведение не меняется); если просто — добавь assert что константы непусты. Главное — существующие тесты plane_sync (если есть) зелёные. Коммит: refactor(plane_sync): extract emoji literals to constants (L-3)


Ограничения

  • 🚫 НЕ трогай: nginx, openclaw.json, .env-секреты, deploy-хук, Plane-webhook is_active, ORCH-1/1b/2/4/5/6/7, stage_engine.py, STAGE_TRANSITIONS (логику), HMAC, очередь.
  • Baseline: 145 passed, 9 pre-existing 401 — НЕ чинить и НЕ ломать. Новые тесты зелёные, старые не падают.
  • Conventional Commits, 3 отдельных коммита по пунктам.
  • Тесты в контейнере: IMG=$(docker inspect orchestrator --format '{{.Config.Image}}'); docker run --rm -v /home/slin/repos/orchestrator:/code -w /code --entrypoint python3 $IMG -m pytest tests/ -q

Проверка (Стрим проверит вживую)

# Что Критерий
1 L-1 stages.py:8 больше не врёт; логика/STAGE_TRANSITIONS не тронуты
2 L-2 prune-функция + вызов; ошибка ротации не роняет app; активный лог не трогается; тест зелёный
3 L-3 эмодзи в константах; вывод сообщений байт-в-байт прежний
4 тесты мой прогон: было 145 → стало 145+новые passed, 9 pre-existing не тронуты
5 git PR в main, remote содержит коммиты (грабля ORCH-7)

Отчёт

  • НЕ деплоить, НЕ мержить (мерж делает Стрим после живой проверки).
  • Запушь ветку (ПРОВЕРЬ remote!), открой PR в main. После каждого пункта — короткий отчёт.
  • Если ТЗ расходится с кодом — отчитайся, не выдумывай. Один исполнитель, не паникуй про параллельные сессии.