Minecraft-Console-Client/tools/pathing_theory/models.py
BruceChen 418f17b4a1 pathing: add side-wall theory, full-coverage parkour test suite, and live test fixes
Theory simulator:
- Add 2D side-wall jump physics with yaw sweep for worst-case margin
- Generate sidewall theory cases (flat/ascend/descend, wall_offset 0/1)
- Add momentum-capabilities.json with band compression and max_reach
- Extend models, capabilities, canonical, and renderers for sidewall

Full-coverage parkour test suite (tools/test-parkour.py):
- Derive test matrix from momentum-capabilities.json
- Build linear/neo/ceiling courses via RCON with 7-block clear margin
- Use /goto for pathfinding, parse A* and PathMgr log output
- Stop-at-first-failure per (family, subfamily, dy, ceil, wo) group
- Hierarchical --filter (e.g. linear/flat, ceiling/headhitter/ceil2.5)
- Exclude sidewall from default matrix (identical max_reach to linear)

Pathing execution fixes:
- Align parkour contracts and timing budgets with live test results
- Fix jump-entry yaw snapping for grounded handoffs
- Template helper and sprint jump template refinements

Made-with: Cursor
2026-04-15 17:52:47 +00:00

55 lines
1.2 KiB
Python

from dataclasses import dataclass
@dataclass(frozen=True)
class TheoryCase:
case_id: str
family: str
subfamily: str
movement_mode: str
momentum_ticks: int
gap_blocks: int | None
delta_y: float | None
ceiling_height: float | None
wall_width: int | None
wall_offset: int | None
expected_reachable: bool
landing_x: float | None
apex_y: float | None
margin: float | None
notes: str = ""
@dataclass(frozen=True)
class MomentumCapabilityBand:
family: str
subfamily: str
movement_mode: str
capability_metric: str
min_mm: int
max_mm: int
max_reach: int | None
delta_y: float | None = None
ceiling_height: float | None = None
wall_offset: int | None = None
notes: str = ""
@dataclass(frozen=True)
class CanonicalLiveCase:
case_id: str
bucket_id: str
family: str
subfamily: str
movement_mode: str
momentum_ticks: int
difficulty_band: str
expected_result: str
world_recipe_id: str
gap_blocks: int | None
delta_y: float | None
ceiling_height: float | None
wall_width: int | None
wall_offset: int | None
start: dict[str, float]
goal: dict[str, float]