# M02 — Player Decomposition ## Outcome Разделить тестового player controller на input, movement, camera, terrain query и presentation без изменения наблюдаемого поведения. ## Steps - [ ] Заменить hardcoded keys на remappable Input Map actions с профилем 3.3.5a. - [ ] Выделить `PlayerInputSource → MoveIntent`. - [ ] Выделить local movement state/controller. - [ ] Выделить `TerrainQuery` и убрать прямой ADT parsing из player. - [ ] Выделить third-person camera rig и camera collision policy. - [ ] Выделить character appearance и animation presenters. - [ ] Оставить sprint/flight debug-функции только в sandbox profile. - [ ] Добавить movement/camera state tests и regression scene. ## Fidelity evidence Скорости, повороты, jump/fall/swim/fly, camera orbit/zoom и input semantics сверяются с клиентом 3.3.5a. Debug sprint не считается gameplay parity. ## Exit criteria Каждый компонент заменяем независимо; sandbox управляется не хуже baseline; gameplay logic не загружает визуальные assets. ## Evidence - Date: - Revision/worktree: - Commands: - Results: - Fidelity comparison: - Changed files: - Remaining risks: