* fix(installer): add upgrade mode that keeps the existing configuration Re-running install.sh on an existing install replayed first-time setup: the mode menu offered only interactive or automatic, automatic mode forced whisper.cpp regardless of the configured engine, and nothing said config.json would be kept, even though docs/UPDATE.md promised the installer updates in place and preserves configuration. Detect an existing install early (venv activate + config.json) and offer an upgrade path: - The curl|bash mode menu gains 'Upgrade (keep current settings)' as the default when an install is detected; the guided setup offers it first too. - A --upgrade flag runs the same path non-interactively for scripts, and falls back to a normal automatic install when nothing is installed. - Upgrade mode reads speech_recognition.engine from the existing config.json instead of forcing whisper.cpp, reuses the venv, updates that engine's dependencies, and rebuilds pywhispercpp only when the installed version drifts from the pinned release or GPU support is missing. - config.json is never modified: every engine path that may rewrite it (parakeet, faster_whisper, the whisper.cpp -> vosk fallback) goes through a wrapper that is a logged no-op in upgrade mode, and verify_configured_engine reports an unimportable configured engine instead of repairing the file. - The installer prints 'Existing configuration found at ~/.config/vocalinux/config.json - it will be kept.' when it detects one. Update docs/UPDATE.md with the upgrade behavior and add tests/test_installer_upgrade.py covering detection, the mode menu default, engine resolution from config, config immutability, the guided offer, --upgrade parsing, and an end-to-end pty run of the piped installer. Fixes #1009 * test(installer): isolate the upgrade pty test from host changes Skip system-dependency and model steps in the end-to-end installer run so the only host-mutating calls are gated out entirely; the timed interrupt is no longer the only thing between the marker and sudo. --------- 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 |
| FLATPAK_REMOTE.md | Users / maintainers | Self-hosted Flatpak remote and publishing |
| GATEWAY_EMBED.md | Users | Optional local VocaGateway integration |
| CUSTOM_DICTIONARY_DESIGN.md | Contributors | Custom terms and correction design |
| ARCHITECTURE.md | Contributors | Application modules, data flow, and threads |
| Performance benchmarks | Contributors | Before and after charts for the performance pass |
| 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