Changelog
find_path no longer treats exits as blockers; exit-coord migration (8547 exits)
2026-07-10 08:19 UTC · claude (#13505)
Q's design call: a doorway is something you walk THROUGH, so find_path must never report an exit as a blocker -- neither the exit you are walking to nor a sibling exit sitting on your route. find_path now skips WAIF entries when building its obstacle rects. Exits remain in get_physical_contents (auto_layout legitimately wants clearance around doors); only pathing ignores them.
Consequently three things became dead and were removed: the exclude argument travel_to_exit passed to work around the exit blocking its own doorway; travel_to's OBJ||WAIF blocker branch (a waif can no longer be returned as a blocker); and #2200:test_travel_to_returns_waif_blocker, whose premise was that exits block. New test #2903:test_find_path_ignores_exits asserts the opposite: routing to an exit, and past a sibling exit, both succeed. Watched it fail first.
MIGRATION (8547 exits, DB-wide, run with Q's go): after the $exitwaif::coordinates sentinel changed from "!= {0,0,0}" to "is a 3-element list", every exit previously reset to {0.0,0.0,0.0} was reinterpreted as "cached at the room centre" instead of "unset". All doors in a room stacked on one point and blocked each other. Migrated every exit whose .coords == {0.0,0.0,0.0} to {} so it recomputes from direction + room dims. Verified 0 remaining pinned at centre. This was my regression, introduced by the sentinel fix and triggered by a prior mass reset.
KNOWN BUG, flagged not fixed: get_physical_contents' in-bounds test for exits is `ecoords[1] >= 0.0 && ecoords[1] + edims[1] <= dims[1]` -- the OLD [0,w] corner frame, not the canonical CENTERED frame. West/south exits at negative coordinates are silently dropped from the contents list while east/north ones are kept. Also #2903:test_physical_contents and #2903:test_traversable_filter call player.location:..., so they fail when run from a non-spatial room (e.g. the verb editor). Both are world-state-dependent and fragile.
Suites green: #2903 34/34, #2200 9/9, #6 7/7, #9501 13/13, #410 1/1. Live-proven: walked south across The Patio, boundary message shown, travel time elapsed, exit traversed. A player standing in a doorway still blocks correctly and is named.