Skip to content

Explain the Button-mapping prerequisite instead of silently bouncing on direct click #32

@shiftedx

Description

@shiftedx

From the 2026-06-11 critique re-run (32/40, snapshot local-only), the one P1.

What: The sidebar's "Button mapping" item is greyed when no supported game is selected, but clicking it (or navigating to its hash) lands on Status with no explanation. The deep-link guard toast added in PR #30 ("Button mapping needs a game selected in Tuning first.") covers the cold-load intent path in web/src/App.svelte, not the direct-click path through web/src/app/navigation.ts:57's readiness guard.

Why it matters: Jordan (the target first-timer) clicks a visible nav item and gets teleported with zero feedback — "would a user contact support about this?" Yes.

Fix (either, agent's choice):

  1. Reuse the existing guardBounceMessages toast on the direct-click/nav path so every bounce explains itself, AND give the disabled sidebar item a hover/focus title ("Pick a supported game in Tuning to map its buttons"); or
  2. Replace the bounce with a teaching empty state on the Button-mapping route that names the prerequisite and links to Tuning.

Constraints: copy law (no Device/HID/gamepad/plugin/backend/bus; no "legacy" in source); App.svelte is Svelte 5 legacy $: mode — no runes; don't touch web/src/lib/api/*, web/src/lib/mock/*, web/src/lib/types.ts; cd web && npm run check green.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready-for-agentFully specified and ready for an AFK agent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions