7.2 KiB
Ответ Соннета: code review pipeline сверки
Дата получения: 2026-08-27
Источник: пользовательский attachment Pasted text #1
Статус: внешний отчёт, не подтверждённый текущим агентом
Область
Соннет анализировал pipeline собственно сверки: process.py, pipeline_bp.py, compare.js, app.js, llm.py, llm_client.py, llm_prompt.py, spec_events.py, spec_current.py, supplements.py, connection.py, metrics.py и связанные тесты. Upload, ZIP, парсинг, классификация и grouping заявлены как исключённые из scope.
Заявленные findings
BLOCKER
- B-1: backend выдаёт событие
complete, frontend обрабатывает толькоdone; успешная сверка отображается как ошибка соединения. - B-2:
apply_ops()якобы не имеет единой транзакции; при сбое возможен частичный commit и недостоверная summary. - B-3: UPDATE поля
nameякобы не пересчитываетname_hash, что может привести к дублированию строки при следующем документе.
HIGH
- H-1: ветка неизвестного action якобы не увеличивает
seq. - H-2: summary
apply_ops()якобы не содержитunresolved, поэтому счётчик недоступен UI. - H-3: результат
check_arithmetic()игнорируется; арифметическая ошибка не попадает в SSE/UI. - H-4:
full_replaceс пустымopsякобы сначала очищает current state и затем успешно применяет ноль операций.
MEDIUM
- M-1: pipeline безусловно завершает работу событием
complete, даже после ошибок всех документов. - M-2: отсутствует блокировка двух одновременных сравнений одного
contract_id. - M-3: отсутствует клиентский timeout SSE.
- M-4:
last_event_idвspec_currentякобы никогда не заполняется, поэтому cleanup supplement не работает.
LOW
- L-1: сортировка по
doc_dateиcreated_atвprocess.pyиспользует поля, которые якобы не возвращаютсяsupplements.list_by_contract(). - L-2: пустой
current_specне различает штатный первый документ и состояние после ошибки.
Ответы Соннета на обязательные вопросы
- Допник без базового договора не фильтруется; при пустом current state получает extract prompt и может быть ошибочно обработан как базовый документ.
run_pipeline()считает сверку успешной при наличии хотя бы одного supplement и безусловно выдаёт финальное событие.- Да, финальное событие может прийти после
extract_error, включая случай, когда ошиблись все документы. completeпротивdoneобъявлено реальным frontend/backend багом.- Пустой
full_replaceочищает спецификацию; это признано опасным. - Частичный
apply_ops()якобы остаётся в БД, но UI получаетextract_errorи неверную нулевую summary. - Единой транзакции current state и event history, по мнению Соннета, нет.
- Повторный запуск сначала очищает состояние; последовательный запуск может дать чистый результат, конкурентный опасен.
- Конкурентные pipeline для одного договора создают race condition и риск коллизий
seq. - Пустой корректный ответ и повреждённый/неполный ответ не различаются.
UNRESOLVEDсохраняется вspec_events, но не отображается пользователю и не включается в summary.- Арифметическая ошибка может остаться в БД, а pipeline всё равно завершиться успешно.
- Нужны тесты для финального события, rollback, смены name, пустого full_replace, unknown action, unresolved summary, arithmetic warning и concurrency.
- Главные риски: частичные commits, дублирование после смены name, уничтожение состояния при пустом full_replace, ложная ошибка UI и отсутствие защиты от concurrency.
Предложенный Соннетом порядок исправлений
complete->done.- Пересчёт
name_hashпри измененииname/date_start. - Запрет пустого
full_replaceдо очистки state. - Единая транзакция для
apply_ops(). - Инкремент
seqдля неизвестного action. - Счётчик
unresolvedиtotal_unresolved. - SSE warning для arithmetic mismatch.
had_errorsв финальном событии.- Заполнение
last_event_id.
Что не является подтверждённым фактом
Этот файл фиксирует именно ответ Соннета. Ни один finding здесь не следует считать основанием для изменения кода до повторной проверки:
- по исходникам;
- по фактической схеме БД и реализации connection layer;
- по тестам;
- по реальному frontend/backend event contract;
- по воспроизводимому сценарию.
Следующий этап: критическая повторная проверка каждого finding и уточнение вопросов Соннету только там, где в его отчёте останется неразрешённое противоречие или отсутствует доказательство.
Уточнение пользователя
Соннет используется только для анализа. Он не должен писать код, патчи или diff, изменять файлы либо выполнять команды: это ограничение введено для контроля стоимости. Реализацию и проверки выполняем отдельно после критической перепроверки findings.