{"version":"2.1.236","anchor":"voice-input-rebuilt-as-a-controller-object","canonical_anchor":"voice-input-rebuilt-as-a-controller-object","heading":"Voice input rebuilt as a controller object","tier":"internal","area":"Elsewhere","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.236\/e\/voice-input-rebuilt-as-a-controller-object","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.236","markdown":"### Voice input rebuilt as a controller object\n\nVoice input was rebuilt as a controller object with no behaviour change.\n\n**What**\n\nVoice 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.\n\n**Details**\n\n- The circuit breaker's state was module-level globals shared process-wide; it is now held per instance.\n- The hook remains as a thin wrapper that builds the controller and subscribes to its snapshot.\n\n**Evidence**\n\n`[voice] Re-arming focus recording after silence timeout`\n\n- Area: Elsewhere\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 1\/5"}