Files
contracts/History/gemini-event-sourcing-analysis.md
T

2.2 KiB

Анализ уязвимостей Event Sourcing — Gemini Web

Дата: 2026-06-21

🚨 Критические уязвимости

1. Race Condition в seq

apply_events.cfmMAX(seq) + seq++ в цикле. При параллельных запросах — одинаковые seq. Фикс: INSERT ... SELECT COALESCE(MAX(seq),0)+1 атомарно.

2. Опустошение контракта при full_replace

apply_events.cfm — DELETE из spec_current ДО проверки что ops не пуст. LLM упала → спецификация стёрта. Фикс: валидация ops.length перед удалением.

3. Падение типизации price/qty

apply_events.cfm — LLM может вернуть строку вместо числа. cf_sql_float падает. Фикс: isNumeric() перед float.

4. N+1 запросов в UPDATE

apply_events.cfm — для каждого UPDATE отдельный SELECT. 200 позиций = 200 запросов. Фикс: один SELECT всех строк до цикла.

5. Построчный INSERT full_replace

apply_events.cfm — цикл INSERT вместо массового. Фикс: INSERT INTO ... SELECT.

6. Хэш зависит от LLM-форматирования

apply_events.cfmmd5(lower(trim(name)) || date_start). LLM написала «Услуги» vs «Услуга» → разный хэш → ADD/DELETE вместо UPDATE. Фикс: LLM сама возвращает target_hash.

7. Несовместимость типов last_event_id

apply_events.cfm — UUID пишется как cf_sql_varchar. Фикс: правильный UUID-тип.

Файлы для анализа

Файл Роль
contractor/apply_events.cfm Транзакционное применение ops
contractor/db.cfc Схема таблиц spec_events, spec_current
contractor/deploy/llm_prompt.py Промпты LLM (ВМ)
contractor/deploy/convert_server.py SSE + вызов LLM + apply_events (ВМ)
contractor/index.cfm UI, EventSource, раздел сравнения