Appendix: pre-registration files

Appendix: pre-registration files and skeletons — Below is an excerpt of config/constraints.yml for inspection within TeX. In the release bundle, config/constraints.yml is authoritative and is sealed by checksums (checksums/sha256sum.txt). If TeX and the bundle file disagree, always prioritize the bundle file.

Below is an excerpt of config/constraints.yml for inspection within TeX. In the release bundle, config/constraints.yml is authoritative and is sealed by checksums ( checksums/sha256sum.txt ).

Below is an excerpt of config/constraints.yml for inspection within TeX. In the release bundle, config/constraints.yml is authoritative and is sealed by checksums (checksums/sha256sum.txt). If TeX and the bundle file disagree, always prioritize the bundle file.

version: atlantic_expansion_constraints_v0_10

scenario:
  variant_id: V_BASE
  variant_requirements:
    V_BASE:    [P1, P2, P3, P4, P5, P6]
    V_REC:     [P1, P2, P3, P4, P5, P6, P10, P11]
    V_PULSE:   [P1, P2, P3, P4, P5, P6, P10, P11, P12]
    V_SLIP:    [P1, P2, P3, P4, P5, P6, P13, P14]
    V_HOLO:    [P1, P2, P3, P4, P5, P6, P10, P11, P15, P16]
    V_COUPLED: [P1, P2, P3, P4, P5, P6, P10, P11, P12, P18]
    V_HOLOX:   [P1, P2, P3, P4, P5, P6, P10, P11, P15, P16, P19, P20, P21, P25]
    V_STRATA:  [P1, P2, P3, P4, P5, P6, P10, P11, P15, P16, P19, P20, P21, P25, P26]
    V_EVID:    [P1, P2, P3, P4, P5, P6, P10, P11, P12, P15, P16, P18, P19, P20, P21, P25, P29, P30]
    V_RES:     [P1, P2, P3, P4, P5, P6, P15, P16, P19, P20, P21, P25, P22, P31, P32, P33, P34, P35]

omega_nogo:
  deltaR_stop_km: 50
  deltaP_stop_MPa: 500
  mu_eff_hold_min: 1e-2
  h_stop_m: 1e-6
  tau_hold_s: 1e3
  undrained_required: true

predictions:
  P1: {...}
  P2: {...}
  ...

Operational rules.

P8 prereg skeleton config/p8_prereg.yml (optional)

P8 is optional, but because analyst degrees of freedom are large, file-based preregistration is practically mandatory. Below is a minimal template; concrete values can only be updated before a release and then checksum-sealed.

version: p8_prereg_v0_1
enabled: false

data_selection:
  ridge_segments: []
  profile_min_count: 3
  preprocessing:
    detrend: true
    filter:
      type: bandpass
      low_km: 5
      high_km: 200
    resample_km: 0.5

H0_model:
  gpts_version: GPTS2020
  v_spread_source: independent
  asymmetry_rule: mirror

H2_features:
  spectrum_method: welch
  lambda_band_km: [5, 200]
  peak_stat: median
  symmetry_metric: left_right_corr

metrics:
  H0:
    rho_unlock_min: 0.70
    transition_rmse_unlock_max: 0.20
  H2:
    cv_lambda_peak_unlock_max: 0.20
    coherence_unlock_min: 0.50

priority:
  rule: if_H0_unlock_then_H2_fail

outputs:
  json: results/p8_mag_compare.json
  log: logs/TEST-P8.log

Note. This template does not enforce a “correct answer”. Its purpose is to seal analyst degrees of freedom in advance.

P10 prereg skeleton config/p10_sed_prereg.yml (optional)

P10 (sediment thickness / budget) has large freedom due to data and model choices. At minimum, the following items must be fixed in a prereg file (checksum-sealed).

version: p10_sed_prereg_v0_1
enabled: false

data_sources:
  sediment_thickness_grid: null   # external reference (to be pinned in provenance)
  crust_age_grid: null            # external reference (to be pinned in provenance)
  transects_table: data/sediment/atl_sed_thickness_transects.csv
  drill_sites_table: data/sediment/atl_drill_sites.csv

models:
  thickness_age_relation:
    form: "power_law"
    y: "a * t^b"
  shelf_budget:
    form: "mass_balance"

metrics:
  regression_R2_unlock_min: 0.60
  regression_R2_fail_max: 0.20
  budget_closure_unlock_min: 0.70

outputs:
  json: results/p10_sed_gate.json
  log: logs/TEST-P10.log

P11 prereg skeleton config/p11_nodule_prereg.yml (optional)

version: p11_nodule_prereg_v0_1
enabled: false

data_sources:
  nodule_table: data/sediment/mn_nodule_samples.csv
  water_depth_grid: null

models:
  growth_rate:
    form: "kappa * f(oxygen, productivity, depth)"
  boundary_conditions:
    include_marine_snow: true
    include_bottom_current: true

metrics:
  bc_consistency_unlock_min: 0.70
  bc_consistency_fail_max: 0.30

outputs:
  json: results/p11_nodule_bc.json
  log: logs/TEST-P11.log

P12 prereg skeleton config/p12_volc_prereg.yml (optional)

version: p12_volc_prereg_v0_1
enabled: false

data_sources:
  volcano_catalog: data/volc/volcano_construction_ages.csv
  baseline_catalog: null  # e.g., GVP (to be pinned in provenance)

models:
  onset_cluster:
    statistic: "scan"
    window_ka: 2.0

metrics:
  p_value_unlock_max: 0.05
  effect_size_unlock_min: 0.30

outputs:
  json: results/p12_volc_cluster.json
  log: logs/TEST-P12.log

P13 (optional) friction threshold / stick-slip prereg template

version: p13_friction_prereg_v0_1
enabled: false

data_sources:
  # Literature / model inputs (must be pinned in provenance)
  driving_stress_refs: []
  friction_coeff_refs: []
  pore_pressure_refs: []

selection:
  regions: []   # e.g., "Himalaya", "Nazca", "Mid-Atlantic"
  time_window: null

definitions:
  tau_drive_MPa:
    method: "literature_range"
  tau_crit_MPa:
    formula: "mu_s*(sigma_n - alpha*Pf)"
  R_tau:
    formula: "tau_drive / tau_crit"

metrics:
  R_tau_unlock_min: 1.0
  R_tau_hold_max: 0.3

outputs:
  json: results/p13_friction_gate.json
  log: logs/TEST-P13.log

P14 (optional) thermo-kinematic afterimage prereg template

version: p14_thermo_kinematic_prereg_v0_1
enabled: false

data_sources:
  plate_velocity_constraints: data/kinematics/plate_velocity_constraints.csv
  heatflow_constraints: null  # to be pinned in provenance

models:
  kinematic_tail:
    form: "power_law"   # power_law | exponential
    v_t: "v0*(1+t/t0)^(-p)"
  heat_budget:
    W_fric: "eta_h*tau*A*S"
    dT: "W_fric/(rho*cp*A*h_eff)"

parameters:
  v0_m_s: null
  t0_s: null
  p: null
  tau_MPa: null
  A_km2: null
  S_km: null
  h_eff_km: null
  rho_kg_m3: 3300
  cp_J_kgK: 1200
  eta_h: 0.5

metrics:
  dT_hold_K: 300
  dT_fail_K: 1200

outputs:
  json: results/p14_tail_heat.json
  log: logs/TEST-P14.log

P15 (optional) Great Drainage prereg template

version: p15_drainage_prereg_v0_1
enabled: false

data_sources:
  basin_volume_scenarios: data/hydro/basin_volume_scenarios.csv
  sea_level_constraints: data/rsl/holocene_sea_level_constraints.csv
  canyon_markers: data/hydro/submarine_canyon_markers.csv

models:
  sea_level_gate:
    dSL: "-deltaV / A_ocean"
  discharge_gate:
    Qbar: "deltaV / T"

metrics:
  closure_unlock_min: 0.70
  canyon_cluster_p_unlock_max: 0.05

outputs:
  json: results/p15_drainage_gate.json
  log: logs/TEST-P15.log

P16 (optional) North Atlantic freshwater shock prereg template

version: p16_freshwater_prereg_v0_1
enabled: false

data_sources:
  proxy_timeseries: data/climate/freshwater_proxy_timeseries.csv
  amoc_proxy: null

models:
  joint_inflection:
    window_ka: 2.0
    method: "changepoint"

metrics:
  synch_unlock_min: 0.70
  synch_fail_max: 0.30

outputs:
  json: results/p16_freshwater_amoc.json
  log: logs/TEST-P16.log

P17 (exploratory) biogeographic split prereg template

version: p17_bio_prereg_v0_1
enabled: false

data_sources:
  split_candidates: data/bio/atlantic_split_candidates.csv

models:
  divergence_time:
    method: "molecular_clock"

metrics:
  cluster_p_unlock_max: 0.05

outputs:
  json: results/p17_bio_split.json
  log: logs/TEST-P17.log

P18 (optional) coupling to Pacific expansion V2 (open-system isotopes) prereg template

version: p18_isotope_open_system_prereg_v0_1
enabled: false

data_sources:
  casebook: data/isotopes/open_system_casebook.csv
  pacific_v2_notes: docs/user_notes_pacific_expansion_v2_extracted.txt

tests:
  TEST_ISO1:
    requirement: "modern_sample_reproducibility"
    tolerance_percent: 2.0

models:
  open_system_age_shift:
    form: "A(t) = A0 + deltaA(t)"

metrics:
  fail_if_TEST_ISO1_fails: true

outputs:
  json: results/p18_isotope_gate.json
  log: logs/TEST-P18.log