* test(recognition): cover _perform_recognition and _enqueue_audio_segment
The previous commit demoted logger.info('DEBUG: ...') to logger.debug(...)
and removed a dead loop body in _perform_recognition. Codecov flagged 12
uncovered lines — all inside _perform_recognition and _enqueue_audio_segment,
which existing tests always mocked out.
Add direct (non-mocked) tests for both methods:
- _enqueue_audio_segment:
* empty buffer → early return
* normal buffer → enqueues correctly
* full queue → drops oldest and retries
- _perform_recognition:
* processes a segment then exits on None signal
* drains remaining items on None signal
* exits cleanly when idle with empty queue
* continues looping on queue timeout while recording
These tests exercise the actual threading/queue logic and cover the
logger.debug / logger.warning calls as a side effect.
* test(conftest): suppress real desktop notifications during test runs
_show_notification shells out to notify-send, which pops up real system
notifications when tests exercise the model-not-ready path. Add an autouse
fixture that patches _show_notification for all tests EXCEPT those whose
name contains 'show_notification' (so direct tests of the helper still
verify subprocess.Popen calls).
* chore(gitignore): ignore .sisyphus directory
.opentree/ contains git worktrees created by the opentree CLI tool
(https://github.com/axelgar/opentree). These are local developer
artifacts and should not be tracked.
opentree.toml is the per-repo opentree config - also local/personal,
not something contributors need to share.
Remove MagicMock/ directory that was accidentally committed during
previous PR. This was a test artifact that shouldn't be in the repo.
Also add MagicMock/ to .gitignore to prevent future occurrences.
* fix: Phase 1 - Critical cross-distribution compatibility fixes
This commit implements the first phase of cross-distribution compatibility
improvements for Vocalinux, addressing the most critical issues that prevent
the application from working on non-Ubuntu distributions.
## Changes
### install.sh
- Add detect_typelib_path() function that dynamically discovers GI_TYPELIB_PATH
using pkg-config with fallback to distribution-specific paths
- Update wrapper scripts (vocalinux, vocalinux-gui) to use detected path
- Support for: x86_64, arm64, armhf, riscv64, powerpc64le, s390x architectures
- Specific paths for: Ubuntu multiarch, Fedora/RHEL (lib64), Arch (lib)
### src/vocalinux/speech_recognition/recognition_manager.py
- Add _get_system_model_paths() function for dynamic model path discovery
- Enhance ALSA library detection with multiple library name fallbacks:
- libasound.so.2, libasound.so, libasound.so.0, asound
- Support XDG_DATA_DIRS environment variable for model paths
- Distribution-specific paths for Fedora/RHEL/CentOS/Rocky/AlmaLinux
- Arch-specific handling (excludes /usr/local)
### src/vocalinux/utils/resource_manager.py
- Enhanced _find_resources_dir() with more candidate paths
- Support for XDG_DATA_DIRS environment variable
- Add lib64 and lib paths for Fedora/RHEL distributions
- Add Flatpak-specific path (/app/share/vocalinux/resources)
## Testing
All 462 existing tests pass.
## Related Issues
Fixes#157 (partial - Phase 1 of 5)
* chore: Remove analysis docs from PR, add to .gitignore
* style: Apply black formatting to pass lint checks
* docs: Clarify VOSK and Whisper dependency installation in README (#67)
- VOSK: installs the vosk Python package from PyPI
- Whisper: installs openai-whisper package from PyPI, which also pulls in PyTorch
Closes#67
* chore: Add Claude workflow rules to gitignore
* Fix: Prevent horizontal scrolling on mobile for code blocks [web]
- Wrap SyntaxHighlighter components in overflow-x-auto containers
- Add customStyle prop with maxWidth and overflowX for proper mobile handling
- Add min-w-0 to parent cards to prevent grid overflow
- Wrap uninstall command pre tag in overflow container
- Ensures code blocks scroll within their containers on mobile devices
* Style: Match uninstall command box with install sections [web]
- Use SyntaxHighlighter for uninstall command (consistent with install sections)
- Add red icon background to distinguish from install commands
- Add descriptive subtitle 'Clean removal in one command'
- Extract uninstallCommand as constant like install commands
- Maintain responsive overflow handling for mobile
- Allow web/package-lock.json in .gitignore for npm caching
- Add package-lock.json to enable GitHub Actions dependency caching
- This fixes the 'unable to cache dependencies' error in CI