8.7 KiB
DEV TASK: Analyst Plane Sync Integration
Статус: Ready for dev
Проект: multi-agent
Приоритет: High
Зависит от: DEV_TASK_ANALYST_IN_ORCHESTRATOR
Контекст
Существующие агенты (architect, developer, reviewer, tester) уже интегрированы с Plane через:
plane_sync.py(state update, comments)- Автоматический запуск через Plane webhook в
plane.py - Автоматический запрос
:approved:и продвижение стадий
Analyst — единственный агент, который:
- Был запущен "вручную" (через
launcher.pyнапрямую) - Записал документы локально, но не синхронизировался с Plane
- Не запросил
:approved:у стейкхолдера - Не обновил статус тикета
В результате ET-005 (Спутниковая карта) аналитик отработал, создал BRD/ТЗ/AC/Test Plan, но ничего не появилось в Plane, и Слава не получил запрос на согласование.
Цель
Сделать Analyst полностью интегрированным агентом в конвейере Plane → Orchestrator, как architect/developer/reviewer/tester.
После этой задачи:
- Analyst автоматически запускается при переводе тикета в Analysis
- Analyst пишет комментарии в Plane при старте, запросе approve, завершении
- Analyst автоматически коммитит документы в feature-ветку
- Analyst запрашивает
:approved:у стейкхолдера через комментарий в Plane - Слава видит BRD и может согласовать без дополнительной коммуникации
Задачи
1. Зарегистрировать Analyst в Orchestrator launcher
Файл: src/agents/launcher.py
Что сделать:
- Убедиться, что конфиг для
"analyst"присутствует (аналогично architect/developer) - Добавить
task_idв вызовlaunch("analyst", repo, task_desc, task_id=task_id) - Убедиться, что env-переменные для Analyst (HOME, GIT_*) настроены корректно
Проверка:
docker exec orchestrator python -c "
from src.agents.launcher import launcher
print('analyst' in launcher.agent_configs)
"
2. Подключить Analyst к Plane webhook routing
Файл: src/webhooks/plane.py
Что сделать:
- В
handle_work_item_created/handle_work_item_updated:- Если issue переведён в Analysis (или создан со стадией Analysis) → вызвать
launcher.launch("analyst", repo, task_desc, task_id=task_id) - Автоматически создать комментарий в Plane: "Analyst запущен. BRD в работе..."
- Сохранить
plane_issue_idв таблицуtasks
- Если issue переведён в Analysis (или создан со стадией Analysis) → вызвать
Пример:
if new_stage == "analysis":
run_id = launcher.launch("analyst", repo, task_desc, task_id=task_id)
plane_sync.post_comment(plane_issue_id, "Analyst запущен (run_id={}). BRD/ТЗ/AC в работе.".format(run_id))
3. Добавить Plane sync при запуске Analyst
Файл: src/agents/launcher.py (или plane.py)
Что сделать:
- При старте Analyst автоматически создать комментарий в Plane:
"Analyst начал работу над BRD. Ожидайте результатов (8-15 мин)."
4. Добавить автоматический запрос :approved: после завершения Analyst
Файл: src/webhooks/plane.py + plane_sync.py
Что сделать:
- После успешного завершения Analyst (exit_code=0) и наличия BRD/ТЗ/AC:
- Автоматически создать комментарий в Plane:
"BRD/ТЗ/AC/TestPlan готовы. Прошу review и реакцию
:approved:на подзадаче Анализ." - Обновить статус подзадачи Analysis →
in_review
- Автоматически создать комментарий в Plane:
5. Автоматическое продвижение после :approved:
Файл: src/webhooks/plane.py
Что сделать:
- При получении комментария с
:approved:на тикет в стадии Analysis:- Проверить QG
check_analysis_approved - Если проходит →
advance_stage(task_id, "analysis", "architecture") - Запустить Architect:
launcher.launch("architect", repo, task_desc, task_id=task_id)
- Проверить QG
6. Автоматический коммит документов Analyst'а в Gitea
Файл: src/agents/launcher.py (env для Analyst)
Что сделать:
- Убедиться, что Analyst имеет доступ к git (HOME, GIT_AUTHOR_NAME/EMAIL)
- Analyst должен автоматически коммитить документы в feature-ветку
docs/work-items/<id>/ - После коммита создать комментарий в Plane: "Документы закоммичены в
<branch>."
7. Обновить документацию
Файлы:
tasks/multi-agent/BRD.md— добавить описание Analyst + Plane synctasks/multi-agent/STATUS.md— отметить интеграцию Analysttasks/multi-agent/DEV_TASK_ANALYST_IN_ORCHESTRATOR.md— связать с этой задачей
Файлы для изменения
| Файл | Изменения | Приоритет |
|---|---|---|
src/agents/launcher.py |
Регистрация analyst + env + git commit | High |
src/webhooks/plane.py |
Роутинг Analysis → analyst, post_comment на старте/approve | High |
src/plane_sync.py |
(возможно) расширить для analyst | Medium |
src/qg/checks.py |
Убедиться, что check_analysis_approved существует |
Medium |
tasks/multi-agent/BRD.md |
Документация Analyst + Plane sync | Low |
tasks/multi-agent/STATUS.md |
Обновить статус | Low |
Ограничения
- НЕ ломать существующий цикл (architect → developer → reviewer → tester)
- Analyst НЕ пишет код (только документы)
- Analyst всегда запрашивает
:approved:перед закрытием Analysis - Все комментарии в Plane должны быть на русском (если Слава пишет на русском)
Порядок выполнения
launcher.py(регистрация analyst + env)plane.py(роутинг + post_comment)- QG + auto-advance после approve
- Документация
- Smoke test: создать тестовый тикет → Analyst запускается → пишет комментарий → запрашивает approve → Слава ставит
:approved:→ architecture
Результат
После выполнения этой задачи:
- Analyst полностью интегрирован в конвейер Plane → Orchestrator
- Создание тикета с переводом в Analysis → Analyst автоматически:
- Запускается
- Пишет комментарий в Plane ("Analyst начал работу...")
- Коммитит документы в Gitea
- Запрашивает
:approved:через комментарий
- Слава видит BRD в Plane и может согласовать без дополнительной коммуникации
- Все агенты (architect, developer, reviewer, tester, analyst) работают по единому протоколу
Команды проверки после деплоя
# 1. Analyst в configs
docker exec orchestrator python -c "
from src.agents.launcher import launcher
print('analyst config:', launcher.agent_configs.get('analyst'))
"
# 2. Smoke: создать тестовый тикет в Analysis → проверить комментарий
docker exec orchestrator python -c "
import sqlite3
conn = sqlite3.connect('/app/data/orchestrator.db')
conn.row_factory = sqlite3.Row
r = conn.execute('SELECT * FROM agent_runs WHERE agent=\"analyst\" ORDER BY id DESC LIMIT 1').fetchone()
print(dict(r))
"