Listening for events…

Geomagnetic-Storm Monitor — Scope + Frozen Event Definition

Status: rule FROZEN 2026-06-10, before any backfill · Owner: Mike + Claude (engine room) Parent: docs/event-spine-framework.md (this is the framework's first new kind)

This document freezes the event-definition rule for the geomagnetic-storm storehouse. Per the pre-registration discipline: the rule below was written down before running detection over the historical Dst record, and it is not to be tuned afterward — not to make event counts prettier, not to capture a famous storm that falls just outside it, not for any reason short of a documented defect in the rule itself (which would be logged here with a date and the old rule preserved).

The thresholds are taken from the standard space-physics convention (Gonzalez et al. 1994 storm classification), not derived from our data — that is what makes them freezable.


The spine

  • Definitive record: hourly Dst from the OMNI merged dataset via CDAWeb HAPI (OMNI2_H0_MRG1HR / DST1800) — the existing dst_index fetcher's source. Coverage 1963 → present. OMNI publishes ~2 weeks behind real time by design; this is the publication lag of a definitive product, not a fetcher defect (verified 2026-06-10: loader hourly "ok," newest row 2026-05-27).
  • Live edge (to be added): Kyoto WDC real-time/provisional Dst quicklook — the same physical index, hours behind instead of weeks. Same provisional-vs-final relationship as NHC observed fixes vs IBTrACS final best track. Bright line: Dst is an index computed arithmetically from four ground magnetometer stations — a processed measurement, in.
  • Dst is the spine. Kp (noaa_space_weather, live) is a sweep layer and corroborator, not a second spine — one rule, one catalog, no dual-definition ambiguity.

The frozen rule

An event is detected from the hourly Dst series as follows:

  1. Qualification: the event must contain at least one hour with Dst ≤ −50 nT.
  2. Envelope: the event spans the contiguous period in which Dst < −30 nT, extended by the merge rule below.
  3. Onset: the last downward crossing of −30 nT preceding the first qualifying (≤ −50 nT) hour.
  4. End: the first hour at which Dst has recovered to ≥ −30 nT and remains ≥ −30 nT for the next 24 consecutive hours. (The 24 h sustain prevents a multi-dip storm from being split into fragments.)
  5. Merge rule: any sub-−50 dips occurring inside one envelope (as bounded by rules 3–4) are one event, with the deepest hour as the event minimum.
  6. Missing data: OMNI fill values (|Dst| > 900) are excluded at ingest. A gap of ≤ 6 h inside an envelope does not break the envelope; a gap > 6 h ends it (and a new envelope may begin after the gap).

Event ID: gst-YYYYMMDDHH from the onset hour (UTC). Stable, mintable from the rule alone.

Lifecycle phases (stored in the dossier): onset → minimum = main phase; minimum → end = recovery phase.

Intensity class (Gonzalez convention, stored per event):

  • moderate: minimum Dst in (−100, −50] nT
  • intense: minimum Dst in (−250, −100] nT
  • super: minimum Dst ≤ −250 nT

Rough expected yield (stated before detection, as a sanity bracket only — NOT a tuning target): a few tens of events per year near solar maximum, fewer at minimum; order 1,000–2,000 events over 1963 → present. If detection lands wildly outside this bracket, that is a flag to audit the implementation, not to adjust the rule.

The sweep (per-kind settings)

  • Geometry: planetary — time-window only, no spatial query. The cheapest sweep in the storehouse.
  • Window: [onset − 48 h, end + 72 h] per event. Pre-window context catches the interplanetary driver arriving (DSCOVR sees the shock before the ground does); post-window catches the Forbush recovery and thermosphere relaxation.
  • Sweep layers (all verified live 2026-06-10, with current local depth):
    • dscovr_solar_wind — speed/Bz, the upstream driver (since 2025-10)
    • intermagnet — ground magnetometers (since 2026-04-12)
    • nmdb_cosmic_rays — Forbush decreases (since 2026-04-02; detector already running)
    • goes_xray — flare context (since 2026-03-17)
    • noaa_space_weather — Kp corroboration (since 2025-09-15)
    • hamqsl_propagation — ionospheric propagation conditions (since 2026-03-29)
    • celestrak — Starlink fleet drag, the thermosphere response (since 2026-03-17)
    • silso_sunspots — solar-cycle context (since 1817 — the one layer with full depth)
  • Consequence, stated up front: pre-2025 events will be index-only by construction (spine
    • sunspot context, nothing else), exactly like the pre-2024 TC dossiers. The slots exist; strategic fills come later if archived sensor data is worth chasing per event.

Build bricks (tracking issue carries the checklist)

  • Brick A — freeze the rule. This document. DONE 2026-06-10.
  • Brick B — generic refactor. (kind, event_id) slot keys, per-kind sweep config, kind in the storehouse index. TC monitor behavior unchanged; its tests stay green.
  • Brick C — Dst historical backfill. Windowed pulls 1963 → present through the existing CDAWeb HAPI endpoint (no new fetcher). Idempotent; run under nohup.
  • Brick D — spine detector + live edge. Detector scans dst_index and emits events per the frozen rule; new Kyoto real-time Dst quicklook fetcher for the live edge, with provisional events upgraded in place when definitive OMNI hours arrive (same provisional → final flow as NHC → IBTrACS).
  • Brick E — sweep + dossier backfill. Register the kind, sweep all detected events, backfill dossiers 1963 → present.
  • First report: deferred. Engine room, not paper mode.
Live Feed