Route atlas / 01

Where traversal breaks

A failed journey is a useful starting point, not a diagnosis. Separate the requested route, the planner’s representation and the movement your character can physically execute.

Inspect the testing pathway

Start with a route contract

Write the test before interpreting its outcome. Identify the starting region, destination, permitted movement actions and expected world state. Specify whether arrival means entering a trigger, standing within a tolerance, or interacting successfully with an object. These are different contracts. A character beside a locked door has not necessarily completed a route through it, even when its distance from the target is small.

Capture the map revision, build identifier, agent radius, height, slope limit and step capability. Include ability unlocks and relevant inventory. In Unity, a NavMeshAgent configuration may differ from the character controller it drives. In Unreal Engine, a Recast navigation representation and a Character Movement Component can likewise disagree about what is traversable. The test should expose that disagreement rather than assume the configurations match.

Classify the earliest broken assumption

Inspect the first point where expected progress diverges from observation. Did the path request return no route? Did it return a partial route? Did the controller receive movement commands that produced no displacement? Did an interaction fail to open a required passage? These observations place the investigation at different boundaries. Record the exact status returned by your system; do not translate every non-success into “stuck.”

A* searches a graph according to its nodes, edges and costs. It cannot certify that the graph accurately represents collision geometry. Recast and Detour provide navigation representations and query capabilities, but project-specific movement, animation and interaction still determine execution. Treat a successful query as evidence about the query, not a guarantee about the complete player journey.

Conceptual diagrams · not recorded test results

Three boundaries to inspect

Planning boundary

Region AMissing edge

The intended regions may be disconnected, filtered out, or unavailable while navigation data is rebuilding.

Movement boundary

Path validClearance

The corridor exists, but the collision capsule, slope constraint or animation cannot follow it.

Goal boundary

ArrivalPredicate

The character reaches the vicinity, but the success condition requires an unavailable interaction or invalid location.

Reduce the route without erasing the defect

Preserve the original failing run first. Then move the start closer to the failure while keeping movement parameters and world state unchanged. Test the approach from each relevant direction. A doorway that fails only during a diagonal approach may involve steering or collision response rather than a missing navigation connection. Keep the successful neighboring route as a control, not as proof that the failing route is harmless.

Change one variable at a time: character size, approach angle, door state, traversal permission or navigation rebuild timing. If reducing capsule radius changes the outcome, that supports a clearance hypothesis but does not establish which asset or configuration is wrong. Compare the intended movement specification with both collision and navigation data before assigning ownership. A workaround that makes the test pass can still violate the intended game rules.

Handle moving and streamed worlds explicitly

Lifts, rotating platforms and streaming boundaries introduce time into reachability. A route may be valid only after an event. Define whether the agent should wait, interact, replan or abandon the attempt. Measure waiting against an observable event where possible. A single global timeout cannot distinguish a correctly waiting agent from one whose required platform never spawned.

For streamed regions, record when geometry, collision and navigation become available. Avoid testing a destination before the environment promises readiness unless readiness itself is the subject of the test. If an agent falls through a newly loaded floor, preserve the timing relationship between movement and collision activation. A screenshot taken afterward will usually lose the most useful evidence.

Turn diagnosis into a regression

Finish with a narrow, repeatable check. State the failing transition, the required preconditions and the expected observable result. Verify the repair using the original case, then add neighboring routes and relevant movement profiles to detect collateral changes. Keep environmental setup failures separate from navigation failures so a broken test fixture does not inflate the defect count.

A good regression does not need an impressive agent. It needs a stable contract and an honest outcome. If replay remains nondeterministic, report repeated attempts, controlled inputs and known uncontrolled factors. “Failed in these observed conditions” is more useful than an unsupported claim that a route always fails.