| Field | Value |
|---|---|
| Date | 2026-09-13 |
| Harness version | local-whisper-18 → live-voice-input-19 |
| Pre-registered | yes |
| Evidence grade | C (UI/guards), B (synthetic local ASR diagnostic), D (report) |
Observation
User: “for some reason the mic works in testing but not when you press "start talking" and speak”. Clarification: “it doesn't do anything, we need a visual indicator like the audio mapping ones codex uses to visually prompt the user that they're speaking”. The main session has no raw input-level feedback, only recognizer/provider status. Readonly settings confirm Spark and a selected microphone; no Spark runs/errors exist in the inspected default journal. A real conversation-mode Whisper start (including native speaker startup, no microphone/Spark) correctly transcribed generated dogs audio in 563 ms. This does not reproduce the user's live failure.
Hypotheses
A measured input waveform and independent capture status will distinguish model loading, actual incoming audio, silence, mute, output playback and stopped capture. It must not animate as though hearing speech when no samples arrive, nor hide uncertainty review or provider errors. No new model calls or audio persistence.
Intervention
Implemented live measured bars above conversation controls, selected input label, explicit readiness/no-signal states for both providers, and regression coverage. Spark reuses its existing PCM level samples; Realtime observes its existing stream with a local analyser, without a second capture request or recorded audio. Review additionally found that the worker's listening event erased the visible uncertainty-review instruction. A failing regression reproduced it before the guard was added; review now remains visible until the next user action.
Method
Baseline 769 tests. Test lifecycle and real synthetic Chromium capture; no real user microphone or paid inference. Preserve original failure as unconfirmed until the user tests the instrumented conversation.
Results
Three new deterministic tests pass: measured bars and lifecycle, actual session level forwarding, and persistent uncertainty instructions. Eight Spark Electron checks pass, including measured Chromium input bars in Start talking; nine Realtime checks pass, including narrow/minimum layouts; eight microphone checks remain passing. Full suite 772/772 passes; typecheck and build pass. Screenshot live-microphone.png was visually inspected. No real microphone, Spark allowance, API inference or personal settings changes were used.
Threats to validity
Input amplitude is not speech understanding. Synthetic capture does not establish the user's hardware, accent or provider access. Generated audio succeeded outside the renderer, which cannot prove the main screen is working for the user.
Conclusion
Measured feedback and the overwritten-review-message defect are verified in fixtures. The original no-response report is not yet causally explained; no claim is made that a waveform alone fixes capture or recognition. User retry now distinguishes arriving audio from transcript/review progress.
Follow-ups
User retries Start talking and reports measured input state and transcript state.
Reproduce
npm test, npm run typecheck, npm run build, npm run check:voice:spark,
npm run check:voice, npm run check:microphone. Evidence and exact prompts:
record.