- Typecheck: typescript 7 devDependency, `bun run typecheck`; CI gains a
`check` stage (install, typecheck, fast tests) gating image builds (D-038).
- Light theme: every colour is a token; prefers-color-scheme: light
overrides them. Inter Variable self-hosted from @fontsource-variable/inter,
kept out of Bun's CSS inlining and precached (scripts/fonts.ts, D-037).
Backend select no longer overflows on narrow phones.
- tests/live-real-model.test.ts: time budget scales with clip length and
en_alien gets a measured WER bar; it had failed since July (D-039).
- Delete the temporary isolate_wer2.ts; fix icon "not checked in" comments
and the README's model-weights location.
- Agent docs: branch naming, typecheck, CI, Bun CSS gotcha, permissions.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
startLive()'s browser-engine branch flipped liveStatus to "listening" (the
red live-dot, "Listening..." hint) the instant the mic was granted, even if
the Whisper pipeline was still loading — the user saw an active-looking
session while nothing was being transcribed yet. transcribeLiveSegment()
already correctly awaits the model-ready gate before posting a segment, so
this was purely a misleading-status bug.
Adds a "loading-model" LiveStatus between "starting" and "listening";
startLive() now waits on the same browserModelReady() gate the transcribe
path uses before claiming "listening", with race-safe cleanup if the load
fails while waiting. Server-engine live is unaffected.
Adds Decisions.md D-034; updates tests/live.md's manual verification steps.