# Team Board — План реализации Дата: 2026-02-22 | Обновлено: 2026-02-23 Метод: BMAD Planning ## Текущее состояние ### Tracker v0.2.0 (Python/FastAPI) ✅ - Модели: Member, AgentConfig, Project, Task, Step, Chat, Message, Attachment - API: auth, members, projects, tasks, steps, messages, ws_router - WS: auth, heartbeat, chat.subscribe, chat.send, message broadcast - БД: PostgreSQL, без миграций (recreate from scratch) ### Web Client v0.2.0 (Next.js) ✅ - Страницы: login, projects list, project board - Компоненты: KanbanBoard (drag-drop + mobile tabs), TaskModal (steps, comments, assignee), ChatPanel (REST), CreateTaskModal, CreateProjectModal, AuthGuard - BFF: Python/FastAPI (порт 8200), JWT auth, proxy к Tracker - WS proxy через BFF с token-based auth - Два окружения: dev.team.uix.su (активное) / team.uix.su (placeholder) ### Что было исправлено в v0.2.0 (бывшие несоответствия) - ✅ Member + AgentConfig вместо отдельной Agent модели - ✅ Unified Message (chat_id + task_id + parent_id) - ✅ Steps модель - ✅ Watchers на Task (string[]) - ✅ Attachment модель - ✅ repo_urls = array - ✅ Правильные статусы (backlog/todo/in_progress/in_review/done) - ✅ Task key на бэкенде (TE-1) - ⬜ WS handler не фильтрует по listen_mode (Phase 3) - ⬜ Нет project.subscribe (Phase 3) - ⬜ Heartbeat — базовый (Phase 3) --- ## Эпики ### Epic 1: Новые модели БД ✅ DONE **Приоритет: MUST** (всё остальное зависит от этого) Очистить БД, создать модели с нуля по ARCHITECTURE.md v0.4. **Статус: Полностью выполнен в Tracker v0.2.0** **Stories:** **E1-S1: Member + AgentConfig** Заменить User + Agent на единую модель Member. ``` Member: id, name, slug, type(human|agent), role(owner|member|observer|bridge), auth_method, password_hash?, token?, status, avatar_url AgentConfig: member_id(FK), capabilities[], chat_listen, task_listen, prompt, model ``` Acceptance: модели созданы, init_db создаёт владельца (admin) **E1-S2: Unified Message + Attachment** Заменить Chat + ChatMessage на Message + Attachment. ``` Message: id, content, author_type, author_slug, chat_id?(lobby/project), task_id?, parent_id?(thread), mentions[], voice_url?, created_at Attachment: id, message_id(FK), filename, mime_type, size, storage_path ``` Chat таблица остаётся (lobby, project chats), но Message может быть без chat_id (task comment). Acceptance: Message работает и для чата, и для комментариев **E1-S3: Task обновление** ``` - status: backlog|todo|in_progress|in_review|done - type: task|bug|epic|story - labels: string[] (ARRAY, вместо отдельной таблицы TaskLabel) - watchers: string[] (ARRAY of slugs) - depends_on: UUID[] (ARRAY, вместо TaskDependency таблицы) - assignee_slug: string (вместо assigned_agent_id FK) - reviewer_slug: string? - Убрать: requires_pr, pr_url (пока не нужны) ``` Acceptance: Task соответствует ARCHITECTURE.md **E1-S4: Step модель** ``` Step: id, task_id(FK), title, done(bool), position(int) ``` Acceptance: Steps CRUD работает **E1-S5: Project обновление** ``` - repo_urls: string[] (ARRAY, вместо git_repo) - Убрать: key_prefix, task_counter (номера задач генерить иначе) ``` Acceptance: Project соответствует ARCHITECTURE.md **E1-S6: Очистка и init** - Удалить Alembic миграции - DROP ALL + CREATE ALL при первом запуске - Seed: создать admin (owner), lobby chat Acceptance: чистый старт, `docker compose down -v && up` работает --- ### Epic 2: REST API (MCP-ready) ✅ DONE **Приоритет: MUST** Обновить API эндпоинты для всех MCP tools. **Статус: Выполнен в Tracker v0.2.0. Все CRUD эндпоинты работают. Некоторые продвинутые (take/reject/assign, files upload) — ещё не реализованы.** **Stories:** **E2-S1: Auth API** - `POST /api/v1/auth/login` — логин → JWT - `POST /api/v1/auth/register` — регистрация (disabled by default) - Token validation middleware Acceptance: JWT auth работает **E2-S2: Tasks API** - `GET /api/v1/tasks` — list (фильтры: project_id, status, assignee, labels) - `GET /api/v1/tasks/{id}` — get - `POST /api/v1/tasks` — create - `PATCH /api/v1/tasks/{id}` — update - `DELETE /api/v1/tasks/{id}` — delete - `POST /api/v1/tasks/{id}/take` — take (атомарно) - `POST /api/v1/tasks/{id}/reject` — reject с причиной - `POST /api/v1/tasks/{id}/assign` — assign - `POST /api/v1/tasks/{id}/watch` — watch - `DELETE /api/v1/tasks/{id}/watch` — unwatch Acceptance: все эндпоинты работают, take атомарный **E2-S3: Steps API** - `GET /api/v1/tasks/{id}/steps` - `POST /api/v1/tasks/{id}/steps` - `PATCH /api/v1/tasks/{task_id}/steps/{step_id}` - `DELETE /api/v1/tasks/{task_id}/steps/{step_id}` Acceptance: CRUD steps **E2-S4: Messages API (unified)** - `GET /api/v1/messages` — list (фильтры: chat_id, task_id, parent_id, limit/offset) - `POST /api/v1/messages` — send (chat_id или task_id) - `POST /api/v1/messages/{id}/reply` — thread reply Acceptance: работает для чатов и комментариев задач **E2-S5: Files API** - `POST /api/v1/messages/{id}/attachments` — upload - `GET /api/v1/attachments/{id}` — download - `GET /api/v1/attachments` — list (фильтры: task_id, chat_id) Acceptance: upload/download работает **E2-S6: Projects API** - Обновить существующий API под новые поля (repo_urls) Acceptance: CRUD проектов работает **E2-S7: Members API** - `GET /api/v1/members` — list (фильтр: project_id) - `GET /api/v1/members/{slug}` — get - `POST /api/v1/members` — create (agent с токеном) - `PATCH /api/v1/members/{slug}` — update - `PATCH /api/v1/members/me/status` — update own status Acceptance: CRUD members, генерация токенов для агентов --- ### Epic 3: WebSocket Protocol v2 ⬜ PARTIAL **Приоритет: MUST** **Статус: Базовый WS (auth, chat.subscribe, chat.send, broadcast) работает. Listen_mode фильтрация, project.subscribe, heartbeat timeout — ещё нет.** **Stories:** **E3-S1: Auth + Heartbeat** - `auth` → token validation → `auth.ok` с контекстом (проекты, online members) - `heartbeat` → обновление status, last_seen_at - Timeout 90s → status=offline, уведомление Acceptance: агент подключается и держит сессию **E3-S2: Project Subscribe** - `project.subscribe` / `project.unsubscribe` - Подписка = получение chat + task events для этого проекта Acceptance: подписка/отписка работает **E3-S3: Event Filtering** - `message.new` — фильтрация по chat_listen + ownership - `task.created/updated/assigned` — фильтрация по task_listen + assignee/reviewer/watchers Acceptance: агент с mentions получает только своё, агент с all — всё **E3-S4: chat.send через WS** - Отправка сообщения через WS (помимо REST) - Broadcast по подписчикам с фильтрацией Acceptance: чат работает в реальном времени --- ### Epic 4: Web Client обновление ⬜ PARTIAL **Приоритет: SHOULD** **Stories:** **E4-S1: TaskModal — комментарии** - Лента сообщений (Message с task_id) внизу модалки - Input для нового комментария - Значки авторов: 👤/🤖/⚙️ Acceptance: комментарии к задаче работают **E4-S2: TaskModal — Steps** - Чеклист между описанием и комментариями - Добавление/завершение/удаление steps - Live-обновление через WS Acceptance: steps отображаются и обновляются **E4-S3: TaskModal — watchers** - Кнопка "👁 Наблюдать" / "Отписаться" - Список watchers в сайдбаре модалки Acceptance: подписка/отписка работает **E4-S4: Agent Management** - Страница /agents — список агентов со статусами - Создание агента (name, slug, capabilities) → генерация токена - Отображение токена (один раз при создании) Acceptance: можно создать агента и получить токен **E4-S5: Обновление моделей в клиенте** - api.ts: обновить типы (Member вместо Agent, Message вместо ChatMessage) - ws.ts: обновить события (message.new, project.subscribe, heartbeat) - ChatPanel: использовать Unified Message Acceptance: клиент работает с новым API --- ### Epic 5: Picogent интеграция **Приоритет: COULD** (после Epic 1-3) **Stories:** **E5-S1: MCP Tools Provider** - Обёртка над Tracker REST API - Все 21+ tools из BRAINSTORM-MCP-TOOLS Acceptance: агент может вызывать tools **E5-S2: Router v2** - WS event → текст → единственная сессия - Фильтрация по listen_mode на стороне picogent (дополнительно к серверной) Acceptance: агент получает события как текст **E5-S3: Single Session** - Одна сессия на агента (не per-task) - session.resume при reconnect Acceptance: контекст сохраняется между задачами --- ## Порядок выполнения ``` Phase 1: Backend Foundation E1 (модели) → E2 (API) → E3 (WS v2) Phase 2: Frontend E4-S5 (типы) → E4-S1 (комменты) → E4-S2 (steps) → E4-S4 (agents) Phase 3: Agent E5-S1 (MCP) → E5-S2 (router) → E5-S3 (session) ``` ## Оценка объёма | Epic | Stories | Сложность | ~Часы | |------|---------|-----------|-------| | E1: Модели | 6 | Средняя | 4-6 | | E2: REST API | 7 | Средняя | 8-12 | | E3: WS v2 | 4 | Высокая | 6-8 | | E4: Web Client | 5 | Средняя | 8-10 | | E5: Picogent | 3 | Высокая | 10-14 | | **Итого** | **25** | | **36-50** |