Skip to content

feat(weather-recon): Phase 2b — radar mirror, 1,152 frames on Wasabi (#184)#194

Merged
robbiebyrd merged 5 commits into
mainfrom
feat/weather-recon-radar
Jul 12, 2026
Merged

feat(weather-recon): Phase 2b — radar mirror, 1,152 frames on Wasabi (#184)#194
robbiebyrd merged 5 commits into
mainfrom
feat/weather-recon-radar

Conversation

@robbiebyrd

Copy link
Copy Markdown
Collaborator

Phase 2b of the Weather app (#184): the radar mirror. All 1,152 five-minute NEXRAD CONUS composite frames for 2001-09-09..12 are now on Wasabi under weather/radar/ — zero gaps in the IEM archive for our window (Hurricane Erin included).

What's in here

  • weather_recon/radar.py — pure helpers: 5-min frame-stamp enumeration, IEM archive URLs, ESRI world-file → MapLibre corner geometry ([[-126,50],[-66,50],[-66,24],[-126,24]] verified), PNG dimension reads, index builder.
  • weather_recon/wasabi.py — slim uploader with video-grabber's proven Wasabi client settings (SigV4, path addressing, when_required checksums).
  • weather_recon/flow_radar.pyload-weather-radar: download-with-cache → per-frame geometry verification (hard error on mismatch) → upload-if-absent (resumable via one list_objects sweep) → weather/radar/index.json (bounds, frame list, gaps, "timezone": "UTC", key pattern — the frontend reads the pattern instead of hardcoding).
  • README refresh; boto3 added to pyproject + the image dep layer.

Verification

  • 63/63 pytest, ruff clean.
  • Live on Wasabi: 1,152 frames (~130 MB), image/png + max-age=31536000, index bounds exact; sample frame 6000×2600 px / 114 KB. Resumability proven twice for real — two mid-run kills resumed cleanly with skip_existing (85-frame tail completed on the final resume, then a full re-run uploaded 0).

Follow-ups

  • Infra (Phase 4 prerequisite): weather/ prefix needs a file-proxy allow-list entry (Traefik Ingress path rule in the infra repo) before the frontend can fetch frames via files.911realtime.org.
  • Phase 2c (forecasts) next: IEM AFOS archive verified serving real Sept-2001 ZFP products.

🤖 Generated with Claude Code

https://claude.ai/code/session_01W179bqEPFP92a3JrsPkD5c

Robbie Byrd and others added 5 commits July 12, 2026 21:18
Final-review fixes: the Dockerfile dep layer now installs boto3 (pyproject
declares it; pip install --no-deps skipped it), and build_index stamps
"timezone": "UTC" so the frontend can't misread frame stamps — this
project has shipped two tz bugs at exactly this seam.

Co-Authored-By: Claude Fable 5 <[email protected]>
@github-actions

Copy link
Copy Markdown

Playwright E2E — 1 passed · 0 failed · 0 flaky · 0 skipped

Full report

@robbiebyrd robbiebyrd merged commit 1d0c2ff into main Jul 12, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant