Review fixes on top of #1578:
- Exiting Space Missions cancels the layer's own camera flights again (entry,
roster preview, mission focus); only a flight navigation started after
releaseCameraOwnership() runs on.
- A failed first index load says so: "Space Missions unavailable: the
mission index could not load. Try again later." on both the Context and
Data Layers routes, instead of a generic transition toast. Translated.
- Regression tests for both; docs and changelog describe the real feedback.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Third review pass on #835. No runtime change.
- Controller test: viewport decisions reach the controller's debug log.
- Policy test: a second request for a snapshot still being captured is
logged pointer-already-requested and is not captured twice.
- CURRENT-STATE: pointer-not-fresh also covers a missing snapshot,
already-requested covers an earlier attempt that threw, and the image
step runs when any tool output of the response was sent.
- Changelog: describe what is recorded rather than a fixed miscount.
Second review pass on #835's diagnostics. Behaviour is unchanged.
- Report viewport_context.result as soon as the send returns, so a throw
in the retained-frame bookkeeping cannot log a real send as "error".
- List the decision reasons and when each field is present in
CURRENT-STATE, note that the rate limit can split a pair, and say which
codes are defensive.
- Changelog: the decision is logged when an entity-context answer reaches
the image step, not for every answer.
Review follow-up for #835. What is captured, sent and kept is unchanged.
- Log nothing for tool results other than get_entity_context, so other
tools stop spending the shared debug-log budget.
- Give every decision and outcome the same contextId and image kind, so
overlapping requests pair up.
- Log why a crop decision did not send (stale, off ground, off screen,
expired, pose changed, already requested) instead of leaving a lone
"pointer-ground-crop" that reads as sent.
- Split capture-invalidated into session-reset, superseded, channel-lost
and frame-stale.
- Close the pair with "error" when a step throws, then rethrow.
- Document the events in CURRENT-STATE and reword the changelog fragment.
The data refresh is committed and its provenance (extract, timestamp, MD5,
filter) stays in the dataset README. The script needed osmium-tool and could
only re-verify while Geofabrik still listed that extract, so it goes with its
test.
Keyless GTFS-Realtime feed published by ZDiTM Szczecin under CC0 1.0.
Speeds are m/s (checked against vehicle movement), the file refreshes about
every 20 s, and the feed carries no route ids, so vehicles take the default
bus mode.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>