* feat(recognition): buffer audio during model reload * fix(recognition): recover buffered reload failures * test(recognition): cover buffered reload edge cases * fix(recognition): narrow buffered reload errors * fix(settings): wait for IDLE before restoring Test Dictation callbacks Buffered reload's stop_recognition() returns while PROCESSING. Test Dictation must keep its text callbacks until recognition reaches IDLE so the test utterance cannot inject into the focused app. * style: apply Black formatting to PR 851 files * fix(settings): cancel buffered reload before Test Dictation timeout restore On the ~3min idle-wait timeout, do not restore live injector callbacks while a buffered reload worker may still deliver text. Cancel via _cancel_reload_recording off the GTK thread, then restore; if cancel is unavailable or fails, leave test callbacks installed and show an error. Add return/param annotations and regression coverage. * fix(settings): keep Test Dictation waiting if buffered cancel fails After the idle-wait timeout, if cancel is unavailable or raises, keep polling with test callbacks and _test_active instead of marking the test done. Ending early left the test callback as the only text destination, so later normal dictation could land in the hidden test buffer. Restore live injectors only once recognition reaches IDLE. * fix(settings): reset Test Dictation timeout-cancel flag per session Clear _test_timeout_cancel_attempted when a test starts, when entering the buffered idle-wait, and when restoring UI so a later Test Dictation can still cancel after timeout. Narrow the cancel-worker except clause to AttributeError/OSError/RuntimeError/TypeError so unrelated defects are not treated as ordinary cancel failure. * fix(recognition): signal capture completion when buffered capture dies A dead microphone during a buffered model reload left should_record=false with no stop_recognition handoff, so the reload worker blocked forever on _capture_finished.wait(). Signal the event from the audio thread's failure teardown paths instead. Refs VocaHQ/vocalinux#851 --------- Co-authored-by: Jatin K Malik <jatinkrmalik@gmail.com>
Documentation
User and maintainer documentation for Vocalinux.
| Document | Audience | Description |
|---|---|---|
| INSTALL.md | Users | Recommended install, AppImage, AUR, Flatpak, Snap, CLI |
| INSTALL_MANUAL.md | Users | Manual install, system packages, PyPI/pipx |
| TROUBLESHOOTING.md | Users | Common install and runtime failures |
| USER_GUIDE.md | Users | Dictation, engines, models, shortcuts, tips |
| UPDATE.md | Users | How to upgrade; release notes by version |
| DISTRO_COMPATIBILITY.md | Users | Distro matrix, session caveats |
| HTTP_REMOTE.md | Power users | Remote HTTP transcription |
| AUR.md | Arch users / maintainers | AUR packages and publish secrets |
| RELEASE_PROCESS.md | Maintainers | Version bump, checklist, tagging |
Project root:
| Document | Description |
|---|---|
| README.md | Project overview and quick start |
| CHANGELOG.md | Release history pointers |
| SUPPORT.md | Where to get help |
| CONTRIBUTING.md | Development setup and pull requests |
| SECURITY.md | Vulnerability reporting and supported versions |
| CODE_OF_CONDUCT.md | Community standards |
Website product and design notes live under web/ (PRODUCT.md, DESIGN.md, README.md). Flatpak packaging: packaging/flatpak/README.md.
Website: vocalinux.com