Two parallel forward-projection branches per observable.

For each climate observable, the framework runs two independent projection types and reports both. The branches are designed to fail differently — when both agree, the finding is robust; when they diverge, the divergence itself is the finding.

Branch A — Statistical extrapolation fans

For observables with a long observational record (CO₂, Arctic sea-ice, GMSL, RAPID AMOC, ozone), the framework fits ARIMA or AR(2) + linear-drift to the historical series and extrapolates 50 years forward. Then perturbs the forecast rate by ±0%, ±10%, ±25%, ±50% to generate 9 statistical scenarios.

This branch tests "what if the historical drift continues, with a perturbation". It is a model-free baseline. The 9 scenarios provide cross-shadow consensus.

Specific configurations per observable

  • CO₂ (Mauna Loa): ARIMA(2,2,2), AIC = 99.5. Central forecast 2074 = 562.3 ± 27.0 ppm (95% CI [509.5, 615.2]).
  • Arctic sea-ice (NSIDC): AR(2) + drift. 9 rate perturbations ±0%, ±10%, ±25%, ±50%, plus zero-rate and rate-flip.
  • RAPID AMOC: AR(1) + linear trend, μ = +203.077 Sv, κ = -0.092 Sv/yr (small relative to noise σ² = 8.4). Five rate-perturbation scenarios ±25%, ±50%.
  • GMSL: ARIMA(0,1,1) per shadow. Five rate-perturbation factors 0.5, 0.75, 1.00, 1.25, 1.50.
  • Ozone: separate decline-rate (1980–88) and recovery-rate (2000–24) per shadow. Five recovery scalings (0.50, 0.75, 1.00, 1.25, 1.50) + counterfactual no-Montreal scenario.

Branch B — CMIP6 SSP fans

For observables present in the Pangeo CMIP6 zarr archive, the framework streams the model output for each SSP and applies the same brake-extraction and PELT pipeline as Branch A. Multi-model ensembles per SSP provide the cross-model dispersion \(\sigma_{\text{cross}}\).

Catalogue coverage by SSP

ObservableSSP1-1.9SSP1-2.6SSP2-4.5SSP3-7.0SSP5-8.5
siconc12 models12121212
msftmz01314019
npp02625125
cSoil16666

"0 models" cells are honest catalogue gaps — the Pangeo cache does not include those SSP/observable combinations. Reported as "no models in cache" on the atlas.

Three brake estimators run in parallel

Every brake-extraction call runs all three estimators and reports the result side-by-side. Disagreement signals model misspecification.

EstimatorModelConfidence intervalUse case
polyfit_brake_pOLSBootstrap (1000 resamples)Naive baseline. Works when residuals are white.
gls_ar1_brake_pCochrane–Orcutt GLS with AR(1)Asymptotic GLSCorrect CI when residuals are autocorrelated.
bayesian_brake_pMAP + Laplace + MetropolisPosterior credible intervalSharper CI under known priors; robust to small-sample.

An example of cross-checking: the original (v1) Wunderling cascading-tipping coupling test (instance #19) reported AMOC↔Amazon Pearson r = -0.55. Bayesian-AR(1) cross-check collapsed it to r = -0.18 — the antiphase signal was largely autocorrelation artefact. Reported honestly. Verdict downgraded.

The three-criterion best-pathway test

For each observable's SSP fan, the framework tests three orthogonal criteria to identify a "best pathway":

  1. Cross-model tightness: \(\sigma_{\text{cross}}(\beta) \le\) within-model sample noise (Law III).
  2. Sub-rate β: consensus β 68% credible interval upper bound < 1 (Theorem 1).
  3. No mid-century regime change: PELT detects no change-point in consensus \(\Phi(t)\) before 2050 (single-regime cascade).

For sea-level rise, SSP1-1.9 wins on rank-sum aggregation 7 of 24. For sea-ice, no SSP clears all three — the framework reports "no best pathway" honestly. The σ_cross paradox surfaces here.

Theorem 3 forward-binding

A subtle consequence: Theorem 3's precision floor binds forward as well as backward. Extending the projection horizon does NOT enlarge \(\log(\Phi_{\max}/\Phi_{\min})\) unless \(\Phi\) approaches zero. For sea-ice and AMOC at narrow log-range, β extraction precision is intrinsically poor at year 2075 just as at year 2025. Forward extrapolation does not fix the precision floor. The framework reports this honestly under Law V.

Sources: domains/climate/experiments/scenario_fan_*.py (8 scripts) + regression.py + regimes.py.