Skip to content

Fix hotkey triggers and preserve canceled dictation in History - #1043

Merged
altic-dev merged 9 commits into
mainfrom
B/hotkey-fixer
Oct 2, 2026
Merged

altic-dev merged 9 commits into
mainfrom
B/hotkey-fixer

Conversation

@altic-dev

@altic-dev altic-dev commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Description

Fix shortcut capture and false-trigger regressions, including Ctrl+Cmd+D. Primary Toggle keyboard/mouse shortcuts activate on release; Hold and Automatic keep their existing press behavior. Removed or changed bindings cannot leave stale held keys or queued recording starts behind.

Escape during dictation now finishes transcription and saves it to History without inserting into the focused field, copying to the clipboard, or sending. History-disabled, training, and disposable practice captures remain discarded. Escape during voice Edit also suppresses the pending rewrite and clears canceled context. Voice Command cancellation suppresses model output, undispatched tools, further agent turns, and pending voice confirmation; canceled undispatched intent is removed from the saved conversation. An already-dispatched terminal command retains its real result. Ordinary typed follow-ups and explicitly confirmed commands retain normal behavior. Rejected notch follow-ups retain their draft and explain the pending approval; accepted submissions cannot erase a newer draft. Voice confirmation cleanup also covers cancellation at the caller’s await continuation. Pending delivery rechecks cancellation after focus/clipboard waits, before every direct-insertion fallback, and before each AX write or Unicode chunk. Dismissing a dictionary suggestion preserves the current recording and its held shortcut release.

Type of Change

  • 🐞 Bug fix
  • ✨ New feature
  • 💥 Breaking change
  • 🧹 Chore
  • 📝 Documentation update

Related Issue or Discussion

Regression coverage informed by #556, #498, #94, #211, #1031, and #909. Clean event replay does not establish that every reported hardware/remapper issue is fixed.

Testing

  • Tested on Intel Mac
  • Tested on Apple Silicon Mac
  • Tested on macOS version: 27.0
  • Ran linter locally: swiftlint --strict --config .swiftlint.yml Sources Tests Package.swift — zero violations in 500 files.
  • Ran formatter locally: swiftformat --config .swiftformat Sources
  • Ran tests locally: 347 signed XCTest checks passed, covering hotkeys, audio readiness, clipboard delivery, Spoken Send, frozen provider/target settings, and direct insertion cancellation. Production History persistence checks passed all nine groups. Both continuation-race and rejected-draft tests reproduced failures on b5e445e and pass after the fix. Full production Command cancellation/UI harness passed 127 assertions; production voice Edit caller passed 8 scenarios; Command session boundaries passed 151 assertions.

Private FI build installed/launched; deep strict signature verification passed. Three independent subagent reviews completed; follow-up review fixes cover direct insertion after Escape and suggestion dismissal during recording. A reproduced modifier-only Toggle dismissal regression now passes after the fix. Barath reported the installed behavior works after trying it.

Screenshots / Video

Updated Cancel Recording description in the installed app; layout and styling are unchanged.

Installed Shortcuts screen

  • No UI/visual changes; screenshots/video are not applicable.

Notes

Bare letters, digits, and editing keys require a modifier for recording shortcuts; punctuation and modifier-only shortcuts remain supported. Cancel and Paste Last retain their separate rules.

Escape cannot undo OS input already dispatched. Voice Edit and Command use the existing Escape request marker and delivery validity checks. Cancellation cannot undo an already-dispatched terminal action; it retains the real result and prevents another step. Ordinary typed/manual requests are covered as non-effects. Boundary doubles do not establish a physical Escape or real provider/terminal end-to-end test for the new mode fixes. Event replay/policy/source-wiring checks do not prove physical hotkey delivery across remappers, Secure Input, sleep/wake, other keyboards, or older macOS versions. No recording delay, discarded opening PCM, new polling, or dependencies added.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-02T01:13:02.867973Z 1769809 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Refactors hotkey handling and adds cancellation tracking to dictation flow.

The PR appears safe to merge, with a non-blocking feedback issue for rejected notch follow-ups.

Summary

The PR changes shortcut activation and cancellation routing, preserves eligible canceled dictation in History without delivery, and adds cancellation guards for Edit, Command, and text insertion. Since the previous review, it also preserves rejected notch follow-up drafts and cleans up voice confirmation at the caller continuation.

Reviews (8) · Last reviewed commit: "close Command cancellation race and pres..."

Comment thread Sources/Fluid/Services/TypingService.swift Outdated
Comment thread Sources/Fluid/ContentView.swift
@altic-dev

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread Sources/Fluid/Services/GlobalHotkeyManager.swift Outdated
@altic-dev

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 19f91f2696

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Sources/Fluid/ContentView.swift Outdated
@altic-dev

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cce3e8670

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Sources/Fluid/ContentView.swift Outdated
@altic-dev

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 946cd9fb6b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Sources/Fluid/Services/CommandModeService.swift
Comment thread Sources/Fluid/Services/TypingService.swift
@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

FluidVoice PR build ready

Download FluidVoice-PR-1043-1769809bcdb2

The artifact contains the ad-hoc-signed app ZIP, Xcode archive, build manifest, and installation instructions. It expires 5 days after the build.

Install the app

  1. Extract the downloaded artifact, then extract FluidVoice-PR-1043.app.zip.

  2. Move FluidVoice Fix hotkey triggers and preserve canceled dictation in History #1043.app into the /Applications folder.

  3. Open Terminal and remove the download quarantine marker:

    xattr -dr com.apple.quarantine "/Applications/FluidVoice #1043.app"
    
  4. In Applications, Control-click FluidVoice Fix hotkey triggers and preserve canceled dictation in History #1043.app and choose Open.

  5. If macOS still blocks it, open System Settings → Privacy & Security, click Open Anyway, and confirm.

This build has its own app identity, so its permissions are separate from the release version of FluidVoice.

View workflow run

@greptile-apps

This comment has been minimized.

@altic-dev

Copy link
Copy Markdown
Owner Author

The Escape follow-up is now in b5e445e. Voice Edit suppresses the late rewrite at the model/focus/delivery boundaries and clears canceled context. Voice Command suppresses undispatched tools, further turns, stale streaming UI, and pending voice confirmation. Undispatched canceled intent is removed from saved chat; an already-started command keeps its actual result. Typed follow-ups and explicit confirmations retain normal behavior.

Validation: 346 signed XCTest checks, 103 production Command cancellation assertions, 8 production voice Edit scenarios, 151 Command session assertions, and all 9 History persistence groups passed. Strict lint: zero violations. The Edit outside-diff concern and earlier Command cancellation/revival concerns are now covered by this scoped follow-up. New CI/Greptile review is still running.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b5e445ed71

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Sources/Fluid/ContentView.swift
Comment thread Sources/Fluid/Services/CommandModeService.swift Outdated
@altic-dev

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread Sources/Fluid/ContentView.swift
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 1769809bcd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@altic-dev
altic-dev merged commit cc3168c into main Oct 2, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant