From 8d1b7d887fdfe67a46b788942b8c79b9875bd434 Mon Sep 17 00:00:00 2001 From: Mathias Date: Fri, 2 Oct 2026 16:41:38 +0200 Subject: [PATCH] test: a per-engine deadline so a wedged primary reaches the fallback (red; adversarial review F4) Co-Authored-By: Claude Sonnet 5.5 --- internal/config/uploads_local_test.go | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/internal/config/uploads_local_test.go b/internal/config/uploads_local_test.go index f7adccd..af6a0ba 100644 --- a/internal/config/uploads_local_test.go +++ b/internal/config/uploads_local_test.go @@ -1,6 +1,9 @@ package config -import "testing" +import ( + "testing" + "time" +) // What counts as a LOCAL model alias, and where that is demanded (ADR-034, ADR-035 review). // A private transcript may be sent to a local model and to nothing else; the check is a @@ -72,3 +75,27 @@ func TestLoad_ALocalUploadChatModelIsAccepted(t *testing.T) { t.Errorf("UploadChatModel = %q", cfg.UploadChatModel) } } + +func TestLoad_TheEngineTimeoutDefaultsToTwentyFiveMinutesAndMustBePositive(t *testing.T) { + clearUploadEnv(t) + cfg, err := Load() + if err != nil { + t.Fatalf("Load: %v", err) + } + if cfg.TranscribeEngineTimeout != 25*time.Minute { + t.Errorf("TranscribeEngineTimeout = %v, want 25m: a 90-minute recording takes about 8 minutes on kb-whisper", cfg.TranscribeEngineTimeout) + } + + setEnv(t, map[string]string{"TAPIR_TRANSCRIBE_ENGINE_TIMEOUT": "7m"}) + cfg, err = Load() + if err != nil || cfg.TranscribeEngineTimeout != 7*time.Minute { + t.Errorf("override: %v, %v", cfg.TranscribeEngineTimeout, err) + } + + for _, bad := range []string{"0", "-1m", "soon"} { + setEnv(t, map[string]string{"TAPIR_TRANSCRIBE_ENGINE_TIMEOUT": bad}) + if _, err := Load(); err == nil { + t.Errorf("Load accepted TAPIR_TRANSCRIBE_ENGINE_TIMEOUT=%q", bad) + } + } +}