A GeoJSON-like FeatureCollection: each MapObject becomes a Point
feature, so the map can be written to a .geojson file and inspected
with matplotlib/geopandas without any mobile app in the loop.
Loads a JSON array of Frame messages from path and replays them, in
order, through a fresh Engine — returning the SceneMap snapshot after
each frame. This is the harness the README’s testing strategy calls
for: recorded pose+detection logs as replayable input fixtures, no
phone or live SLAM/detector needed. Snapshots (not just the final map)
are returned so the map’s evolution over a session can be inspected or
plotted.