Skip to content

feat(nimbus): active convective warnings + watches at point (Nimbus PR 2)#4

Merged
jayrav13 merged 18 commits into
mainfrom
nimbus-convection
Apr 26, 2026
Merged

feat(nimbus): active convective warnings + watches at point (Nimbus PR 2)#4
jayrav13 merged 18 commits into
mainfrom
nimbus-convection

Conversation

@jayrav13

Copy link
Copy Markdown
Owner

Summary

Second slice of Skywatch::Nimbus — active radar-driven warnings (TOR/SVR/FFW) and watches (TOR/SVR) at a point, designed for an LLM consumer producing the convective section of a 1-800-WX-BRIEF preflight brief.

  • skywatch nimbus convection LAT LON [--events ...] [--format json|text]
  • Skywatch.convection(at: [lat, lon])Models::Convection aggregate (partitioned warnings / watches, briefer-relevant tag fields including hail size, wind gust mph+kt, tornado detection, damage threats)
  • Briefer-cadence text formatter — output is intended to read like a verbal preflight brief
TORNADO WARNING — Essex, NJ until 19:30Z. Radar-indicated; 1.50" hail, 56kt wind gust.
SEVERE THUNDERSTORM WARNING — Bergen, NJ until 20:00Z. 1.00" hail, 45kt wind gust.
FLASH FLOOD WARNING — Hudson, NJ until 23:00Z. Considerable damage threat.
TORNADO WATCH #142 — NJ; NY; CT until 22:00Z.

Pivots scope from "NEXRAD reflectivity / dBZ-at-point" to active warnings (rationale in design spec). dBZ-at-point and image URLs deferred to post-Nimbus investigations.

Test plan

  • bundle exec rspec — 371 examples, 0 failures
  • bundle exec rubocop — 97 files, 0 offenses
  • spec/nimbus/briefer_perspective_spec.rb — load-bearing acceptance test (snapshot of full briefer-cadence output)
  • Live smoke: exe/skywatch nimbus convection 40.688 -74.174 (returned cleanly empty against api.weather.gov)
  • CI green
  • Smoke on a severe-weather day to verify real-data shapes match fixtures

🤖 Generated with Claude Code

jayrav13 and others added 18 commits April 25, 2026 08:59
Pivots PR 2 scope from "NEXRAD reflectivity / dBZ-at-point" to active
storm-based warnings + watches at point, sourced from
api.weather.gov/alerts/active. Briefer-cadence text formatter is the
load-bearing acceptance target — output is intended to read like the
convective section of a 1-800-WX-BRIEF preflight brief, consumable by an
LLM as-is.

dBZ-at-point and image URLs are deferred to post-Nimbus
investigations; the rationale is captured in-spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Outside-in TDD: Task 1 writes the briefer-perspective integration spec
as the failing aspirational target; Tasks 2-12 build the pieces; Task 13
verifies the integration spec lights up without further changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e threat)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wraps [ConvectiveAlert] with warnings/watches partitioning, active?,
max_severity (SEVERITY_RANK-ordered), and to_h/to_json serialization.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pty result)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Plan claimed "65kt wind gust" for a 65 MPH fixture and "52kt" for 52 MPH.
The implementation correctly converts via MPH_TO_KT (0.868976) and
rounds: 65*0.868976 = 56.48 → 56kt, 52*0.868976 = 45.19 → 45kt.

Updates the acceptance spec only — the fixture wind values stay at
65 MPH / 52 MPH because that's the realistic NWS data shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… shown

A briefer reading a Tornado or Severe Thunderstorm Warning aloud
mentions specific hail/wind values, not the generic "considerable damage
threat" tag — the measurements are the damage info. Damage threat is
now only surfaced when no hail/wind measurements were parsed (typical
for Flash Flood Warnings, which carry only flashFloodDamageThreat).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds the three nimbus subcommands to the CLI usage block. Outlook and
storms shipped in PR 1 but were not documented; convection ships in
this PR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jayrav13 jayrav13 merged commit 2d0e5db into main Apr 26, 2026
3 checks passed
@jayrav13 jayrav13 deleted the nimbus-convection branch April 26, 2026 03:39
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