Voice input was rebuilt as a controller object with no behaviour change.
What's wrong with this entry?
Voice recording (hold and tap modes, focus-mode auto-record, silence and maximum-duration timers, the streaming connection, the silent-drop replay path, and the circuit breaker that backs off after early failures) moved from a React hook full of refs into a class with its dependencies passed in. Same log lines, same telemetry, no behaviour change identified.
- The circuit breaker's state was module-level globals shared process-wide; it is now held per instance.
- The hook remains as a thin wrapper that builds the controller and subscribes to its snapshot.
[voice] Re-arming focus recording after silence timeout
Strings lifted out of the shipped bundle, so the claim above can be checked against them.