One entryMerged PR· crunch.stumason.dev· PHP
PR #47 merged: fix(pack): duration-scaled ASR timeout + surface lost tracks as warnings
additions
+65
deletions
-7
files changed
3
Job XLbb5HTm (the first Roll-button pack, 2026-07-06) completed with an empty transcript. The take had real speech — 50 audio prosody moments prove the mic track was present and readable — but the box was under load, Whisper ran slower than usual, the mic call hit the fixed CRUNCH_ASR_TIMEOUT (600s) and trackWords() swallowed the ConnectionException into []. Stage timing confirms it: transcribe ran exactly 600s + a fast sysaudio pass.
Two fixes:
- Duration-scaled timeout: the pack path now passes
max(config timeout, 2× take duration)toAsrClient::transcribe(). Whisper normally runs <0.5× realtime here, so 2× is generous headroom for a loaded box without being unbounded. The/transcribeendpoint keeps the flat config timeout. - No silent track loss: a failed transcription is logged and lands in the result as
warnings: ["mic.m4a: transcription failed — ..."]— downstream (Roll UI, edator) can tell a lost track from a silent take.
Test runs the real ProcessPack::handle() on the repo fixture with ASR faked to 500 and asserts the warning surfaces. Full suite green (149).
🤖 Generated with Claude Code