Merge the delivery and loop sweep (#230)

Almost nothing to do, which is the finding. Both packages already name every
literal beside its reason, every comment still describes its code, and the
three reaches share one dispatcher that owns retry, outbox bookkeeping and
error classification. The phraser's one-transport-logs-and-one-does-not shape
was looked for here and is absent.

One dead import removed. voicesink held internal/audio alive with a placeholder
var whose comment claimed a method call needed it. Calling a method on a value
never requires importing the package that defines the type.

Left alone: loop.Gate and explain.ExplainGate are two hand-maintained copies of
the same restraint checks, and ExplainGate says outright that it mirrors Gate.
Unifying them is a refactor of the trace path, not a sweep.

(V-581)
This commit is contained in:
2026-08-06 02:21:12 +04:00
-7
View File
@@ -34,7 +34,6 @@ import (
"log"
"time"
"github.com/kami/maven/internal/audio"
"github.com/kami/maven/internal/delivery"
"github.com/kami/maven/internal/tts"
"github.com/kami/maven/internal/ttsnorm"
@@ -102,9 +101,3 @@ func (s *Sink) Send(ctx context.Context, send delivery.Sendable) error {
}
return nil
}
// keep audio import honest (used in Send's audio.PCM check indirect via
// Format.IsValid which is a method on the imported audio.Format). The alias
// below keeps the import alive even if a future refactor moves the only
// reference. Today, the synthesizer's audio.Audio directly flows through.
var _ = audio.PCM16kMono