The most useful thing AI did for this research wasn’t prove my theory. It helped me recognize when the evidence had ruled it out.

Over the last few months, I’ve used ChatGPT and OpenCode in a research-development loop around the Hubble tension. We wrote Python, constructed likelihoods, integrated astronomical datasets, searched model families, found implementation bugs, rejected hypotheses, designed follow-up experiments, reviewed papers, and eventually abandoned the theory that started the project.

The resulting paper isn’t about my original idea. It’s about a redshift-dependent difference between distance-calibrated and CMB-calibrated expansion histories. Getting there taught me something useful about what AI can and cannot do in scientific research.

Our workflow became:

Human hypothesis → ChatGPT research design → OpenCode implementation → real-data run → evidence bundle → ChatGPT adversarial review → accept/reject → repeat.

Plenty of AI-assisted research demonstrations show a system doing its best to prove whatever its user wants to believe, even when the hypothesis isn’t well posed. My experience was different once we built enough discipline around the tools that they could repeatedly deliver the less flattering verdict: “That result didn’t survive the test.”

Where the project started

I began with a speculative time-current framework. My initial question was whether the Hubble tension necessarily meant that our late-time expansion history was wrong. Perhaps some of the discrepancy came from the way different astrophysical calibration routes mapped into the cosmological frame.

The familiar disagreement is between a local distance-ladder value of H0 near 73 km/s/Mpc and a CMB-inferred value around 67–68 km/s/Mpc. I wondered whether part of that separation might enter through observational or calibration machinery rather than the underlying expansion itself.

We built calibration-path models that distinguished among:

  • Pulsating stellar distance indicators
  • Stellar-evolution distance indicators
  • Supernova calibration transfer
  • Direct geometric distances
  • Combinations of those routes

ChatGPT’s role was closer to a skeptical research architect than a chatbot supplying answers. I’d provide the codebase, results, logs, and current project state. It would inspect the evidence and turn the next question into a bounded implementation package. OpenCode agents, which I came to call the minions, would change the code, run the tests and fits, and return evidence. ChatGPT and I would review what came back.

Killing attractive explanations

Some early calibration experiments looked promising. One group of models appeared to improve the fit by roughly Δχ² ≈ 10. That was interesting enough to investigate, but the effect depended heavily on particular measurements, and several proposed mechanisms were effectively equivalent to ordinary nuisance-parameter adjustments.

We moved beyond published Hubble-constant summaries and worked with the measurement-level equations. The apparent signal largely disappeared:

  • Supernova-calibration rotation: Δχ² ≈ 0.008
  • Full-ladder versus direct-geometry test: Δχ² ≈ 0.018
  • Simultaneous three-rotation fit: Δχ² ≈ 0.047

In other words: zilch. An entire class of explanations had lost its empirical support.

A pattern emerged. We’d find a potentially interesting result, and the next review would ask:

Is the parameter actually identifiable? Does the result survive held-out data? Is this new physics, or did we merely add another nuisance direction?

Then the minions would build the test. Often, the test killed the idea.

Trying richer models didn’t rescue the theory

Next we asked whether our original scalar model concealed a more complicated tensor-like structure. We tried global tensor responses, transition-dependent responses, redshift evolution, and additional observable axes.

At one stage, a transition-dependent model appeared spectacular. An audit uncovered leakage, duplicated response terms, incorrect structural gates, confirmation-ordering problems, and other implementation defects. After those errors were corrected, the effect collapsed to roughly Δχ² ≈ 1.5 for the actually observable degree of freedom.

Dead again.

We eventually constructed a broader physical route-space ceiling: a test of whether we were failing because we’d chosen the wrong mathematical basis, or because the relevant observable directions simply lacked the signal we were looking for.

That ceiling reached only Δχ² ≈ 2.59, below our predeclared admission threshold. This was more informative than another disappointing fit. The problem wasn’t that we hadn’t invented a clever enough tensor. The observable measurement space didn’t appear to contain enough useful signal for that approach.

This is where the AI workflow became valuable and frustrating at the same time. A language model will happily propose an endless sequence of increasingly complicated mechanisms. We had to stop rewarding novelty and start demanding tests that could decisively reject a whole direction.

Moving upstream to the expansion history

By late August, we changed the question. Instead of trying to explain the Hubble tension through calibration routes, we examined the expansion history itself. The DESI DR2 baryon acoustic oscillation (BAO) measurements were important because they provided information resolved across redshift.

A flexible model found expansion-history structure resembling features discussed in DESI analyses of evolving dark energy, even though we weren’t directly fitting the usual w0–wa parameterization.

That was the first moment I thought there might actually be something here. But an interesting expansion curve is not a physical theory. We continued testing the background model and eventually obtained solutions with a local expansion rate around H0 ≈ 73 km/s/Mpc and an effective acoustic ruler around rd ≈ 135.4 Mpc, rather than the Planck-like value near 147.1 Mpc.

At the background level, it looked impressive. Then we tested the full cosmic microwave background.

It failed.

The most important decision: abandoning the original model

By that point, we’d spent months developing the theory, numerical pipelines, validation suites, figures, and a draft paper. It would have been easy to keep patching the model and inventing new degrees of freedom.

Instead, we opened a perturbation/CMB branch. The question was whether the background solution could be embedded in a physically healthy cosmology consistent with the Planck temperature and polarization spectra (TT, TE, and EE).

For the realization we’d built, the answer was effectively no.

That didn’t make the previous work scientifically worthless, although it certainly felt that way for a while. The model hadn’t produced a viable fundamental cosmology. But the search had revealed an interesting empirical expansion history, and that observation became the basis of the next paper.

Two histories, one better question

We now had two kinds of fitted solutions: one family aligned with lower-redshift distance data, and another aligned with the CMB. It felt as though we’d returned to the original Hubble tension.

I kept asking the AI a question it seemed determined to wander away from:

What is the actual difference between the two fitted expansion histories?

We froze the endpoint histories, stopped adding cosmological freedom, and constructed a compact description of their redshift-dependent separation. We initially called this the bridge analysis.

In mathematical shorthand, the quantity of interest was:

Δ(z) = ln[HR(z)] − ln[HCMB(z)]

Here, R denotes the distance-sector expansion-history endpoint and CMB denotes a Planck-compatible reference history. Rather than forcing the difference to be a constant H0 offset, we asked whether it had coherent structure as redshift changed.

The answer was yes, with important qualifications.

A five-coordinate, order-3 representation performed almost as well as a flexible 21-coordinate control. Its total fit statistic was about χ² = 1459.96, only 8.04 higher than the flexible control despite using 16 fewer coordinates. The projected Jacobian had full local rank, 5/5, with a condition number around 27.

That supported local identifiability of the compact representation. It did not prove that we’d found five fundamental physical parameters.

Testing prediction, not just fit

We didn’t select the representation merely because it looked good on the data used to fit it. We ran held-out tests.

  • Supernovae: The compact representation improved held-out prediction by about Δχ² = −76.1.
  • DESI BAO below the high-redshift Lyman-alpha measurement: The improvement was about Δχ² = −6.9.
  • Lyman-alpha BAO at z = 2.33: A straightforward extrapolation failed badly.

For the first two comparisons, a negative Δχ² denotes a lower, better held-out χ² under the comparison used in the project. But the high-redshift failure mattered just as much as the lower-redshift successes.

We limited the declared reconstruction domain to z ≤ 1.8 and treated Lyman-alpha as a separate continuation test. We could describe what the data supported over the constrained interval, but we could not claim that the same simple form worked indefinitely.

That’s what I mean when I say the AI became useful once we stopped treating it as a persuasion machine.

Disproving our own model-selection story

The next question was whether selecting an order-3 representation was itself a statistically significant discovery.

We bootstrapped the complete order-selection procedure under a null model. The result was:

P(select order ≥ 3) ≈ 0.216

That’s nowhere close to a five-sigma detection of “order-3 physics.” The order-3 representation was a useful, compact description of the difference curve, not a newly discovered law of nature.

A second question was equally important: What if the curve was an accident of the particular CMB reference we’d chosen?

We constructed a second Planck-compatible reference through a separate implementation and compared two curves:

Δ1(z) = ln[HR(z)] − ln[HC1(z)]

Δ2(z) = ln[HR(z)] − ln[HC2(z)]

The two CMB references weren’t statistically independent; both relied on Planck information. This was a reference-sensitivity test, not independent confirmation. Even so, the agreement was striking:

  • The two difference curves had a cosine similarity of about 0.9997.
  • Their principal angle was approximately 1.5°.
  • Their common-mode fraction exceeded approximately 0.998 over the constrained intervals.
  • Across those bins, the separation between the two CMB references was only about 1%–8% of the distance between the distance-sector history and either CMB reference.

Both distance-versus-CMB curves reached their largest amplitude around z ≈ 0.65.

That was the result, and it was a long way from my original time-current theory:

A redshift-dependent difference between distance-calibrated and Planck-calibrated expansion histories appears low-dimensional and relatively insensitive to which of two Planck-compatible reference constructions is used.

What ChatGPT actually did

ChatGPT wasn’t simply a code generator. Its most useful jobs were:

  • Research architect: Turning broad scientific questions into bounded experiments with explicit acceptance conditions.
  • Adversarial reviewer: Auditing results for leakage, identifiability problems, faulty likelihood assumptions, numerical bugs, and overinterpretation.
  • Scientific memory: Keeping track of dozens of branches, why they had been closed, and what remained unresolved.
  • Paper referee: Checking code, evidence, figures, and manuscripts for stale numbers, inconsistent claims, broken references, mislabeled plots, and even PDF font-encoding problems.
  • Workflow designer: Helping establish a development process that rewarded evidence over apparent progress.

That process evolved into:

Mission → explicit acceptance condition → bounded implementation → real-world execution → evidence → adversarial review → accept/reject.

The distinction matters. Passing unit tests didn’t automatically mean a scientific claim had survived. We needed actual runs, reproducible evidence, and a skeptical review of what the result meant.

OpenCode’s role: the minions

OpenCode was the implementation engine. Once we had a code-level task package, its agents worked directly in the repository. The instructions were usually explicit: modify a particular function, add an artifact, protect a frozen directory, run specified tests, produce CSV and JSON evidence, don’t touch certain datasets, and stop if a gate failed.

The minions built and maintained:

  • Covariance-aware likelihoods and Pantheon+SH0ES profiling
  • DESI BAO forward models and CMB integrations
  • Structural rank audits and bootstrap pipelines
  • Cross-validation and held-out evaluation machinery
  • Provenance manifests and reproducibility checks
  • Plotting scripts, paper bundles, and repository hygiene tests
  • The eventual interactive visualization

A typical instruction was something like: “Implement these 14 exact changes and return the evidence.”

That division of labor let one person operate a research codebase of a size and complexity that would previously have been difficult to manage alone. It didn’t remove the need to understand what we were testing.

The human still owns the research

My job didn’t disappear. It changed.

I still had to decide which scientific question deserved attention, which direction should be abandoned, when a result looked suspicious, whether a proposed mechanism made physical sense, and ultimately what claims I was willing to put my name on.

One rule became especially important:

Implementation agents don’t get to redefine the mission.

An agent could find a defect, report a failed test, or suggest another investigation. But changing the scientific objective required an explicit decision from me. Otherwise, the project could drift toward whatever the latest agent found easiest or most interesting to implement.

AI made the work faster. Skepticism made it useful.

The obvious advantage of these tools is speed. A single researcher can now build a much larger experimental apparatus than was practical just a few years ago.

But that speed is dangerous, too. AI can help generate ten bad hypotheses in the time it once took to develop one. The solution is to make falsification cheaper than rationalization.

These were the rules that served us best:

  • Never celebrate a training fit by itself.
  • Use held-out tests wherever possible.
  • Test identifiability before interpreting fitted coefficients.
  • Preserve failed results and the evidence behind them.
  • Never change a threshold after seeing the answer.
  • Keep discovery and confirmation separate.
  • Don’t let a prettier curve override a failed physical test.
  • Treat “the model failed” as a useful outcome.
  • When a theory fails but reveals a reproducible empirical pattern, preserve the pattern and discard the theory.

Where the research ended up

The paper now asks a more modest, and more defensible, question:

Is the disagreement between distance-sector and CMB-calibrated expansion histories merely an H0 offset, or does it have redshift-dependent structure?

In the fitted histories we examined, the distance-sector H(z) is systematically higher than the Planck-compatible references, and the difference varies with redshift. A compact five-coordinate representation describes that separation over z ≤ 1.8. Two Planck-compatible reference constructions produce nearly the same difference curve, with the largest endpoint separation around z ≈ 0.65.

The simple continuation fails at z = 2.33, which places a real limit on extrapolating the low-redshift reconstruction. It does not, by itself, tell us which physical mechanism is responsible.

Possible explanations still include evolving dark energy, early-universe acoustic-ruler physics, a combination of early and late effects, modified gravity or propagation, and observational or systematic effects. Distinguishing among them is the next research problem.

The result isn’t a solved Hubble tension or proof of a new theory. It is a constrained empirical comparison that survived tests our original mechanism did not.

Paper, code, and visualization

TL;DR: I used ChatGPT as a research architect and adversarial reviewer, and OpenCode agents as implementation “minions,” to investigate the Hubble tension. Most of our original theoretical mechanisms failed. Rather than hiding those failures, we used them to narrow the question until a cleaner empirical result emerged: the difference between distance-calibrated and Planck-calibrated expansion histories appears to have a compact, redshift-dependent structure rather than being only a single H0 offset.

The most useful thing AI did wasn’t prove my theory. It helped me abandon it when the evidence pointed elsewhere.

Leave a Reply

Your email address will not be published. Required fields are marked *