# M02-GMP-INPUT-001 — Player input intent seam ## Ownership - Target: M02 - Program: GMP/FND - Owner/Agent ID: sindo-main-codex - Branch: `work/sindo-main-codex/m02-player-input` - Lease expires UTC: 2026-07-16 - Integrator: M02 milestone integrator ## Outcome Replace direct keyboard polling in the runtime player with remappable Input Map actions and an immutable `PlayerInputSource → MoveIntent` boundary while preserving the current render-sandbox movement behavior. ## Non-goals - Extract local movement, terrain query, camera rig or character presenters. - Claim exact build-12340 movement/keybinding parity before original-client fixtures. - Change movement speeds, camera geometry, terrain sampling or renderer behavior. - Mark M02 complete or edit its checklist/Evidence. ## Paths - Exclusive: `src/domain/input/`, `src/gameplay/input/`, `src/tests/scenes/player_input_regression.tscn`, `src/tools/verify_player_input.gd`, `docs/modules/player-input.md`, this claim - Shared/hotspots: `project.godot`, `src/scenes/player/third_person_wow_controller.gd`, `docs/modules/README.md` - Generated/ignored: Godot import metadata, `.uid` files and local renderer corpus ## Contracts and data - Public API: immutable `MoveIntent`; `PlayerInputSource.sample_move_intent` - Configuration: additive `openwc_player_*` Input Map actions - Persistence/schema/cache: unchanged - Consumers: current sandbox player controller; later local movement controller ## Dependencies - Requires: merged M01 coordinate/streaming-focus contracts on master `62eece9` - Blocks: later M02 movement-controller extraction - External state: none; tests use synthetic Input Map events ## Verification - Commands: dedicated player-input verifier, headless project load, coordinate boundary gate, coordination/documentation gates and diff hygiene - Fixtures: synthetic action strengths and configured default bindings - Fidelity evidence: current W/S/A/D, Shift, E/Q and Space sandbox behavior remains mapped through actions; exact 3.3.5a semantics remain unverified - Performance budget: one immutable intent allocation per physics tick; no I/O ## Documentation deliverables - Inline API documentation for `MoveIntent`, `PlayerInputActions` and `PlayerInputSource` - Player-input module specification with inputs/outputs, data-flow and sequence diagrams - Module registry/source map and honest capability status ## Simplicity and naming - Important names: `MoveIntent`, `PlayerInputSource`, `PlayerInputActions` - Simplest approach: immutable value, one input adapter and one controller consumer - Rejected complexity: input provider hierarchy, event bus and generic command framework - Unavoidable complexity: none - Measured optimization evidence: not applicable ## Status - State: active - Done: claim and isolated worktree - Next: implement contract, adapter, integration, tests and documentation - Blocked by: