Skip to content

Advertise Windows keyboard-only shortcuts and drop unsupported gesture claims - #504

Merged
coneilen merged 2 commits into
mainfrom
coneilen-microsoft-keyboard-discovery-hints
Sep 29, 2026
Merged

coneilen merged 2 commits into
mainfrom
coneilen-microsoft-keyboard-discovery-hints

Conversation

@coneilen

Copy link
Copy Markdown
Collaborator

Problem

The Windows Keyboard discovery parity row claimed every shortcut was represented by a menu item or visible hint. It was not accurate on either side of the claim.

Auditing the Windows keyboard mapper against the visible surfaces turned up two separate defects:

  • Useful keyboard-only routes were undiscoverable. A number of mapped shortcuts had no menu item, no accelerator-table entry, and no context-menu caption — so the only way to find them was to read the source.
  • The Help content asserted gesture affordances the Windows shell does not advertise. Several rows described canvas and pointer interactions as if they were discoverable, which is the opposite of the honesty the ledger is supposed to enforce.

The second defect is the more damaging one: it made a gap look closed.

Change

graphcode-windows/src/MainWindow.zig

  • The Help > Keyboard Shortcuts content now lists the remaining useful keyboard-only routes: Ctrl+M, context-sensitive Ctrl+E, Ctrl+Up/Ctrl+Down, worktree Up/Down, terminal focus 1/2, Ctrl+Shift+X, and Ctrl+Shift+V, plus toolbar and jump-palette navigation.
  • The canvas/pointer gesture rows are removed rather than reworded. The Windows shell does not advertise those affordances, so listing them was a false claim.

graphcode-windows/README.md and investigation/ui-parity-matrix.md

  • Both now state the residual gap explicitly instead of implying coverage.

Three shortcuts are deliberately left unadvertised, and the reasoning is recorded rather than left implicit:

  • Ctrl+P invokes the same jumpToNode action as Ctrl+J; advertising a duplicate adds noise.
  • Ctrl+Shift+I invokes the same worktree-inspection action as Ctrl+Shift+W.
  • Ctrl+Shift+C collides with terminal copy; Clone Repository stays the advertised route.

Ledger

The Keyboard discovery row remains Partial — this PR makes the row honest, it does not close it. The row now names the specific residuals: canvas click-to-select/open, blank-canvas drag-to-pan, node drag-to-move, connector drag-to-create-edge, wheel/pinch zoom, right-click context-menu access, and sidebar root-loop drag-to-reorder all still lack visible gesture hints.

Closing those requires rendering inside GraphCanvas.zig (canvas gestures) and Sidebar.zig (root-loop reorder). Both are excluded from this PR's scope by explicit instruction, so the work is documented and left for an owner of those surfaces rather than reached into from here.

Exactly one ledger row is modified. No other session's rows are touched.

Test evidence

Run with the pinned Zig 0.15.2 from Tools\windows\bootstrap.ps1 ($env:GRAPHCODE_ZIG0152), against the pinned Winghostty include root.

RED: & $env:GRAPHCODE_ZIG0152 test src\MainWindow.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 -ladvapi32 "-I$env:GRAPHCODE_WINGHOSTTY_ROOT\include" --test-filter 'main and help menus expose missing shortcuts without canvas gesture claims' -> failed with a behavioral assertion mismatch: 10 keyboard-only rows were expected but the Help menu contained 18 rows, including the gesture claims.

GREEN: & $env:GRAPHCODE_ZIG0152 test src\MainWindow.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 -ladvapi32 "-I$env:GRAPHCODE_WINGHOSTTY_ROOT\include" --test-filter 'main and help menus expose missing shortcuts without canvas gesture claims' -> 1 test passed, executed count asserted non-zero so a filter typo cannot read as a pass.

REGRESSION: & $env:GRAPHCODE_ZIG0152 test src\MainWindow.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 -ladvapi32 "-I$env:GRAPHCODE_WINGHOSTTY_ROOT\include" -> all 48 MainWindow and transitively imported InputRouter tests passed; the 18-entry native accelerator-table assertion and the original 15-binding order contract are both unchanged.

The RED above is a behavioral failure, not a compile failure — the test root built and the assertion reported a concrete row-count mismatch.

git diff --check origin/main...HEAD -> exit 0.

Limits of this evidence

Stated plainly, because the row's status depends on it:

  • These are menu and source-level tests driven through a hidden window that inspects the production HMENU labels. They are not physical keyboard input, not touch-device input, and not a live popup-access walkthrough.
  • Nothing here is macOS runtime evidence, so this does not demonstrate parity of behavior — only that the Windows shell now advertises what it actually supports.
  • The regression run is the MainWindow.zig test root, not the full Windows shell suite.

This is why the row stays Partial.

Checklist

  • One change, scoped to the files this task owns
  • Every commit signed off (git commit -s); DCO clean
  • Commit messages UTF-8 with LF endings
  • RED: / GREEN: / REGRESSION: lines present in command -> result form, from commands actually run
  • Failing output preserved and reported as observed, not replaced by the passing run
  • Parity ledger row updated, and kept Partial because the evidence is unit-level
  • No excluded surfaces touched (GraphCanvas.zig, Sidebar.zig, App.zig)
  • Pinned toolchain used throughout; nothing taken off bare PATH

@coneilen
coneilen force-pushed the coneilen-microsoft-keyboard-discovery-hints branch from 81fc801 to 1667b9d Compare September 28, 2026 23:54
coneilen and others added 2 commits September 28, 2026 19:15
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
@coneilen
coneilen force-pushed the coneilen-microsoft-keyboard-discovery-hints branch from 1667b9d to ad59225 Compare September 29, 2026 02:16
@coneilen
coneilen merged commit ca7e1a5 into main Sep 29, 2026
16 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