Map roadmap — persona panel 2026-10-05 #247

Open
opened 2026-10-05 02:09:10 -04:00 by logan · 2 comments
Owner

Synthesis of an 8-persona review of the live map (/live: LiveView, MapView, live/WallPanels, TimeScrubber, liveWall.ts, c2-core traffic/cameras/telemetry/media/alerter) against Server origin/main c4e1f9a. Personas: PD real-time crime center supervisor (TOC), Con Ed NOC, MTA rail/bus control (RCC), corporate GSOC, county OEM, newsroom assignment editor, volunteer FD chief/dispatcher, scanner power user/journalist. Demand = personas asking, of 8.

Verdict across the panel: nobody would put it on their wall yet. The bones (incident-first rail, pursuit paths sharing the spine index, nearest-camera picks, honest licence gating) beat what they use today. What blocks it is truth (false 'Live', untrusted lifecycle), no audio, and no memory of the layout.

NOW (high demand, S/M, no legal blocker)

  • #232 Truth strip replaces heartbeat-driven 'Live' pill (6/8, S)
  • #234 Saved views in hash + per-viewer memory + kiosk mode (8/8, S)
  • #233 Click-to-listen on spine/path stops/rail + media.py Range (6/8, M)
  • #236 Honest pins/paths: location confidence, type-gated paths, impossible-speed stops (6/8, M)
  • #237 Weather: NWS warning polygons, radar valid time/legend/loop, wind at incident (8/8, S)
  • #239 500-call window truncates paths/spine/7d scrubber; deep links to resolved incidents (4/8, S/M)
  • #235 Filter bar, discipline presets, text search (5/8, M)
  • #238 Attention cues: NEW lane, opt-in tone, in-tab notifications (5/8, S/M)

NEXT

  • #240 History mode: scrubber playhead moves — resolved_at already exists (#18 closed; TimeScrubber/UI_REDESIGN chunk 13 text is stale) (8/8, L)
  • #241 Geofenced watch zones / protected sites (7/8, L) — blocked on #13, #4, CISO
  • #243 Notes, disposition, export/handoff, Teams/Slack/signed webhook (6/8, M) — blocked on #43, Member and node write endpoints are platform-admin-only, blocking org owners (#9)
  • #184 Power-outage layer + wires-down cross-match (6/8, M) — existing issue, licensing comment added
  • #242 Storm/utility hazard subtype (4/8, M) — needs drb-correlation-review
  • #244 Aircraft: squawk/category, rotorcraft, orbit detection, TFRs (5/8, M, cross-repo)
  • #245 Transit layer: MTA GTFS + service alerts (5/8, M) — needs-decision on MTA commercial terms
  • #246 Keyboard command layer + mobile field mode (3/8, M)

LATER (not filed individually)

Live talkgroup monitor (PulseAudio path, never Icecast) · Pursuit mode (head label, chevrons, km/h, exit cone; needs highway/intersection geocodes) · Unit/apparatus 'who's committed' board (blocked on #155) · Fireground benchmark clock (working fire, 2nd alarm, PAR, MAYDAY) · Jurisdiction + critical-infrastructure base layers (PD sectors, fire districts, stations, hospitals, hydrants via OSM ODbL; HIFLD Open was wound down — re-check source) · Hydro gauges (phase 2 of #237) · Hex-bin heatmap / hotspot clustering (skewed by #189/#28 until fixed) · Crowd/permitted-event layer · SITREP generator (on top of #243) · Operator annotation layer / newsroom assignment board (blocked #9, #13) · Per-incident confidence meter / time-to-know stamp · Public share card (must match BUSINESS_MODEL Public tier: >=30 min delay, no audio/transcripts/names; behind Gate A/#47) · Incident clip export (MP4/SRT) · Heat index, NASA FIRMS/HMS smoke, ERG hazmat rings · Licensed home-market cameras: #198, #201, #202 (comment added on #198).

Dropped (conflicts with a standing rule or terms)

  • PulsePoint / Active911 / Citizen feeds: no public API, ToS forbid scraping. Partnership/sales lead only.
  • Waze for Cities (CCP): public-agency partnership; a commercial vendor likely doesn't qualify.
  • Scraped utility outage JSON shipped commercially (Kubra): terms unclear/forbidding — licensed API or agreement only (see #184).
  • Plate/LPR-style vehicle tracking beyond transcript text: CISO frame/plate ruling #200.
  • Displaying FAA registrant names, or labelling law-enforcement tails by agency: names policy (BUSINESS_MODEL, E&O) and agency hostility.
  • Camera pixels as evidence / frame capture: #199/#200 pending; link-only marker stays LATER.
  • NYS EPCRA Tier II hazmat data: not public (responder-only).
  • NYS Mesonet: data agreement restricts commercial use.
  • ADS-B Exchange / FlightAware APIs: commercial terms; use own-node ADS-B.
  • Customer asset geometry read directly from browser Firestore: #13 rules undeployed — server-mediated only (#241).

Top map pain points (ranked)

  1. 'Live' pill stays green while AI pipeline is dead (#196 period) — Map: 'Live' pill is driven by node heartbeats, so the wall reads live while transcription/correlation are dead (#232)
  2. No audio on the wall — #233
  3. Layout/layers reset on every reload — #234
  4. False Majors / incidents never clear — #155, #190, #189 (comments added)
  5. 500-call window silently truncates paths and history — #239
    Also: unreadable tiles / zoom-back #136, #137 (comments added); names on the ticker #43 (comment added).

Measurement note: #196 (AI dark) means the live map currently shows no new incidents; nothing in this review was measured off live data.

Synthesis of an 8-persona review of the live map (`/live`: LiveView, MapView, live/WallPanels, TimeScrubber, liveWall.ts, c2-core traffic/cameras/telemetry/media/alerter) against Server origin/main c4e1f9a. Personas: PD real-time crime center supervisor (TOC), Con Ed NOC, MTA rail/bus control (RCC), corporate GSOC, county OEM, newsroom assignment editor, volunteer FD chief/dispatcher, scanner power user/journalist. Demand = personas asking, of 8. **Verdict across the panel:** nobody would put it on their wall yet. The bones (incident-first rail, pursuit paths sharing the spine index, nearest-camera picks, honest licence gating) beat what they use today. What blocks it is truth (false 'Live', untrusted lifecycle), no audio, and no memory of the layout. ## NOW (high demand, S/M, no legal blocker) - [ ] #232 Truth strip replaces heartbeat-driven 'Live' pill (6/8, S) - [ ] #234 Saved views in hash + per-viewer memory + kiosk mode (8/8, S) - [ ] #233 Click-to-listen on spine/path stops/rail + media.py Range (6/8, M) - [ ] #236 Honest pins/paths: location confidence, type-gated paths, impossible-speed stops (6/8, M) - [ ] #237 Weather: NWS warning polygons, radar valid time/legend/loop, wind at incident (8/8, S) - [ ] #239 500-call window truncates paths/spine/7d scrubber; deep links to resolved incidents (4/8, S/M) - [ ] #235 Filter bar, discipline presets, text search (5/8, M) - [ ] #238 Attention cues: NEW lane, opt-in tone, in-tab notifications (5/8, S/M) ## NEXT - [ ] #240 History mode: scrubber playhead moves — resolved_at already exists (#18 closed; TimeScrubber/UI_REDESIGN chunk 13 text is stale) (8/8, L) - [ ] #241 Geofenced watch zones / protected sites (7/8, L) — blocked on #13, #4, CISO - [ ] #243 Notes, disposition, export/handoff, Teams/Slack/signed webhook (6/8, M) — blocked on #43, #9 - [ ] #184 Power-outage layer + wires-down cross-match (6/8, M) — existing issue, licensing comment added - [ ] #242 Storm/utility hazard subtype (4/8, M) — needs drb-correlation-review - [ ] #244 Aircraft: squawk/category, rotorcraft, orbit detection, TFRs (5/8, M, cross-repo) - [ ] #245 Transit layer: MTA GTFS + service alerts (5/8, M) — needs-decision on MTA commercial terms - [ ] #246 Keyboard command layer + mobile field mode (3/8, M) ## LATER (not filed individually) Live talkgroup monitor (PulseAudio path, never Icecast) · Pursuit mode (head label, chevrons, km/h, exit cone; needs highway/intersection geocodes) · Unit/apparatus 'who's committed' board (blocked on #155) · Fireground benchmark clock (working fire, 2nd alarm, PAR, MAYDAY) · Jurisdiction + critical-infrastructure base layers (PD sectors, fire districts, stations, hospitals, hydrants via OSM ODbL; HIFLD Open was wound down — re-check source) · Hydro gauges (phase 2 of #237) · Hex-bin heatmap / hotspot clustering (skewed by #189/#28 until fixed) · Crowd/permitted-event layer · SITREP generator (on top of #243) · Operator annotation layer / newsroom assignment board (blocked #9, #13) · Per-incident confidence meter / time-to-know stamp · Public share card (must match BUSINESS_MODEL Public tier: >=30 min delay, no audio/transcripts/names; behind Gate A/#47) · Incident clip export (MP4/SRT) · Heat index, NASA FIRMS/HMS smoke, ERG hazmat rings · Licensed home-market cameras: #198, #201, #202 (comment added on #198). ## Dropped (conflicts with a standing rule or terms) - PulsePoint / Active911 / Citizen feeds: no public API, ToS forbid scraping. Partnership/sales lead only. - Waze for Cities (CCP): public-agency partnership; a commercial vendor likely doesn't qualify. - Scraped utility outage JSON shipped commercially (Kubra): terms unclear/forbidding — licensed API or agreement only (see #184). - Plate/LPR-style vehicle tracking beyond transcript text: CISO frame/plate ruling #200. - Displaying FAA registrant names, or labelling law-enforcement tails by agency: names policy (BUSINESS_MODEL, E&O) and agency hostility. - Camera pixels as evidence / frame capture: #199/#200 pending; link-only marker stays LATER. - NYS EPCRA Tier II hazmat data: not public (responder-only). - NYS Mesonet: data agreement restricts commercial use. - ADS-B Exchange / FlightAware APIs: commercial terms; use own-node ADS-B. - Customer asset geometry read directly from browser Firestore: #13 rules undeployed — server-mediated only (#241). ## Top map pain points (ranked) 1. 'Live' pill stays green while AI pipeline is dead (#196 period) — #232 2. No audio on the wall — #233 3. Layout/layers reset on every reload — #234 4. False Majors / incidents never clear — #155, #190, #189 (comments added) 5. 500-call window silently truncates paths and history — #239 Also: unreadable tiles / zoom-back #136, #137 (comments added); names on the ticker #43 (comment added). Measurement note: #196 (AI dark) means the live map currently shows no new incidents; nothing in this review was measured off live data.
logan added the
type
tracking
area/map
priority
p2
labels 2026-10-05 02:09:10 -04:00
Author
Owner

Owner decision 2026-10-05 — roadmap revised. Outage maps and plate tracking are in; everything else the panel dropped stays dropped (PulsePoint/Active911/Citizen, Waze CCP, scraped Kubra JSON, Tier II hazmat, FAA registrant names, NYS Mesonet, ADS-B Exchange/FlightAware).

NOW (building now)

  • #232 Truth strip replaces heartbeat 'Live' pill (p1)
  • #233 Click-to-listen + media.py Range (p1)
  • #234 Saved views in hash, per-viewer memory, kiosk (p1)
  • #235 Filter bar, presets, text search (p2)
  • #236 Honest pins/paths (p1)
  • #237 Weather: NWS polygons, radar valid time/legend/loop, wind (p2)
  • #238 Attention cues: NEW lane, opt-in tone, notifications (p2)
  • #239 500-call window truncation + resolved deep links (p1)
  • #184 Power-outage layer — moved up from NEXT, now p1. Licence-gated provider registry like cameras, every provider OFF until a grant is confirmed; source terms recorded on #184 (ODIN county API = unverified/gated, PowerOutage.us = paid, utility storm-center maps = agreement required, EAGLE-I live = agreement required).

NEXT

  • #248 Plate tracking from transcripts (new) — spoken plates extracted, searchable, watchlisted, shown where mentioned. Admin/operator only, never public, retention cap. Blocked on a CISO ruling (status/needs-decision).
  • #240 History mode (scrubber playhead moves)
  • #241 Geofenced watch zones (blocked #13, #4, CISO)
  • #243 Notes/disposition/export/webhooks (blocked #43, #9)
  • #242 Storm/utility hazard subtype (needs drb-correlation-review)
  • #244 Aircraft squawk/rotorcraft/orbits/TFRs
  • #245 Transit layer (needs-decision on MTA terms)
  • #246 Keyboard layer + mobile field mode

LATER

Unchanged from the body above.

Build order for NOW (no two items in a batch share a file)

Batch Items
1 #232 truth strip · #233 audio + Range · #184 outages backend + admin toggle
2 #234 saved views/kiosk · #237 NWS/METAR backend
3 #235 filter bar · #184 outage map layer + incident cross-match
4 #236 honest pins/paths · #239 window truncation/deep links
5 #238 attention cues · #237 weather map layers

Hot files (MapView, LiveView, WallPanels, main.py, config.py) appear in one item per batch. #233 also owns the spine's "showing N of M" indicator so #239 never touches WallPanels; #236 adds the pin-pulse prop #238 uses.

**Owner decision 2026-10-05 — roadmap revised.** Outage maps and plate tracking are in; everything else the panel dropped stays dropped (PulsePoint/Active911/Citizen, Waze CCP, scraped Kubra JSON, Tier II hazmat, FAA registrant names, NYS Mesonet, ADS-B Exchange/FlightAware). ## NOW (building now) - [ ] #232 Truth strip replaces heartbeat 'Live' pill (p1) - [ ] #233 Click-to-listen + media.py Range (p1) - [ ] #234 Saved views in hash, per-viewer memory, kiosk (p1) - [ ] #235 Filter bar, presets, text search (p2) - [ ] #236 Honest pins/paths (p1) - [ ] #237 Weather: NWS polygons, radar valid time/legend/loop, wind (p2) - [ ] #238 Attention cues: NEW lane, opt-in tone, notifications (p2) - [ ] #239 500-call window truncation + resolved deep links (p1) - [ ] #184 **Power-outage layer — moved up from NEXT, now p1.** Licence-gated provider registry like cameras, every provider OFF until a grant is confirmed; source terms recorded on #184 (ODIN county API = unverified/gated, PowerOutage.us = paid, utility storm-center maps = agreement required, EAGLE-I live = agreement required). ## NEXT - [ ] #248 **Plate tracking from transcripts (new)** — spoken plates extracted, searchable, watchlisted, shown where mentioned. Admin/operator only, never public, retention cap. **Blocked on a CISO ruling** (status/needs-decision). - [ ] #240 History mode (scrubber playhead moves) - [ ] #241 Geofenced watch zones (blocked #13, #4, CISO) - [ ] #243 Notes/disposition/export/webhooks (blocked #43, #9) - [ ] #242 Storm/utility hazard subtype (needs drb-correlation-review) - [ ] #244 Aircraft squawk/rotorcraft/orbits/TFRs - [ ] #245 Transit layer (needs-decision on MTA terms) - [ ] #246 Keyboard layer + mobile field mode ## LATER Unchanged from the body above. ## Build order for NOW (no two items in a batch share a file) | Batch | Items | |---|---| | 1 | #232 truth strip · #233 audio + Range · #184 outages backend + admin toggle | | 2 | #234 saved views/kiosk · #237 NWS/METAR backend | | 3 | #235 filter bar · #184 outage map layer + incident cross-match | | 4 | #236 honest pins/paths · #239 window truncation/deep links | | 5 | #238 attention cues · #237 weather map layers | Hot files (MapView, LiveView, WallPanels, main.py, config.py) appear in one item per batch. #233 also owns the spine's "showing N of M" indicator so #239 never touches WallPanels; #236 adds the pin-pulse prop #238 uses.
Author
Owner

All 9 NOW items are shipped and live at 4916678:

None of it has been tested in a browser yet. NEXT is unchanged. #248 (plates) is waiting on the owner to accept the CISO conditions.

All 9 NOW items are shipped and live at 4916678: - #232, #233, #234, #235, #236, #237, #238, #239 and #184 - follow-ups #268, #275, #278 and #279 None of it has been tested in a browser yet. NEXT is unchanged. #248 (plates) is waiting on the owner to accept the CISO conditions.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/server-26#247