From 84ec79c76962887a61385eb4ec5f171c9dd121d9 Mon Sep 17 00:00:00 2001 From: Jatin K Malik Date: Wed, 25 Mar 2026 23:31:26 -0700 Subject: [PATCH] chore(release): prepare v0.10.0-beta (#345) * chore(release): prepare v0.10.0-beta Bump versions and release references across app, docs, installer, and website for the next beta release. Add v0.10.0-beta release notes entries covering reliability fixes and CI/test improvements since v0.9.0-beta. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus * docs(release): align Python baseline references to 3.9+ Synchronize stale Python 3.8 references in agent guidance and distro dependency docs/scripts with the current 3.9+ minimum used by project metadata and release docs. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --------- Co-authored-by: Sisyphus --- AGENTS.md | 2 +- README.md | 43 +++++++++++++++++---------------- SECURITY.md | 6 ++--- docs/RELEASE_PROCESS.md | 1 + docs/UPDATE.md | 38 ++++++++++++++++++++++++++++- install.sh | 2 +- scripts/check-system-deps.sh | 8 +++--- scripts/distro-package-map.yaml | 4 +-- src/vocalinux/version.py | 4 +-- web/package-lock.json | 4 +-- web/package.json | 2 +- web/src/app/changelog/page.tsx | 17 ++++++++++++- web/src/app/page.tsx | 4 +-- 13 files changed, 94 insertions(+), 41 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 8aedd2e..690961a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ Guidelines for AI agents working on this codebase. ## Project Overview Vocalinux is a voice dictation system for Linux. It uses: -- **Python 3.8+** for the main application +- **Python 3.9+** for the main application - **GTK 3** (via PyGObject) for the desktop UI and system tray - **whisper.cpp** (default), **OpenAI Whisper**, and **Vosk** for speech recognition - **Next.js/TypeScript** for the website (in `web/`) diff --git a/README.md b/README.md index 9e898c8..79bea54 100644 --- a/README.md +++ b/README.md @@ -32,38 +32,39 @@ It's a free, GPLv3-licensed desktop app that lets you dictate text into *any* ap No internet required. No data leaves your machine. Just speak and type. -## ๐Ÿ“š What's New in v0.9.0-beta +## ๐Ÿ“š What's New in v0.10.0-beta -> ๐ŸŽ‰ **Release: Left/Right modifier keys, sound effects toggle, Wayland clipboard fallback, and more.** +> ๐ŸŽ‰ **Release: reliability hardening across keyboard/audio/tray handling, stronger IBus activation, and better CI/testing quality.** -### ๐Ÿš€ Highlights (v0.8.0 โ†’ v0.9.0) +### ๐Ÿš€ Highlights (v0.9.0 โ†’ v0.10.0) | Feature | Description | |---------|-------------| -| **โŒจ๏ธ Left/Right Modifier Keys** | Choose Left Ctrl vs Right Ctrl (etc.) as your shortcut trigger | -| **๐Ÿ”” Sound Effects Toggle** | Enable or disable audio feedback from the Settings dialog | -| **๐Ÿ“‹ Wayland Clipboard Fallback** | Automatic clipboard copy when virtual keyboard injection isn't available | -| **๐Ÿ› ๏ธ Installation Polish** | Better pipx/Debian guidance and headless display detection | +| **โŒจ๏ธ Keyboard Robustness** | Better modifier alias matching across layouts and SYN_DROPPED recovery in evdev | +| **๐ŸŽ™๏ธ Audio Compatibility** | Device channel probing now validates supported sample rates for safer defaults | +| **๐Ÿ–ฅ๏ธ IBus + Tray Stability** | IBus activation uses `register_component`; tray updates use icon names reliably | +| **๐Ÿงช Quality & CI Upgrades** | Test coverage rose to 80%+, with Node 24 and path-filtered CI pipelines | -### โœจ New Features (v0.9.0) +### โœจ New in v0.10.0-beta -- **Left/Right Modifier Key Distinction** - Shortcuts now support `Left Ctrl`, `Right Alt`, etc., with grouped UI in Settings -- **Sound Effects Toggle** - New Audio Settings toggle to silence start/stop/error sounds -- **Clipboard Fallback for Wayland** - Auto-copies text via `wl-copy`/`xclip` when injection unavailable (KDE Plasma etc.) -- **Display Availability Check** - Graceful error message when running in headless environments +- **IBus registration flow improvements** - Text injection now uses explicit component registration for more reliable engine activation +- **Expanded IBus test coverage** - Launch mode and main entrypoint paths are now covered in tests +- **Improved project defaults** - Minimum supported Python version is now 3.9+ -### ๐Ÿ› Bug Fixes (v0.9.0) +### ๐Ÿ› Bug Fixes (v0.10.0) -- **#308**: Distinguish left vs right modifier keys (evdev + pynput backends) -- **#307**: Remove unwanted leading space when starting a new transcription session -- **#305**: Pass configured shortcut mode to `KeyboardShortcutManager` on startup -- **#299**: Add clipboard fallback for Wayland compositors without virtual keyboard support -- **#289**: Improve Debian/pipx installation error messages and cross-distro dependency guidance +- **#342**: Generalized pynput modifier alias matching across keyboard layouts +- **#341**: Channel probing now verifies sample-rate support for selected audio devices +- **#339**: evdev backend now handles `SYN_DROPPED` to avoid stale modifier state +- **#333**: Settings dialog now forces window decorations to fix missing-titlebar scenarios +- **#330**: Tray icon updates now use icon names for AppIndicator compatibility +- **#304**: IBus activation now uses `register_component` for more reliable startup behavior ### ๐Ÿ”ง Improvements -- **Grouped shortcut selector** - Settings dropdown now organises shortcuts by Either/Left/Right side -- **pipx documentation** - New `DISTRO_COMPATIBILITY.md` section for pipx users +- **Installation fallback hardening** - Installer now resolves latest tag via GitHub API and improves piped-shell behavior +- **CI runtime modernization** - Deploy workflow upgraded to Node.js 24 with smarter path-based workflow filtering +- **Repo cleanup** - Removed stale `setup.py` and legacy website build script --- @@ -367,7 +368,7 @@ Vocalinux is part of a family of privacy-first, offline voice dictation tools. S | Platform | Project | Website | GitHub | Status | |----------|---------|---------|--------|--------| -| ๐Ÿง Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | โœ… Beta v0.9.0 | +| ๐Ÿง Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | โœ… Beta v0.10.0 | | ๐ŸŽ macOS | **VocaMac** | [vocamac.com](https://vocamac.com) | [jatinkrmalik/vocamac](https://github.com/jatinkrmalik/vocamac) | ๐Ÿš€ Beta | | ๐ŸชŸ Windows | **VocaWin** | [vocawin.com](https://vocawin.com) | [jatinkrmalik/vocawin](https://github.com/jatinkrmalik/vocawin) | ๐Ÿ“‹ Planned | diff --git a/SECURITY.md b/SECURITY.md index a46b573..dc13d35 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,10 +4,10 @@ | Version | Supported | | ------- | ------------------ | -| 0.9.x | :white_check_mark: | +| 0.10.x | :white_check_mark: | +| 0.9.x | :x: | | 0.8.x | :x: | -| 0.7.x | :x: | -| < 0.7 | :x: | +| < 0.8 | :x: | ## Reporting a Vulnerability diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index afa7656..ffcb4ed 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -328,6 +328,7 @@ git push origin v0.5.1-beta | 0.7.0-beta | 2026 | Beta | Autostart, tabbed settings, Intel GPU support, single instance | | 0.8.0-beta | 2026-03-01 | Beta | Push-to-talk mode, optional voice commands, input/audio compatibility fixes | | 0.9.0-beta | 2026-03-14 | Beta | Left/right modifier keys, sound effects toggle, Wayland clipboard fallback, leading-space fix | +| 0.10.0-beta | 2026-03-25 | Beta | Keyboard/audio reliability hardening, IBus/tray stability fixes, CI + test coverage improvements | ## Questions? diff --git a/docs/UPDATE.md b/docs/UPDATE.md index bf01ceb..f5855c4 100644 --- a/docs/UPDATE.md +++ b/docs/UPDATE.md @@ -2,6 +2,42 @@ This guide explains how to update Vocalinux to the latest version. +## What's New in v0.10.0-beta + +### ๐Ÿš€ Highlights + +| Feature | Description | +|---------|-------------| +| **โŒจ๏ธ Keyboard Robustness** | Better modifier alias handling across layouts and evdev `SYN_DROPPED` recovery | +| **๐ŸŽ™๏ธ Audio Compatibility** | Audio channel probing now validates sample-rate support per device | +| **๐Ÿ–ฅ๏ธ IBus + Tray Stability** | IBus activation is more reliable and tray icon refresh is more consistent | +| **๐Ÿงช Testing & CI Upgrades** | Coverage increased to 80%+, with modernized Node 24 CI workflows | + +### โœจ New Features + +- **IBus registration improvements** โ€” Text injection activation now uses `register_component` +- **Expanded IBus test coverage** โ€” Added launch-mode and main-entrypoint test paths +- **Python baseline update** โ€” Minimum supported Python version is now 3.9+ + +### ๐Ÿ› Bug Fixes + +- **#342**: Generalize pynput modifier alias matching across layouts +- **#341**: Probe audio channels using device-supported sample rates +- **#339**: Handle evdev `SYN_DROPPED` to prevent stale modifier state +- **#333**: Force window decorations in settings dialog +- **#330**: Use icon names for AppIndicator tray updates +- **#304**: Use `register_component` for IBus engine activation + +### ๐Ÿ”ง Improvements + +- Installer fallback now resolves latest tag through GitHub API and better handles piped shell execution +- CI now uses Node.js 24 for website deployment and path-based filtering to skip unnecessary workflows +- Removed stale `setup.py` and legacy `build-website.sh` + +See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.10.0-beta). + +--- + ## What's New in v0.9.0-beta ### ๐Ÿš€ Highlights @@ -93,7 +129,7 @@ The installer will: ```bash cd vocalinux git fetch origin -git checkout v0.9.0-beta +git checkout v0.10.0-beta ./install.sh ``` diff --git a/install.sh b/install.sh index 27ca0dd..dbada3d 100755 --- a/install.sh +++ b/install.sh @@ -235,7 +235,7 @@ resolve_install_tag() { return fi fi - INSTALL_TAG="v0.9.0-beta" + INSTALL_TAG="v0.10.0-beta" } resolve_install_tag diff --git a/scripts/check-system-deps.sh b/scripts/check-system-deps.sh index 47d66df..705f36d 100755 --- a/scripts/check-system-deps.sh +++ b/scripts/check-system-deps.sh @@ -9,14 +9,14 @@ check_deps() { echo "Checking Vocalinux system dependencies..." echo "" - # Check for Python 3.8+ + # Check for Python 3.9+ if command -v python3 >/dev/null 2>&1; then PY_VERSION=$(python3 -c "import sys; print('.'.join(map(str, sys.version_info[:2])))") echo "โœ“ Python $PY_VERSION" if [ "$(echo "$PY_VERSION" | cut -d. -f1)" -lt 3 ] || \ - [ "$(echo "$PY_VERSION" | cut -d. -f2)" -lt 8 ]; then - echo " โœ— Python 3.8+ required, found $PY_VERSION" + [ "$(echo "$PY_VERSION" | cut -d. -f2)" -lt 9 ]; then + echo " โœ— Python 3.9+ required, found $PY_VERSION" MISSING=1 fi else @@ -127,7 +127,7 @@ check_deps() { echo " sudo zypper install -y python3-gobject python3-gobject-cairo gtk3 gobject-introspection-devel portaudio-devel python3-devel python3-virtualenv pkg-config xdotool wtype" elif [[ "$DETECTED_DISTRO" == "gentoo" ]]; then echo "Gentoo:" - echo " sudo emerge dev-python/pygobject:3 x11-libs/gtk+:3 dev-libs/libappindicator:3 media-libs/portaudio dev-lang/python:3.8 xdotool wtype" + echo " sudo emerge dev-python/pygobject:3 x11-libs/gtk+:3 dev-libs/libappindicator:3 media-libs/portaudio dev-lang/python:3.9 xdotool wtype" elif [[ "$DETECTED_DISTRO" == "alpine" ]]; then echo "Alpine Linux:" echo " sudo apk add py3-gobject3 py3-pip gtk+3.0 py3-cairo portaudio-dev py3-virtualenv pkgconf xdotool wtype" diff --git a/scripts/distro-package-map.yaml b/scripts/distro-package-map.yaml index 95280d8..d909b62 100644 --- a/scripts/distro-package-map.yaml +++ b/scripts/distro-package-map.yaml @@ -48,7 +48,7 @@ system_packages: fedora: ["python3-devel", "python3-virtualenv"] arch: ["python"] # Arch includes venv by default opensuse: ["python3-devel", "python3-virtualenv"] - gentoo: ["dev-lang/python:3.8"] + gentoo: ["dev-lang/python:3.9"] alpine: ["py3-virtualenv"] void: ["python3-devel"] solus: ["python3-virtualenv"] @@ -196,7 +196,7 @@ distribution_notes: gentoo: general: "Gentoo compiles packages from source. Installation will take longer." - python: "Ensure Python 3.8+ is set as the active version" + python: "Ensure Python 3.9+ is set as the active version" alpine: general: "Alpine uses musl libc. Some Python packages may not have pre-built wheels." diff --git a/src/vocalinux/version.py b/src/vocalinux/version.py index 115acec..81a2f0d 100644 --- a/src/vocalinux/version.py +++ b/src/vocalinux/version.py @@ -2,8 +2,8 @@ Version information for Vocalinux. """ -__version__ = "0.9.0-beta" -__version_info__ = (0, 9, 0, "beta") +__version__ = "0.10.0-beta" +__version_info__ = (0, 10, 0, "beta") __author__ = "Jatin K Malik" __email__ = "jatinkrmalik@gmail.com" __license__ = "GPL-3.0" diff --git a/web/package-lock.json b/web/package-lock.json index 7cd7e20..3cc86b2 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "vocalinux-website", - "version": "0.8.0", + "version": "0.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vocalinux-website", - "version": "0.8.0", + "version": "0.10.0", "dependencies": { "@types/node": "^20.14.10", "@types/react": "^18.3.3", diff --git a/web/package.json b/web/package.json index 7b64dfa..484f7af 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "vocalinux-website", - "version": "0.9.0", + "version": "0.10.0", "private": true, "type": "module", "scripts": { diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx index 30cfd96..564c00b 100644 --- a/web/src/app/changelog/page.tsx +++ b/web/src/app/changelog/page.tsx @@ -5,6 +5,21 @@ import { SeoSubpageShell } from "@/components/seo-subpage-shell"; import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; const releases = [ + { + version: "v0.10.0-beta", + date: "2026-03-25", + type: "beta", + highlights: [ + "Generalized keyboard modifier alias matching across layouts for more reliable shortcuts", + "Audio channel probing now validates device-supported sample rates before selection", + "evdev now handles SYN_DROPPED to prevent stale modifier state", + "IBus engine activation now uses register_component for stronger text-injection startup", + "Settings dialog forces window decorations to prevent missing-titlebar behavior", + "Tray icon refresh now uses icon names for better AppIndicator compatibility", + "Coverage increased to 80%+ with additional IBus launch/main-entry tests", + "Installer and CI polish: latest-tag fallback via GitHub API, Node 24 deploy, and path-filtered workflows", + ], + }, { version: "v0.9.0-beta", date: "2026-03-14", @@ -175,7 +190,7 @@ export default function ChangelogPage() { headline: "Vocalinux Changelog - Release History", description: "Complete release history for Vocalinux, the offline voice dictation software for Linux.", - dateModified: "2026-03-14", + dateModified: "2026-03-25", author: { "@type": "Person", name: "Jatin K Malik", diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index 66f6b21..7eb8418 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -64,7 +64,7 @@ const homeJsonLd = [ }, description: "Offline voice dictation and speech-to-text for Linux with whisper.cpp and VOSK.", - "softwareVersion": "0.9.0-beta", + "softwareVersion": "0.10.0-beta", author: { "@type": "Person", name: "Jatin K Malik", @@ -290,7 +290,7 @@ export default function HomePage() { /> Vocalinux - v0.9.0 Beta + v0.10.0 Beta