CNA-VGAP-032: Input behaviour on real hardware is unverified: the 15-task manual hardware checklist is blocked, and the focus-loss keyboard test checks only the bridge's accumulator
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
Controllers, touch, IME, non-US layouts, joysticks and host sensors are recorded as unverified on hardware, and the focus-loss keyboard test reads InputManager's legacy state through a local shim, not the public Keyboard::GetState.
- Identifier
CNA-VGAP-032- Category
- Verification gap
- Subsystem
- Testing & evidence
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- Keyboard::GetState across focus loss; GamePad, TouchPanel, text input/IME and device input on real hardware
Expected behaviour
Input semantics that depend on devices and window systems need evidence from those devices and window systems.
Actual behaviour at TARGET
plan_input.md Phase 11 (P11-001..015, the manual hardware checklist) is open, every task marked blocked, and the hardware matrix in input-manual-verification-results.md has every controller, touchscreen, IME and Czech-layout cell unchecked. WindowFocusLostDoesNotClearHeldKeysMatchingFna in SdlInputBridgeKeyboardTests.cpp reads a file-local Keyboard struct whose GetState is InputManager::GetKeyboardState(); the public Keyboard::GetState reads the platform keyboard snapshot (IPlatformKeyboard), and no test reads it across focus loss. Platform-level focus-loss release is pinned only for Wayland (WaylandProtocol.KeysHeldAtEnterAreStateNotEventsAndLeaveReleasesThemQuietly, in a suite no workflow runs) and, at event-mapper level, for Win32 (Win32EventMapping.TracksHeldKeysAndReleasesThemOnFocusLoss); X11 releases all keys on FocusOut and SDL3 reads SDL's keyboard state, with no focus-loss test for either.
Source locations
plans/plan_input.md— Phase 11 manual hardware validation: 15 tasksdocs/input-manual-verification-results.md— hardware verification matrix, all cells uncheckedmodules/input/tests/CNA/Internal/Input/SdlInputBridgeKeyboardTests.cpp— local Keyboard shim over InputManager
Evidence
Checked by reading at 009d40f5; not executed.
Independent re-verification: Checked by reading at 009d40f5; not executed. Platform focus-loss tests found by searching modules/platform/tests and modules/input/tests for FocusLost, FocusOut and KILLFOCUS.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
Headless unit tests cover the input state machine with canned platforms and synthetic events.
Regression test
Per-platform focus-loss tests through the public Keyboard::GetState; recorded hardware runs using the template in the results document.
Blast radius
Evidence only; controller mappings, rumble, touch gestures, IME composition and layouts may differ on real devices.
Workaround
No workaround is known.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Deep dives
- Input model: focus · Input model: evidence
- Known issues
- Verification gap index