0.134.29
Fixed (DEFERRED-задачи §3.1 Agent/Runtime, см. docs/audit/backend-2026-06.md §3.1)
- H-A-2
SessionActor.channel/chatID/agentChatID— добавленchanMu sync.RWMutexи helperChannelInfo()/setChannelInfo(). Все чтения из subagent-горутин теперь черезChannelInfo()(RLock). Закрывает race condition при одновременной записи вhandleInboundи чтении вrunChild. - H-A-10
SubagentManager.SpawnWithConfig—context.WithTimeout(context.Background(), ...)заменён наcontext.WithTimeout(ctx, ...)с использованием переданного parent context. Теперь отмена parent-контекста (supervisor restart, /stop) корректно распространяется на subagent. - H-A-6
SessionActor.run— добавленbgWG sync.WaitGroup. Фоновые горутиныmaybeRealtimeExtractиpruneToolResultsрегистрируются черезbgWG.Add(1)/bgWG.Done(). Actorrun()ждёт завершения черезbgWG.Wait()перед отправкойactorDone. Устраняет goroutine leak при shutdown. - H-A-7
SessionActor.pruneToolResults— добавлен debounce (300s) черезlastPruneAt atomic.Int64. Повторный prune в течение 5 минут пропускается. Снижает нагрузку на БД при частых сообщениях. - H-A-8
SessionActor.handleInbound— убран ненадёжный content-match при определенииlastOldMsgID. Заменён на индексное сопоставление: подсчёт видимых сообщений вdbMessagesдоlen(oldZone). Корректно работает при дублирующихся content. - H-A-4
SessionActor.activeSubagents—atomic.AddInt32/LoadInt32/StoreInt32заменены на обычныйint32подpendingMu. СостояниеactiveSubagentsтеперь консистентно сpendingInjectionsвinjectionCallback.
Documented (ложные тревоги аудита §3.1)
- H-A-1
streamHook.lastIterMsgID/lastIterTitle/lastIterEntries— все доступы происходят вAfterIteration, который вызывается последовательно в actor-горутине.OnSubagentCompletedчитает толькоspawnTrack(подiterMu). Race condition не существует. - H-A-3
FlushQueue— код уже использует корректный drain-паттерн (for { select { case <-a.ch: default: return } }). Аудит был неверным. - H-A-5
cancel()/busyвrun()— синхронизация черезa.mu(cancel func) иpendingCond(busy flag) корректна. Добавлен поясняющий комментарий.
Build / Tests
go test ./internal/agent/... -race— все тесты проходят.go build ./...— OK.