Files
wiki/tasks/orchestrator/reports/dev-2026-06-03-plane-per-agent-author.md
2026-06-03 11:00:01 +03:00

5.8 KiB
Raw Blame History

Dev Report: Plane per-agent comment authorship

Дата: 2026-06-03 Статус: DONE (PR открыт, НЕ смержен — мерж за Стримом)

Задача

Комментарии в Plane должны постится под токеном агента-бота, чтобы был виден реальный автор (analyst/architect/dev/reviewer/tester/deployer/Стрим), а не единый mva154. Только код — токены/БД Plane/инфра уже готовы.

Сделано

  • Ветка feature/plane-per-agent-author из свежего main
  • config.py: 7 полей bot-токенов (env ORCH_PLANE_BOT_*, дефолт "")
  • plane_sync.py: PLANE_BOT_TOKENS, STAGE_AUTHORS, _headers_for(), add_comment(author=)
  • Прокинут author во все точки вызова
  • GET/PATCH НЕ тронуты (под общим токеном)
  • tests/test_plane_author.py — 8 тестов, все passed
  • Conventional Commits (2 коммита)
  • Push + remote проверен + PR #9

Изменённые файлы

  • src/config.py — +7 полей plane_bot_*
  • src/plane_sync.py — PLANE_BOT_TOKENS, STAGE_AUTHORS, headers_for, add_comment(author=), notify* проброс
  • src/stage_engine.py — author= в 5 plane_add_comment
  • src/agents/launcher.py — author= в plane_add_comment (deploy failed)
  • src/webhooks/plane.py — author= в 5 точках
  • tests/test_plane_author.py — НОВЫЙ

Таблица: точка вызова → выбранный author

Файл Строка/контекст Текст (суть) author
stage_engine.py ~284 BRD/ТЗ/AC/TestPlan готовы, прошу review analyst
stage_engine.py ~305 Analyst нуждается в уточнении (вопросы) analyst
stage_engine.py ~316 Analyst завершился без артефактов analyst
stage_engine.py ~369 Тесты не прошли, Developer перезапущен (QG tester) tester
stage_engine.py ~409 Architect нашёл конфликт с ТЗ, возврат в Analysis architect
agents/launcher.py ~472 Deploy FAILED, rolled back deployer (agent=="deployer" в контексте)
webhooks/plane.py ~212 Analyst запущен analyst
webhooks/plane.py ~255 Analyst перезапущен (rejected) analyst
webhooks/plane.py ~267 Откат: current→prev STAGE_AUTHORS[prev_stage] (агент целевой стадии), fallback stream
webhooks/plane.py ~310 3 раунда уточнений исчерпаны analyst
webhooks/plane.py ~329 Analyst перезапущен с ответами стейкхолдера analyst
plane_sync.notify_stage_change 🔄 Stage переход стадий stream
plane_sync.notify_qg_failure ⚠️ QG failed провал QG STAGE_AUTHORS[stage], fallback stream
plane_sync.notify_done Task completed задача завершена deployer

Соответствует ТЗ. Неочевидных точек, потребовавших произвольного "stream", не возникло — у webhook:267 (откат) использован STAGE_AUTHORS по целевой стадии, fallback на stream если стадия вне карты.

_headers_for / fallback

def _headers_for(author):
    tok = PLANE_BOT_TOKENS.get(author or "") if author else None
    return {"X-API-Key": tok} if tok else PLANE_HEADERS

None / неизвестная роль / пустой токен → PLANE_HEADERS (общий orchestrator-токен, автономность). Только POST add_comment использует _headers_for; GET/PATCH — PLANE_HEADERS.

Результат тестов

  • tests/test_plane_author.py: 8 passed
  • Полный прогон: 166 passed, 9 failed
    • 158 baseline + 8 новых = 166 ✓
    • 9 failed — все в tests/test_webhooks.py (401 invalid signature + 1 каскадный TypeError от 401). Это документированный pre-existing baseline (9 pre-existing 401), к моему коду отношения не имеют.
  • Контейнер: 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

Проблемы и решения

  • Образ контейнера уже содержит ORCH_PLANE_BOT_ env-переменные.* При прогоне тестов на ЧИСТОМ main (без полей в config.py) pydantic падает с extra_forbidden — то есть мой config.py-патч ОБЯЗАТЕЛЕН для работоспособности на живом хосте. На моей ветке всё валидно.
  • На сервере был отдельный pre-existing git stash (WIP ORCH-1) — НЕ трогал, он на месте.
  • .env.bak-1780472695 — pre-existing untracked файл, не мой, не трогал.
  • Gitea-токен из env контейнера (c81227...) рабочий, совпадает с origin URL; PR создан им.

Git / PR

  • Коммиты:
    • 30d6dd0 feat(config): add per-agent Plane bot token settings
    • d305521 feat(plane): per-agent bot authorship for comments
  • git log origin/main..origin/feature/plane-per-agent-author → ОБА коммита присутствуют на remote ✓
  • PR: #9admin/orchestrator#9 (base: main)
  • НЕ деплоил, НЕ мержил. Мерж — Стрим, после живой проверки + реального тест-комментария от каждого бота.