Repository navigation
feat: add a mapping wizard for controllers without a known profile #79
Description
Activity
- addedpriority: highImportant for the controller-first experienceImportant for the controller-first experiencetype: featureNew capabilityNew capabilityarea: inputInput pipeline and routingInput pipeline and routingarea: controllerController detection, prompts and mappingController detection, prompts and mapping
on Sep 27, 2026 - added a parent issue
on Sep 27, 2026 - addedmoscow: mustMoSCoW: required for 1.0MoSCoW: required for 1.0and removedpriority: highImportant for the controller-first experienceImportant for the controller-first experience
on Sep 27, 2026 Implemented in #121 (merged). CI covers everything that can run without a joystick:
- the wizard state machine: neutral calibration, deadzone, inverted axes, one press per step, refusing reused inputs, skip, redo, timeout, and test mode
- profile validation, the security boundary for imports: size, depth, unknown or duplicate fields, ranges, and required controls
- the full journey with simulated raw events: map → test → save → restart → profile applied, with replacement only after confirmation, cancel never touching the saved profile, and import/export
Still open: the acceptance criterion needs real hardware. A generic USB joystick hasn't been mapped, saved and used after a restart on Windows yet. The checklist is in
docs/TESTING.mdunder "Joystick sem perfil (assistente, #79)", and results go indocs/controller-compatibility.md. I'm leaving this issue open until that manual check has been done.Follow-up: a pad with only a D-pad and two buttons can't open Actions or Menu unless those optional steps are mapped. The wizard asks for them first among the optional steps.
- added a commit that references this issue
on Sep 27, 2026 #128: profiles mapped without Actions (North) and/or Menu (Start) now open them by holding Confirm / Back for 0.6 s (short presses unchanged; the bottom bar shows "(segure)" on those glyphs). Covered by a unit test through the real router; still needs a manual check with a real two-button joystick (
docs/TESTING.md, "Joystick sem perfil").
Summary
Let users map directions, confirm, back and optional buttons on joysticks SDL doesn't know as gamepads. Today such devices are detected but cannot drive the UI.
Motivation
The spec requires unknown controllers to be configurable; a two-button pad must reach every essential function.
Requirements
Controller UX
Wizard driven by the device being mapped, with keyboard fallback.
Technical Notes
Raw joystick events from
Sdl3InputBackend; profiles via a newIControllerProfileStore.Acceptance Criteria
Testing
Unit tests for new branches and for every bug reproduced before a fix (no trivial variations, see AGENTS.md). Manual with a generic USB pad.
Dependencies
Priority: high · Milestone: 9 · 1.0 Readiness