Pre-registration — "Does the moon trigger earthquakes?" (DP-008 V1)
Status: FROZEN 2026-07-02. Methods locked before any extraction code is written.
Workspace: workspaces/lunar-syzygy-seismicity/. Promoted from docs/dream-papers.md DP-008.
Headline question
Across the 1973–2026 global USGS earthquake catalog, is the occurrence of M≥6 earthquakes non-uniformly distributed in lunar phase and tidal-potential phase — and, if so, is the coupling concentrated where the physics predicts (near syzygy, in shallow crust) rather than smeared uniformly across depths? Either way the result is a bound: the most rigorous global test of lunar–seismic triggering we can run with a measured catalog and a measured sky.
Measured-reality standing (Mike's call, 2026-07-02)
Both inputs are measured reality. The earthquakes are measured. The lunar/solar tidal
potential is a deterministic transform of the measured positions of the Moon and Sun
(JPL DE ephemeris, fit to lunar-laser-ranging and radar to centimeter precision) — the same
category as solar zenith angle or day-of-year, not a forecast, reanalysis, or model of a
chaotic system. It is IN. See feedback_measured_reality_only. The paper carries a one-line
statement of this so no reader mistakes an ephemeris for a model.
Data
Earthquakes (the population)
- Source:
usgs_earthquake(USGS Earthquake / ComCat), source_idd0c8a212-b859-484b-bc4b-22ceab778a4a. Coverage 1973-01-01 → present, 206,598 rows all magnitudes. Already dexed as theeqEventdex kind. - Magnitude = the
valuecolumn (metric = earthquake_magnitude). Depth =extra_json(TEXT, cast::jsonb) keydepth_km. Hypocenter lat/lon = the observation geometry.
Dedup (REQUIRED, frozen). The feed re-inserts events on revision and overlaps feed
windows, so one physical event appears many times. Collapse with the canonical quake-dedup
rule (docs/PAPER-MACHINE-CONTEXT.md §1): DISTINCT ON (date_trunc('minute', timestamp_utc), ROUND(lat,2), ROUND(lon,2)), keeping the largest magnitude in each group. Report raw vs
deduped N.
Declustering (REQUIRED, frozen — the load-bearing independence step). Aftershocks and foreshocks are not independent draws: a mainshock and its aftershock sequence share a time and therefore share a lunar phase, so an undeclustered catalog inflates N and manufactures phase concentration from a handful of large sequences (this is the #1 way this paper could lie to us). Primary analysis runs on a Gardner–Knopoff (1974) declustered catalog (magnitude-dependent space-time windows; keep mainshocks only). The raw deduped catalog is carried as a sensitivity line, never as the headline. Report N at each stage (raw → deduped → declustered) and treat the declustered count as the true effective N.
Populations (frozen)
- Primary: M ≥ 6.0 global, declustered. (~7,000 deduped before declustering; the M6 catalog is globally near-complete across the whole 1973–2026 window — verified by a stable ~140 events/yr with no long-term trend, and confirmed at extraction by a Gutenberg–Richter completeness-magnitude (Mc) check.)
- Sensitivity: M ≥ 6.5 and M ≥ 7.0 (fewer, cleaner, less aftershock contamination).
- Excluded: events with missing/invalid depth or coordinates (noted as a limitation, count reported).
The sky (the driver — computed, not fetched)
For each event's exact epoch and hypocenter, compute offline with astropy (8.0, already
in the env; no fetcher, no backfill, no rate limit — this dissolves the doc's "backfill the
tidal table to 1976" gate). Geocentric Moon and Sun positions from astropy's built-in
ephemeris give, per event:
- Lunar synodic phase angle φ ∈ [0°, 360°): the Sun–Earth–Moon elongation. 0° = new moon, 180° = full moon. Syzygy = φ near 0° or 180° (Sun and Moon aligned → maximum tidal range). This is the primary phase variable.
- Equilibrium tidal potential at the hypocenter: the combined lunar + solar degree-2 equilibrium tide, ∝ (M_moon/r_moon³)·(3cos²ψ−1)/2 for the Moon plus the analogous solar term, evaluated at the event's latitude/longitude/time (ψ = geocentric zenith angle of the body at the hypocenter). Used as a per-event amplitude percentile (tertiles) and as the phase of the semidiurnal tide.
- Semidiurnal tidal phase θ_sd ∈ [0°, 360°): where in the ~12.42 h tidal cycle the event fell (rising / peak / falling / trough of the local equilibrium tide). Registered as a secondary variable and explicitly flagged as the one most confounded by the solid-Earth semidiurnal frequency.
The live lunar_tidal.py fetcher's approximations (a hardcoded new-moon anchor + modulo
synodic period) are not used — that drifts ~a day over 50 years. The paper recomputes
phase from true Sun–Moon geometry per event.
Tests (frozen)
Primary test — Schuster test for non-uniformity of the lunar synodic phase angle φ over the declustered M≥6.0 catalog. Each event contributes a unit vector at angle φ_i; the resultant length R over N events gives p = exp(−R²/N). Small p ⇒ phase concentration. Report p, R/N (the concentration), and the mean phase (where the excess sits). Rayleigh test reported as an agreeing cross-check.
Secondary tests:
- Schuster test on the semidiurnal tidal phase θ_sd (the classic Earth-tide-triggering variable), with the caveat above.
- Occurrence rate by tidal-potential tertile (low / mid / high equilibrium tide): a χ²/rate-ratio test for excess occurrence at high tidal potential.
Stratification (frozen) — the directional prediction is where this paper earns its keep. Repeat the primary Schuster test within depth strata:
- Shallow ≤ 70 km, intermediate 70–300 km, deep > 300 km.
Pre-registered directional predictions (locked BEFORE extraction)
If lunar/tidal triggering is physically real, then:
- Syzygy excess: the phase excess sits near φ = 0°/180° (new/full moon), not at quadrature.
- Depth ordering: coupling is strongest in the shallow stratum and weakest in the deep stratum. (Tides stress the shallow crust; deep events sit in a regime where the equilibrium-tide stress is a smaller fraction of ambient stress and where the population is dominated by deep-subduction mechanics.) A signal that is uniform across depth, or stronger at depth, argues against a tidal-triggering interpretation and for a catalog artifact.
- Amplitude ordering: occurrence rate rises monotonically low → high tidal-potential tertile.
Any of these failing while the aggregate Schuster is significant is itself a reportable finding (a significant-but-physically-wrong pattern points at a confound, not triggering).
Null hypothesis (H0)
Event phases are uniform (Schuster/Rayleigh p > α at every stratum) and there is no
depth ordering of concentration. A clean H0 is a full, publishable result — the definitive
global bound on how large a lunar-triggering effect can be and still hide in 53 years of M≥6
data. feedback_measured_reality_only / null-results-are-findings.
Multiple comparisons (frozen)
The pre-registered family: 3 phase variables (synodic / semidiurnal / amplitude) × 3 depth strata × 1 primary magnitude population = 9 primary tests (sensitivity magnitude bins are robustness, not new hypotheses). Apply Bonferroni-9 at a family α = 0.01 (per-test threshold p < 0.00111). The single headline claim is the synodic-phase test on the shallow stratum; it must survive Bonferroni to be called a detection.
Power / detection floor (honest, pre-registered)
Schuster's detection floor for a phase-locked occurrence enhancement of amplitude a scales as needing N ≳ (z_α / a)². For a ~1% enhancement (a = 0.01) at α = 0.01 this is N ≈ 10⁴. We have ~7,000 deduped M≥6 events, fewer after declustering (expect ~4,000–5,500 independent mainshocks; ~2,000–3,000 in the shallow stratum). Therefore, pre-registered expectation:
- Decisive at the global aggregate for enhancements ≳ 1.5–2%.
- Suggestive (underpowered for Bonferroni significance) at ~1%.
- Bounding below ~0.7%.
So the honest a-priori verdict space is: a real ≳2% effect we would catch cleanly; the ~1% effect reported by some shallow-continental studies we can only call suggestive; and a clean null sets the global bound. We register this before seeing the result so a null cannot be re-spun as "underpowered" after the fact and a marginal positive cannot be oversold.
Confounds and how each is handled (frozen)
- Aftershock non-independence → Gardner–Knopoff declustering (primary); raw as sensitivity. The single most important control.
- Catalog completeness drift → restricted to M≥6.0 where the catalog is globally near- complete for the whole window; Mc verified by Gutenberg–Richter b-value stability at extraction; sensitivity at M≥6.5/7.0.
- Solid-Earth semidiurnal tide overlap → the synodic-phase (primary) and semidiurnal-phase (secondary) variables are tested separately so a semidiurnal artifact cannot masquerade as a synodic (syzygy) signal.
- No anthropogenic lunar-period confound → a genuine strength. Unlike day-of-week or time-of-day tests, nothing human recurs at the 29.53-day synodic period, so a synodic signal cannot be a reporting-schedule artifact.
- Driver collinearity → lunar and solar tides are separated by construction (syzygy vs the amplitude tertiles carry the joint term); no external driver regression in V1.
Effective N and independence
The reported N for every test is the declustered count, not the raw catalog. Raw-vs- declustered N is printed at every stratum so the reader sees exactly how much the independence correction costs. This directly answers the Sasha "effective N" lens up front.
Outputs (results.json schema, frozen)
catalog: raw_n, deduped_n, declustered_n; Mc estimate + b-value; per-depth-stratum N.schuster: for {synodic, semidiurnal} × {all, shallow, intermediate, deep} × {M6, M6.5, M7}: p, resultant R/N, mean phase, Rayleigh-p cross-check, Bonferroni-adjusted significance flag.amplitude: occurrence rate + rate-ratio by tidal-potential tertile, per stratum, with CI.directional_checks: booleans + numbers for the three pre-registered predictions.phase_histograms: binned counts (for the paper's figures).power: the pre-registered floor numbers and the achieved N.
V2 / V3 hooks (recorded at promotion, not built now)
- V2 — fault-resolved tidal stress. Merge GCMT focal mechanisms to compute the tidal shear/normal stress on the actual fault plane (the Cochran-2004 / Métivier-2009 test), which is where the strongest published effects live. Needs a GCMT ingest.
- V2 — planetary syzygy. Jupiter/Venus–Sun–Earth alignments via full JPL Horizons ephemeris (already noted in the DP-008 pitch).
- V3 — eclipse tail-test. Occurrence at solar/lunar eclipse windows (rare, careful tail-test methodology).
What is deliberately NOT in V1
- No focal-mechanism / fault-plane resolution (that is V2; V1 tests the coarser but robust hypocentral equilibrium-tide and synodic-phase quantities).
- No regional/tectonic-regime stratification beyond depth (regime needs GCMT; depth is a clean proxy available in-catalog now).
- No external space-weather / solar drivers (out of scope; this is a gravity paper).
Frozen by: managing editor, 2026-07-02. Methods-lock RATIFIED by Mike, 2026-07-02.
V1 tests depth as the "which faults" proxy (fault-resolved tidal stress deferred to V2, GCMT);
Bonferroni-9 counts the 3 phase-vars × 3 depth strata, sensitivity magnitude bins are
robustness not new hypotheses — both confirmed by Mike at ratification.
Then: /riley lunar-syzygy-seismicity <task> for extraction + analysis, /sasha red-team
on the results, managing editor drafts, /copyedit before ship.