How the observatory reasons
Nothing here is clever on purpose. Every detector is one source, one measurement and one comparison, written down so that anyone can disagree with a specific part of it rather than the whole.
Collection
A scheduled job calls every connector every 30 minutes. Each attempt is recorded as a collection run with start and end times, records received, records stored and any error.
Observations are upserted on (signal, source record ID). Re-running a collector refreshes existing records instead of duplicating them.
Failed attempts are retried once. A failure never deletes or replaces stored data; the affected detector shows Delayed, Stale or Unavailable based on its last successful run.
All timestamps are stored in UTC and shown in your local time zone. Observation time, ingestion time and last collection time are kept separate.
Operational states
Live: last successful collection within 2.5× the cadence. Delayed: within 8×. Stale: older.
Unavailable: the connector has never succeeded. Connection required: credentials are not configured. Planned: not implemented — no values are ever shown.
Baselines (model rolling-z/1.0)
Earthquakes: the count of M≥2.5 events in the trailing 24 hours is compared with daily counts over completed UTC days of stored history. At least 14 days are required.
Weather alerts and internet outages: the number of active items at each collection is compared with prior snapshots. At least 7 days and 100 snapshots are required. When at least 5 snapshots exist for the same UTC hour, only those are used, to respect time-of-day patterns.
Standard deviation is floored at √mean to dampen spurious scores from flat histories. z ≥ 2 is Elevated; z ≥ 3 is Anomalous. Only upward deviations are flagged.
Every baseline stores its method, model version, sample count and comparison period so it can be reproduced.
What we never do
Combine unrelated phenomena into a single danger score.
Show a baseline or anomaly when history is insufficient.
Interpolate missing measurements; collection gaps are shown as gaps.
Treat source severity labels as statistical anomalies, or either as a risk assessment.
Ranking featured observations
Featured anomalies are ordered by magnitude (z/3, capped) × freshness (e^(−age/12h)) × data quality (1 live, 0.7 delayed, 0.4 otherwise) × corroboration (1 + 0.25 per other simultaneously flagged signal, max 4). Components are shown on every card.
