diff --git a/docs/architecture_weak_spots.md b/docs/architecture_weak_spots.md index 5011c3f..1c847c0 100644 --- a/docs/architecture_weak_spots.md +++ b/docs/architecture_weak_spots.md @@ -107,6 +107,12 @@ **Почему блокер:** Любой баг в middleware или image-обработке нужно править в трёх местах. **Направление:** Единый метод `_execute_one(tc, tool_map) -> (event, msg, image_msg)`, используемый всеми тремя путями. +**Решение 2026-05-18:** +- Введён единый `_execute_one(tc, tool_map)` — единственный канонический путь resolve → middleware → execute → image extraction → build message +- `_run_single_tool`, `_execute_tool_calls`, `_execute_tool_calls_streaming` делегируют `_execute_one` +- Публичные сигнатуры не изменились — никакие вызывающие стороны не пострадали +- Удалено ~77 строк дублирования, добавлено ~21 строк единой логики + --- ## 8. Скрытые глобальные зависимости через ContextVar @@ -147,7 +153,7 @@ - [x] 4. Mutable global `settings` — frozen Settings + mode="before" validator - [x] 5. Дублирование пулов PostgreSQL — unified Database service, pool passed to constructors - [x] 6. Кросс-реестровый патчинг — proper creation order, no post-hoc patching -- [ ] 7. DRY-нарушение `tool_executor.py` +- [x] 7. DRY-нарушение `tool_executor.py` — unified _execute_one, three methods delegate - [ ] 8. ContextVar как скрытые зависимости - [ ] 9. Сессионное состояние в памяти - [ ] 10. MCP кэширование и backoff