← Back to Blog
klimaspiraleklimadatendatenvisualisierungthreejsclaude-codeJuly 26, 2026 · 11 min read

Klimaspirale Part 3: The Objection I Missed

r = anomaly + 1.2 · same tape width, more distance outsideAI-generated image
Editorial illustration: drafting-table scene. A measuring tape lies unrolled in a spiral on a dark surface — the short inner turns in blue-grey, the ever-longer outer ones in copper-red, all exactly the same width. To the left, a pair of dividers and the tape's leather capsule, in front a handwritten note with the formula 'r = anomaly + 1.2'.Editorial illustration: drafting-table scene. A measuring tape lies unrolled in a spiral on a dark surface — the short inner turns in blue-grey, the ever-longer outer ones in copper-red, all exactly the same width. To the left, a pair of dividers and the tape's leather capsule, in front a handwritten note with the formula 'r = anomaly + 1.2'.

The explainer overlay was in place, the videos were rendered, and the next step would have been to put the page online. That’s where I stopped.

There hadn’t been a proper review up to that point. Claude Code had built everything and knew the files from the work itself. But building along and checking independently aren’t the same thing.

So I set up a review brief with Claude that takes me out completely as a source.

The Review Brief

The brief ran about sixty lines. The first paragraph took me out of the picture:

Read the repo structure, ALL spiral-*/index.html, the interactive HTML and the JSON source data YOURSELF. Don’t take my word for it.

Then the priority, because up to that point most feedback had been about looks:

Correctness and honest presentation are the actual quality criterion, not the look.

Every sentence in the result had to be backed by evidence. And at the end, two questions aimed not at errors but at gaps:

Which scientific objection to this visualization am I missing, the one that’s going to blow up in my face on YouTube?

What are you least sure about? One check command or one source per point.

Two more rules came with it. Claude Code got the role of reviewer, not implementer. And the results belonged in two files in the repo instead of in the chat: a postmortem with the overall verdict per clip and a sorted findings list.

Files I can go through line by line afterwards. A chat answer would have been gone after the next task anyway.

The scope was everything: eight video compositions, the interactive version, the data files, the README, the stills from rendering, the git history and the release plan.

One finding from it: the offset of +0.19 °C that the whole Paris strand from Part 2 depends on is, according to the GISS FAQ, a versioned value that can shift with a revision.

The Europe Gap

The plan was to build the spiral for Europe as well, as a second view alongside the global one. The data was already in the project.

Claude Code pulled the data arrays from the compositions and had length, start and end printed out. The global series ran into the current year. Europe: 1,692 entries, January 1880 to December 2020.

The review framed the finding as a question: “First YouTube question is going to be: Why does Europe stop in 2020?”

The missing years aren’t just any years. Europe counts as the continent warming fastest, and the record years sit right in that gap.

The cause turned up quickly. The classic regional series from Berkeley Earth haven’t been updated in a while. The current route goes through a product behind a password gate with mandatory registration. So: the switch to the European land series from NOAA’s Climate at a Glance, which reaches into the current year.

Because this source uses a different reference period, the series had to be recalculated per calendar month onto 1951 to 1980. That’s the same baseline the whole scale hangs on. Whether the recalculation is correct can be checked easily: averaged over the baseline period, each of the twelve calendar months sits at most 0.005 °C from zero.

The comparison against the old series produced a correlation of 0.973 and a mean difference of -0.05 °C. Two independently calculated series over the same continent move almost identically month by month. The switch extended the series, it didn’t rewrite it.

The peak value still moved noticeably: +3.97 °C in February 2024, compared to +2.40 °C in the last month of the old series. Regional monthly values swing much wider than global ones. Over a single continent, a February can be several degrees above its long-term mean, while the global series as a whole gets by with a range of just over two degrees.

That range was ultimately the reason to pull the Europe view back out. Putting regional swings next to global ones is comparing apples and oranges: the amplitudes play in different leagues, and the comparison says more about scale differences than about climate. Europe would have needed its own spiral anyway.

So only the global spiral went live.

The Solid Part

In the postmortem, the section “What is solid” is longer than the list of defects.

The data arrays in the four global compositions and the interactive version were identical with the canonical file: 1,757 monthly values, no drift. The determinism audit found zero hits for random numbers, the system clock, network calls and screen refresh.

Every frame follows solely from the time position the renderer supplies. That makes good on the determinism promise from Part 1.

Both series were arithmetically centered on their baseline period, and the build-up time marks matched across all eight compositions.

For the review’s credibility, this counts just as much as the findings. An audit report that only ever reports disasters has probably been looking for disasters.

My Own Mistakes

Two findings concerned texts that Claude had written in the project.

The README called the dashed scale rings “(Paris marks)”. That’s exactly what the project’s own release plan forbids: never call the 1.5 °C ring the Paris target without a note about the baseline. How the two scales relate is in Part 2. In the README it was wrong.

The second finding sat in the explainer overlay. There the offset of +0.19 °C was described as an “official GISS/IPCC value”. The number is correct, and it’s citable at GISS.

But the IPCC doesn’t publish any such offset for this series; it calculates directly against 1850 to 1900. One institution had simply turned into two. The text now says GISS only, with the FAQ as the source.

The remaining findings were smaller. The libraries for scene and timing still lived on a third-party server. The versions were pinned, so no determinism problem, but for reproducibility they should be local. Done.

On top of that, something the review had only uncovered indirectly: the regional data existed solely embedded in the HTML files. That’s exactly how the Europe gap had come about. The fix was a canonical JSON source from which a script generates the embedded copies and aborts on any deviation.

The Geometry Objection

The answer to the question about the missed objection was about the form of presentation itself:

A polar spiral with rho = anomaly + 1.2 (a) optically squeezes cold anomalies into the center and gives warm values disproportionately much line length / ‘ink’ (circumference ∝ radius), and (b) the 3D funnel amplifies that further: the same Δ°C looks more dramatic on the outside than on the inside. Charge: ‘You picked a geometry that visually exaggerates warming.’

The core of it sits in a single line of code that has stood unchanged since the build day. A data point’s distance from the center is its anomaly plus a fixed offset.

Without that offset, the cold years would have negative radii and fold through the center point. The offset is the condition for the first half of the series being drawable at all.

But it’s also what gives the second half an optical advantage. The circumference of a circle grows with the radius.

The review expressly noted that there is no error here. The radius offset is not a calculation trick, and the geometry isn’t an invention of this project either: it’s the form Ed Hawkins designed, and the one NASA uses in its own version.

As a counterargument, the review pointed to what’s already in the image: the rings carry numbers, and every monthly value is displayed during the build-up. Anyone reading the spiral can check the area against the digits.

The finding was filed as a communication problem. No image had to be re-rendered, no number needed correcting. What was missing was the answer to somebody who sees through the geometry and builds a charge out of it.

The Self-Criticism in the App

The review’s recommendation was to address the objection in the video description and in the blog post. But that only reaches people who read the accompanying text anyway. So I ordered the criticism into the app, where the spiral itself lives:

I want you to add more and honest information to the help page, including the criticism that this presentation emphasizes the warmer times more strongly …

That turned into two new sections in the explainer overlay, bilingual like the rest.

One explains the radius encoding and its side effect: distance equals deviation plus offset, circumference grows with distance, warm years get more line from that, and the funnel adds a bit on top.

Plus the note that the same geometry is used by Ed Hawkins and by NASA.

The other section says that the 2023 and 2024 records are partly El Niño-driven. The app’s source line now names not only the data source but also who the form of presentation comes from.

The geometry section points to three countermeasures in the control panel, and all three were already there.

The top-down view, where the funnel effect drops away, I’d had built earlier because the lines in front of the rings had been bothering me. The height slider pulls the funnel flat. And every ring carries its real degree number.

The El Niño Marker

The El Niño point sat for a while. At some point I remembered that it had come up in an earlier session. So I had it checked:

[…] which El Niños are we showing and is that consistent overall? Should we call them ‘Super El Niño’?

The finding was uncomfortably clear. The overlay announced the toggle as a marker for 2023/24, but the data array held only 1973, 1983, 1998 and 2016.

The six highest anomalies in the series fall in the years 2023 to 2025 and were completely unmarked. The toggle was called El Niño and showed everything except the events the debate is about.

The fix consisted of a rename and a hard criterion. “El Niño” became “Super El Niño”, with a threshold in the ONI index instead of by feel.

Claude Code parsed the periods of the five events from NOAA’s official ONI file. The new marker sits on February 2024. The record month September 2023 already carries a marker of its own; its causes don’t lie in the Pacific alone.

Because an El Niño runs over months, the affected months also got a highlight on the spiral line itself. The first version was too faint: “I can’t see the El Niño highlight on the line.” After two rounds of sharpening, the glow trail sits at three times the line width.

With that, the criticism of the project’s own form of presentation stands in the app, in the same explanatory text that also keeps the baseline and the Paris thresholds apart. The countermeasures are built in, not just asserted.

What isn’t in there is the objection that comes first with a picture like this: that it’s all natural variation. That one is aimed at the cause, and the spiral shows the effect. What’s in it is temperatures and nothing else.


Part 3 of 4 in the Klimaspirale series.

← Klimaspirale Part 2: The Baseline Trap | Klimaspirale Part 4: CO₂, and What Was Under the Post →

The spiral from this series is a project: Climate Spiral.

Comments

Commenting takes an email confirmation or a GitHub login. Comments run on my own server, not on an ad provider's — details in the privacy policy.