Kunal Bhatia — Independent researcher, Meerut, India · ORCID 0009-0007-4447-6325
Code, chains, and a one-command reproduction pipeline for the paper
Value and Shape in the H₀ and S₈ Cosmological Tensions. The manuscript and its
self-contained build live in paper/; the journal submission package
(Elsevier elsarticle, targeting New Astronomy) is in
paper/submission_newast/.
Cosmological probe disagreements carry a reproducible value/shape geometry. In the structure-growth plane (Ω_m, σ₈), primary-CMB probes (a primordial-spectrum constraint) and lensing-amplitude probes — cosmic shear and CMB lensing — occupy two nearly orthogonal constraint-orientation classes (Δψ ≈ 89°). CMB lensing groups with cosmic shear, not with primary CMB (after correcting an earlier wrong-sign summary), so the split tracks measurement type, not redshift. It survives six independent falsifiers and a basis-invariant Fisher–Rao cross-check, and is bounded to the structure-growth plane.
A pre-registered external-validation round (X29) confirms the geometry on four new public chains: the ACT DR6 lensing-alone chain lands 0.3° from the Planck lensing-only chain (making the CMB-lensing placement a two-instrument result), KiDS-Legacy lands 0.9° from the shear class mean, and the official Pantheon+/SH0ES and DESI DR1 BAO+BBN chains reproduce every H₀ value/shape fraction to ≤ 0.2 percentage points.
The paper is deliberately conservative. It does not claim new physics, does not claim the S₈ tension is mislabeled — that stronger reading was stress-tested and retired (it was driven by a single survey and is consistent with a ΛCDM null) — and does not claim the geometry generalizes to (w₀, w_a). An explicit earned / not-earned / retired / data-unavailable ledger is in the paper's Scope-of-Claims appendix.
- Python 3.11+ (
pip install -r requirements.txt) - TeX Live 2025+ (
pdflatex,bibtex) — the AASTeX v7 class for the canonicalpaper/paper.pdf; the New Astronomy package ships its ownelsarticle.cls+.bst
The per-battery result JSONs in results/ are committed, so the paper
builds without re-running the analysis:
cd paper && ./build.sh # catalog audit → macros → figures → pdflatex/bibtexThis regenerates paper/paper_macros.tex (every numerical claim, traced to a
source in paper/outputs/data/macro_sources.json), the figures, the tables, and
paper/paper.pdf.
build.sh runs the analysis batteries directly — it does not download the
chains. Fetch the public chains into data/ first (one-time):
python -m src.fetch_chains # bulk fetch (src/fetch_chains.py / src/download_data.py)The X29 external-validation chains have dedicated fetchers with md5 provenance
records: src/fetch_act_dr6_lensing_chain.py, src/fetch_kids_legacy_chain.py,
src/fetch_desi_bao_bbn_chain.py, and paper/preregs/fetch_cmb_lensing_chain.py
(Planck PR3 lensing-only). Some sources require an accept-license click-through,
which the script reports. Archives and the verbatim survey-mandated data-use
statements are in the paper's Data Availability and Acknowledgements sections.
With the chains in place:
./build.sh # install deps → run batteries → tests → paper build
# (assumes the chains are already under data/)Set the interpreter with PYTHON=/path/to/python ./build.sh if needed.
The journal submission is an Elsevier elsarticle conversion of the canonical
AASTeX manuscript, regenerated by a formatting-only transformer — the body text,
equations, numbers, figures, and citation keys are byte-identical to
paper/paper.tex:
cd paper/newast_build && python convert.py # paper.tex → paper_newast.tex (+ tables)
cd ../submission_newast
pdflatex paper_newast && bibtex paper_newast && pdflatex paper_newast && pdflatex paper_newastThe self-contained bundle in paper/submission_newast/
compiles standalone to a 14-page two-column (final,5p) article (0 errors,
0 undefined references) and includes the six figures, the two tables, the
elsarticle-harv .bbl, elsarticle.cls, and its own README.txt. New
Astronomy is a direct Elsevier (Editorial Manager) submission — no arXiv id
required. The paper/jcap_build/ transformer is retained for a one-command JCAP
rebuild should arXiv endorsement become available.
Cosmo/
├── README.md this file
├── LICENSE MIT
├── CITATION.cff software citation metadata
├── requirements.txt Python deps
├── build.sh full pipeline: batteries → tests → paper build
├── paper/ the manuscript + self-contained build
│ ├── paper.tex canonical manuscript (AASTeX v7) → paper.pdf
│ ├── paper_macros.tex auto-generated numeric macros (do not hand-edit)
│ ├── refs.bib bibliography
│ ├── canonical_numbers.json curated headline numbers
│ ├── catalog_audit.py defines the four provenance pools → tables
│ ├── make_macros.py results/*.json → paper_macros.tex (+ macro_sources.json)
│ ├── make_figures.py results/*.json → figures
│ ├── build.sh audit → macros → figures → pdflatex/bibtex
│ ├── newast_build/convert.py AASTeX paper.tex → elsarticle (New Astronomy) transformer
│ ├── submission_newast/ self-contained New Astronomy bundle (elsarticle, two-column)
│ ├── jcap_build/convert.py retained jcappub (JCAP) transformer — regenerates the JCAP bundle on demand
│ └── outputs/{figures,tables,data}/
├── src/ one battery per file + chain loaders
├── results/ per-battery JSON outputs (read by paper)
├── preregs/ dated pre-registrations
├── tests/ pytest suite
└── data/ chains and inputs (large files git-ignored; re-fetched)
Chain-level claims are restricted to probes loaded as real MCMC chains; the catalog auditor reports every analysis pool by both provenance tag and loader reality.
This is a pre-registered project that grew across ~70 numbered iterations
(src/v2…v73), a set of stress-test "wild" runs (wildA…wildR), and the
external/edge rounds (x29, x30). You don't need to read all of them.
MANIFEST.md maps each headline result in the paper to the single
pre-registration, script, and result JSON that produces it.
Naming convention:
- Pre-registrations in
preregs/areX<n>/E<n>(earlier:cosmo_battery_v<n>). Each header names the battery it locks, e.g.X5 (V68). - Batteries in
src/are one file per run,v<n>_<name>.py, each writingresults/<name>_results.json. - Paper numbers are generated from those JSONs by
paper/make_macros.py. The authoritative machine-readable map from every macro to its source ispaper/outputs/data/macro_sources.json.
The remaining iterations are the development record (basis/rank robustness,
synthetic-injection nulls, clustering, sensitivity grids). They are retained for
transparency, exercised by tests/, and not required to reproduce
the paper — the canonical path is cd paper && ./build.sh.
This work uses public chains and posteriors from Planck (incl. the PR3 lensing-only chain), ACT (incl. the DR6 lensing-alone chains), WMAP, KiDS-1000, KiDS-Legacy, DES Y3, HSC Y3, DESI, Pantheon+, SH0ES, H0LiCOW, TDCOSMO, and eROSITA. The verbatim acknowledgement texts required by these collaborations are in the paper's Acknowledgements; archives and citations are in its Data Availability section.
Notable corrections to the analysis and manuscript — including the CMB-lensing
sign correction — are recorded in CHANGELOG.md. The manuscript
is in preparation (prepared for New Astronomy) and not yet published, so
these are development corrections, not a journal erratum.
See CITATION.cff. Repository: https://github.com/kunalb541/Cosmo.
MIT — see LICENSE.