release: freeze v0.3.18 — version bump, lockfiles, changelog - #1084
Conversation
Co-Authored-By: Claude Fable 5 <[email protected]>
📝 WalkthroughWalkthroughThe project version is synchronized at Changes0.3.18 Release Alignment
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 7 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (7 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Around line 9-25: Add explicit “### Changed” and “### License” subsections to
the [0.3.18] changelog entry, placing them alongside the existing Added, Fixed,
and CI sections; use “None” for either subsection where no items apply, while
preserving the required release-section order.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 7f28bada-c40e-40d7-93ad-11a3ff748506
⛔ Files ignored due to path filters (2)
frontend/src-tauri/Cargo.lockis excluded by!**/*.lock,!**/*.lockuv.lockis excluded by!**/*.lock,!**/*.lock,!**/uv.lock
📒 Files selected for processing (5)
CHANGELOG.mdbackend/core/version.pyfrontend/package.jsonfrontend/src-tauri/Cargo.tomlpyproject.toml
| ## [0.3.18] — 2026-07-12 | ||
|
|
||
| The self-sufficiency release. Two long-standing "works on my network / works after four terminal commands" walls came down: model downloads now find a reachable Hugging Face endpoint on their own (no more restricted-network first-run dead-ends), and IndexTTS-2 — previously the only engine that demanded a manual clone-venv-install ritual — installs itself with one click. Under the hood, a test-debt sweep hardened the suite that guards all of it. | ||
|
|
||
| ### Added | ||
|
|
||
| - **IndexTTS-2 installs itself now — one click in Settings → Engines.** The emotion-controlled cloning engine used to demand four terminal steps (clone the repo, create a venv, `uv pip install`, set an environment variable); the row now has an Install button that does all of it — source fetch (git, with a no-git tarball fallback), an isolated venv that keeps its `transformers<5` away from the app, the ~6 GB model weights (via your configured/auto-selected Hugging Face endpoint), and configuration — with step-by-step progress, a disk-space check before anything is written, and resumable repair if anything is interrupted. The engine is usable the moment the job finishes, no restart; existing manual installs are detected and left untouched, and the manual steps remain as a collapsible fallback. The provisioner is parametrized so future sidecar engines (MOSS-v1.5, dots.tts, Confucius4) can reuse it. (#1083) | ||
|
|
||
| - **Model downloads now find a reachable Hugging Face endpoint on their own.** On networks where huggingface.co is blocked or slow (the class of first-run dead-ends behind #984), the app quietly probes the official endpoint and the hf-mirror.com community mirror, picks whichever actually works, remembers the choice, and re-checks only when a download fails or the pick goes stale — so a restricted-network first run reaches a working voice instead of a wall of connection errors. Anyone who already set a mirror (env var, pref, or Settings) stays exactly where they pointed: explicit choices are never auto-switched, and Settings → Models → Hugging Face mirror now shows the automatic pick with its measured latency plus a "Test again" button. Probes only touch the two download hosts — no geo-IP, no telemetry — and every download stays checksum-verified by `huggingface_hub` regardless of endpoint. | ||
| - **Model downloads now find a reachable Hugging Face endpoint on their own.** On networks where huggingface.co is blocked or slow (the class of first-run dead-ends behind #984), the app quietly probes the official endpoint and the hf-mirror.com community mirror, picks whichever actually works, remembers the choice, and re-checks only when a download fails or the pick goes stale — so a restricted-network first run reaches a working voice instead of a wall of connection errors. Anyone who already set a mirror (env var, pref, or Settings) stays exactly where they pointed: explicit choices are never auto-switched, and Settings → Models → Hugging Face mirror now shows the automatic pick with its measured latency plus a "Test again" button. Probes only touch the two download hosts — no geo-IP, no telemetry — and every download stays checksum-verified by `huggingface_hub` regardless of endpoint. (#1082) | ||
|
|
||
| ### Fixed | ||
|
|
||
| - **Concurrent settings writes can no longer drop each other.** Two parts of the app saving preferences at the same moment (say, an engine install finishing while you change a setting) could silently lose whichever save landed first; preference writes are now serialized, with a regression test. Found and fixed as part of the IndexTTS-2 installer work. (#1083) | ||
|
|
||
| ### CI | ||
|
|
||
| - **Test-suite debt sweep.** Exports coverage (26 new tests, which caught two real router bugs), fp16 default-dtype leak instrumentation, and a suite-order pollution class root-caused at its source — the checks that guard every release got stricter. (#1081) |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add the required Changed and License subsections before tagging.
The 0.3.18 section currently contains Added, Fixed, and CI, but the project release-note contract also requires ### Changed and ### License sections. Add them explicitly, using None where applicable.
As per coding guidelines, every tagged release must include ### Added / ### Fixed / ### Changed / ### License / ### CI subsections.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG.md` around lines 9 - 25, Add explicit “### Changed” and “###
License” subsections to the [0.3.18] changelog entry, placing them alongside the
existing Added, Fixed, and CI sections; use “None” for either subsection where
no items apply, while preserving the required release-section order.
Source: Coding guidelines
Freezes v0.3.18 for tagging: version 0.3.17 → 0.3.18 across
frontend/package.json(source of truth) and its three mirrors +uv.lock/Cargo.lock, and promotes## [Unreleased]to## [0.3.18] — 2026-07-12with the headline paragraph.Ships #1081 (test-debt sweep), #1082 (HF endpoint auto-select), #1083 (one-click IndexTTS-2 install + the prefs write-race fix).
Verified:
tests/test_app_version.py(6 passed, lockstep + tauri.conf derivation),bun install --frozen-lockfileclean (no bun.lock change needed).After merge: tag
v0.3.18from main;AUTO_VERSION_BUMPis off so main holds at 0.3.18.🤖 Generated with Claude Code
Summary
0.3.17→0.3.18across frontend, backend, Python, Rust, lockfiles, and version mirrors.0.3.18release, covering:Verification
tests/test_app_version.py— 6 tests passedbun install --frozen-lockfilecompleted without modifyingbun.lockAfter merging, tag
v0.3.18frommain;AUTO_VERSION_BUMPremains disabled.