Skip to content

artifact-canvas: keyboard-first review navigation — jump keys, focus management audit, minimap focusability #1237

Description

@amrmelsayed

Context

The canvas's core review loop is already fully keyboard-drivable (verified in source, 2026-07-25): every block is tabindex="0" (stamped at render, renderer.ts:82), Enter/Space on a focused block opens the inline composer, Cmd/Ctrl+Enter submits, Esc cancels, and the "+" affordance and marker-card edit/delete actions are real <button>s with aria-labels. A complete spec/plan review pass works without a mouse today.

Gap: possible-by-keyboard ≠ pleasant-by-keyboard

  1. Linear-only traversal. Tab-walking is the only navigation — a 300-block spec is 300 tab stops. No jump keys for: next/previous heading, next/previous block carrying a marker, first/last marker, top/bottom of document.
  2. Focus management unaudited. Where focus lands after Esc-cancel, after submit, and after deleting a card is unverified — a keyboard flow that drops focus to the document root after every action forfeits its position and undoes the win.
  3. Minimap focusability unverified. Dots have click handlers and cursor: pointer; whether they're reachable and activatable by keyboard (and whether activating one moves focus to the target block) needs checking.
  4. No shortcut discoverability. Nothing surfaces the existing keys (Enter-to-comment, Cmd+Enter, Esc) — a small keys legend or aria-described hint would make the existing support findable.

Proposed

  • Jump navigation (suggested, bikeshed at plan time): n/p next/previous annotated block, ]/[ next/previous heading, with focus + scroll-into-view.
  • Focus-management pass: Esc returns focus to the originating block; submit returns focus to the block (or its new card); delete moves focus to the neighboring card or block.
  • Minimap dots: ensure real-button semantics; activation focuses the target block.
  • A discoverable keys hint (e.g. ? overlay or footer legend).

Enhancement; separate from the affordance hover/sizing bug (filed independently) because this is a feature while that is a defect.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/vscodeArea: VS Code extension

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions