Skip to content

Commit b0c692d

Browse files
debpalashmergetestclaude
authored
release: freeze v0.3.20 — version bump, lockfiles, changelog (debpalash#1103)
package.json (single source of truth) + the three toolchain mirrors to 0.3.20; Cargo.lock + uv.lock regenerated (version lines only). CHANGELOG [Unreleased] renamed to [0.3.20] — 2026-07-12 with the release headline, sections merged into house style (one Added, one Fixed). Ships the debpalash#1101 stale-"ready" race fix (0.3.19 users are hitting it today), the in-app uninstaller (debpalash#1099), and the Linux/Windows backend-log-dir fix. test_app_version.py lockstep: 6 passed. bun install --frozen-lockfile: clean. Co-authored-by: mergetest <nizam4103@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 662339b commit b0c692d

7 files changed

Lines changed: 10 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ The format is loosely based on [Keep a Changelog](https://keepachangelog.com/).
66
Versions track the desktop app (`tauri.conf.json` + `frontend/src-tauri/Cargo.toml`).
77
The bundled TTS model package (`pyproject.toml`) is versioned independently.
88

9-
## [Unreleased]
9+
## [0.3.20] — 2026-07-12
1010

11-
### Fixed
12-
13-
- **"Can't reach the local OmniVoice backend" could still fire on 0.3.19 — the fix had a hole.** The app asks the desktop shell whether a start/restart is in progress before showing that error, but the shell learns of a dead backend from a **2-second poll**: when the backend dies mid-generation, the supervisor needs a moment to notice it, record the crash, and flip its state to "restarting". The app was asking **once**, ~3 seconds in — often still hearing "everything's fine" — and dead-ending on the generic toast anyway. A failed connection *contradicts* "everything's fine", so that answer is now treated as stale rather than authoritative: the app keeps retrying briefly, letting the shell catch up, which turns the failure into the "backend is restarting — hang tight" banner (and gives the crash report time to be written, so you get the real cause instead of a guess). A shell that has genuinely given up, or no shell at all, still errors immediately. (#1101)
11+
The follow-through release. v0.3.19 promised that "Can't reach the local OmniVoice backend" would stop firing while the backend was merely restarting — and then a user hit it anyway, on 0.3.19, because the fix had a race in it. That's closed properly here. Uninstalling also stopped being a thing only maintainers could do: it's now a button in the app, where the person who asked for it can actually reach it.
1412

1513
### Added
1614

1715
- **Uninstall is now in the app: Settings → Storage → "Remove all data".** The v0.3.19 uninstaller was a *script* — which never reached the people who needed it, since anyone who installed the .dmg / .msi / AppImage has no repo to run it from (exactly the case in #1089). The app now lists every folder this install owns with its real size, deletes them behind a typed confirmation, and quits. The **downloaded model weights are a separate, opt-in checkbox**, because that's the standard Hugging Face cache shared with other AI tools on your machine — removing it can delete models OmniVoice never downloaded. Custom and portable install locations are honored, and nothing outside OmniVoice's own folders can be touched. The scripts now also ship as **release assets**, so you can clean up without launching the app at all. (#1089)
1816

1917
### Fixed
2018

19+
- **"Can't reach the local OmniVoice backend" could still fire on 0.3.19 — the fix had a hole.** The app asks the desktop shell whether a start/restart is in progress before showing that error, but the shell learns of a dead backend from a **2-second poll**: when the backend dies mid-generation, the supervisor needs a moment to notice it, record the crash, and flip its state to "restarting". The app was asking **once**, ~3 seconds in — often still hearing "everything's fine" — and dead-ending on the generic toast anyway. A failed connection *contradicts* "everything's fine", so that answer is now treated as stale rather than authoritative: the app keeps retrying briefly, letting the shell catch up, which turns the failure into the "backend is restarting — hang tight" banner (and gives the crash report time to be written, so you get the real cause instead of a guess). A shell that has genuinely given up, or no shell at all, still errors immediately. (#1101)
20+
2121
- **The uninstaller was leaving the backend's log folder behind on Linux and Windows.** It cleaned the app-data, config, and Python-env folders but missed where the backend actually writes `backend.log` / `backend_err.log``~/.local/state/OmniVoice` on Linux and `%LOCALAPPDATA%\OmniVoice\Logs` on Windows. Both the scripts and the documented path lists now cover them. (#1089)
2222

2323
## [0.3.19] — 2026-07-12

backend/core/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
# tests/test_app_version.py::test_all_version_files_in_lockstep and bumped by
2525
# release.yml's version-bump job, so it stays equal to
2626
# pyproject/tauri.conf/Cargo/package.json.
27-
_FALLBACK_VERSION = "0.3.19"
27+
_FALLBACK_VERSION = "0.3.20"
2828

2929

3030
def _fallback_version() -> str:

frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "omnivoice-studio",
3-
"version": "0.3.19",
3+
"version": "0.3.20",
44
"private": true,
55
"license": "AGPL-3.0-only",
66
"type": "module",

frontend/src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "omnivoice-studio"
3-
version = "0.3.19"
3+
version = "0.3.20"
44
description = "OmniVoice Studio – AI voice cloning & dubbing desktop app"
55
authors = ["Debpalash"]
66
license = "AGPL-3.0-only"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "omnivoice"
7-
version = "0.3.19"
7+
version = "0.3.20"
88
description = "OmniVoice: Towards Omnilingual Zero-Shot Text-to-Speech with Diffusion Language Models"
99
readme = "README.md"
1010
# Free and open-source under the GNU Affero General Public License v3 (see

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)