Energy-Flow Cosmology (EFC) — Likelihood Ledger

Pitch Validation Likelihood Evaluation Models White Paper Roadmap Gaps External Predictions Atlas Changelog

Morten Magnusson · Symbiose Research, Sandnes, Norway · ORCID: 0009-0002-4860-5095 · April 2026 · CC-BY-4.0

Status: This ledger closes the Dataset → Likelihood gap identified in the 2026-04-23 system audit. Every empirical test in the Validation Ledger must declare here which likelihood, which covariance, which priors, which code. Tests without a Likelihood Ledger row are not eligible for inclusion in the Evaluation Ledger global score. Scope today: schema frozen, worked example included, bulk population pending pipeline declaration by maintainer.


1. Purpose

The Validation Ledger records what was tested and how it scored. The Likelihood Ledger records how the score was computed. Without this layer, two identically-named tests in different pipelines (e.g. direct chi² vs full Cobaya posterior) can produce different verdicts — the system becomes non-reproducible.

Every row here binds a test_id from the Validation Ledger to a fully declared pipeline: likelihood type, covariance source, parameter priors, code, entry point, inputs, outputs, and execution status.


2. Schema (summary)

FieldMeaningRequired
test_idForeign key into validation-ledger/data/tests.jsonyes
likelihood_typegaussian · gaussian_cov · binned_chi2 · mcmc_posterior · analytic · externalyes
covariancePath or DOI of covariance matrix; diagonal if independent errorsyes
parameter_priorsdict of parameter → {type, range / mean ± sigma / ref}yes
codecobaya · mgcamb · cosmoSIS · direct_python · externalyes
code_versionGit SHA / package version / external tagrecommended
entry_pointRepo-relative script or external URLyes when code is not external
inputsDataset DOIs / repo refsyes
outputsSubset of: chi2, best_fit, posterior_summary, evidence, log_likelihood, predictive_samplesyes
statusdeclared runnable executed frozenyes

Full JSON Schema: docs/likelihood-ledger/schema.json.


3. Pipeline registry (initial scan)

Status as of ledger creation. Entries marked GAP have no pipeline declared and block their Validation Ledger counterparts from the Evaluation Ledger.

CategoryLikelihood typeCodeEntry pointStatus
BAO (DESI, eBOSS)gaussian_covdirect_pythonreproduce_bao.pyrunnable
CMB sanitygaussiandirect_pythonreproduce_cmb_sanity.pyrunnable
SPARC rotation curvesbinned_chi2direct_pythonreproduce_sparc.pyrunnable
EFC integration (background)analyticdirect_pythonreproduce_efc.pyrunnable
8 / S8 (growth)gaussian_covTBD (Cobaya likely)TBDGAP
Cosmic shear (DES, KiDS, Euclid)mcmc_posteriorcobaya + mgcambTBDGAP
ISW cross-correlationgaussiandirect_pythonTBDGAP
GW propagation (KC6)gaussiandirect_pythonTBDGAP
Full CMB likelihood (plik_lite TTTEEE)mcmc_posteriorcobayaTBDGAP

4. Worked example (template)

Template entry: fσ8 growth test declared

{
  "test_id": "s8_growth_fsigma8_2026",
  "likelihood_type": "gaussian_cov",
  "covariance": "data/cov/fsigma8_compilation_2026.json",
  "parameter_priors": {
    "Omega_m": {"type": "uniform", "range": [0.20, 0.40]},
    "sigma8":  {"type": "uniform", "range": [0.70, 0.90]},
    "mu_efc":  {"type": "uniform", "range": [0.80, 1.20]}
  },
  "code": "direct_python",
  "code_version": "efc@<git-sha>",
  "entry_point": "pipelines/fsigma8_runner.py",
  "inputs": [
    "doi:10.xxxx/desi-y3-fsigma8",
    "doi:10.xxxx/des-y6-3x2pt"
  ],
  "outputs": ["chi2", "best_fit", "posterior_summary"],
  "status": "declared"
}

Once a run produces numbers, status advances to executed and the result is recorded in the Validation Ledger. If the declaration is then frozen for publication, it advances to frozen.


5. Linking to the rest of the stack

LedgerRoleDirection
Validation LedgerDefines test_id vocabularyLikelihood Ledger references it (FK)
Evaluation LedgerGlobal score function, falsification verdictConsumes Likelihood Ledger rows with status ∈ {executed, frozen}
Model ComparisonEFC vs ΛCDM vs MG on identical likelihoodConsumes Likelihood Ledger row via likelihood_id
Gap AnalysisTracks missing pipelinesEvery GAP row here should appear as a gap row there
Stage-IV RoadmapMaps survey releases to testsEach roadmap test should eventually gain a Likelihood Ledger row

6. Sync hook (proposed, not yet written)

scripts/maintenance/efc_likelihood_sync.py mirrors the pattern of efc_ledger_impact_sync.py:


7. Open questions

  1. Should likelihood entries live as separate JSON files per test, or as array entries inside data/likelihoods.json? Proposal: single-array file, mirroring tests.json.
  2. How are external likelihood codes (Cobaya, MGCAMB) version-pinned? Proposal: Git SHA in code_version; conda env export as supplementary artefact.
  3. Should parameter_priors inline ranges, or reference validation-ledger/data/parameters.json? Proposal: reference by default, allow inline only when a test uses a non-standard prior with documented rationale.

Bottom line

What this ledger fixesMakes every empirical score reproducible by declaring its pipeline explicitly. No test enters the global score without a row here.
Hard dependencyValidation Ledger — provides the test_id vocabulary every row references.
Hard consumersEvaluation Ledger and Model Comparison — neither can fire without executed likelihood rows.
Current gaps8 / S8, cosmic shear, ISW, GW propagation, full CMB likelihood. All marked GAP until a pipeline is wired.
StatusSchema frozen; pipeline registry populated with all current reproduce_*.py scripts; bulk population of new pipelines follows maintainer review.

© 2026 Energy-Flow Cosmology Initiative · Likelihood Ledger — pipeline declarations for reproducible scoring