Skip to content

Data

The astronomical channel is real now, and it does not help

Two weeks ago the astronomy side of ELFQuake was a directory nobody was writing to. An audit on 2026-08-14 found eleven files across two days, against 699 Cumiana VLF captures across twenty-four; exactly two astronomical channels reached the Transformer, one of them a monthly constant repeated on all 11,020 rows and the other a count of files the collector happened to have written. The missing-modality mask that was supposed to flag all this was set from a value that was never blank, so it read "astronomy observed" on every row including the ten thousand with no astronomy at all.

That is all fixed. This post describes what the channel is now, and reports the first honest measurement of whether it does anything — which is the more important half, and the answer is no.

What is actually collected

Three archives, on a daily timer of their own (elfquake-space-weather.timer) rather than the thirty-minute VLF cadence. The Kp/ap and F10.7 files are whole-history archives of roughly 16 MB and 2 MB and both publish at most once a day; refetching those every half hour would be wasteful locally and abusive upstream.

  • GFZ Kp_ap_since_1932 — planetary geomagnetic activity, three-hourly, CC BY 4.0.
  • Kyoto WDC Dst — hourly ring-current index. Recent months are served only by the realtime tier, whose values get revised, so the tier is carried through normalization and the previous month is refetched on every run.
  • Spaceweather Canada F10.7 — solar radio flux, three Penticton observations a day at 17, 20 and 23 UT.

Alongside these sit computed ephemeris channels — lunar phase, distance, and a degree-two lunar-plus-solar tidal potential evaluated at the centre of the Italy bounding box. These are deterministic functions of UTC, not observations, and it matters below that they are.

Over the 817 prospective anchors currently in the table, every channel varies: astro_kp 07, astro_ap 0132, astro_dst_nt -146 to +55 nT, astro_f107 94.8258.1. The window covers a real geomagnetic storm, so the geomagnetic channels have something to be tested against rather than a flat line.

The alignment rule

The anchors are VLF capture times on a thirty-minute grid; the sources publish at three hours, one hour and one day. Bridging that gap is where the previous implementation went wrong, so the rule is now explicit.

Each channel takes the most recent reading whose observation interval has closed at or before the anchor — a zero-order hold, never interpolation. Interpolating between the readings either side of an anchor mixes a future reading into a feature that is supposed to be causal. A Kp bin covering 09:00–12:00 is not usable at 09:57.

Staleness is then a field rather than a footnote: every observed channel carries an *_age_hours companion. Past six hours for Kp and Dst, or seventy-two for F10.7, the hold is abandoned, the value goes blank, and quality_missing_* is set. Holding a three-day-old Kp reading forward would manufacture exactly the constant this work removes.

The aggregate flag quality_missing_astro fires only when Kp, Dst and F10.7 are all missing. Ephemeris channels are deliberately excluded from that test — they are always computable, so letting them satisfy it would pin the flag to zero forever, which is precisely what the old implementation did.

Full detail, including the ephemeris accuracy checks against Meeus, is in Astronomy Alignment.

The fix had not actually reached the model

The alignment work landed on 2026-08-17 and was treated as done. It was not. The Transformer does not read the feature table; it reads sequence tensors materialized from it in a separate, manual step with no dependency check. Nothing rebuilt those. For thirteen days the fixture held nineteen aligned channels while the astronomy sequence the model actually opened still carried astro_capture_count and astro_noaa_solar_cycle_f107_value — the two dead channels the audit had condemned. Every Transformer run in that window trained on the dead pair.

After rematerializing, the astronomy sequence reports nineteen channels over 15,960 rows and 840 time steps, and — the part that matters — its masks now fire: the five Kp/ap channels read present=0 on 152 rows at the end of the record, where the GFZ file has not yet closed its three-hour bin. Dst, F10.7 and the ephemeris channels are genuinely present throughout, so their masks staying clear is correct rather than broken.

The lesson is narrow and worth stating plainly: when checking whether a fix reached a model, look at the artifact the model opens, not the artifact the fix wrote.

What it does

Two evaluations, both held out, both negative.

Tabular, fixed-cell. On the current design — one-day horizon, M≥2.0, cell-stratified, thresholds calibrated on training rows only, the late capture era — seismic history alone scores 0.552836. Adding the twenty-one astronomy features scores exactly 0.500000, and the exactness is the tell: the larger model predicts the negative class on all 1,976 test rows, having reached 0.613508 balanced accuracy on its training rows. Twenty-one features against nineteen label changes in the held-out period is the whole story. full_multimodal scores 0.431988 and the all-feature run 0.404832. Every family added to seismic history lowers the score.

Transformer, cross-region smoke. The chained run — synthetic masked pretraining, Japan self-supervised continuation, chronological Italy fine-tuning on seismic + VLF + astronomy — completed end to end on 11,004 training and 2,752 test rows. Held-out balanced accuracy with all three modalities is 0.513960. Masking astronomy at inference gives 0.511239, masking seismic 0.511085, masking VLF 0.493117. A linear probe on the frozen representation scores 0.498439.

Those differences are two to twenty thousandths on one seed, and the masking test measures how much a model trained on everything leans on a channel, not whether the modality adds value — that would need retraining without it. Read the whole block as "indistinguishable from 0.5", because that is what it is.

A caution for any future positive result

This one is worth more than the negatives above, because it is the trap a future run would fall into.

Over the 799 anchors of the labeled spatial table, five astronomical channels correlate strongly with the anchor index: astro_f107 at -0.880, astro_moon_phase_cos at +0.838, astro_moon_illuminated_fraction at -0.838, astro_moon_distance_km at -0.730, astro_tidal_potential_min at -0.604. The geomagnetic channels sit below 0.26.

No future information enters any row, so this is not a leak. But validation here is time-based — training rows early, test rows late — and a channel that is near-monotone over the record approximates an indicator for which side of the split a row is on. A model can use that to recover the era's base rate rather than any physical state, and a lift built that way would not survive a different split or a longer record.

The lunar channels are periodic and only look monotone because fifty-two days is under two lunations; they will decorrelate as the record grows. astro_f107 will not — solar flux trends over months, and it will keep behaving like a date stamp for as long as the record is short compared with the solar cycle. Any astronomy result from here needs a date-proxy check and a matched null before it is treated as physical.

Elsewhere, briefly

The live collector was labeling real earthquakes as non-events. The thirty-minute service updated VLF features against whatever event catalog happened to be on disk and never fetched INGV itself; only a manual run did. Between refreshes the catalog fell behind while VLF anchors kept accumulating, and every anchor in that gap was declared mature and labeled negative because no event could be found in a catalog that had stopped. On 2026-08-21 that put twenty-two real events' worth of false negatives into a held-out partition, and produced what had been the largest apparent VLF-era result in the project. After the fix, the late era's held-out balanced accuracy for seismic history fell from 0.652961 to 0.552836. The service now fetches first, records what the catalog was successfully asked for, and tolerates a failed fetch rather than stopping VLF capture.

The Cumiana colour-scale change is not removable. Each capture embeds the colourbar it was drawn with, so decoding pixels back through it should make the two capture eras comparable. The features were built and every capture in the record decodes — all 824 of them when the check ran on 2026-08-21, and the collector has added more since. It does not help: hour-matched and day-median-reduced, a -17.9 dB step survives inversion, uniform from 200 Hz to 15 kHz at nearly three times the within-era day-to-day spread. Decoding recovers decibels as the receiver reported them, not decibels at the antenna, and a gain change alters the quantity plotted rather than the plot. The eras stay separate. See Cumiana Colour-Scale Change.

One earlier result has been retired outright. The timestamp-shuffle control that underpinned the "shuffling beats real time order" finding was never a null: it carried between 94 and 342 held-out label changes against the real runs' 1 and 19, so it was scored on up to a hundred times the evidence. A circular shift of the whole labeled matrix preserves each cell's sequence length, positive count and run structure while destroying feature-label alignment. Under that control the pattern disappears — zero to three of five controls beat real order depending on the ablation, with no systematic direction. Details in Within-Cell Null Control.

The staleness audit found six more instances. A shared freshness guard now compares derived inputs against the event catalog and warns before any work is done. Two of the six were live rather than latent: the Transformer sequences described above, and both weekly forecast scripts, which defaulted their as-of date to the literal 2026-07-08 — a fresh catalog answering a frozen question, invisible to any timestamp check. See Input Freshness.

Both standing baselines were re-run on a catalog that is finally current, and the refresh made a difference that had been invisible. The spatial table's aligned dataset had been five days behind the labeled table it derives from, so every "repeat after each refresh" run since 2026-08-17 had scored the old record; rebuilt properly it holds 15,979 rows with 13,775 labeled, against 7,258 before. The synthetic-to-real transfer trial now scores held-out balanced accuracy 0.671167 and precision 0.28629 against a historical spatial-rate control of 0.69222 and 0.331633 — still below its own control on both metrics, which is the same conclusion as before but for the first time on a catalog nobody had to refresh by hand.

The spatial baseline is a good illustration of why label transitions get printed before any score. On the refreshed table, adding VLF to seismic history moves the cell-stratified score from 0.514868 to 0.623460, which looks like a great deal. The held-out period contains five label changes. Five. A hundred-point swing built on five observations is not a result, and the report now says so on the line above the score.

Where this leaves things

Astronomy has moved from not measured to measured and null. That is progress of a specific and limited kind: the earlier absence of a result was an artifact of a constant channel and a broken mask, and it now is not. The features are correct, varying, aligned, causally held, and honestly flagged when absent.

They also do not improve prediction at a one-day or seven-day horizon in the fixed-cell design, and at nineteen held-out label changes the design cannot currently distinguish a modality that helps from one that does not. That is the binding constraint on every modality here, not a fact about the Sun and the Moon. The queue says to re-run the ablation when a single capture era reaches held-out label changes in the low hundreds, and not before.

Nothing here is evidence for or against a relationship between astronomical or geomagnetic conditions and earthquakes. See status, the full report, and next actions.

A capture gap, not a precursor, before the Pisa earthquake

A M4.3 earthquake struck near Pisa on 4 August 2026 at 08:15 UTC, about 7 km from the city and 275 km from the Cumiana VLF receiver. Checking the two weeks before it against the Cumiana anomaly record looked briefly promising: the two highest-scoring days in the entire record fall inside that window.

They are an artifact. The collector recorded nothing between 16 and 29 July, and the anomaly scorer uses a 24-frame lookback, so every window straddling that 13-day gap reconstructs across a discontinuity and scores near the maximum. Those 21 windows average 0.9113; the next 24 clean windows drop as a step function to 0.4074. The high scores mark the collector restarting, not the ionosphere doing anything.

What the clean data shows runs the other way. The observed pre-event stretch averages 0.4127 against a 0.5429 pre-gap baseline, so the period before the earthquake was quieter than usual, and the strongest sustained activity in the record is after the event rather than before it.

The coverage problem is on its own disqualifying: with no captures from 17 to 28 July, the first eight of the fourteen pre-event days have no data, and more than half the window cannot be checked either way.

The useful outcome is a defect rather than a result. Every collector restart currently injects a false top-ranked anomaly into the record, which is precisely the failure mode that would manufacture a precursor claim from an outage. A gap-aware guard that flags windows spanning a capture gap longer than the lookback is now queued before this scorer is used for event association again.

This remains a single-event retrospective with one station, no directional information, and no matched control windows. It is not evidence for or against a VLF-earthquake relationship.

See the full analysis and next actions.

A new Moshiri sample before the Kyushu earthquake

The official ISEE/ERGSC archive exposed additional Moshiri CDF files through 27 July 2026. The newest validated sample, at 23:00 UTC on 27 July, is roughly eight hours before the Kyushu earthquake on 28 July.

Its robust anomaly score was elevated, but earlier samples on 15 and 16 July were at least as strong. There is no direct Moshiri file for the mainshock or immediate aftermath yet, so this is a candidate anomaly rather than evidence of a VLF precursor.

The analysis is deliberately conservative: it compares spectral-feature medians against a baseline median, scales by the baseline median absolute deviation, and averages robust absolute deviations across selected channels. Japan data and derived features are used only for scientific research.

See the full analysis and next actions.