diff --git a/docs/architecture_weak_spots.md b/docs/architecture_weak_spots.md index a1f52b8..5011c3f 100644 --- a/docs/architecture_weak_spots.md +++ b/docs/architecture_weak_spots.md @@ -87,6 +87,16 @@ **Почему блокер:** Циклические зависимости разрешаются через "патч после создания". Добавление нового инструмента требует редактирования фабрики. **Направление:** Внедрить двухфазную инициализацию: `create()` → `wire()`. +**Решение 2026-05-18:** +- Переупорядочена `build_default_registries`: сначала создаются `backends`, `profiles`, `cp_registry` (нет зависимостей на tools), затем создаются ВСЕ инструменты с полными зависимостями +- Все инструменты получают полные зависимости в конструкторе, без `None` и последующего патчинга: + `ListToolsTool(registry=tools, profile_registry=profiles, mcp_manager=mcp_manager)` + `SpawnAgentTool(backend_registry=backends, ...)` + `ReloadToolsTool(registry=tools, cp_registry=cp_registry, mcp_manager=mcp_manager)` +- Удалены строки патчинга `_profile_registry = profiles`, `_backend_registry = backends`, `_cp_registry = cp_registry` +- Добавлен параметр `mcp_manager` в `build_default_registries` (раньше передавался через патч в `create_container()`) +- Новый инструмент с кросс-зависимостью добавляется в список `builtins` — никакого патчинга не требуется + --- ## 7. DRY-нарушение в `tool_executor.py` @@ -136,7 +146,7 @@ - [x] 3. WebSocket handler содержит бизнес-логику — extracted AgentSessionOrchestrator - [x] 4. Mutable global `settings` — frozen Settings + mode="before" validator - [x] 5. Дублирование пулов PostgreSQL — unified Database service, pool passed to constructors -- [ ] 6. Кросс-реестровый патчинг +- [x] 6. Кросс-реестровый патчинг — proper creation order, no post-hoc patching - [ ] 7. DRY-нарушение `tool_executor.py` - [ ] 8. ContextVar как скрытые зависимости - [ ] 9. Сессионное состояние в памяти