Explorer: derived radar loop windows for event replay #140

Closed
opened 2026-07-27 20:08:38 +00:00 by claude-bot · 1 comment
Contributor

Parent: #22. #22 asks for "derived radar-loop windows with configurable padding."

Depends on the capture-cadence decision in the radar snapshot issue: a loop needs more than one frame per event, and today _radar_snapshot_filename is deterministic per lifecycle so re-fires overwrite rather than accumulate.

Tasks

  • Derive a window from the event's member time span plus configurable padding.
  • Assemble frames into a loop. app/services/radar.py already assembles multi-frame GIFs for SPC (spc_gif_* cache entries) — reuse that machinery rather than writing a second assembler.
  • Serve through the media storage abstraction.
  • Decide pre-built at event close vs built lazily on first view. (Lazy is cheaper and matches the caching posture used everywhere else in the app.)
  • Handle events whose frames were partly pruned or never captured — a partial loop must degrade visibly rather than silently showing a misleading window.
Parent: #22. #22 asks for "derived radar-loop windows with configurable padding." **Depends on the capture-cadence decision** in the radar snapshot issue: a loop needs more than one frame per event, and today `_radar_snapshot_filename` is deterministic per lifecycle so re-fires overwrite rather than accumulate. ## Tasks - [ ] Derive a window from the event's member time span plus configurable padding. - [ ] Assemble frames into a loop. `app/services/radar.py` already assembles multi-frame GIFs for SPC (`spc_gif_*` cache entries) — reuse that machinery rather than writing a second assembler. - [ ] Serve through the media storage abstraction. - [ ] Decide pre-built at event close vs built lazily on first view. *(Lazy is cheaper and matches the caching posture used everywhere else in the app.)* - [ ] Handle events whose frames were partly pruned or never captured — a partial loop must degrade visibly rather than silently showing a misleading window.
Author
Contributor

Picking this up, stacked on the event timeline (#139, PR #172). Per the task list: loop window = event member span + configurable padding; frames from the #130 capture (alert_radar_frames, keyed per dashboard SentAlert — accumulating, so the "deterministic filename overwrite" concern predates #130 and no longer applies); assembly reuses radar.py's existing SPC GIF machinery; served through the media storage abstraction (#131); built lazily on first view and cached, per the issue's own recommendation; partial/no-frame coverage degrades visibly (coverage span labeled on the player, explicit "no frames captured" state) rather than implying a complete window.

Picking this up, stacked on the event timeline (#139, PR #172). Per the task list: loop window = event member span + configurable padding; frames from the #130 capture (`alert_radar_frames`, keyed per dashboard SentAlert — accumulating, so the "deterministic filename overwrite" concern predates #130 and no longer applies); assembly reuses `radar.py`'s existing SPC GIF machinery; served through the media storage abstraction (#131); **built lazily on first view and cached**, per the issue's own recommendation; partial/no-frame coverage degrades visibly (coverage span labeled on the player, explicit "no frames captured" state) rather than implying a complete window.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#140
No description provided.