Skip to content

Next Actions

What to do next, and why. The record of what has already been tried and what it found is in Findings and Decisions Log, whose numbered items are cited from here and from the rest of the documentation.

Nothing in this project has demonstrated earthquake prediction. Every entry below is either a measurement to make or a constraint that stops one from being made.

Options that could improve the odds

Candidates ordered by expected effect on the blocking constraint below rather than by effort. Tier A buys evidence without waiting for calendar time; tier B makes a signal findable if one exists; tier C makes any eventual result believable. Tier C changes no score. It changes whether a score can be reported as a finding, and on this record that has already proved worth more than the rest: C2 retired three numbers this project had written up as results.

Done: A1, A2 (2026-08-27), A5 (2026-08-27, route closed), C2 (2026-09-04). Blocked: B3, by the same dead host as A5. Open and untried: A3, A4, B1, B2, B4, C1, C3, C4, C5.

A. Buy evidence without waiting

A1 and A2 are done. Together they multiplied era_3 held-out label transitions by about ten with no additional calendar time, through target design and catalog threshold alone. Measured on the same day, on the same anchors:

Design Held-out transitions, era_3 Two-class cells
7-day / M≥2.5, the design used until 2026-08-27 4 4 of 19
1-day / M≥1.5, A1+A2, in use now 41 13 of 19

That changes what a run could demonstrate; it demonstrates nothing itself. Run on the new design with five seeds, italy_multimodal has a 95% confidence interval of 0.4772 to 0.5376 — chance is inside it (log item 112).

An earlier draft of this section called the 0.502434 single-seed score "the first 0.5 that carries weight". That was overstated and C2 disproved it. The weight came from the transition count; the point estimate itself had an unmeasured spread of 0.066, and 0.502434 was simply one draw near the middle of it.

A1. Point the model path at the target design already measured as better. Done 2026-08-27, and it found a defect on the way (log item 110). The h1m20 table the recommendation rested on had been built without join-vlf-image-features, so it was missing all 16 vlf_image_* columns and every VLF ablation in item 104 had been scored on file bookkeeping rather than spectrogram content (Target Design, MISTAKES.md). Rebuilt through the join. scripts/build-common-transformer-fixture.sh now takes ITALY_LABELED, so which target design a run trains on is one environment variable rather than an edit.

A2. Establish the real magnitude of completeness. Done 2026-08-27, and the premise was wrong in our favour. M≥2.0 was the connector default, not a catalog floor: the INGV FDSN service serves down to M0.0, and measured maximum-curvature completeness for Italy is Mc = 1.1 with a b-value of 0.787 over 17,196 events in 360 days. M≥1.5 sits safely above Mc and multiplies event supply by 2.64 (Target Design for the working request shape and the frequency-magnitude table). Caveat, unchanged and now load-bearing: Mc = 1.1 is a whole-Italy aggregate, per-cell completeness is worse in some of the 19 cells, and a threshold near Mc writes network geometry into the target. M≥1.5 is chosen for margin.

A3. Replace the binary label with a count or rate target. Under a count target every anchor carries information even when a binary label would not flip, so the transition count stops being the sample size. Score by Poisson deviance against the same circular-shift null. Caveat: the base-rate problem returns in a new costume as "predict the per-cell mean", so it needs its own stratified control before any number is read.

A4. Score as a point process rather than as a window classifier. Model a conditional intensity over time and space and evaluate by held-out log-likelihood over events. The unit of evidence becomes the event — 13 in the week held out in log item 109 — instead of the label transition. This is the standard formulation in operational seismology and it is the cleanest exit from the transition-count trap. Caveat: the largest change on this list; new evaluation code, new null, and the fixed-cell contract retires with it.

A5. Archival backfill. Attempted 2026-08-27; the VLF route is closed (log item 111). abelian.org no longer resolves — SERVFAIL with no NS records from a public resolver, against NOERROR for vlf.it — so both the retrieve.php archive and the vlf15 raw stream are gone with the domain. www.vlf.it, which is where the live captures actually come from, serves current images only and has directory listing disabled. The astronomy half needed no work at all: gfz_kp_ap.csv already holds 276,576 rows back to 1932 and f107_daily.csv 23,883 rows back to 2004, so the "archival access unconfirmed" note this item was based on was stale. Astronomy alone cannot extend the record, since every anchor needs a VLF capture. The only remaining route to historical VLF is the operator — see the email below, which this now shares a purpose with.

B. Make a signal findable if there is one

B1. Regress out the known drivers and model the residual. VLF amplitude is dominated by diurnal, seasonal, solar (F10.7) and geomagnetic (Kp, Dst) terms. Fit those first, model what is left. This also dissolves the date-proxy problem: astronomy stops being a classifier input, where five channels correlate above 0.6 with anchor index, and becomes a nuisance regressor, where that correlation is exactly what you want it to have (Astronomy Alignment).

B2. Compute the observables the literature actually claims, not a generic anomaly score. The published candidates are terminator-time shift — the timing of the sunrise and sunset minima on a named transmitter-to-receiver path — nighttime amplitude fluctuation, and trend residual. All three are path-specific. The current pipeline scores whole-frame anomaly, which is not the same quantity. Caveat: requires identifying which spectrogram column belongs to which transmitter.

B3. Move from rendered JPGs to raw samples. Blocked as of 2026-08-27 — the vlf15 Ogg stream was hosted on abelian.org, which no longer exists (log item 111). The reasoning still holds: palette-quantized pixels are the reason the record is split into eras at all, and raw samples would stop that mechanism for everything captured after. There is simply no endpoint to get them from. Reopening this needs the operator, or new hardware (B4).

B4. Add a second receiver. One station cannot separate a local RFI change from an ionospheric one, and it has no spatial resolution at all — the fixed-cell target asks a single-point sensor to say where. Two separated receivers permit common-mode rejection. Caveat: outside this repository, and dependent on another operator or on new hardware.

C. Make an eventual result believable

C1. Add ETAS as the baseline. There is no ETAS or Omori model anywhere in the repository. The controls in use are historical rate and climatology; the field-standard bar is aftershock clustering. The transfer trial already loses to a historical-rate control (0.671167 against 0.69222), so ETAS is a harder bar — but it is the bar a result would have to clear to mean anything. The stronger variant: make the ETAS residual the target, so trivially predictable clustering is removed and VLF is asked only about what ETAS cannot do.

C2. Report seed ensembles with an interval. Done 2026-09-04, and it retired three earlier numbers. run-cross-region-generative-smoke.sh now takes SEEDS and defaults to five; the evaluator already looped over --seed, so this cost nothing but run time. Five seeds on identical data spread 0.475160 to 0.541439 — mean 0.507415, 95% CI 0.4772 to 0.5376, which contains chance. The single-seed values reported in items 107, 109 and 110 (0.513960, 0.500000, 0.502434) all sit between the 40th and 60th percentile of that spread (log item 112). A single-seed transformer score on this data is not a result, and two of the three had been written up as though it were.

C3. Shrink the model that makes the claim. At tens of transitions a transformer cannot be justified on evidence. A logistic model or gradient-boosted trees over a handful of B1 and B2 features would score no worse and would fail interpretably. Keep the transformer for representation learning; put a small model on the head of anything reported.

C4. Pretrain on the unlabeled stream with a forecasting objective. Labels are the scarce resource; VLF frames are not. Next-interval spectrum prediction, or contrastive matching across time, uses the entire record regardless of event supply. Caveat: representation quality cannot be checked without labels, so this improves the odds without producing a result.

C5. Pre-register before the transitions accrue. There will be one first look at a low-hundreds transition count, and every design, threshold and ablation choice made after seeing it spends the claim. Write the design, metric, null and decision rule down now, and record how many variants have already been tried.

The blocking constraint

Held-out label variation, not features, model capacity, or CPU time.

The fixed-cell target uses 30-minute anchors against a multi-day horizon, so consecutive target windows for one cell overlap by more than 99% and the rows inside a cell are near-copies. The honest sample size is the number of times a cell's label changes between consecutive anchors, and every report now prints that count before any score (log item 103, Target Design).

Current counts, held out:

Measured 2026-09-04, era_3, by ./scripts/count-label-transitions.sh:

Partition Transitions Two-class cells
1-day / M≥1.5 (current design) 41 13 of 19
7-day / M≥2.5 (design used until 2026-08-27) 4 4 of 19
era_0 (2026-06-28 to 2026-07-06) 1 1 of 19

At 41 a swing of ten points is still noise, and the two capture eras cannot be pooled because a 17.9 dB receiver-level step separates them (log item 96, Cumiana Colour-Scale Change). No modality can be tested until this number reaches the low hundreds inside a single era.

This is no longer purely a matter of calendar time. Until 2026-08-27 that claim was made against a design carrying 2 held-out transitions in era_3; changing the horizon and the magnitude threshold moved it to 31 in an afternoon (log item 110). Waiting is still the largest remaining lever, but options A3, A4 and A5 above have not been tried and each one addresses this constraint directly.

How much calendar time. The 2026-08-27 projection has now been checked against eight days of outturn and it holds: it predicted 1.09 held-out transitions per day and the record delivered 1.25, taking era_3 from 31 to 41. Extrapolating from 41 at the observed rate:

Held-out transitions Reached around If the old 7-day / M≥2.5 design had been kept
100 2026-10-21 2026-12-14
200 2027-01-14 2027-05-04

This assumes era_3 stays unbroken. A collector outage or a third palette variant starts a new era and resets the count.

This assumes era_3 stays unbroken. A collector outage or a third palette variant starts a new era and resets the count, which is why the palette check below is run after every refresh rather than occasionally.

Now

  1. Keep collecting. elfquake-prospective.timer every 30 minutes for VLF and INGV, elfquake-space-weather.timer daily for the geomagnetic and solar archives, elfquake-japan-vlf.timer for the research-only Japan track. This is the only action that moves the blocking constraint.
  2. Write to the Cumiana operator. This is now the highest-value single action available and it carries three questions, not one. (a) Did receiver gain change between 2026-07-06 and 2026-07-11? Images alone cannot separate a front-end gain reduction from a quieter ionosphere (log item 105(c)). (b) Does any archive of past spectrograms exist? abelian.org is gone and vlf.it serves current images only, so this is the only remaining route to historical VLF and therefore to A5. (c) Are raw samples available in any form? The vlf15 stream died with abelian.org, and raw samples are what B3 needs to end the capture-era problem (log item 111).
  3. Re-run ./scripts/diagnose-vlf-palette-shift.sh after each capture refresh. A third palette variant would split the record again.
  4. Re-run the fixed-cell evaluation through the elfquake-fixed-cell-evaluation skill when one era reaches held-out transitions in the low hundreds — and not before. The skill pins the as-of and catalog-end stamps so a run is reproducible.

After each data refresh

Run these, and read the caveat attached to each.

Command Caveat
./scripts/run-real-transfer-trial.sh Seismic-history baseline; VLF and astronomy enter as missing masks. Currently 0.671167 against a 0.69222 historical-rate control — below its own control.
./scripts/evaluate-italy-spatial-baseline.sh Set STRATIFY_FIELD=target_cell_id. Pools both capture eras, so its VLF features are not on one scale; cite the per-era numbers instead.
ERA_START=2026-07-28T08:51:25Z ./scripts/count-label-transitions.sh <labeled.csv> The count that must precede any score. refresh-prospective-labels.sh now prints it for both designs at the end of every refresh.
./scripts/report-italy-data-coverage.sh Warns if the anomaly scores predate the catalog.
./scripts/run-transfer-experiments.sh Compares historical rate, real-only init, synthetic transfer, and rolling-origin folds.

A script that reads a derived model artifact now checks its age against the event catalog first (Input Freshness). A score that reproduces to six decimal places across a refresh is a staleness signal, not a stability result.

refresh-prospective-labels.sh now also builds both spatial labeled tables. Until 2026-09-04 it built neither, so the table every fixed-cell evaluation reads was 13 days stale while a guard watched it — a guard on a file nothing writes only reports the decay it cannot prevent (log item 113).

Also run systemctl list-units --all | grep elfquake. On 2026-08-27 two of the three timer-driven collectors were sitting in failed state and neither had surfaced anywhere — not in the docs, not in the freshness guard, not in any evaluation. The guard compares derived artifacts against the event catalog; it cannot see a collector that stopped, because the file it would check is the one that stopped being written (log item 111).

Rules for reading any result

  • Print the transition count before the score. A balanced accuracy without it is not interpretable. ./scripts/count-label-transitions.sh prints it, and the refresh runs it automatically.
  • Never quote a single-seed transformer score. Five seeds on identical data spread 0.475160 to 0.541439. Three numbers written up as results in this log — 0.513960, 0.500000, 0.502434 — were draws from that one spread (log item 112). Run SEEDS, report the mean and interval.
  • Name the climatology pool alongside the distance. The same coordinate result scored 57.8% against a target-matched M≥1.5 pool and 73.7% against the deeper M≥2.0 history. The pool is part of the number.
  • Use the circular-shift null, not a timestamp shuffle. The shuffle carries up to a hundred times the evidence of the run it is meant to control and is not a null (Within-Cell Null Control).
  • Check the coordinate control. Removing the two cell-coordinate columns has so far collapsed the fixed-cell model to exactly 0.5, which means the score was per-cell base rate.
  • Check astronomy channels for date proxying. Five of them correlate above 0.6 with the anchor index over the current record, so under a time-based split they approximate an indicator for which side of the split a row is on (Astronomy Alignment).
  • Do not pool capture eras for anything derived from Cumiana pixel colour.
  • Time-based validation only. Training data must precede validation data.

Held open, no action available

  • Per-cell rate residual and single-regional-target designs. Two candidate replacements for the fixed-cell contract. Both need enough label variation to tell them apart, so neither can be tested yet (log item 103).
  • Japan cross-region training. 9 VLF-observed windows against 124 missing. Interface checks pass; there is nothing to train on. Research-use-only terms apply to all ISEE data.
  • Synthetic precursor search. Delayed-failure damage, two-stage maturation, per-receiver readouts, and a bounded stress reservoir have each failed their causal confirmation gates. Do not tune scalar parameters further without a stronger mechanism (log items 55-62).

Where things are written up

Concern Document
The numbered record Findings and Decisions Log
Target contract and evidence counting Target Design
The matched null control Within-Cell Null Control
Capture-era split and the dB step Cumiana Colour-Scale Change, Capture-Era Shift
Astronomy channels and alignment Astronomy Alignment
Stale-input defects and the guard Input Freshness
Mistakes and their prevention MISTAKES.md