Problem
dispatchAutomationWidgetKey emits only .key_down (src/runtime/automation_widget_dispatch.zig:514). Real keystrokes are a press/release pair, and stateful key-lifetime consumers can retain their latch, making a repeated automated chord behave differently from hardware.
Scope
Dispatch a matching .key_up with the same key/modifiers/timestamp after the synthesized press. Do not add a second automation verb: existing widget-key scripts should continue to mean one whole keystroke.
Acceptance
- Repeating an automated chord reaches the target twice.
- Existing single-key behavior remains unchanged.
- Coverage proves the emitted input sequence is down then up.
Upstream candidate
Small, self-contained port from the Cockpit fork; suitable for a signed upstream PR after rebasing on current upstream.
Problem
dispatchAutomationWidgetKeyemits only.key_down(src/runtime/automation_widget_dispatch.zig:514). Real keystrokes are a press/release pair, and stateful key-lifetime consumers can retain their latch, making a repeated automated chord behave differently from hardware.Scope
Dispatch a matching
.key_upwith the same key/modifiers/timestamp after the synthesized press. Do not add a second automation verb: existingwidget-keyscripts should continue to mean one whole keystroke.Acceptance
Upstream candidate
Small, self-contained port from the Cockpit fork; suitable for a signed upstream PR after rebasing on current upstream.