METHODOLOGY · calm-anomaly

Version 95fad2f743ba81538177a5660eb9e168f3ecf2e0aa9b00c28366364bdf3c1adc · LIVE

Methodology: Calm Anomaly (SWPC)

Slug: calm-anomaly

The absence of activity is a story when it ends a pattern. This methodology covers one publishable frame: a sustained quiet streak on SWPC that follows a period of activity, where both the quiet window and the prior-activity window are fully contained in the warehouse coverage window.

It is the companion to anomaly-detection: that slug covers “the Sun did something unusual”; this slug covers “the Sun stopped doing something, after doing it.” Without the prior-activity clause the frame is not publishable — a permanently-quiet Sun is not news.

When to use this slug

Set methodology_slug = "calm-anomaly" when all of:

  • The source is NOAA SWPC.
  • The trailing calm_window_days have no M+ flare and Kp max < calm_kp_threshold in every 3-hour cycle.
  • The preceding prior_activity_window_days (immediately before the calm window) contained at least prior_activity_min_flares M+ flares or prior_activity_min_kp5_cycles Kp ≥ 5 cycles.
  • Total warehouse coverage is ≥ calm_window_days + prior_activity_window_days so both windows are in-bounds.

Fall back to agent-edited if the narrative really requires naming a specific driver (“quiet period attributable to Active Region X rotating to far side”), since that’s beyond what the SWPC time series alone supports.

Parameters

{
  "schema_version": 1,
  "source": "noaa-swpc",
  "calm_window_days": 5,
  "calm_kp_threshold": 3,
  "calm_flare_class_floor": "M1.0",
  "prior_activity_window_days": 14,
  "prior_activity_min_flares": 3,
  "prior_activity_min_kp5_cycles": 4,
  "required_total_coverage_days": 19,
  "live_endpoints": {
    "kp": "https://services.swpc.noaa.gov/products/noaa-planetary-k-index.json",
    "xray": "https://services.swpc.noaa.gov/json/goes/primary/xrays-1-day.json",
    "flare_events": "https://services.swpc.noaa.gov/json/goes/primary/xray-flares-latest.json"
  },
  "archive_roots": {
    "kp": "https://www.ngdc.noaa.gov/stp/geomag/kp_ap.html",
    "xray": "https://www.ngdc.noaa.gov/stp/satellite/goes-r.html",
    "flare_events": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/WS/get/FLR"
  }
}

The thresholds above are deliberately conservative. The point of the slug is to capture an actual pattern break, not to fire on every slow afternoon. A fresh version (new hash) is the right way to tune if tuning becomes necessary.

Editorial obligations

  1. Verify total coverage. Run SELECT min(observed_at), max(observed_at) FROM swpc_observations before anything else. The span must cover both the calm window and the prior-activity window with margin. If not, frame is unavailable.
  2. Count both windows in the transcript. Show the flare list (or absence) for the calm window; show the flare list and Kp≥5 cycle count for the prior-activity window. These two queries are the methodology — an editor reviewing the transcript must see them.
  3. Name the exact windows in the narrative. “No M+ flares between 2026-04-10 and 2026-04-15, after a period between 2026-03-27 and 2026-04-10 that saw 4 M-class events and 6 cycles above Kp 5.”
  4. Do not project forward. Calm may continue or end at any time; the frame is about what has been observed, not about what will happen.
  5. Do not attribute causation. The SWPC time series alone does not support claims about solar rotation, active-region evolution, or CME direction. If that context is load-bearing for the story, use agent-edited and link NOAA’s analysis.

Allowed claims

  • “No M-class X-ray flares have been recorded on GOES-16 between YYYY-MM-DD and YYYY-MM-DD. Kp has remained below 3 across all Z 3-hour cycles in that period.”
  • “This five-day quiet span follows a fortnight (YYYY-MM-DD to YYYY-MM-DD) in which [N] M-class flares were recorded and Kp reached or exceeded 5 in [M] cycles.”

Forbidden claims under this slug

  • “Solar activity has entered a new minimum.” (That’s a multi-month/year claim; this frame is days.)
  • “The calm is attributable to [cause].” (Use agent-edited.)
  • “Expect activity to resume on [date].” (No forecasting under this slug.)

Fail modes (fall back to agent-edited or log no-publish)

  • Total coverage < required_total_coverage_days.
  • The calm window has no M-flares but Kp crossed the threshold (e.g. from solar-wind sector-boundary crossing). The frame is a clean break on both metrics — if one fails, the frame fails.
  • The prior-activity window doesn’t clear its thresholds (i.e. the Sun was already quiet before).

Primary sources required

  1. The live_endpoints URLs for Kp, X-ray, and flare events (so a reader can see current state).
  2. The archive_roots URLs for Kp and X-ray (so a reader can recover the two windows from the public archive at a later time, not from SWPC’s rolling cache).
  3. The observation windows for both the calm and prior-activity spans, explicit down to the minute.
  4. The actual flare count and Kp≥5 cycle count for each window — embed the numbers in the narrative so the detection is self-contained.
  5. If any individual flare is named in the prior-activity window (“M3.2 at 2026-04-03T14:12Z”), include the NOAA DONKI URL for that flare event.

The methodology page itself is not a primary source — it’s the rule, served automatically at /methodology/calm-anomaly/<version> via the detection’s pin.

Reproducibility

Fetch the archived Kp and flare records from archive_roots for both windows. The narrative’s embedded counts are the canonical record of what was observed — SWPC’s rolling cache may have moved on by the time a reader visits.