diff --git a/docs/architecture_weak_spots.md b/docs/architecture_weak_spots.md index 1c847c0..3cbd020 100644 --- a/docs/architecture_weak_spots.md +++ b/docs/architecture_weak_spots.md @@ -143,6 +143,13 @@ **Почему блокер:** При частых запросах — лишний дисковый I/O. Если MCP-сервер упал, каждый запрос порождает две попытки подключения без задержки. **Направление:** Закэшировать конфигурацию в `McpManager`. Добавить exponential backoff на reconnect в `McpClient`. +**Решение 2026-05-18:** +- `McpManager` теперь хранит `_configs: dict[str, McpServerConfig]`, заполняемый при `load_all()` +- `resolve_group()` и `get_instructions()` читают из кэша; fallback к диску если кэш пуст (тесты / первый вызов без `load_all()`) +- `reload_all()` сбрасывает кэш (`self._configs = None`) и перечитывает конфиг +- `McpClient` получил exponential backoff: base 1s, max 30s, ±20% jitter +- `_ensure_connected()` блокирует reconnect в пределах backoff-окна; backoff сбрасывается при успешном подключении, удваивается при неудаче + --- ## Прогресс @@ -156,4 +163,4 @@ - [x] 7. DRY-нарушение `tool_executor.py` — unified _execute_one, three methods delegate - [ ] 8. ContextVar как скрытые зависимости - [ ] 9. Сессионное состояние в памяти -- [ ] 10. MCP кэширование и backoff +- [x] 10. MCP кэширование и backoff — cached configs + exponential reconnect backoff