Repository navigation
plan-check: also run the server's exact path query - #304
Merged
Merged
Conversation
Merge dev into main
plan-check walks every hop on the offline query (65535 nodes, steep excluded, straight path). The server refuses some of those hops live: its query keeps 2048 search nodes and 256 polys, includes steep ground, and builds a smoothed path of at most 256 points, and the run leader's CheckMove refuses NOPATH and no-progress incomplete legs. A direct hop inside the arrival radius (kArriveYd, 3 yd) is never sent: WalkTo counts it reached and the party stays behind. nd_server_path replays BuildPolyPath + findSmoothPath with the server's filter; Planner.ServerPath/ServerMoveVerdict expose the type bits and the CheckMove verdict; the check fails such hops as server unreachable or hop inside the arrival radius and walks on from where the server leaves the party. New path-check replays one hop from logged positions.
…th the spec Hateforge test
…orge (a)(b)(c), windhorn 820 fixture
pjerra
marked this pull request as ready for review
October 24, 2026 08:03
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
plan-check now also asks the server's exact path query, so a plan point the live server would refuse is flagged before a live run.
Why: three live stops on 2026-10-24 (Windhorn Canyon step 641, Hateforge Quarry step 96, a Stormwrought Ruins ledge) passed the old offline check. The navmesh files are byte-identical on both sides; the query differs (the server searches 2048 nodes, plan-check 65535; the run leader treats points within 3 yd as reached; steep polys; the start height).
What changes:
nd_server_pathin navdetour.cpp: a literal port of the core's path query (2048 nodes, 256 polys, 256 smooth points, the core's filter, end-distance and +3 yd start rules).Planner.ServerPathandServerMoveVerdict(mirrors the module's move check);Planner.Planis unchanged.server unreachable), plus the 3 yd arrival rule (a direct hop inside it is never sent live).turtle-agent path-check -map <id> -mmaps <dir> <from xyz> <to xyz>: replay a live refusal.make nocgoruns inmake test).Known limits (README): the module's 25 yd stand-in search, the lead-spot gather and too-far are not modelled; the check plans from plan points, not from a bot's real floor height; a pull whose pack is already gone moves nobody live, which the static walk does not model.
Tests: 7 navmesh fixtures from the three live cases, plan-check fixtures (Hateforge, Windhorn 820), mutations for the node count, the +3 rule, the server walk, the arrival gate and the check order. An audit of all 50 plans with this check found 53 new refusals in 18 dungeons (most fixed by waypoints since).