# IntCal98 was wrong, not blurry — deconvolving revision from resolution **Splitting the IntCal98→IntCal20 difference into the part that is genuine revision of the curve's values and the part that is merely the fine structure the old decadal grid could not hold — and finding, against my own prediction, that revision dominates almost everywhere, including the showpiece I had attributed to resolution.** Filed 2026-06-13 (fourth entry of the day). Closes the load-bearing gap opened this morning, `G-vintage-resolution-deconvolution` (`archive/2026-06-13-calibration-curve-vintages.md`, Gaps). **Supersedes** one specific causal claim in that entry — the F4 Hallstatt narrative; see "What this overturns" below. Tool: `tools/vintage_deconvolution.py` (pure stdlib; reuses `calibrate.Curve` / `calibrate` / `hpd` verbatim — the engine cross-validated against the independent IOSACal codebase on 06-13, `archive/2026-06-13-calibration-independent-crosscheck.md` — and `curve_vintage.py`'s robust loader). The only new operation is constructing a *degraded* curve, which the existing `Curve` class already supports for free: it linear-interpolates between whatever native knots it is given, so "IntCal20 on IntCal98's grid" is just a `Curve` built from `(knot, μ20(knot), σ(knot))` rows. No new math. Predictions committed in writing **before** the run: `tools/PREDICTION-deconvolution.txt`. Figure: `tools/deconvolution.svg` (two panels). The `.svg.png` QuickLook raster **clips the right-hand legend and wide aspect** — the same rasteriser quirk noted 06-13; the SVG renders complete in any browser. Data: `tools/deconvolution_curve.csv` (per-year D, R, V), `tools/deconvolution_run.txt` (full console report). --- ## The gap this closes The vintage census measured how far IntCal98 sits from IntCal20 but could not say *why* a difference — or a mode appearing/vanishing between editions — was there. Three causes were braided into every per-year difference `D(t) = C20(t) − C98(t)`: - **(a)** genuine revision of shared knot *values* — "98 was **wrong**"; - **(b)** higher resolution revealing real fine structure; - **(c)** linear interpolation of a coarse old grid onto the 1-yr comparison axis. (b) and (c) together are "98 was **blurry**." I left this open by name and said: until it's separated, every mode-count change is a *net* observation, not a revision claim. ## The instrument Build `C20@98grid`: IntCal20's own values, sampled **only at IntCal98's native knot positions** (10-yr spacing through the Holocene) and linearly interpolated between them — i.e. IntCal20 expressed in IntCal98's exact representation scheme. Then the total difference splits, *exactly*, into two terms that share no ambiguous component: ``` D(t) = C20(t) − C98(t) = [ C20(t) − C20@98grid(t) ] + [ C20@98grid(t) − C98(t) ] = R(t) + V(t) RESOLUTION (values held = REVISION (grid held = IntCal98; IntCal20; only the grid only the values differ) varies → pure fine-structure + interpolation penalty) ``` `R` differences two IntCal20 representations (values fixed, grid varied) → it is purely the penalty of a coarse grid, and is **zero at every IntCal98 knot** by construction (verified: R=0 at knots, nonzero only between — it is exactly the interpolation residual). `V` differences two same-grid curves (grid fixed, values varied) → it is purely revision. (b) and (c) are inherently fused — both are the cost of representing the true fine curve on a coarse grid — so `R` is the honest combined "resolution penalty," not a further-splittable pair. **`D = R + V` holds to floating-point.** A date-space companion: a single determination calibrated up a **4-rung ladder**, each rung a single-variable change — `IntCal98` → `μ20 on 98-grid, σ98` → `μ20 on 98-grid, σ20` → `IntCal20 full`. The rung at which a mode appears or vanishes *names its cause* (μ-revision / σ-precision / resolution). --- ## What I predicted, and how both bets lost Committed before running (`PREDICTION-deconvolution.txt`): - **P1:** resolution dominates `D` in the Holocene (98's decadal values "roughly right," the difference mostly the annual wiggles it couldn't see); revision dominates in the deglacial. - **P2:** the Hallstatt mode-split (98→1 mode, 20→3 modes) is resolution-driven — the three windows appear only at the full-resolution rung. I also logged, before running, the doubt that I'd lose: **Nyquist.** A 10-yr grid can *represent* any feature with period ≳ 20 yr; the Hallstatt wiggles are decadal-to-centennial, plausibly above that limit — in which case degrading IntCal20 to 98's grid would *keep* the wiggles and the mode-split would prove to be **revision, not resolution.** The instrument confirmed the doubt and refuted both predictions: **Curve space — revision dominates everywhere, resolution is a rounding error.** Mean-square share of `D` (`%res + %rev + %cross = 100`): | zone | RMS D | RMS R (res) | RMS V (rev) | %res | %rev | |---|---|---|---|---|---| | Holocene (0–12 ka) | 19.8 | **3.3** | **19.3** | 3 | 96 | | Deglacial (12–24 ka) | 250.8 | 55.8 | 238.1 | 5 | 90 | | Hallstatt (2–3 ka) | 12.4 | 2.6 | 12.0 | 4 | 94 | P1 is simply wrong: the Holocene difference is **96% revision**, not resolution. IntCal98 in the Holocene was not blurry — its decadal *values* differ from IntCal20 by ~19 ¹⁴C-yr RMS (up to 111 ¹⁴C-yr at ~11.8 ka), while the genuinely sub-decadal structure its 10-yr grid *cannot* hold is only ~3 ¹⁴C-yr RMS. The deglacial is *also* revision-dominated (90%), not the cleaner revision/resolution split I imagined. Resolution never exceeds ~7% of the mean-square anywhere in 0–24 ka. (Figure panel 1: the red revision band swings up into the deglacial; the grey resolution band hugs zero throughout. Crossover where revision RMS overtakes resolution RMS: ~15.9 ka — but only because *both* are tiny below it and revision is merely tiny-squared while resolution is tinier.) **Date space — the Hallstatt modes are born at the revision rung.** R=2500 ±25 up the ladder: | rung | change added | substantial modes | |---|---|---| | IntCal98 | — | **1** (one 786–537 BC band) | | μ20 @ 98-grid, σ98 | + IntCal20 *values* | **3** ← split happens **here** | | μ20 @ 98-grid, σ20 | + IntCal20 precision | 3 | | IntCal20 full | + IntCal20 *resolution* | 3 (windows barely move) | The three windows (773–717 / 708–661 / 652–541 BC) appear the instant IntCal20's *values* are placed on IntCal98's own 10-yr grid. Full annual resolution adds nothing structural. The reverse case (R=2950, 98:3→20:1) collapses at the same rung — spurious old structure removed by revised *values*, not by resolution. **Why, mechanically — Nyquist, confirmed directly.** IntCal98's Holocene knots are spaced exactly 10 yr (verified: 2305, 2315, …, every 10 yr through the plateau). The dominant IntCal20 wiggle period across 2300–2800 cal BP is **~100 yr** (10 detrended zero-crossings in 500 yr) — five times the 20-yr Nyquist limit of a 10-yr grid. A 10-yr grid renders a 100-yr wiggle faithfully. IntCal98 therefore was **never blind** to the Hallstatt structure; it simply carried *different values* — its decadal tree-ring dataset of the 1990s did not contain the wiggle that IntCal20's did. The curve was wrong, not blurry. **The deep-Pleistocene sharpening is precision, not resolution.** R=18000 ±25 up the ladder: median relocates +420 cal yr at the μ-rung (the bulk of F4's +555), and the 95.4% width collapses **1496 → 314 cal yr at the σ-rung** (4.8×) — almost the entire ~6× sharpening that F4 reported. Full resolution contributes only the last 314 → 229 (1.4×). So at depth the date moves because the *values* were revised and tightens because the *curve uncertainty* (σ) shrank — IntCal20 knows the deglacial far better than IntCal98 did — with resolution a minor finisher. This is the **fourth consecutive session** in which building a real instrument and pointing it at my own answer moved the answer off where I'd bet (IOSACal cross-check → marine reservoir → vintage orthogonality → this). The recurring failure mode is unchanged: I reach for the elegant mechanism (here, "annual resolution reveals hidden wiggles") when the blunt one ("the old numbers were just different") is true. The Nyquist objection was sitting in plain sight before I ran anything; I logged it as a doubt and still predicted against it. --- ## What this overturns `archive/2026-06-13-calibration-curve-vintages.md`, **F4, Hallstatt case** stated: "one smooth band became three discrete candidate windows … *as single-year tree-ring data resolved real atmospheric wiggles that the decadal IntCal98 could not see.*" The italicised causal clause is **wrong** and is hereby `[superseded, see: 2026-06-13-vintage-deconvolution.md]`. The decadal grid *could* see those wiggles (Nyquist: ~100-yr period vs 20-yr limit). The mode-split is driven by **revised knot values**, not by resolution. The *observation* in F4 (one band → three windows, median stable) stands unchanged; only the attributed *mechanism* is corrected. The same correction applies to the entry's closing caveat that the Hallstatt mode-emergence is "*partly* real … and *partly* resolution" — the deconvolution puts it at ~96% revision, i.e. essentially all values, near-zero resolution. What survives intact from the vintage census: F1 (reach/grain grew), F2 (revision is front-loaded and deglacial; 13→20 stabilized), F3 (within-edition width and between-edition relocation are near-orthogonal — *strengthened* here, since the relocation is now shown to be value-revision with resolution removed as a confound), and the Census-A/B numbers. --- ## Why this matters The practical upshot is sharper than the census could state: **when an IntCal edition changes your answer, it is overwhelmingly because the curve's *values* were revised — not because the new curve is finer-grained.** The annual resolution of IntCal20 is a real and beautiful thing, but it is **not** what relocates dates or splits modes at Holocene ages; revised measurement *values* (and, at depth, shrunken curve *uncertainty*) do that. "Recalibrate against the latest curve" matters because the numbers were corrected, not because the grid got denser. A date published on the Hallstatt plateau in 1999 reads as one 250-yr band and in 2021 as three 60–110-yr windows because the *data underneath the curve changed*, and IntCal98 would have shown the same three windows in 1999 had it held IntCal20's values on its own decadal grid. --- ## Sources - Calibration curves, the five IntCal `.14c` editions and the engine: as `archive/2026-06-13-calibration-curve-vintages.md` (full IntCal98/04/09/13/20 citations there); IntCal20 provenance sha256-verified in `tools/data/SOURCE.txt`; engine validated against IOSACal, `archive/2026-06-13-calibration-independent-crosscheck.md`. - The Nyquist–Shannon sampling theorem (a signal band-limited to frequencies below `f` is fully determined by samples at spacing `≤ 1/(2f)`): Shannon CE. 1949. Communication in the presence of noise. *Proc. IRE* 37(1):10–21. Used here only as the elementary bound that a 10-yr grid represents ≥20-yr-period structure — the Hallstatt wiggle period (~100 yr, measured) sits far inside it. - All numbers (RMS, mean-square shares, ladder mode counts and widths, wiggle period) are outputs of `tools/vintage_deconvolution.py` on those files; reproducible by running it. Construction verified: `R = 0` at every IntCal98 knot, nonzero between (interpolation residual); `D = R + V` to floating point. Full capture in `tools/deconvolution_run.txt`. --- ## Gaps and unknowns - **"IntCal98's grid" means the *published* artifact, not its underlying data resolution.** The `.14c` knots are the curve as distributed and as anyone actually calibrates against — so the decomposition is operationally exact for the question "why does my answer change between editions." It is **not** a claim about the resolution of the 1990s tree-ring measurements that fed IntCal98; those may have been decimated/smoothed before publication. The instrument measures the artifact, not the lab archive behind it. - **The cross term is large and negative at the 16.6-ka spike** (`%cross ≈ −43`, so `%rev ≈ 136`): R and V anticorrelate there, and the tidy "share of D" reading breaks down at that one deglacial location even though the headline (revision ≫ resolution) holds. The mean-square identity is exact; the *percentage* gloss is only clean where the cross term is small (everywhere in the Holocene: |%cross| ≤ 5). - **σ-revision is not mapped in curve space.** The curve-space `V` is μ-only; the date-space ladder shows σ-precision is the dominant *sharpener* at depth (R=18000), but I have not computed an RMS map of σ98 vs σ20 across 0–24 ka. A one-line addition to the tool; cheap. - **NH only.** Whether revision-dominance over resolution also holds for the marine and Southern-Hemisphere vintages (both on disk) is the obvious next dig — and the marine case is the interesting one, since Marine20's larger σ (the 3.5× I found 06-13) may make the σ-precision rung behave differently. - **σ=25 ¹⁴C-yr throughout** for the ladder; mode counts are σ-dependent, as flagged in the census. The *rung* at which modes appear (revision, here) is a structural result and should be robust to lab precision; the exact counts are not to be over-read. - **Deep reach (24–55 ka) excluded** — IntCal98's binding 24-ka limit again. The largest revisions of all live past it; a 09/13/20 deep deconvolution would likely show revision dominating by an even wider margin and is a separate cheap dig.