0.134.81
Fixed
- Race condition в drain-горутине стриминга (
runner.go): горутинаfor range chстартовала немедленно и конкурировала с основнымfor-selectза события из канала — события терялись. Заменено наdrain()функцию, вызываемую только на abort-путях (idle timeout, ctx.Done). - Роль
interruptedотсутствовала в CHECK constraint БД: INSERT сrole='interrupted'молча падал на SQLite и PostgreSQL. Миграция 078 добавляет'interrupted'в constraint обеих БД. - Двойная публикация
_turn_endпри таймауте агента: timeout-defer не выставлялturnEnded = true, второй defer отправлял дублирующий_turn_end. Добавлен флагtimeoutFired. - Публикация timeout-уведомления в отменённый контекст:
PublishOutboundвызывался послеDeadlineExceeded— сообщение не доходило. ДобавленPublishOutboundCtxсcontext.Background()+ 5s timeout. - Autocompact/history/LLM-фильтр не пропускали
interrupted:autocompact.go,actor.go:492иfindLastTopicBreakпроверялиtopic_break, но неinterrupted— разделитель попадал в LLM-контекст. - Turn timeout покрывал всю
handleInbound: setup-работа (GetRecentMessages, summary LLM) потребляла бюджет агента. Timeout теперь scoped — применяется только к вызовамrunner.Run/RunPlanExecute. - Reranker circuit breaker не работал при per-call инстансах: breaker state жил в экземпляре
OllamaReranker, который создавался заново при каждом запросе. State вынесен в package-levelsync.Map(ключ:baseURL|model). - Reranker breaker триггерился от per-document ошибок: одна malformed ошибка на документе засчитывалась как failure. Добавлен
isRequestLevelError— breaker реагирует только на connection-level ошибки (connection refused, timeout, no such host). isOpen()мутировал состояние breaker: side-effect (сбросopenUntil) при чтении. Разделено на чистый read +recordSuccessдля reset.- Нумерованные переменные
updCtx2/updCancel2вreindex.go: заменены на идиоматичныйdefer cancel()паттерн + комментарий к использованиюcontext.Background(). - Дублирование верстки divider в
MessageList.svelte: блокиtopic_breakиinterruptedобъединены в один с{@const}. - Hard-coded
statement_timeout=30000в PostgreSQL pool: вынесен вTAIGACLAW_PG_STATEMENT_TIMEOUTenv var (default 300000ms = 5 мин).
Added
- Тесты circuit breaker: open/close, cooldown, concurrent access, shared state, batch failure.