0.134.82

Fixed

  • Defer-порядок в timeout/turn_end: timeout-defer (LIFO) выполнялся после turn_end-defer, что вызывало дублирующий _turn_end. Заменено на прямую проверку turnCtx.Err() внутри turn_end-defer.
  • Circuit breaker застревал навсегда: isOpen() не сбрасывал openUntil при истечении cooldown — breaker никогда не self-heal’ился. Добавлен auto-clear.
  • Миграция 078 ломала FK: RENAME→CREATE→DROP паттерн ломал FK в message_reactions, message_favorites, fact_sources. Добавлен PRAGMA foreign_keys=OFF.
  • isRequestLevelError через substring: заменён на errors.Is/errors.As против net.Error, context.DeadlineExceeded, net.OpError.
  • PublishOutboundCtx невидимый дроп: не логировал и возвращал ctx.Err() вместо errBusFull. Добавлен slog + fmt.Errorf("%w: %w", errBusFull, ctx.Err()).
  • Batch failure clamping: один transient blip на большом батче не должен перепрыгивать threshold.