feat(ipaws): add FEMA IPAWS-OPEN civil-alert adapter (disabled by default) (#138)

Adds a new native `ipaws` adapter for FEMA IPAWS-OPEN EAS civil alerts.

- Two-stage CAP fetch via base_url (direct FEMA or Conduit proxy): Atom
  index -> per-entry CAP 1.2 documents.
- Non-weather civil alerts only (evacuation, Civil Emergency Message,
  AMBER, 911 outage, law-enforcement, HazMat); NWS/NOAA CAP dropped so
  weather is never double-broadcast.
- Idaho + neighbour statefips scope gate applied before stage-2 fetch.
- Own `ipaws_alerts` dedup table (migration v29); reuses the NWS CAP
  severity + formatter pattern.
- Ships enabled=False (no transmit until explicitly enabled).

Co-authored-by: Matt Johnson <mj@k7zvx.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
malice 2026-07-16 09:05:01 -06:00 committed by GitHub
commit bbe97398bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 1367 additions and 8 deletions

View file

@ -153,7 +153,9 @@ def test_registry_has_no_duplicate_keys():
def test_adapter_meta_at_19(fresh_db):
assert len(ADAPTER_META) == 23
# Count sentinel — bump when an adapter row is added. 23 -> 24 with the
# IPAWS civil-alert adapter (adapter_config/defaults.py ADAPTER_META["ipaws"]).
assert len(ADAPTER_META) == 24
# ---------- seed ----------------------------------------------------------