2026 03 02_graph_canvas_keyboard_focus_audit_298 - mark-ik/graphshell GitHub Wiki
Date: 2026-03-02
Issue: #298
Scope: Graph-pane keyboard focus traversal baseline and accessible naming model hardening.
- Graph canvas now participates in keyboard traversal when the graph widget has focus.
-
Tabadvances to the next graph node in deterministicNodeKeyorder. -
Shift+Tabmoves to the previous graph node (with wrap-around). - Traversal emits the same reducer-owned selection intent path as pointer selection (
GraphAction::SelectNodewith single-select semantics).
- Graph canvas now reports an explicit accessibility label via
widget_info. - Label includes focused node context when available:
Graph canvas. Focused node: {title-or-url}. Press Tab or Shift+Tab to move between nodes.
- Fallback label when nothing is focused:
Graph canvas. No node focused. Press Tab to focus the first node.
Naming source policy:
- Node title when non-empty.
- Node URL when title is empty.
-
Untitled nodefallback when both are empty.
render::tests::keyboard_traversal_advances_and_wraps_in_deterministic_orderrender::tests::keyboard_traversal_reverse_wraps_to_last_when_unfocusedrender::tests::graph_canvas_accessibility_label_includes_focused_node_name
Executed targeted tests:
cargo test --lib keyboard_traversal_cargo test --lib graph_canvas_accessibility_label_includes_focused_node_name
Observed result:
- All targeted
#298tests passed.
- At least one keyboard traversal flow implemented and tested (
Tab/Shift+Tabwrap traversal). - Accessibility checklist status delta updated to reflect graph keyboard focus + naming baseline closure.
- Focus/naming behavior remains reducer-owned and deterministic.
This closure establishes baseline keyboard traversal and naming exposure for the graph canvas interaction model. Follow-on accessibility work can extend from this baseline to richer per-node AccessKit subtree exposure and reader-mode traversal without changing the core deterministic traversal contract.