diff --git a/docs/architecture_weak_spots.md b/docs/architecture_weak_spots.md index 58ec77b..32d01a1 100644 --- a/docs/architecture_weak_spots.md +++ b/docs/architecture_weak_spots.md @@ -54,6 +54,12 @@ **Почему блокер:** Любой модуль может изменить `settings.ollama_num_ctx` во время выполнения, что приведёт к race condition при параллельных запросах. **Направление:** Сделать `Settings` immutable (`frozen=True`). Передавать экземпляр в конструкторы вместо глобального импорта. +**Решение 2026-05-18:** +- `frozen=True` добавлено в `SettingsConfigDict` в `navi/config.py` +- `model_validator(mode="after")` конвертирован в `mode="before"` для загрузки `navi_persona_file`, т.к. frozen-инстанс нельзя мутировать после создания +- Все тесты, которые мутировали поля `settings.field = value`, переведены на замену целого объекта: `monkeypatch.setattr(module, "settings", Settings(...))` +- Для модулей, вызывающих `session_dir` / `ensure_session_dir` из `navi.session_files`, настройки заменяются согласованно в обоих модулях + --- ## 5. Дублирование пулов PostgreSQL @@ -121,7 +127,7 @@ - [x] 1. God object `agent.py` — Step 1 complete: `ContextCompressor` extracted - [x] 2. Глобальные синглтоны `deps.py` — replaced with AppContainer + lifespan - [x] 3. WebSocket handler содержит бизнес-логику — extracted AgentSessionOrchestrator -- [ ] 4. Mutable global `settings` +- [x] 4. Mutable global `settings` — frozen Settings + mode="before" validator - [ ] 5. Дублирование пулов PostgreSQL - [ ] 6. Кросс-реестровый патчинг - [ ] 7. DRY-нарушение `tool_executor.py`