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:
@@ -140,7 +140,7 @@ class TestManifestCoverage(unittest.TestCase):
|
||||
class TestVerifyFile(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.tmp = Path(self.enterContext(__import__("tempfile").TemporaryDirectory()))
|
||||
self.payload = b"vocalinux model payload"
|
||||
self.payload = b"voculinux model payload"
|
||||
self.path = self.tmp / "model.bin"
|
||||
self.path.write_bytes(self.payload)
|
||||
self.digest = hashlib.sha256(self.payload).hexdigest()
|
||||
@@ -416,7 +416,7 @@ class TestExistingModelsAreVerified(unittest.TestCase):
|
||||
for name, checker in (
|
||||
("install_whisper_model", "verify_openai_model_checksum"),
|
||||
("install_whispercpp_model", "verify_model_checksum"),
|
||||
("install_vosk_models", ".vocalinux_verified"),
|
||||
("install_vosk_models", ".voculinux_verified"),
|
||||
):
|
||||
guard = self._exists_guard(name)
|
||||
self.assertLess(
|
||||
@@ -484,9 +484,9 @@ print_error() { echo "ERROR: $*"; }
|
||||
print_success() { echo "SUCCESS: $*"; }
|
||||
command_exists() { command -v "$1" >/dev/null 2>&1; }
|
||||
DATA_DIR="$ROOT/data"
|
||||
VOCALINUX_TMP_DIR="$ROOT/tmp"
|
||||
VOCULINUX_TMP_DIR="$ROOT/tmp"
|
||||
MODEL_CHECKSUMS_FILE="$ROOT/model_checksums.txt"
|
||||
mkdir -p "$VOCALINUX_TMP_DIR"
|
||||
mkdir -p "$VOCULINUX_TMP_DIR"
|
||||
|
||||
# The installer only probes for these; the download itself is stubbed out.
|
||||
check_connectivity() { return 0; }
|
||||
@@ -663,8 +663,8 @@ download_model_file() { echo "DOWNLOAD ATTEMPTED"; return 1; }
|
||||
"""The 40MB fetch must not happen when nothing can verify it."""
|
||||
with TemporaryDirectory() as tmp:
|
||||
result = self._run(
|
||||
f'DATA_DIR="{tmp}/data"; VOCALINUX_TMP_DIR="{tmp}/tmp"; '
|
||||
f'mkdir -p "$DATA_DIR" "$VOCALINUX_TMP_DIR"; '
|
||||
f'DATA_DIR="{tmp}/data"; VOCULINUX_TMP_DIR="{tmp}/tmp"; '
|
||||
f'mkdir -p "$DATA_DIR" "$VOCULINUX_TMP_DIR"; '
|
||||
f'MODEL_CHECKSUMS_FILE="{tmp}/nope.txt"; '
|
||||
"install_vosk_models; echo RC=$?",
|
||||
functions=("pinned_digest_for", "install_vosk_models"),
|
||||
|
||||
Reference in New Issue
Block a user