# Calibration-wide audio feedback — build 4

2026-10-01. User requires audio feedback for every calibration step. Baseline 04ef085, clean tree. Build 3 spoke stage entry but repeated feedback only on center returns. Neutral, left, forward and final validation could wait without describing progress.

All seven active stages now have a waiting instruction: preparation/countdown, neutral capture, left, first return, forward, final return, and validation. While spoken guidance is enabled, the existing 100 ms host timer checks for four seconds since the last utterance completed, then speaks the current instruction. No reminder overlaps pending speech. This runs independently of sensor delivery, so a missing callback does not prevent feedback. Reminders have no stage-completion callback: capture and timeout clocks continue unchanged. Existing sequence/attempt checks reject late callbacks after cancellation or stage change. The countdown, success and failure announcements remain. Explicit manual/muted mode remains quiet.

## Evidence

- Initial regression failed to compile against the old API because no recurring feedback entry point existed (`/tmp/rideform-audio-red.log`); this is API-absence evidence, not a behavioral RED assertion.
- 34 app integration tests passed (`/tmp/rideform-audio-green.log`), including speech for all seven stages, no overlapping instruction, cancellation and explicit silent/manual mode. Existing speech-stall and return-timeout tests still pass.
- Independent Swift review found no blockers: host-time scheduling, pending-speech guards, unchanged collection/deadlines and stale completion handling inspected. No reviewer test runs claimed.
- Self-review/simplification reused the existing timer and speaker instead of introducing another timer or queue.
- The final real-timer regression and full calibration/record/save/export/cancel/relaunch UI workflow both passed (`/tmp/rideform-audio-runtime.log`, TEST SUCCEEDED). The real-timer test intentionally sets a gesture threshold above the synthetic fixture lean, then checks repeated audio while callbacks continue.

These tests verify speech dispatch and completion handling, not acoustic output on the phone. Actual audibility and audio routing remain physical checks. If the audio system itself fails, the existing explicit on-screen retry remains; software cannot promise audible output through a failed or muted output route.

Delivery: signed build and codesign verification passed; installed over the prior app without uninstalling. Device inventory confirms 0.1 (4). Receipts: `/tmp/rideform-audio-device.log`, `/tmp/rideform-audio-install.json`, `/tmp/rideform-audio-inventory.json`. Open RideForm on the phone for physical audibility validation.
