0.134.25
Fixed (MEDIUM-аудит: 6 находок группы 4.5 Store, см. docs/audit/backend-2026-06.md §4.5)
- M-ST-1
store.SQLiteStore.RemoveFactIDFromKGSourceIDs— вся операция (SELECT + UPDATE/DELETE) обёрнута вBeginTx/Commit. Ранее ошибкиUPDATE/DELETEглотались, оставляя БД в рассогласованном состоянии при частичном отказе. Такжеrows.Scanтеперь логирует ошибку черезslog.Warnвместо молчаливогоcontinue. - M-ST-2
store.scanRowWarn— новый helper дляrows.Scanсslog.Warnпри ошибке. Применён кscanEntities(самой критичной функции — KG-сущности). Остальные ~45 мест вsqlite.go/postgres.goостаются сif err := rows.Scan(...); err != nil { continue }— это by design (resilience: corrupt row не должна ломать весь запрос, контракт задокументирован в комментарии функции). - M-ST-3
store.ApplyTimeDecay— добавлена поддержка нескольких форматов timestamp (RFC3339Nano, RFC3339, SQLite2006-01-02 15:04:05, и вариации с микросекундами). Раньше парсил только SQLite-формат — на PG-данных всегда возвращал исходные score (continueпри parse fail). - M-ST-4
store.DualStore— параметрsessionIDпереименован вagentIDв 6 функциях (GetMessages,GetRecentMessages,GetLatestSummary,DeleteSummaryBefore,DeleteMessagesBefore,DeleteMessagesBetween). Реально это всегда былagentID(подтверждено сигнатурамиSQLiteStore/PostgresStore), старое имя сбивало с толку. - M-ST-5
store.SQLiteStore.AddFactSources— вместо N отдельныхINSERT OR IGNOREв цикле теперь один batch-INSERT с placeholder’ами. Для батчей >5000 записей — chunking (3 чанка по 5000 для 12k записей). Существенный прирост на большихmessageIDs. - M-ST-6
store.SQLiteStore.EnqueueKGFact— добавлен doc-комментарий о требовании SQLite >= 3.24 дляON CONFLICT ... DO UPDATE SET ... WHERE ...(выпущен июнь 2018, поддерживается всеми актуальными macOS/Linux/Windows). Fallback не предусмотрен — на целевых платформах версия всегда >= 3.24.
Tests
- Новые:
internal/store/remove_factid_test.go::TestSQLite_RemoveFactIDFromKGSourceIDs_Transaction(M-ST-1),internal/store/time_decay_test.go::TestApplyTimeDecay_PostgresFormats(M-ST-3, проверяет SQLite+RFC3339 форматы),internal/store/add_fact_sources_test.go::TestSQLite_AddFactSources_BatchInsert+TestSQLite_AddFactSources_EmptyAndLarge(M-ST-5, проверяет батч + chunking 12k записей).
Build / Tests
go test ./internal/...— все тесты проходят (store, memory, agent, server/handler и т.д.).go build— OK.