1bf5b526be
Work-Package: M02-QAR-INTEGRATOR-CLOSEOUT-001 Agent: sindo-main-codex Tests: all M02 contracts, renderer dry-run, documentation and coordination gates passed Fidelity: direct binding evidence and reference-only timing/routing are separated; remaining locomotion/camera gaps stay explicit
114 lines
5.1 KiB
Markdown
114 lines
5.1 KiB
Markdown
# M02-GMP-INPUT-001 — Player input intent seam
|
|
|
|
<!-- OPENWC_CLAIM:M02-GMP-INPUT-001:sindo-main-codex:2026-07-16 -->
|
|
<!-- OPENWC_HANDOFF:READY:M02-GMP-INPUT-001:6bd2e84 -->
|
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M02-GMP-INPUT-001:14dead1 -->
|
|
|
|
## 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: ready-for-review
|
|
- Done: twelve remappable actions, immutable `MoveIntent`, stateless
|
|
`PlayerInputSource`, controller migration, asset-free regression scene,
|
|
dedicated verifier and module specification
|
|
- Next: M02 integrator reviews and merges before local movement extraction
|
|
- Blocked by:
|
|
|
|
## Handoff
|
|
|
|
- Commit: `6bd2e84`
|
|
- Branch: `work/sindo-main-codex/m02-player-input`
|
|
- Outcome: the runtime player no longer polls physical keyboard keys. Movement
|
|
action strengths cross an immutable `MoveIntent` seam; camera and immediate
|
|
sandbox-flight events use the same remappable action catalog.
|
|
- Public contract: additive `MoveIntent`, `PlayerInputActions` and
|
|
`PlayerInputSource`; no schema, cache, coordinate or renderer contract change.
|
|
- Verification: `PLAYER_INPUT PASS actions=12 intent_cases=6 controller=1
|
|
regression_scene=1`; asset-free scene smoke exited `0`; coordinate boundary
|
|
(`88` files) and StreamingFocus gates passed; unified renderer dry-run passed
|
|
all eight pre-capture gates and produced seven dry-run checkpoint results;
|
|
coordination/documentation/diff gates passed.
|
|
- Fidelity: W/S/A/D, Shift, E/Q, Space, right mouse, wheel and Escape remain the
|
|
default sandbox bindings. Regression drives forward movement, camera zoom and
|
|
immediate flight toggle through the real controller. This does not establish
|
|
exact build-12340 default bindings, turn/strafe policy or gameplay movement parity.
|
|
- Local verification inputs: the isolated worktree reused the existing ignored
|
|
native DLL and generated ADT resource scripts. Proprietary extracted data and
|
|
the character GLB were absent, so the renderer dry-run logged the expected
|
|
missing-corpus diagnostics while all contract steps returned success.
|
|
- Rebuild/migration: none. Action names are additive; persisted user-binding
|
|
migration does not exist yet and is documented as a gap.
|
|
- Remaining risks: production profile gating for sprint/free flight, exact
|
|
3.3.5a bindings, local movement/terrain/camera/presentation extraction and
|
|
broader movement/camera state tests remain M02 work.
|
|
- Documentation: inline API comments plus `docs/modules/player-input.md` with
|
|
inputs/outputs, data-flow and sequence diagrams, ownership, recovery,
|
|
capability status, known gaps and source map.
|