Files
openchamber/packages/ui/tests/ego-lite/shortcut-registry.checklist.yaml
Bohdan Triapitsyn 7977842e1e feat(ui): redesign the default shortcut layout around a mod+k leader
Single chords stay for everyday actions; open/go actions move to two-step
mod+k sequences; held mod+digit switches header session tabs and held
mod+alt+digit switches context panel surfaces. Rare actions leave the
shortcut schema for the command palette, every remaining action ships with
a default binding, and stored overrides from the old layout reset once.
Key matching now follows the physical key on non-Latin layouts and for
Option-modified digits on macOS, including in the recording dialog.
2026-08-26 14:52:31 +03:00

218 lines
8.4 KiB
YAML

version: 1
kind: manual-agent-browser-checklist
metadata:
id: shortcut-registry-ego-lite
title: Shortcut registry and prefix sequence regression
owner: packages/ui
runner: ego-lite
interface: ego-browser
dependencies: []
documentation: packages/ui/src/lib/shortcuts/DOCUMENTATION.md
target:
default_url: http://127.0.0.1:9601
viewport:
width: 1800
height: 1050
evidence_directory: ~/Desktop/openchamber-pr-2532-evidence
evidence_prefix: openchamber-pr-2532
limitations:
- IME checks use synthetic KeyboardEvent.isComposing and keyCode 229 signals. Repeat them with a real system IME before claiming native IME coverage.
- The Windows profile overrides Chromium user-agent data. It validates browser platform detection and rendered shortcut labels, not native Windows keyboard events or desktop packaging.
- The macOS profile validates the web runtime. Electron, VS Code, hosted mobile, and Capacitor mobile require separate runtime checks.
platform_profiles:
macos_native:
description: Use the host browser user agent without overrides.
expected_primary_modifier: Command
expected_labels:
- Command symbol U+2318
- Option symbol U+2325
setup:
- Open the target URL in a fresh ego-lite tab.
- Confirm navigator.userAgent contains Macintosh or Mac OS X.
- Open Settings, then Shortcuts.
windows_ua_mock:
description: Override Chromium identity before reloading the application.
cdp_command:
method: Network.setUserAgentOverride
params:
userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
platform: Win32
userAgentMetadata:
brands:
- brand: Chromium
version: "138"
- brand: Not=A?Brand
version: "24"
fullVersionList:
- brand: Chromium
version: 138.0.0.0
- brand: Not=A?Brand
version: 24.0.0.0
fullVersion: 138.0.0.0
platform: Windows
platformVersion: 10.0.0
architecture: x86
model: ""
mobile: false
bitness: "64"
wow64: false
setup:
- Open the target URL in a separate ego-lite tab.
- Apply the CDP command above.
- Reload before evaluating navigator or rendered shortcut labels.
- Confirm navigator.userAgent contains Windows NT and navigator.platform is Win32.
- Open Settings, then Shortcuts.
checks:
- id: macos-shortcut-labels
priority: critical
profile: macos_native
steps:
- Inspect Session Controls, Panels and Tools, Navigation, and Application.
- Capture the visible Shortcuts settings pane.
assertions:
- Open draft project picker renders as Command + S, P using the macOS Command symbol.
- Open draft worktree picker renders as Command + S, G using the macOS Command symbol.
- Open recent sessions renders as Command + S, L using the macOS Command symbol.
- New Mini Chat window renders both macOS Command and Option symbols.
- No Windows key glyph is used for Mod or Alt.
evidence:
type: screenshot
filename: openchamber-pr-2532-macos-shortcuts.png
last_result:
status: passed
- id: windows-ua-shortcut-labels
priority: critical
profile: windows_ua_mock
steps:
- Inspect the same shortcut rows used by macos-shortcut-labels.
- Capture the visible Shortcuts settings pane.
assertions:
- Open draft project picker renders as Ctrl + S, P.
- Open draft worktree picker renders as Ctrl + S, G.
- Open recent sessions renders as Ctrl + S, L.
- New Mini Chat window renders as Ctrl + Alt + N.
- No macOS modifier symbols or Windows key glyph are rendered.
evidence:
type: screenshot
filename: openchamber-pr-2532-windows-ua-shortcuts.png
last_result:
status: passed
- id: recorder-contextual-prefix
priority: critical
profile: macos_native
steps:
- Edit Focus input.
- Record Mod + L as the first chord.
- Verify no conflict message is shown before the 3000 ms settling timeout.
- Record L as the second chord before timeout.
- Capture the settled recorder without saving the override.
assertions:
- The recorder shows two chords and no more than three physical keys per chord.
- A contextual prefix warning names Add selection to chat.
- Confirm remains enabled because the contextual owner yields outside its context.
- The browser-risk warning is visible for the Mod + L leader.
evidence:
type: screenshot
filename: openchamber-pr-2532-recorder-contextual-prefix.png
cleanup:
- Select Cancel so the test does not persist a shortcut override.
last_result:
status: passed
- id: recorder-single-chord-timeout
priority: high
profile: macos_native
steps:
- Edit Focus input.
- Record Mod + L as the first chord.
- Observe the recorder before 3000 ms.
- Wait at least 3000 ms without pressing a second chord.
assertions:
- No conflict or browser-risk message is visible before settlement.
- Exact-conflict and browser-risk feedback appears after settlement.
cleanup:
- Select Cancel so the test does not persist a shortcut override.
last_result:
status: passed
- id: selection-toolbar-scope
priority: critical
profile: macos_native
preconditions:
- Open a rendered assistant response containing selectable Markdown text.
steps:
- Select text to open the selection toolbar.
- Trigger an unrelated application shortcut and verify it does not run.
- Dispatch composing Mod + L and verify Add to chat does not run.
- Dispatch composing Escape and verify the toolbar remains open without reaching later global capture listeners.
- Dispatch non-composing Mod + L and verify the selected Markdown reaches the composer once.
- Reopen the toolbar and press Escape.
assertions:
- The visible toolbar suspends the global shortcut registry.
- IME composition is not consumed by the toolbar shortcut scope.
- IME Escape keeps its native default while bypassing global Escape handling.
- Add to chat runs once for the active toolbar only.
- Escape dismisses the toolbar and restores global shortcuts.
evidence:
type: recording
filename: openchamber-pr-2532-shortcut-regression-final.mov
last_result:
status: passed
- id: draft-picker-sequences
priority: critical
profile: macos_native
preconditions:
- Open a draft session with project and worktree selectors mounted.
steps:
- Trigger Mod + K, P and verify the project picker opens.
- Press Escape once and verify it closes.
- Trigger Mod + K, G and verify the worktree picker opens.
- Press Escape once and verify it closes.
assertions:
- The Mod + K leader arms without a visible menu and completes on the second key.
- Each sequence opens only its target picker.
- One non-IME Escape closes either controlled picker.
evidence:
type: recording
filename: openchamber-pr-2532-shortcut-regression-final.mov
last_result:
status: passed
- id: dropdown-ime-navigation
priority: critical
profile: macos_native
steps:
- Open the project picker.
- Dispatch Ctrl + N with isComposing true and keyCode 229.
- Dispatch Ctrl + P with isComposing true and keyCode 229.
- Dispatch Escape with isComposing true and keyCode 229.
- Dispatch one non-IME Escape.
assertions:
- Ctrl + N moves active selection forward during composition.
- Ctrl + P moves active selection backward during composition.
- IME Escape remains available to the native input method and does not close the picker.
- Non-IME Escape closes the picker once.
evidence:
type: recording
filename: openchamber-pr-2532-shortcut-regression-final.mov
last_result:
status: passed
last_run:
date: 2026-08-06
application_url: http://127.0.0.1:9601
source: working-tree
browser: ego-lite through ego-browser
overall_status: passed-with-documented-limitations
notes:
- The browser checks passed against the working tree before commit; repository validation is recorded separately in the pull request.
- Keep screenshots and recordings outside the repository and attach them to the pull request.