A probe on the torch stage worker (~/dockers/torch-worker) runs beside every
transcription and decides what the recording is: solo dictation returns as
paragraphs exactly as before, several voices return speaker-labeled with
conversation: true. Nobody declares which — the caller cannot know.
Transcription and the worker each get a serial FIFO queue on their own
resource, so the probe costs a solo memo nothing and multi-user traffic
stays fair. The worker is optional and best-effort throughout: unreachable
or failing, everything still transcribes, just never labeled.
Speaker attribution is segment-granularity by maximal turn overlap —
whisper.cpp's own timestamps, no alignment stage. If boundaries prove
sloppy, wav2vec2 alignment returns as a worker endpoint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
this holds a connection open while whisper works, and nothing flows on it
meanwhile — exactly what an idle timeout kills. unset, Bun drops the
platform's connection at around 255s.
it was the last of three hops still doing it. the proxy's outbound fetch
and the platform's inbound timeout were both fixed earlier today and a
42-minute recording still died at 4m16s. whisperx went on and finished it;
the result was discarded.
with diarization on, align runs at roughly 1.5x the audio duration, so an
hour-long episode needs ninety minutes. no ceiling is both safe and high
enough, and 255 is Bun's maximum anyway — "raise it" was never available.
0 disables it.
Moves platform STT out into a plugin that owns the whole whisper.cpp contract: sidecar,
config (a JSON file under DATA_PATH/transcribe/, validated against the server before
storing), a thin proxy router, a skill so an agent knows the contract without being told,
and a script-mode file-browser task (not agentic — no model turn per audio file).
sidecar/transcribe.ts and its test moved unchanged from src/servers/api/stt/ — every
constant in it has a reason attached and none of it was touched.
The platform-side removal (routes, dead useAudioRecording path, Settings screen, locale
keys) lands in a separate, uncommitted change in the platform repo for review.
Not yet reachable from the file browser: the platform does not load tasks from a plugin's
directory yet (skills/affordances/notifications do). Ships anyway per instructions.
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043