diff --git a/pkg/config/config.go b/pkg/config/config.go index e22a937..bb9d2ee 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -730,11 +730,14 @@ func (c *Config) WatchAndApply(ctx context.Context) { // Stop the watcher on context cancel — we set a flag that the // OnConfigChange handler checks, avoiding the race with viper's // internal state that would occur if we called OnConfigChange again. + // We deliberately do NOT log here: viper's internal watcher goroutine + // has no public Stop, so it can outlive ctx, and a zerolog call here + // would race with the next test's LoadConfig → SetupLogging → + // zerolog.SetGlobalLevel under -race (observed 2026-05-05). go func() { <-ctx.Done() c.reloadMu.Lock() c.watcherStopped = true c.reloadMu.Unlock() - log.Info().Msg("Config hot-reload watcher stopped") }() }