# full_replace: фикс дублирования строк спецификации (v2.0.16) ## Проблема `mode="full_replace"` (LLM возвращает полную новую редакцию — все ADD) применялся поверх существующей `spec_current` без очистки. `reset(contract_id)` срабатывает только один раз на старте пайплайна, а full_replace происходит ПОСЛЕ — строки новой редакции плюсовались к старым → дубли в `spec_current`. ## Фикс 1. `site/db/spec_events.py` — добавлена `clear_current(contract_id)`: очищает ТОЛЬКО `spec_current` (история `spec_events` сохраняется). 2. `site/services/process.py` — перед `apply_ops()`: ```python if mode == "full_replace": spec_events.clear_current(contract_id) ``` ## Почему не `reset()` `reset()` чистит и `spec_events`, и `spec_current` — потеряли бы историю операций текущей редакции. Для full_replace нужна только очистка текущего состояния, журнал ADDs должен остаться. ## Сопутствующее - Скорректировано архитектурное описание → `/home/naeel/nubes/contracts/DOC/architecture-contracts-flask.md`. Исправлена неточность: ZIP раскрывается **на клиенте** (`expandZipClient` → `window.listZipFiles`), а не серверным `/unzip-upload` (legacy). - Версия: 2.0.15 → 2.0.16.