Severity
Medium — a partially-downloaded/corrupt model passes the readiness check.
Location
electron/narration/whisper.ts — model-cache readiness is determined by directory/file existence only, with no completeness verification.
Mechanism
If a model download is interrupted (network drop, crash, disk full), the cache directory exists but is incomplete. An existence-only check reports "ready", so transcription proceeds against a truncated/corrupt model.
Impact
Confusing runtime failures or silently degraded transcription that looks like a model/quality problem rather than a bad cache.
Suggested fix
Verify completeness before marking ready — e.g. check the expected file set and sizes, and ideally a manifest hash (see the related model-pinning low finding) — and re-download if incomplete.
Regression test to add (npm test)
Extend electron/narration/whisper.test.ts: point at a partial model dir (missing/short files) and assert readiness returns false / triggers re-fetch. Deterministic; not an evals/ concern.
Severity
Medium — a partially-downloaded/corrupt model passes the readiness check.
Location
electron/narration/whisper.ts— model-cache readiness is determined by directory/file existence only, with no completeness verification.Mechanism
If a model download is interrupted (network drop, crash, disk full), the cache directory exists but is incomplete. An existence-only check reports "ready", so transcription proceeds against a truncated/corrupt model.
Impact
Confusing runtime failures or silently degraded transcription that looks like a model/quality problem rather than a bad cache.
Suggested fix
Verify completeness before marking ready — e.g. check the expected file set and sizes, and ideally a manifest hash (see the related model-pinning low finding) — and re-download if incomplete.
Regression test to add (
npm test)Extend
electron/narration/whisper.test.ts: point at a partial model dir (missing/short files) and assert readiness returns false / triggers re-fetch. Deterministic; not anevals/concern.