# Local transport deck navigation Supported passengers: The Bravery (entry176310, display3015), Tiefenbahn subway entries176080 through176086 (display3831). No new routes or boarding recordings are created. Existing recorded dock transitions and native passenger ownership remain authoritative. The controller lazily builds and caches one model-local Recast/Detour mesh per supported model from vmaps/Transportship.wmo.vmo and vmaps/Subwaycar.m2.vmo. Existing collision extraction is sufficient; no world MMAP regeneration or new external data format is required. Missing/unsupported models retain the recorded shared stand behaviour. Cached meshes are rebuilt on process restart. Raster cells are0.15m with0.10m vertical resolution, minimum headroom2m, climb0.4m, slope45 degrees and erosion radius0.6m. Model-local XYZ is converted to Detour YZX; extracted M2 triangle winding is reversed, like the map generator. Queries reject incomplete corridors, distant floor projections and truncated results. Polygon crossings preserve obstacle corners and floor geometry. Only reachable points near the current deck level are selected; this does not intentionally send bots on tours of other floors. After boarding, bots may select a nearby reachable point with a validated return path. Targets prefer spacing from reserved destinations and other nearby native passengers. Crowding can leave bots at the original stand. Meshes are shared; reservations and movement state are per passenger and vehicle identity. Native splines use local transport coordinates, disable a second world-to-local transformation, retain passenger ownership and walk at2m/s. A walk is scheduled only during an actual pause with enough time for the outward path and a2s reserve. The return path is validated then, but its time is reserved at the destination, not at the departure dock. Departure, combat, death, timeout or the last1.5s of a pause stop an active deck spline without detaching the passenger. The current safe local position remains fixed during transit. At a recorded destination dock, the bot finds a complete local path to the recorded exit anchor. Return duration, exit duration and a2s reserve must fit the remaining pause. The recorded disembarkation begins only after reaching that anchor. If no safe path/time exists, the bot remains aboard rather than moving through geometry. Existing ride timeout, cancellation and lost-passenger recovery still apply. Group formation resumes only after complete disembarkation. Read-only diagnostics (may populate the mesh cache): ``` clientless transport deck 176310 clientless transport deck 176081 ``` Reports polygon counts and a bounded grid of reachable test targets/return paths. Navigation log events: DECK_MESH and DECK_WALK. A DECK_WALK event records a spline launch, not proof that the destination was reached. Normal TRANSPORT_STATE events and passenger position traces are needed for live acceptance. Regression tests: - test_transport_deck_mesh.py: actual production mesh builder against synthetic walls, low ceilings, disconnected floors, edges, invalid inputs, and both real collision models. Data/build directory arguments are configurable. - test_transport_deck_control.py: production scheduling/arrival method with deterministic passenger/docking doubles. - test_transport.py: existing native transition regressions plus the deck-return gate that prevents premature disembarkation. Visual acceptance should cover multiple passengers spreading at a dock, stopping when departure begins, retaining their positions in transit and returning before normal disembarkation. Geometry/controller tests do not replace this acceptance. Live validation: both meshes were generated natively and a ship journey and a first subway journey completed. After reducing the departure-only time budget, a second subway journey exercised initial spreading too. That final journey hit severe world-update stalls during disembarkation: the wagon departed and native safety kept the passenger aboard. Exit timing under that load remains a known limitation; see the dated checkpoint for exact evidence. Fixed travel-time reserves do not compensate for entire skipped/late transport update windows.