Files
open-wc/coordination/claims/M02-GMP-SANDBOX-CAPABILITIES-001.md
T
sindoring 742c415885 gmp(M02): gate debug movement capabilities
Work-Package: M02-GMP-SANDBOX-CAPABILITIES-001

Agent: sindo-main-codex

Tests: capability/input/movement/terrain/camera/presentation; coordinate/streaming/docs/coordination; renderer dry-run 7/7

Fidelity: proves debug sprint/free-flight exclusion in Blizzlike335; no positive movement parity claim
2026-07-14 23:55:27 +04:00

3.4 KiB

M02-GMP-SANDBOX-CAPABILITIES-001 — Debug movement capability gate

Ownership

  • Target: M02
  • Program: GMP/FND
  • Owner/Agent ID: sindo-main-codex
  • Branch: work/sindo-main-codex/m02-sandbox-capabilities
  • Lease expires UTC: 2026-07-16
  • Integrator: M02 milestone integrator

Outcome

Introduce an immutable local-player movement capability contract and require it at the movement boundary so debug sprint and free flight execute only in the explicit RenderSandbox profile and are rejected by Blizzlike335.

Non-goals

  • Claim that current movement values or Blizzlike335 locomotion are 1:1.
  • Build a global application/profile framework before the application shell exists.
  • Remove debug Input Map actions or change their current sandbox bindings.
  • Implement jump, fall, swim, collision, server authority or reconciliation.
  • Mark M02 complete or edit its checklist/Evidence.

Paths

  • Exclusive: src/gameplay/movement/player_movement_capabilities.gd, src/tools/verify_player_movement_capabilities.gd, this claim
  • Shared/hotspots: src/gameplay/movement/local_player_movement_controller.gd, src/scenes/player/third_person_wow_controller.gd, movement/input verifiers, player regression scene, docs/modules/local-player-movement.md, docs/modules/player-input.md
  • Generated/ignored: local .godot, native DLL, generated resources and renderer corpus

Contracts and data

  • PlayerMovementCapabilities owns immutable profile ID plus explicit debug sprint/flight booleans and safe named factories.
  • LocalPlayerMovementController requires the capability value; missing input falls back to Blizzlike335, never sandbox.
  • Player scene maps its exported profile selection once at the composition boundary.
  • Input actions and MoveIntent remain unchanged; rejected debug requests have no effect.

Dependencies

  • Requires: merged character presentation package on master 8c71e46.
  • Blocks: final M02 integration audit and milestone closeout.
  • External state: none; verification is asset-free.

Verification

  • Pure profile factory/default and immutability regression.
  • Sprint accepted in RenderSandbox and ignored in Blizzlike335.
  • Flight toggle/vertical basis accepted in RenderSandbox and rejected in Blizzlike335.
  • Real regression scene verifies both profile compositions.
  • Existing input/movement/terrain/camera/presentation and renderer gates remain required.
  • Fidelity evidence: negative proof that debug capabilities cannot affect the compatibility profile; no positive movement parity claim.

Documentation deliverables

  • Inline public API and profile semantics on the capability/controller boundary.
  • Updated movement and input specs: API, inputs/outputs, data flow, lifecycle, failure/recovery, capability matrix and source map.

Simplicity and naming

  • Important name: PlayerMovementCapabilities.
  • Simplest approach: one immutable value injected into the existing controller.
  • Rejected complexity: autoload singleton, generic feature-flag service and global profile registry.
  • Unavoidable complexity: one profile-to-capability mapping at scene composition.
  • Measured optimization evidence: not applicable.

Status

  • State: active
  • Done: claim and isolated worktree from merged presentation master
  • Next: implement capability contract, gate controller/player and add regressions
  • Blocked by: