Files
VerseVDI-Data-Plane/openspec/changes/phase-3d-macos-native-mvp/specs/macos-input-control/spec.md
T

56 lines
3.3 KiB
Markdown

## ADDED Requirements
### Requirement: P3D-016 complete MVP input
Input SHALL support keyboard, absolute and relative mouse, high-resolution scroll, and one standard controller with a pressed-state ledger and release-all on every authority/interruption boundary.
#### Scenario: Authority loss with pressed input
- **WHEN** focus, network, session authority, sleep, cancellation, or termination changes while input is pressed
- **THEN** release-all is sent/recorded once and no pressed state remains
### Requirement: P3D-017 Windows password is ordinary input
Windows lock-screen credentials SHALL travel only as normal encrypted input events and SHALL never be collected, stored, autofilled, or separately injected.
#### Scenario: Lock-screen typing
- **WHEN** the user types into a remote Windows credential field
- **THEN** the client handles the keys like any remote input and retains no credential value
### Requirement: P3D-028 controller layouts
Controller input SHALL support user-selectable Xbox, PlayStation, and Nintendo/Switch-style normalized layouts with explicit unsupported-capability behavior.
#### Scenario: Layout selection
- **WHEN** the user changes controller layout
- **THEN** subsequent normalized events use the selected mapping and unsupported controls are surfaced explicitly
### Requirement: P3D-029 bounded text clipboard
The client SHALL expose clipboard enablement/direction and visible failure behavior, permit only bounded text, and reject files, file URLs, folders, binary data, and oversized content.
#### Scenario: File clipboard attempt
- **WHEN** a local or remote clipboard advertises a file or file URL
- **THEN** transfer is rejected without reading or persisting file content
### Requirement: P3D-035 native pointer modes and escape safety
The client SHALL aspect-fit video, emit absolute pointer events only inside the rendered viewport, default to macOS-owned absolute cursor behavior, and provide session-only relative capture with reserved local control chords.
#### Scenario: Letterbox pointer
- **WHEN** the absolute pointer is in a letterbox bar
- **THEN** no remote absolute-pointer event is emitted
#### Scenario: Toggle relative mode
- **WHEN** `Control-Option-Shift-M` is pressed during a session
- **THEN** pressed input is released, the chord is not forwarded, capture switches, and the saved/restored cursor point is clamped inside the rendered viewport
#### Scenario: Emergency release
- **WHEN** `Control-Option-Shift-Escape` is pressed in any input mode
- **THEN** pressed input is released, absolute/local cursor ownership and controls return, and the chord is not forwarded
### Requirement: P3D-036 scoped keyboard mappings
Keyboard mapping SHALL support physical/logical keys and simultaneous chords with Mac-to-Windows and language defaults, deterministic global/resource precedence and modifier order, conflicts, enablement, add/remove, and Restore Defaults; macros and reserved-chord remapping are prohibited.
#### Scenario: Conflicting resource mapping
- **WHEN** an enabled resource mapping conflicts with a global mapping
- **THEN** deterministic resource precedence applies and the conflict is visible/editable
#### Scenario: Reserved mapping attempt
- **WHEN** a mapping targets either local reserved escape chord
- **THEN** the mapping is rejected and the local chord remains intercepted