Commit graph

30 commits

Author SHA1 Message Date
BruceChen
5de169db64 pathing: stabilize 0-replan round-trip on ledge/descend runs
Fix a cluster of execution-layer issues that caused replans and void
falls when traversing narrow ledges and multi-block descents between
(251.5,141,210.5) and (252.5,138,220.5):

- WalkTemplate / GroundedSegmentController: suppress the pre-rotation
  bias toward the next segment's exit heading on stable-footing Turn
  exits where the next segment is not a jump.  The next template
  snaps yaw on its first tick anyway, and pre-rotating mid-stride on
  a 1-block walkway pushes sprint drift perpendicular to the path and
  walks the bot off the edge.  Turn exits into a jump still get the
  bias so the takeoff direction stays aligned.

- GroundedSegmentController.ShouldComplete: relax the headingReady
  gate for Turn exits with stable footing so the segment can complete
  once yaw is aligned with either the current or the next segment
  heading (within 25/15 deg).  Without this the removed bias would
  leave the bot stuck at the end of a walkway waiting for a rotation
  that never happens.

- DescendTemplate: restrict the airborne exit-heading bias so it only
  kicks in when the footprint is inside the landing block, or on
  single-step drops where the fall is too short for lateral drift to
  miss the landing column.  On 2+ block drops the bot now keeps yaw
  pointed at the landing center for the whole fall.

- DescendTemplate: add a multi-block overshoot guard on PrepareJump
  exits.  Once airborne and past the landing end-plane on a 2+ Y
  drop, release forward/sprint and press back briefly so air drag
  pulls the bot back into the 1x1 landing column instead of sailing
  one block past it into the neighbouring void.

Live round-trip between the two goal coordinates now completes with
zero replans in three consecutive runs in each direction.  Full unit
test suite is unchanged from the pre-existing baseline (22 failing
tests, all orthogonal to this change).

Made-with: Cursor
2026-04-22 16:43:43 +00:00
BruceChen
d002930a6a pathing: unify jump moves into MoveJump + IMoveExpander
Replace seven hand-written IMove classes (MoveTraverse, MoveDiagonal,
MoveAscend, MoveDiagonalAscend, MoveDiagonalDescend, MoveParkour,
MoveSidewallParkour) with a single MoveJump driven by a JumpDescriptor
(XOffset, ZOffset, YDelta, JumpFlavor). JumpFeasibility is the single
source of truth for the physics/cost rules of every jump-family move.

A* no longer iterates a flat IMove[]. The Calculate loop now drives
an IMoveExpander[] that writes into a stackalloc Span<MoveNeighbor>,
eliminating per-iteration heap traffic. JumpExpander enumerates every
jump-family descriptor dynamically; LegacyMoveExpander wraps the
remaining dynamic-landing moves (MoveDescend, MoveSprintDescend,
MoveClimb, MoveFall) so callers that still pass a custom IMove[]
keep working.

Add two O(1) short-circuits at the top of JumpExpander.Expand:
- Hoist the per-node parkour preconditions (AllowParkour + CanSprint,
  standing block climbability, feet-liquid, head clearance at y+2)
  so ~170 SprintJump + Sidewall descriptors never call JumpFeasibility
  when the node cannot take off at all.
- Precompute an 8-way "first step has no floor" table indexed by
  (sign(dx), sign(dz)) so SprintJump descriptors in a direction that
  has a walkable floor underneath are dropped without Evaluate.
- Add a conservative "any cardinal wall at y or y+1" probe that skips
  all 112 Sidewall descriptors when no wall exists adjacent to the
  takeoff.

Move tests switch to the new MoveJump.* factory methods. Behavior is
verified by the existing test suite: the 21 pre-existing baseline
failures are preserved exactly, 0 regressions introduced.

Made-with: Cursor
2026-04-19 17:03:26 +00:00
BruceChen
da52aa5c3c pathing: sidewall runup precondition via EntryPreparation
Introduce an EntryPreparationState carried on PathNode + A* context so
sidewall parkour can explicitly request one or more runway traverses
before takeoff instead of silently dropping the move. ParkourFeasibility
gains TryGetRequiredStaticEntryRunupSteps + HasPreparedRunup helpers so
long descends (major=5, dy=-1) only remain feasible when the preceding
node proved the runup.

Widen HasDominantAxisRunUp to accept cold-start sprint-jumps within
~3.1-3.5 blocks horizontally so lone overhang / staircase takeoffs stay
feasible without a 2-block runway (matches Baritone's MomentumBehavior
.ALLOWED contract).

Add a runtime SidewallParkourController that implements the corner
commitment + wall-hug chain during execution.

Extend pathing test fixtures with InitialMomentumTicks, add sidewall
accepted/rejected scenarios, and refresh timing + contract baselines to
reflect the new planner shapes. Document the design in
docs/superpowers/specs and plans.

Made-with: Cursor
2026-04-19 17:03:03 +00:00
BruceChen
95b20d9d1c pathing: async replan + template success/failure alignment
Move PathSegmentManager's Replan to Task.Run so the main tick only reads
results and swaps executors, and introduce a _nextExecutor pre-planning
slot so upcoming segments can prepare while the current one finishes.

Relax per-tick yaw/pitch rate limiting: allow instantaneous snapping
before jump ticks (Baritone does this and servers do not kick for it).

Align jump-template success/failure contracts with Baritone:
- Success key shifts from "speed squared" to "feet-on-target block".
- Failure window widened to the ~200 tick range.
- AscendTemplate gets a headBonkClear + edge/side proximity
  precondition so launches only happen from a safe takeoff.

Expose an initialMomentumTicks option on TemplateSimulationRunner so
follow-up sidewall scenarios can warm up physics before a template
starts.

Made-with: Cursor
2026-04-19 17:02:41 +00:00
BruceChen
e23037a897 feat: add sidewall parkour planner support 2026-04-18 16:26:15 +00:00
BruceChen
724880f928 fix: propagate parkour profiles through astar 2026-04-18 16:14:04 +00:00
BruceChen
b4b0c6e8ed refactor: thread parkour profile into runtime segments 2026-04-18 16:04:45 +00:00
BruceChen
f64c6be0a9 test: harden sidewall fixture coverage 2026-04-18 15:45:00 +00:00
BruceChen
43db3950e3 test: complete sidewall fixture matrix 2026-04-18 15:29:42 +00:00
BruceChen
056d7afef1 test: add sidewall scenario builder fixtures 2026-04-18 15:18:55 +00:00
BruceChen
d919bff91f pathing: tighten linear parkour execution 2026-04-18 06:14:45 +00:00
BruceChen
891763602a pathing: align linear completion with live execution 2026-04-17 20:09:56 +00:00
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
BruceChen
cf8bf349db pathing: align parkour contracts with live budgets 2026-04-15 17:36:20 +00:00
BruceChen
ce555da95e pathing: align prepare-jump convergence tests 2026-04-15 16:49:50 +00:00
BruceChen
aad6ad83d3 pathing: snap yaw only for grounded jump-entry walk states 2026-04-15 16:43:39 +00:00
BruceChen
8408a41398 pathing: snap yaw for jump-ready grounded handoffs 2026-04-15 16:37:12 +00:00
BruceChen
2be9b287a3 pathing: snap yaw for sprint jump approach 2026-04-15 16:29:11 +00:00
BruceChen
be6be4da36 test: surface path timing contracts in live harness 2026-04-14 10:51:13 +00:00
BruceChen
b42a24e77a test: add long route timing contracts 2026-04-13 17:20:46 +00:00
BruceChen
eb9d6ce356 test: add jump combo planner and timing contracts 2026-04-13 17:08:32 +00:00
BruceChen
ba1dc32ccb test: lock short route planner and timing contracts 2026-04-13 16:52:34 +00:00
BruceChen
b9bff02107 Add path execution telemetry and scenario runner 2026-04-13 16:36:11 +00:00
BruceChen
9fe376a3bb Add pathing contract loader validation scaffold 2026-04-13 16:24:23 +00:00
BruceChen
b0fab26c66 test: add pathing transition regression coverage 2026-04-13 15:36:09 +00:00
BruceChen
6e4cf4a10e fix: stabilize descend landings after braking 2026-04-12 18:43:33 +00:00
BruceChen
4b92781d10 fix: brake landing recovery before turns 2026-04-12 18:43:33 +00:00
BruceChen
0e0fc06b72 feat: tighten parkour reliability checks 2026-04-12 18:43:33 +00:00
BruceChen
6b449cc72a feat: converge grounded path segment completion 2026-04-12 18:43:33 +00:00
BruceChen
3b4e552d70 feat: add transition-aware path execution braking 2026-04-12 18:43:33 +00:00