feat(identity): rename user-visible identity to voculinux with one-time legacy import

The fork takes its own name everywhere a user can see it: binaries
(voculinux, voculinux-gui), desktop entry, autostart, tray, D-Bus
namespace (com.voculinux.Voculinux, no alias for the old name),
config/data/cache dirs, single-instance lock, IBus engine identity,
tray icons, resource prefixes, VOCULINUX_* environment names, and the
update-checker user agent. The internal Python module stays vocalinux
and the distribution metadata keeps the upstream URLs as provenance.

On first run a previous Vocalinux install's config.json, custom
dictionary, and portal restore token are copied once into the new
locations (new config always wins, no merge, no write-back); models
re-resolve through the pinned-checksum download path. An offline
naming-sweep test proves no old-name strings remain on user-visible
surfaces outside the allowlist.

Refs #18
This commit is contained in:
soubarnak
2026-11-06 01:29:39 +05:30
parent c565e6d946
commit ea7be5f111
251 changed files with 2449 additions and 1991 deletions
+9 -9
View File
@@ -16,13 +16,13 @@ would make the external terms contract surprising.
## File contracts
Both files live in VocaLinux's XDG-aware configuration directory:
`$XDG_CONFIG_HOME/vocalinux` (or `~/.config/vocalinux` when unset).
Both files live in Voculinux's XDG-aware configuration directory:
`$XDG_CONFIG_HOME/voculinux` (or `~/.config/voculinux` when unset).
| File | Contract | Consumer |
| --- | --- | --- |
| `dictionary.txt` | UTF-8 (BOM accepted), one term per line. Blank lines and lines beginning with `#` are ignored. Terms are de-duplicated case-insensitively while retaining the first spelling. | VocaLinux and an external accessibility scanner. |
| `custom-dictionary-corrections.json` | UTF-8 JSON object: `{"version": 1, "corrections": [{"heard": "super base", "replacement": "Supabase"}]}`. | VocaLinux only. |
| `dictionary.txt` | UTF-8 (BOM accepted), one term per line. Blank lines and lines beginning with `#` are ignored. Terms are de-duplicated case-insensitively while retaining the first spelling. | Voculinux and an external accessibility scanner. |
| `custom-dictionary-corrections.json` | UTF-8 JSON object: `{"version": 1, "corrections": [{"heard": "super base", "replacement": "Supabase"}]}`. | Voculinux only. |
The terms file remains deliberately simple and scanner-friendly. Corrections
need two unambiguous fields, a version, and exact replacement casing, so JSON is
@@ -35,7 +35,7 @@ edited file therefore takes effect on the next dictation segment without an app
restart. Missing, unreadable, malformed, or unsupported correction files are
ignored safely; dictation continues without their entries.
The terms file may contain any number of lines, but VocaLinux limits a single
The terms file may contain any number of lines, but Voculinux limits a single
prompt to the first 200 valid terms and 2,000 characters. This bounds decoding
work while leaving the scanner's complete line-file contract intact. The Custom
Dictionary page keeps both an add/remove editor and a validated file chooser
@@ -43,7 +43,7 @@ for the terms file.
## Processing and engine behavior
For every completed audio segment, VocaLinux applies this order:
For every completed audio segment, Voculinux applies this order:
1. The selected engine transcribes audio.
2. Live phrase corrections run against the raw transcript.
@@ -78,7 +78,7 @@ the JSON corrections file exists; it is never silently deleted or migrated.
The #767 persisted configuration keys are retained unchanged:
`dictionary.enabled`, `dictionary.file_path` (default
`~/.config/vocalinux/dictionary.txt`), and `dictionary.max_words`. Existing
`~/.config/voculinux/dictionary.txt`), and `dictionary.max_words`. Existing
Peony settings therefore continue to select the scanner's `dictionary.txt`
file. New configured paths are accepted only when they can be expanded and are
either absent (so the UI can create them) or readable regular files; a failed
@@ -99,7 +99,7 @@ paths are safely ignored and shown as unavailable rather than raising.
## Human test checklist
1. Add `VocaLinux`, `PyGObject`, and a non-ASCII term in **Custom terms**;
1. Add `Voculinux`, `PyGObject`, and a non-ASCII term in **Custom terms**;
confirm `dictionary.txt` is UTF-8, one line per term, and an external
edit changes the next Whisper, whisper.cpp, and Faster Whisper dictation segment.
2. Add `super base` → `Supabase`; test lowercase, uppercase, punctuation, an
@@ -108,7 +108,7 @@ paths are safely ignored and shown as unavailable rather than raising.
3. With voice commands enabled, add a correction that changes a command-like
misrecognition into ordinary text. Confirm it is injected rather than acted
on. Also verify an intentionally command-like replacement is avoided.
4. Edit each file externally while VocaLinux is running. Test an invalid JSON
4. Edit each file externally while Voculinux is running. Test an invalid JSON
correction file and invalid UTF-8 terms file; confirm dictation continues and
the Settings status/save feedback is clear.
5. Test the UI with keyboard only: Add buttons via Enter, empty validation,