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
+10 -10
View File
@@ -174,7 +174,7 @@ def test_the_gate_takes_this_commit_from_git_not_the_working_directory():
), "the gate no longer extracts the tree from git"
installer = INSTALLER.read_text(encoding="utf-8").splitlines()
assert any(
"grep" in line and "pyproject.toml" in line and "vocalinux" in line for line in installer
"grep" in line and "pyproject.toml" in line and "voculinux" in line for line in installer
), (
"local mode is no longer detected from pyproject.toml in the working"
" directory; the gate may now be testing a downloaded tag instead of"
@@ -206,9 +206,9 @@ def test_the_smoke_checks_what_the_installer_claims_to_have_created():
gate = _gate_text()
for construct in (
r'\[ -x "\$VENV/bin/python" \]',
r'\[ -x "\$INSTALL_HOME/\.local/bin/vocalinux" \]',
r'\[ -f "\$INSTALL_HOME/\.local/share/applications/vocalinux\.desktop" \]',
r"'\$INSTALL_HOME/\.local/bin/vocalinux' --version",
r'\[ -x "\$INSTALL_HOME/\.local/bin/voculinux" \]',
r'\[ -f "\$INSTALL_HOME/\.local/share/applications/voculinux\.desktop" \]',
r"'\$INSTALL_HOME/\.local/bin/voculinux' --version",
):
assert re.search(construct, gate), f"the smoke no longer asserts {construct}"
@@ -306,13 +306,13 @@ def test_the_remote_gate_bootstraps_outside_a_checkout():
checkout exists. Overriding the clone source is what keeps the run on this
commit instead of the public repo's last release."""
gate = _without_comments(_remote_gate_text())
assert "VOCALINUX_REPO_URL" in gate, (
assert "VOCULINUX_REPO_URL" in gate, (
"the remote gate no longer redirects the clone source; it would"
" install the public repo's tag rather than this commit"
)
installer = _without_comments(INSTALLER.read_text(encoding="utf-8"))
assert re.search(r"VOCALINUX_REPO_URL:-https://github\.com/VocaHQ/vocalinux\.git", installer), (
"install.sh no longer honors VOCALINUX_REPO_URL; the gate's mirror"
assert re.search(r"VOCULINUX_REPO_URL:-https://github\.com/VocaHQ/vocalinux\.git", installer), (
"install.sh no longer honors VOCULINUX_REPO_URL; the gate's mirror"
" cannot reach it and the clone falls back to the public repo"
)
@@ -346,7 +346,7 @@ def test_the_remote_gate_checks_handoff_artifacts():
gate = _without_comments(_remote_gate_text())
for construct in (
r'\[ -x "\$REMOTE_VENV/bin/python" \]',
r'\[ -f "\$INSTALL_HOME/\.local/bin/activate-vocalinux\.sh" \]',
r'\[ -f "\$INSTALL_HOME/\.local/bin/activate-voculinux\.sh" \]',
):
assert re.search(construct, gate), f"the remote gate no longer asserts {construct}"
@@ -355,9 +355,9 @@ def test_the_remote_gate_smoke_tests_the_installed_app():
"""Same standard as the local gate: the app binary answers --version
through the wrapper the user's PATH carries."""
gate = _without_comments(_remote_gate_text())
assert re.search(r"'\$INSTALL_HOME/\.local/bin/vocalinux' --version", gate)
assert re.search(r"'\$INSTALL_HOME/\.local/bin/voculinux' --version", gate)
assert re.search(
r'\[ -x "\$INSTALL_HOME/\.local/bin/vocalinux" \]', gate
r'\[ -x "\$INSTALL_HOME/\.local/bin/voculinux" \]', gate
), "the remote gate no longer asserts the user-facing wrapper exists"