118 lines
7.5 KiB
Markdown
118 lines
7.5 KiB
Markdown
# Архитектурный ревью: поиск противоречий и проблем
|
||
Дата: 2026-02-22
|
||
Автор: Winston (Архитектор, BMAD)
|
||
|
||
Проанализированы все документы: ARCHITECTURE.md, 10 брейнштормов, WS-PROTOCOL, MCP-TOOLS.
|
||
|
||
---
|
||
|
||
## 🔴 Критические противоречия
|
||
|
||
### 1. Redis Streams: решено или нет?
|
||
- **BRAINSTORM-MICROSERVICES**: Redis Streams = "КЛЮЧЕВОЕ решение", принят, расписан reconnect через XREAD
|
||
- **Разговор 22.02**: Хозяин сказал "не уверен что нужен Redis Streams, оставляй на обсуждение"
|
||
- **ARCHITECTURE.md**: Redis "пока не используется", но в "Идеях" — Redis Streams для event bus
|
||
- **BRAINSTORM-WS-V2**: Redis Streams не упоминается вообще
|
||
|
||
**Проблема:** Документы противоречат друг другу. В одном Redis Streams принят, в другом под вопросом.
|
||
|
||
**Решение:** Убрать Redis Streams из принятых решений. Оставить как идею на будущее. Сейчас: WS для online агентов + REST для получения пропущенного при reconnect (GET /tasks?assignee=me). Проще, меньше компонентов.
|
||
|
||
### 2. Unified Message vs ChatMessage + TaskComment
|
||
- **BRAINSTORM-UI**: решено — Message = одна сущность (chat_id? / task_id?)
|
||
- **BRAINSTORM-CHATS**: модель `ChatMessage` с `chat_id` (не task_id)
|
||
- **BRAINSTORM-TASKS**: модель `TaskComment` — отдельная сущность
|
||
- **ARCHITECTURE.md**: `ChatMessage` и комментарии описаны отдельно
|
||
|
||
**Проблема:** Старые документы описывают две сущности, новое решение — одну. ARCHITECTURE.md не обновлён.
|
||
|
||
**Решение:** Обновить ARCHITECTURE.md. Одна таблица `Message` с полями chat_id? и task_id?.
|
||
|
||
### 3. Файловое хранилище: три версии
|
||
- **ARCHITECTURE.md**: "Файловое хранилище — Per-project директории, Upload/download через REST API"
|
||
- **BRAINSTORM-AGENTS**: "File storage — всегда, docs, картинки, видео, attachments"
|
||
- **Разговор 22.02**: "Отдельного файлового сервиса нет, файлы = вложения к сообщениям/задачам"
|
||
|
||
**Проблема:** ARCHITECTURE.md описывает отдельный файловый сервис, а решение — просто attachments.
|
||
|
||
**Решение:** Обновить. Файлы = attachments в Message. Документация проекта = ссылка в описании (repo_urls / description). Per-project директории на диске для хранения attachment'ов — деталь реализации.
|
||
|
||
---
|
||
|
||
## 🟡 Нестыковки (не критические)
|
||
|
||
### 4. WS-PROTOCOL.md vs BRAINSTORM-WS-V2
|
||
Два документа описывают WS протокол с разными решениями:
|
||
- **WS-PROTOCOL.md** (старый): task.take, task.complete, task.comment через WS (мутации!)
|
||
- **BRAINSTORM-WS-V2** (новый): мутации только через REST
|
||
|
||
**Решение:** WS-PROTOCOL.md устарел. Либо обновить, либо пометить deprecated и ссылаться на WS-V2.
|
||
|
||
### 5. Agent model: Member vs Agent
|
||
- **ARCHITECTURE.md**: Unified Member model (human + agent = одна модель)
|
||
- **WS-PROTOCOL.md**: отдельная модель `Agent` с полями connection_type, callback_url и т.д.
|
||
- **BRAINSTORM-AGENTS**: "Агент = чёрный ящик", отдельная сущность
|
||
|
||
**Проблема:** Не ясно — Member или Agent? Если Member, то connection_type, callback_url, prompt, capabilities — это поля Member?
|
||
|
||
**Решение:** Member — базовая модель. Для type=agent дополнительные поля (capabilities, listen_mode, prompt, model). Можно JSON-поле `agent_config` или отдельная таблица `AgentConfig` с FK на Member.
|
||
|
||
### 6. Listen modes: один или два?
|
||
- **BRAINSTORM-PROJECTS**: `listen: all | mentions` — один режим
|
||
- **BRAINSTORM-WS-V2**: `chat_listen` + `task_listen` — два раздельных
|
||
|
||
**Решение:** Два раздельных (WS-V2 — более новое решение).
|
||
|
||
### 7. HTTP Callback transport
|
||
- **WS-PROTOCOL.md**: описан HTTP Callback как альтернативный транспорт
|
||
- **Нигде больше не упоминается**
|
||
|
||
**Решение:** Убрать из MVP. Если агент offline — он при reconnect запросит текущее состояние через REST.
|
||
|
||
### 8. chat.send: через WS или REST?
|
||
- **BRAINSTORM-PROTOCOL**: "WS = real-time + чат"
|
||
- **BRAINSTORM-MCP-TOOLS**: `send_message` в списке MCP tools (= REST)
|
||
- **BRAINSTORM-WS-V2**: `chat.send` в списке клиент→сервер WS событий
|
||
|
||
**Проблема:** Чат отправляется и через WS, и через REST?
|
||
|
||
**Решение:** Оба варианта валидны. WS для агентов (уже подключены, real-time). REST (MCP tool) — тоже работает (для MCP-клиентов без WS). Tracker обрабатывает одинаково.
|
||
|
||
### 9. Watchers: новая фича, нигде кроме WS-V2
|
||
- **BRAINSTORM-WS-V2**: watchers[] на задаче
|
||
- **BRAINSTORM-TASKS**: не упоминается
|
||
- **ARCHITECTURE.md**: не упоминается
|
||
|
||
**Решение:** Добавить watchers в модель задачи при обновлении ARCHITECTURE.md.
|
||
|
||
---
|
||
|
||
## 🟢 Открытые вопросы (не противоречия, а незакрытое)
|
||
|
||
### 10. Лейблы: глобальные или per-project?
|
||
Упоминается в BRAINSTORM-PROJECTS как TBD. Не решено.
|
||
|
||
### 11. Реакции в чатах
|
||
Упоминается в BRAINSTORM-CHATS как TBD. Не решено.
|
||
|
||
### 12. Multi-instance агентов
|
||
Упоминается в BRAINSTORM-MISC. Как различать: slug = роль, instance_id?
|
||
|
||
### 13. Rollback файлов в хранилище
|
||
Упоминается в BRAINSTORM-MISC. Версионирование attachments?
|
||
|
||
### 14. Устаревшие документы
|
||
- `WS-PROTOCOL.md` — устарел (заменён BRAINSTORM-WS-V2 + BRAINSTORM-PROTOCOL)
|
||
- `AGENTS-INTEGRATION.md` — не проверен на актуальность
|
||
- `RESEARCH.md` — исследование, может быть неактуально
|
||
- `IDEAS.md` — первоначальные идеи, многое уже решено иначе
|
||
|
||
---
|
||
|
||
## Рекомендации
|
||
|
||
1. **Обновить ARCHITECTURE.md v0.4** — единый источник правды, включить все решения из брейнштормов
|
||
2. **Пометить устаревшие документы** — WS-PROTOCOL.md, AGENTS-INTEGRATION.md
|
||
3. **Решить Redis Streams** — убрать из принятых, оставить как идею
|
||
4. **Решить открытые вопросы** (лейблы, реакции) или явно пометить как "решим при реализации"
|