Files
voculinux/docs
be690f0bd8 fix(installer): add upgrade mode that keeps the existing configuration (#1026)
* 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>
2026-10-26 20:55:39 -07:00
..

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