Skip to content

Releases: waleedmandour/CorpusMind-Voice

CorpusMind Voice v1.3.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 19:16

CorpusMind Voice v1.3.0

Offline audio → linguistically annotated corpus. A companion tool for CorpusMind.

New in v1.3.0

  • Upload and recording fixed in every install mode. The desktop app wrote
    audio files and worker output under its install directory, which is
    read-only for MSI per-machine installs (Program Files), so uploads and
    microphone recordings failed with permission errors. All app data now lives
    in the OS per-user application data folder (CM_DATA_DIR), wired end to
    end: uploads, recordings, worker output and app config. Recordings saved by
    earlier versions inside the install directory are migrated into the new
    location on first launch. The sidecar's stdout/stderr is captured to
    logs/sidecar.log in the data folder instead of being discarded, so any
    remaining problem is diagnosable from the log file.
  • Phone companion. Settings gains a "Phone companion" card (desktop
    shell only). Enabling it generates a pairing token and a self-signed
    certificate and starts a token-gated proxy on the local network: the phone
    opens the pairing URL (QR code shown in Settings) and gets the same PWA -
    upload recordings, browse the corpus, stream audio and chat through the
    desktop's local LLM. For phone-side microphone recording use the
    https:// pairing link (browsers only expose the microphone on secure
    pages); the phone will warn about the self-signed certificate once.
    Everything stays on the local network and behind the pairing token.
  • Ollama host override. Settings > local LLM accepts a custom Ollama
    host (host:port or http://host:port), so the app (and the phone
    companion) can use an Ollama daemon running on another machine on the
    network; empty falls back to the local daemon.
  • Recording from the phone, Ollama on other devices: the desktop remains
    the engine; phones and second machines are clients. A native Android/iOS
    build remains future work.

Fixed in v1.3.0

This tag was rebuilt on 2026-09-12. The first v1.3.0 packaging pass (built
2026-09-11) contained a defect that broke upload, recording and analysis in
the installed desktop app; if you downloaded an installer before this date,
please re-download. The web/PWA deployment was never affected.

  • Upload, recording and analysis failed inside the installed desktop app
    with "Internal Server Error".
    The build chained the speech runtime
    (@huggingface/transformers) and the FFmpeg resolver as external packages,
    which the bundler wires through hashed module aliases materialized as
    symlinks. Windows installers (NSIS and MSI) cannot carry symlinks, so the
    installed app lost every alias and the first API call that touched the
    speech stack died before running any code. Every such route now ships the
    runtime as real files, the build chain boots the packaged server from an
    isolated directory and performs a real upload before the installers are
    allowed to build, and the bundle check fails the build if any referenced
    module alias is missing.
  • The About card cited the app as "Version 1.2.0". The APA and BibTeX
    citation strings inside the app were hand-maintained and had drifted while
    every other version marker moved to 1.3.0. They now read 1.3.0 and are
    managed by the same version-sync gate as the guides, README, release notes
    and installer metadata.
  • Deleted recordings could report failure after succeeding. The delete
    endpoint removed the database rows first and the files second, so a
    file-system error surfaced as a 500 although the corpus entry was already
    gone (and retrying returned 404). Files are now removed first, best effort,
    and any orphaned file is reported in the response without failing the
    deletion.
  • SQLite corpus export always failed on Windows. The export hardcoded
    python3, which stock Windows does not have even when Python is
    installed; the interpreter is now resolved in order (python3, python,
    py) and verified to actually run. The same resolution fixes the Python
    accelerator probe in Settings and the pipeline's Python worker on Windows.
  • Stale UI after upgrading the desktop app. The service worker installed
    by the PWA kept serving the previous build's cached shell inside the
    desktop webview. Desktop sessions now unregister the service worker and
    clear its caches on boot; phone and browser sessions keep full offline PWA
    behaviour.
  • Audio playback could stick in "playing". Clicking a concordance or
    utterance clip set currentTime before the browser had parsed the audio
    metadata; the seek never happened, playback never started and the playing
    badge never cleared. Metadata is now awaited before seeking, stale seek
    handlers are detached, and the badge clears when playback ends.
  • CUDA option offered without a GPU. The device selector offered CUDA on
    machines with no NVIDIA GPU; the option now appears only when the hardware
    probe detects one, and an existing "cuda" selection falls back to auto.
  • WAL journaling silently skipped. The WAL and busy_timeout pragmas were
    issued through an API that rejects SQLite statements returning a result
    row, so the advertised WAL hardening never actually applied; they are now
    issued correctly (verified: journal_mode = wal after boot).

Fixed in v1.2.2

  • Smaller installers. Every build previously carried all five Prisma query
    engines plus onnxruntime and ffmpeg binaries for every platform (~150 MB of
    engines its OS can never load). The bundle assembler now prunes everything
    that does not match the build target; the assembled standalone dropped from
    282.9 MB to 205.9 MB on a Linux x64 build. Measured installer delta on
    Windows: the NSIS setup fell from 107 MB (v1.2.1) to 69.6 MB (v1.2.2),
    about 35% lighter. A new bun run bundle:check gate (scripts/check_bundle_externals.mjs)
    verifies after every build that exactly one target query engine, the target
    onnxruntime binding + shared library, the target ffmpeg binary and the
    transformers runtime are all present - the direct guard against the
    "CI-green but every API route 500s" failure mode from v1.2.0.
  • Optional Windows code signing. Adding WINDOW_PFX_BASE64 +
    WINDOW_PFX_PASSWORD repository secrets now signs every NSIS/MSI artifact
    with SHA-256 and an RFC 3161 timestamp (scripts/sign-windows.ps1); without
    the secrets builds stay unsigned exactly as before. The user guides (EN + AR)
    document the SmartScreen "Windows protected your PC" prompt and the
    More info → Run anyway path for unsigned builds.
  • Installer process cleanup hardened. The pre-install/pre-uninstall hook
    passes the install directory to PowerShell through an environment variable
    instead of string interpolation, so spaces ("C:\Program Files\CorpusMind
    Voice"), localized Program Files names, apostrophes and non-ASCII user names
    can no longer break the path match. A second, subfolder-scoped kill covers
    future sidecar layouts.
  • SQLite concurrency hardening. The bundled database now opens with
    connection_limit=1, journal_mode=WAL and busy_timeout=5000, so running
    an export while a pipeline job commits no longer fails with "database is
    locked" on Windows.
  • Cross-platform npm scripts. npm run dev / npm run start no longer use
    POSIX-only tee pipes and inline env-var assignments; the new
    scripts/serve.mjs launcher works unchanged in cmd.exe and PowerShell and
    writes sane local defaults for DATABASE_URL and CM_MODELS_DIR.
  • Single source of truth for versions. scripts/sync-version.mjs writes
    package.json's version into the Tauri config, Cargo manifest/lock, CITATION.cff,
    both user guides, the guide PDF source, the README badge and citations, and
    the release notes, and --check mode is a CI gate - the "guides said 1.2.0
    while the app shipped 1.2.1" drift is now impossible to merge.
  • README version sync gap closed. The README version badge and its APA and
    BibTeX citation blocks were the one version-bearing spot the sync tool did
    not manage, and they had drifted to 1.2.0 while the app shipped 1.2.2. The
    badge, the Voice citation line and the Voice BibTeX entry are now managed by
    scripts/sync-version.mjs (strictly scoped so the parent CorpusMind
    citation keeps its own version) and covered by the --check CI gate.
  • MSI runner pin de-risked. The release job now collects and verifies the
    required installers (NSIS setup, deb, both DMGs) BEFORE it removes the
    previous release, so a failed build can no longer leave the repo with no
    release at all, and a missing best-effort MSI raises a loud warning
    annotation plus a run-summary note instead of passing silently. A new
    weekly runner-watch workflow (.github/workflows/runner-watch.yml)
    turns red as soon as the windows-2022 label or the .NET Framework 3.5
    payload that WiX 3's candle.exe needs disappears from the runner image.
    WiX 4/5 was evaluated and stays on record: tauri's MSI bundler ships its
    own WiX 3.14 toolset with no supported switch to a newer WiX major, so the
    documented escape hatches when windows-2022 retires are DISM-enabled
    NetFx3 on a newer image or shipping NSIS-only.
  • Rust hygiene gate. CI runs cargo fmt --check and cargo clippy -D warnings;
    both pass today, and the bar is enforced from now on.
  • Docs. Troubleshooting rows for the pre-1.2.1 installer-lock symptom
    (upgrading self-heals it), for Windows microphone privacy toggles, and a
    rewritten, accurate mic-permission explanation (the in-app prompt is
    auto-granted on Windows; the OS-level toggle is what can still block it).

Fixe...

Read more