auto-sync: 2026-05-31 19:30:01
This commit is contained in:
186
tasks/multi-agent/DEV_TASK_ANALYST_PLANE_SYNC.md
Normal file
186
tasks/multi-agent/DEV_TASK_ANALYST_PLANE_SYNC.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# 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_*) настроены корректно
|
||||
|
||||
**Проверка:**
|
||||
```bash
|
||||
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`
|
||||
|
||||
**Пример:**
|
||||
```python
|
||||
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`
|
||||
|
||||
### 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)`
|
||||
|
||||
### 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 sync
|
||||
- `tasks/multi-agent/STATUS.md` — отметить интеграцию Analyst
|
||||
- `tasks/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 должны быть на русском (если Слава пишет на русском)
|
||||
|
||||
---
|
||||
|
||||
## Порядок выполнения
|
||||
|
||||
1. `launcher.py` (регистрация analyst + env)
|
||||
2. `plane.py` (роутинг + post_comment)
|
||||
3. QG + auto-advance после approve
|
||||
4. Документация
|
||||
5. Smoke test: создать тестовый тикет → Analyst запускается → пишет комментарий → запрашивает approve → Слава ставит `:approved:` → architecture
|
||||
|
||||
---
|
||||
|
||||
## Результат
|
||||
|
||||
После выполнения этой задачи:
|
||||
|
||||
- **Analyst полностью интегрирован** в конвейер Plane → Orchestrator
|
||||
- Создание тикета с переводом в Analysis → Analyst автоматически:
|
||||
- Запускается
|
||||
- Пишет комментарий в Plane ("Analyst начал работу...")
|
||||
- Коммитит документы в Gitea
|
||||
- Запрашивает `:approved:` через комментарий
|
||||
- Слава видит BRD в Plane и может согласовать без дополнительной коммуникации
|
||||
- **Все агенты** (architect, developer, reviewer, tester, analyst) работают по единому протоколу
|
||||
|
||||
---
|
||||
|
||||
## Команды проверки после деплоя
|
||||
|
||||
```bash
|
||||
# 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))
|
||||
"
|
||||
```
|
||||
Reference in New Issue
Block a user