Skip to content

[windows/handoff] Fix log-confirmed hotkey retry, startup cancel, and beta updater race #492

@Cooper-X-Oak

Description

@Cooper-X-Oak

This was generated by AI during triage.

Parent

#478

Triage

  • Category: bug
  • State: ready-for-agent
  • Requested repository labels: bug, windows, priority: high
  • Source artifact: D:/Users/luoxu/Downloads/openless-2026-05-18T08-18-31.log

What the log showed

The Windows beta handoff log exposed three user-visible failures plus one test-feedback blocker discovered during diagnosis:

  1. OpenApp action hotkey repeatedly failed to register Ctrl+Shift+O with HotKey already registerd, retrying every 3 seconds up to at least attempt 130.
  2. Repeated stop/toggle edges during Starting were queued while ASR was still connecting, making cancellation feel unreliable.
  3. Beta update checks hit v1.3.4-4-beta-tauri/latest-windows-x86_64-beta.json before the Windows beta manifest asset was available, surfacing updater errors during a release publishing window.
  4. Windows Rust unit test binaries could fail at process startup with STATUS_ENTRYPOINT_NOT_FOUND without a Common Controls v6 manifest, making the Windows regression loop untrustworthy.

What to build

Ship a first Windows handoff core-fix slice that makes the logged failures actionable and testable:

  • Allow Open App and Switch Style action shortcuts to be disabled instead of forcing a conflicting global hotkey.
  • Ensure disabled action shortcuts unregister existing monitors, do not participate in overlap checks, and do not keep retrying in the background.
  • Restore a reliable Windows Rust unit-test feedback loop by ensuring MSVC test binaries can resolve Common Controls v6 APIs.
  • Make repeated stop/toggle during Starting cancel predictably while preserving the first short-dictation pending-stop path.
  • Add a beta updater manifest readiness probe so release-publishing gaps do not appear as user-facing updater failures.

Evidence

From openless-2026-05-18T08-18-31.log:

2026-05-18T07:32:50.8441319Z [WARN] [coord] action hotkey OpenApp 第 1 次注册失败: 注册全局快捷键失败: HotKey already registerd ...; 3s 后重试
2026-05-18T08:18:06.4923996Z [WARN] [coord] action hotkey OpenApp 第 130 次注册失败: 注册全局快捷键失败: HotKey already registerd ...; 3s 后重试
2026-05-18T08:12:23.3509426Z [INFO] [coord] toggle stop edge during Starting — queued
2026-05-18T08:12:24.3942432Z [INFO] [coord] toggle stop edge during Starting — queued
2026-05-18T08:08:58.6934874Z [ERROR] failed to check for updates: error sending request for url (https://github.com/appergb/openless/releases/download/v1.3.4-4-beta-tauri/latest-windows-x86_64-beta.json)

Updater diagnosis: the beta release tag was discoverable before the Windows updater manifest asset finished publishing. Later verification showed the manifest existed with Last-Modified: 2026-05-18T08:09:44Z, after earlier logged failures.

Acceptance criteria

  • Settings lets Windows users disable Open App and Switch Style action shortcuts.
  • A disabled action shortcut persists as an empty primary key with no modifiers and does not collide with dictation, QA, translation, or the other action shortcut.
  • A disabled action shortcut unregisters any existing monitor and does not enter an endless retry loop.
  • Targeted Windows Rust unit tests can start without STATUS_ENTRYPOINT_NOT_FOUND on MSVC.
  • First stop/toggle during Starting preserves the pending-stop path; repeated stop/toggle while pending cancels the session.
  • Cancellation before ASR open does not continue startup with stale session resources.
  • Beta updater checks skip noisy publishing gaps when the concrete platform manifest is 404, while still surfacing real network failures.
  • CI passes on Windows, macOS, and Linux.

Blocked by

None - can start immediately.

PR

Implemented by #490.

Out of scope

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions