Skip to content

Add radar pointer control to the mouse panel - #1014

Merged
enaboapps merged 7 commits into
mainfrom
feat/mouse-radar-1013
Oct 11, 2026
Merged

enaboapps merged 7 commits into
mainfrom
feat/mouse-radar-1013

Conversation

@enaboapps

@enaboapps enaboapps commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1013

Summary

  • New pure scan_radar engine. A beam turns clockwise from straight up around the pointer. Select fixes the direction, then a marker travels out to the display edge and wraps. It covers manual steps, reverse direction and the pass limit.
  • The mouse panel gains a Radar key between ← and →, under ↑. Choosing it hides the panel and enters a new MouseRadar workflow stage. The final Select sends MouseMoveAbsolute through the existing input adapter, and the panel then continues as after any other mouse action.
  • Cancellation: if no pointer is available, the panel shows a notice instead. A change of display, the pass limit, settings restarts, execution failures and reset all return to the panel without moving the pointer.
  • The beam is drawn with up to 32 existing native strips, so there is no full-screen bitmap and no renderer changes on Windows or macOS.
  • The UI phase mouseRadar is added to the TypeScript union and the status text. The docs gain a Radar section in docs/point-scan.md.
  • No persisted settings or protocol changes.

Validation

  • cargo fmt --check, cargo clippy --all-targets -D warnings and cargo test all pass (731 passed).
  • npm run lint, npm test (293 vitest tests and 12 node tests) and npm run build all pass.
  • npm run prediction-model hit a network ECONNRESET locally, but the worker binaries it needed were fetched and the Rust build ran.
  • An independent review ran on cbb4372, then on fd36215 and e38bf2a. The one actionable finding is fixed: a short beam near a display edge used up its pass limit within a few ticks, and each automatic pass now lasts at least one mouse panel interval. Nits also addressed: the drag cue stays during radar, Open Mouse returns to the panel, radar state is cleared when the keyboard opens, and a misleading test assertion was removed. The final review found nothing actionable.
  • Remaining optional points from the review: the minimum pass is still short with a 100 ms interval; a running radar ignores settings changed mid-sweep; and up to about 37 strip windows are redrawn each tick, which is worth profiling.
  • Follow-ups requested by the user: in the distance step, the beam now grows out from the pointer instead of moving a square (236bfcf, d7802eb), and the radar now uses the cursor overlay's colour (352a7e6). Independent reviews of each of these commits found nothing actionable. cargo test passes (733 tests), and CI and CodeQL pass on 352a7e6.
  • Not yet done: a manual Windows/macOS smoke test of the sweep, pointer landing, mixed DPI, Escape and display change.

🤖 Generated with Claude Code

A Radar key in the middle of the mouse panel's arrows sweeps a dotted
beam around the pointer. Select fixes the direction, a marker travels out
to the display edge, and Select moves the pointer there before returning
to the panel.

Closes #1013

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@enaboapps enaboapps added this to the v1.0.0-rc.24 milestone Oct 11, 2026
OwenMcGirr and others added 2 commits October 11, 2026 12:34
Give each automatic radar pass at least one mouse panel interval, so a
short beam near a display edge is not used up within a few ticks. Keep
the drag cue during radar, let Open Mouse return to the panel, and clear
radar state when the panel is left for the keyboard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The runtime rebuilds the engine for Open Mouse, which releases held
input, so the workflow-only assertion described behaviour that never
happens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@enaboapps
enaboapps marked this pull request as ready for review October 11, 2026 11:37
@greptile-apps

greptile-apps Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium impact] No blocking correctness or security issues were found; native Windows/macOS rendering and real pointer behavior still need smoke testing.

T-Rex evidence

Command output from the check

  • Executed the initial PR radar implementation with the complete coordinate and progression matrix; all geometry checks passed.

Command output from the check

  • Executed the final production radar implementation with the identical matrix; all geometry checks passed and the zero-reach interval guard behaved correctly.

Evidence from the check

  • Imports actual production Rust modules and applies fake inputs against an independent geometry oracle; no native input is injected.

Evidence from the check

  • Runs both production variants and captures commands, working directories, exit codes, source provenance, and repository checks; the validation is reproducible.

Evidence from the check

  • Defines the isolated Rust harness and cached dependencies without changing the application manifest; tracked dependencies remain untouched.

Evidence from the check

  • Preserves the generated manifest with the exact harness source path used for execution; the successful build configuration is available.

Evidence from the check

  • Preserves Cargo's resolved standalone harness dependencies; the executed dependency versions are traceable.

Evidence from the check

  • Contains the radar module extracted from commit cbb4372 and imported by the baseline run; the before behavior uses actual PR source.

Evidence from the check

  • Preserves the exact final radar module imported by the successful head run; the tested implementation is available.

Evidence from the check

  • Preserves the production scanning types and engine module imported by the harness; these interfaces were not replaced with test-only definitions.

Evidence from the check

  • Preserves the actual production preference resolution and pass-limit behavior used by the harness; preference semantics were not stubbed.

Command output from the check

  • Captured Git source, the initial-to-final radar diff, numbered production lines, and workflow call sites; tested source provenance is traceable.

Command output from the check

  • Executed working-tree and index diff checks with exit code 0; tracked files were unchanged.

Command output from the check

  • Captured source hashes and queried native development packages; missing GTK/WebKit/libsoup prevents full Tauri validation.

Command output from the check

  • Captured the final runner invocation and its child-command results; both comparable engine executions exited successfully.

Command output from the check

  • Attempted the baseline run with an unavailable offline serde_json pin; the failure occurred before engine execution.

Command output from the check

  • Attempted the head run with the same unavailable offline dependency pin; the failure occurred before engine execution.

Evidence from the check

  • Preserves the harness that required exact integer equality at half-pixel ties; its comparison was stricter than nearest-pixel correctness.

Command output from the check

  • Executed the initial radar source and observed adjacent rounded pixels at a floating-point tie; this prompted correction of the harness oracle.

Command output from the check

  • Executed the final radar source and observed the identical half-pixel comparison failure; it was not introduced by the final change.

Command output from the check

  • Preserves the captured runner output containing the strict half-pixel assertion failures; unsuccessful attempts remain visible.

Evidence from the check

  • Generates and executes the initial-commit and HEAD Rust harnesses with explicit platform stubs and fake input only, making the narrow checks reproducible.

Evidence from the check

  • Runs the uploaded harness generator from the repository root, providing the exact command used for verification.

Evidence from the check

  • Defines the two harness binaries and their non-native Rust dependencies, allowing validation without building Tauri.

Evidence from the check

  • Records the Cargo dependency resolution used by the executed standalone harnesses, preserving build reproducibility.

Evidence from the check

  • Contains production modules from cbb4372, extracted runtime cleanup code, explicit stubs, and executable assertions, showing exactly what the before run executed.

Evidence from the check

  • Contains production modules from HEAD, extracted runtime cleanup code, explicit stubs, and executable assertions, showing exactly what the after run executed.

Command output from the check

  • Captures the executed initial-commit harness with command, working directory, and exit code, showing all narrow cleanup assertions passed.

Command output from the check

  • Captures the executed HEAD harness with command, working directory, and exit code, showing no retained radar phase or stale absolute request in the tested paths.

Command output from the check

  • Captures source-routing excerpts, commit identity, tracked-file status, and missing native packages, establishing the cleanup routes and the native execution boundary.

Command output from the check

  • Captures execution of the uploaded shell command and both harness runs, confirming the reproducible runner exited successfully.

View artifacts

Summary

Adds Radar to the mouse panel. Users choose a direction, then a distance, before the pointer moves.

  • Radar scans a direction and distance before moving the pointer.

No blocking issues were found. The changes are safe to merge based on the available evidence. Manual Windows/macOS smoke testing of native rendering, pointer landing, mixed DPI, Escape, and display changes remains outstanding.

Reviews (1) · Last reviewed commit: "Do not assert a held drag after Open Mou..." · Reviewed by Greptile

Replace the moving square outline in the distance step with a beam that
grows from the pointer in the chosen direction. Select moves the pointer
to the beam's tip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@greptile-apps greptile-apps 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.

This review was skipped because it would exceed your organization's monthly flex usage limit. Raise the limit in billing settings or wait until the next billing period resets limits.

OwenMcGirr and others added 3 commits October 11, 2026 13:06
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The radar beam now uses the cursor overlay's colour setting instead of
the mouse panel's scan colour, so it matches the pointer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@enaboapps
enaboapps merged commit 8fde586 into main Oct 11, 2026
6 checks passed
@enaboapps
enaboapps deleted the feat/mouse-radar-1013 branch October 11, 2026 16:15
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.

Add radar pointer control to the mouse panel

2 participants