fix(voice): keep canonical analyst IDs out of display-text normalization

compactAnalystItem normalized every string field, including `id`.
Bikeshare uses the raw station name as its ID, so a station with
repeated spaces or a name over 180 code units was registered as a
referent under a different key and a numbered fly_to_location reported
it as no longer loaded. Normalize display fields only; layerKey, id,
icao24, mmsi, noradId, registration and callsign pass through as the
layer reports them.

Adds an analyst_query -> referent -> fly_to_location test for
repeated-space and long station names, and documents the rule in
docs/CURRENT-STATE.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Said TurkseverandClaude Opus 5.5 committed 2026-10-23 12:31:18 +01:00
1 parent 445af0875b
commit cbca6a228d
3 files changed
+65 -3

No files matched your search

+6 -2
View File
@@ -13,8 +13,12 @@ External ALPR tags, surveillance-tool display fields, voice context text and
compact analyst strings collapse controls and whitespace before a final
180-character cap (scene labels retain their 120-character cap). Empty ALPR
values remain null and Unicode text is preserved without splitting a surrogate
pair. These fields remain untrusted source data in structured tool output; text
normalization does not establish trust or eliminate prompt injection.
pair. Only display fields are normalized: canonical analyst identifiers
(`id`, `layerKey`, `icao24`, `mmsi`, `noradId`, `registration`, `callsign`)
pass through unchanged, because bikeshare uses the raw station name as its ID
and numbered voice references resolve by that key. These fields remain
untrusted source data in structured tool output; text normalization does not
establish trust or eliminate prompt injection.
Terrain height requests accept at most 64 points, matching the browser service's
existing batch size and one bounded upstream chunk. Larger requests return HTTP