0.134.27
Fixed (MEDIUM-аудит: 14 находок группы 4.3 Server, см. docs/audit/backend-2026-06.md §4.3)
- M-S-1
handler.ProviderHandler.cleanTestCache—lastCleanup time.Timeзаменён наlastCleanupUnixNano atomic.Int64сCompareAndSwap. Устраняет race detector warning при параллельных вызовахList(). - M-S-2
handler.ChatHandler.SendMessage—chatID = "rest:%d"расширен до"rest:%d:%s", где session ID берётся изX-Chat-Session-IDheader или генерируется черезcrypto/rand. Multi-device поддержка: 2+ устройств одного user’а больше не конфликтуют на одной сессии. - M-S-3
handler.WebhookHandler—chatID = "webhook:%d:%s"упрощён до"webhook:%d".requestIDостаётся в metadata для корреляции логов, но не попадает в chatID (потенциальная утечка в RAG-контекст). - M-S-4
handler.MemoryHandler.GetSettings—map[string]anyзаменён на типизированныйMemorySettingsstruct. JSON-имена полей сохранены (backward compatible с фронтом). Устраняет type confusion (int vs string). - M-S-5
store.SetCronJobEnabledAndReset— новый атомарный метод, объединяющийToggleCronJob + GetCronJob + UpdateCronJob(3 roundtrip) в один SQL UPDATE. Handler использует его вместо 3-шаговой операции. Устраняет lost-update window. - M-S-6
store.UpdateAgentIfNotChanged+store.ErrConcurrentModification— оптимистическая блокировка черезupdated_at. Если агент изменён междуGetAgentиUpdate, возвращается 409 Conflict. Handleragent.Updateиспользует новый метод. - M-S-7
handler.UserHandler.Update— добавлена проверкаGetUserByUsernameпередUpdateUser. При коллизии возвращается 409 Conflict (раньше — 500 Internal Server Error от UNIQUE constraint). - M-S-8
handler.AvatarHandler— добавлен whitelistallowedAvatarSizes = {32, 40, 48, 128}. Невалидный size (включая path-traversal) → default 128. Закрывает file-enumeration через?size=999. - M-S-9
store.ListAuditLogFiltered— расширен параметромaction. Handleraudit.Listвсегда вызывает его (раньше — разные методы с тихим ignore’ом фильтров). Сигнатура:ListAuditLogFiltered(ctx, action, resourceType, resourceID, limit, offset). - M-S-10
handler.KGHandler.Stats— 6_ =заменены наif err != nil { slog.Warn(...) }. Ошибки Count-функций теперь видны в логах (раньше — silent zero values). - M-S-11
handler.UpdateHandler.Check—30*1e9→30*time.Second. Добавлен"time"import. - M-S-12
handler.ConnectionHandler.extractID—r.PathValue("id")→chi.URLParam(r, "id"). Согласовано с остальными handler’ами. Такжеjson.Number().Int64()упрощён доstrconv.ParseInt. - M-S-13
handler.ChatHandler.GetAgentMessages— добавлена валидацияbeforeID > 0(раньше принимались 0 и отрицательные значения, store возвращал пустой результат). - M-S-14
handler.WebhookHandler.generateRequestID—rand.Readошибка теперь пробрасывается (раньше глоталась, requestID был всегда нулевым). Caller вHandleHookобрабатывает ошибку → 500.
Build / Tests
go test ./internal/...— все тесты проходят.go build— OK.