0.134.36

Fixed (MEDIUM §4.1 Agent — 23 задач, см. docs/audit/backend-2026-06.md §4.1)

  • M-A-1 Убран лишний GetRecentMessages после сохранения ответа ask_user — аппенд вместо re-fetch.
  • M-A-3 repairToolPairs O(N²) → O(N) через map[string]bool для tool result ID.
  • M-A-5 enforceMemoryContextBudget — бюджет divisor вынесен в именованную константу.
  • M-A-6 enforceMemoryContextBudgetmemory_context внутри tool-pair не удаляется.
  • M-A-8 DeleteSummaryBefore ошибка логируется через slog.Error вместо _ =.
  • M-A-9 SaveActorCheckpoint — retry (1 попытка, 100ms backoff) при ошибке.
  • M-A-11 streamHook.publish — сохраняет caller’s Channel/ChatID если они непустые.
  • M-A-14 loadIdleTimeout использует actorCtx вместо context.Background().
  • M-A-16 AfterIteration/OnSubagentCompleted — DB-операции через timeout context (10s).
  • M-A-17 maybeRealtimeExtractGetAgent через timeout context (5s).
  • M-A-18 handleCompact/handleClear — tracked goroutines через runWG + runCtx-derived context.
  • M-A-20 AsyncAddMessage возвращает ошибку при drop (channel full) вместо silent discard.
  • M-A-21 runStreamstreamIdleTimeout читается один раз перед циклом.
  • M-A-22 runStream — при ctx.Done()/idle timeout drain-горутина потребляет остаток канала.
  • M-A-23 Concurrent tool batch — batchCtx с batchCancel() при первой ошибке.

Ранее исправлены (предыдущие PR)

  • M-A-2 json.Unmarshal tool_calls — ошибка логируется через slog.Warn.
  • M-A-7 resolveSummary при provider == nilslog.Warn.
  • M-A-10 pruneToolResults — debounce (300s) через lastPruneAt atomic.Int64.
  • M-A-12 spawnTrack — все доступы под iterMu.
  • M-A-13 ListActorPendingMsg — ошибка проверяется и логируется.
  • M-A-15 pruneToolResults — собственный timeout context (10s).
  • M-A-19 Stop() — вызывает runCancel() и отправляет msgShutdown акторам.