35 lines
1.7 KiB
Markdown
35 lines
1.7 KiB
Markdown
# 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.
|