The fork takes its own name everywhere a user can see it: binaries, desktop identity, configuration/data/cache directories, D-Bus namespace, input-method engine identity, tray icons, system resource prefixes, the backend-override environment name, and the user-agent string all become voculinux, with no compatibility alias for the old D-Bus name. The internal Python module name stays vocalinux and is documented as a retained internal name. On first run, a legacy Vocalinux configuration, custom dictionary, and portal restore token are copied once into the new locations; after that the new configuration always wins, with no merging and no write-back.
Acceptance criteria
A fresh run presents only voculinux identity: command names, desktop entry, autostart, tray, and D-Bus activation all work under the new name, and the old D-Bus name is not claimed.
Configuration, history, logs, and the single-instance lock live under the new application directories; the internal Python module still imports under its retained name and the test suite passes.
First run with a legacy configuration present imports configuration, dictionary, and restore token exactly once and logs it; a second run imports nothing.
First run with an existing new configuration never imports, merges, or writes to the legacy location; first run with no legacy configuration starts from defaults.
Models are not migrated and 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 (retained module name, upstream URLs, historical changelog).
## Parent
[Spec: Voculinux — Void Linux (glibc) Wayland/niri port of Vocalinux](https://git.bongbetic.com/xavierk/voculinux/issues/16)
## What to build
The fork takes its own name everywhere a user can see it: binaries, desktop identity, configuration/data/cache directories, D-Bus namespace, input-method engine identity, tray icons, system resource prefixes, the backend-override environment name, and the user-agent string all become voculinux, with no compatibility alias for the old D-Bus name. The internal Python module name stays vocalinux and is documented as a retained internal name. On first run, a legacy Vocalinux configuration, custom dictionary, and portal restore token are copied once into the new locations; after that the new configuration always wins, with no merging and no write-back.
## Acceptance criteria
- [ ] A fresh run presents only voculinux identity: command names, desktop entry, autostart, tray, and D-Bus activation all work under the new name, and the old D-Bus name is not claimed.
- [ ] Configuration, history, logs, and the single-instance lock live under the new application directories; the internal Python module still imports under its retained name and the test suite passes.
- [ ] First run with a legacy configuration present imports configuration, dictionary, and restore token exactly once and logs it; a second run imports nothing.
- [ ] First run with an existing new configuration never imports, merges, or writes to the legacy location; first run with no legacy configuration starts from defaults.
- [ ] Models are not migrated and 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 (retained module name, upstream URLs, historical changelog).
## Blocked by
- [Prefactor: centralise user-visible app identity](https://git.bongbetic.com/xavierk/voculinux/issues/17)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent
Spec: Voculinux — Void Linux (glibc) Wayland/niri port of Vocalinux
What to build
The fork takes its own name everywhere a user can see it: binaries, desktop identity, configuration/data/cache directories, D-Bus namespace, input-method engine identity, tray icons, system resource prefixes, the backend-override environment name, and the user-agent string all become voculinux, with no compatibility alias for the old D-Bus name. The internal Python module name stays vocalinux and is documented as a retained internal name. On first run, a legacy Vocalinux configuration, custom dictionary, and portal restore token are copied once into the new locations; after that the new configuration always wins, with no merging and no write-back.
Acceptance criteria
Blocked by
Merged in integration/spec16
1dd3986383pushed to fork/integration/spec16 (https://github.com/soubarnak/vocalinux/tree/integration/spec16), review PASS, gates flake8 E9,F63,F7,F82 + black --check + isort --check + mypy src/ clean, pytest 37 passed, npm jest 11 suites/92 tests + lint 0 errors + tsc clean + build OK