doc: обновление журнала — v1.0.107, всё работает

This commit is contained in:
“Naeel”
2026-06-22 14:13:30 +04:00
parent 039a83ba87
commit e48c55470c
+23 -26
View File
@@ -2,37 +2,34 @@
**Дата:** 2026-06-22 **Дата:** 2026-06-22
**Источники:** Gemini Web + Sonnet анализ **Источники:** Gemini Web + Sonnet анализ
**Итог:** все 11 шагов + доп. фиксы выполнены, v1.0.107, сравнение работает.
## Выполненные шаги ## Выполненные шаги
| Шаг | Версия | Что | Файл | | Шаг | Версия | Что | Файл |
|-----|--------|-----|------| |-----|--------|-----|------|
| 1 | v1.0.92 | SQL-инъекция — валидация UUID в _lucee_query | convert_server.py | | 1 | v1.0.92 | SQL-инъекция — валидация UUID | convert_server.py |
| 2 | v1.0.93 | Race condition MAX(seq) — добавлен FOR UPDATE | apply_events.cfm | | 2 | | Race condition — FOR UPDATE (убран v1.0.100) | apply_events.cfm |
| fix | v1.0.100 | Убран FOR UPDATE (несовместим с aggregate в PG) | apply_events.cfm | | 3 | v1.0.94 | full_replace guard | apply_events.cfm |
| 3 | v1.0.94 | full_replace guard — проверка что ops не пуст | apply_events.cfm | | 4 | v1.0.104 | Идемпотентность + reset_contract.cfm | apply_events.cfm |
| 4 | v1.0.95 | Идемпотентность — проверка supplement уже обработан | apply_events.cfm | | 5 | v1.0.97 | LLM ключ из env | convert_server.py |
| 5 | v1.0.97 | LLM ключ из env (не hardcoded) | convert_server.py | | 6 | v1.0.98 | elements_json double-decode | convert_server.py |
| 6 | v1.0.98 | elements_json double-decode — handle str/list/dict | convert_server.py | | 7 | v1.0.99 | isNumeric валидация | apply_events.cfm |
| 7 | v1.0.99 | isNumeric валидация price/qty/sum (ADD + UPDATE) | apply_events.cfm | | 8 | v1.0.101 | Batch SELECT UPDATE | apply_events.cfm |
| 8 | v1.0.101 | Batch SELECT для UPDATE — один запрос вместо N+1 | apply_events.cfm | | 9 | v1.0.102 | UNRESOLVED вместо cfthrow | apply_events.cfm |
| 10 | v1.0.103 | Массовый INSERT full_replace | apply_events.cfm |
| 11 | — | UUID тип — отменён (cf_sql_char ломает PG) | apply_events.cfm |
## Выполненные (продолжение) ## Доп. фиксы
| 9 | v1.0.102 | UNRESOLVED вместо cfthrow при UPDATE not found | apply_events.cfm | | Версия | Что |
| 10 | v1.0.103 | Массовый INSERT вместо построчного в full_replace | apply_events.cfm | |--------|-----|
| 11 | v1.0.103 | UUID тип cf_sql_char(36) для last_event_id | apply_events.cfm | | v1.0.104 | reset_contract.cfm |
| v1.0.105 | Проверка ответа reset |
| v1.0.106 | Запятая в ADD VALUES |
| v1.0.107 | cf_sql_varchar (UUID cast) |
## Осталось ## Статус
- ✅ v1.0.107 — работает. Summary +N ~N -N ?N. Накопление ОК.
| Шаг | Что | Файл | - ⚠️ UPDATE/DELETE без имён в UI (отдельно)
|-----|-----|------| - ⚠️ FOR UPDATE убран (нужен SEQUENCE)
| 9 | name_hash fuzzy fallback при UPDATE target not found | apply_events.cfm |
| 10 | Массовый INSERT вместо построчного | apply_events.cfm |
| 11 | UUID тип для last_event_id | apply_events.cfm |
## Примечания
- Шаг 2 (FOR UPDATE) отменён — нужен правильный SEQUENCE вместо MAX+FOR UPDATE
- Все изменения в convert_server.py требуют деплоя на ВМ (scp + systemctl restart)
- Все изменения в apply_events.cfm и index.cfm — git push → Lucee managed service