AprilNEA / AprilNEA/OpenLogi

[Bug]: Windows: SmartShift remap stops until agent restart

Open
#1,125 0 comments 1 reaction 0 assignees View on GitHub
area: hidpp platform: windows type: bug
Dominant language
Rust
Stars
21k
Forks
675
Avg merge
2d 5h
Merged PRs (30d)
172

Description

### Component

CLI / background agent

### OpenLogi version

0.8.1

### Operating system

Windows 11 Home 64-bit, build 26200

### Device & connection

Logitech MX Master 3, Bluetooth direct (no receiver). No Logi Options+ package or process found.

### What happened?

An OpenApplication action bound to the SmartShift/DpiToggle button (CID 0x00c4) works right after an agent restart, then stops working after extended runtime. When it fails, native SmartShift resumes.

Observed during a failure:

- `getCidReporting` on CID 0x00c4 reports `diverted=false` — the agent's diversion was dropped.
- Manually writing `diverted=true` succeeds and sticks, but the button is swallowed and no action runs.
- The agent itself stays responsive: inventory IPC answers and `openlogi diag dpi --device "MX Master"` succeeds.

The device/command paths remain healthy while the gesture-capture consumer is dead. From reading the source, the capture session's liveness check treats transport errors other than Timeout/NoResponse as "healthy", so the dead session is never torn down and state is never re-armed. A proposed fix is under review in #1124.

The exact trigger and timing are unknown; it appeared after extended runtime.

### Steps to reproduce

Not deterministic — observed to appear after extended runtime.

1. Windows 11, MX Master 3 over Bluetooth-direct, OpenLogi v0.8.1 agent running.
2. Bind an action (e.g. OpenApplication) to the SmartShift/DpiToggle button; confirm it fires right after an agent restart.
3. Leave the machine running until the bound action stops firing and native SmartShift resumes.
4. Power-cycling the mouse (10 s off/on) does not restore capture; restarting the agent does.

### Diagnostics / logs

Not captured.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating the capture-session liveness check and the getCidReporting path described in the report, then compare how transport errors are classified against Timeout/NoResponse. Review the proposed fix in #1124 and use `openlogi diag dpi --device "MX Master"` while checking that a SmartShift/DpiToggle binding survives an extended run, remains diverted, and still invokes its action.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.