# Raman crystallite-size turnover — public record v2.0

Companion data record for

> R. J. York, "Resolving the Raman crystallite size turnover in nanocrystalline graphite with a synthetic benchmark", 2026-09-05 (record v2.0).
> Source: https://ryanjamesyork.com/files/york-2026-raman-turnover-v2.0.tex
> PDF: https://ryanjamesyork.com/files/york-2026-raman-turnover-v2.0.pdf

All results are **modelled**: outputs of a declared forward model. No physical film or
measurement is represented; none of the numbers below is a measurement.

## Contents and digests (SHA-256)

| File | SHA-256 |
|---|---|
| mac_synthetic_v2.npz | 604e9bf48a5f2d4b81782b4efa7696fa32010cfd069e6a6db8521b118bd37120 |
| metadata_v2.json | 57e6e2c93fafba32e602e20a80ff0a67b7ba5ae06a599cd3f8d71b621cde8718 |
| manifest_v2.json | f657b7ec7addea8b7144c83afe8441bcbcb5dd645febf7cdf88e14d2f1a1f5bd |
| eval_results_v2.json | 2c89cf4a2f4d3e6859666f2aa33d8881c9728dd04b667d1011102d638226cb5b |
| eval_results_v21.json | 106aedd52095a79de900628e3865c7d9fbc6f9237d9d8af1bede2f92ea8546d1 |
| eval_results_v3.json | 97f2dc16e8a4f782e1f2e5d5adf714bcb1bc4344c1547991451c35ea0a52a7ea |
| probe_readings.json | cff30dcdaffc900ff9b1bf30335c35ce96c1e400b677357342f910f66818c6c7 |
| operator.pub | 3c163af37fb711ed88f160be22e520e192f063feb903ddb443b6308faf342666 |
| requirements.txt | a50bd089e0e5906b1485aa95cc06cb06346af3dc0f65600fe3ccea1f5634377d |
| york-2026-raman-turnover-v2.0.pdf | 1a15d3be94756c91e47bd18e8c9be7c30ab2d7a0598b52a7b4515d33ef43ed02 |
| york-2026-raman-turnover-v2.0.tex | f68e20d89cd7d5fefc1f6207b898cdbfd84f3389c7032c27b8e8a35042b59ce9 |

This record is the single citable unit: the PDF's Data availability statement points at it,
and the digests above are printed on the publications page.

## What the record holds

- **mac_synthetic_v2.npz** — the corpus: 3,400 first-order Raman spectra (1,000–1,800 cm⁻¹,
  801 points) at 325/514/633 nm, with ground-truth La, sp³ fraction, stage, corruption flags
  and the 2,400/400/600 split. PCG64 seed 3407. Regeneration from the public generator
  (github.com/SSX360/raman-turnover-benchmark) is byte-identical on the pinned environment;
  on a different NumPy build the last floating-point digit of transcendental evaluations in
  ~3% of rows differs, with identical splits, labels, corruption assignments and counts.
- **metadata_v2.json** — per-row process parameters and labels.
- **manifest_v2.json** — declared physics and generator parameters.
- **eval_results_v2 / v21 / v3 .json** — the evaluation records behind Table 2
  (revision 2, revision 2.1, and the revision-3 release record: tuned trees, network,
  ensemble, gated refusal, cross-model agreement 98.3%).
- **probe_readings.json** — coverage probe, linear probes, single-query attribution
  (behind Figs. 3 and 4).
- **operator.pub** — the Ed25519 public key of the platform ledger. The signed deposit
  ledger (ledger.jsonl) is built from this key on the author's compute hardware and
  accompanies the record when the author's ledgered per-row predictions are added; the
  five non-journal release gates run on the artifacts here via the repository's verify.py.
- **requirements.txt** — the environment used for the independent re-derivation below.

## Independent re-derivation (2026-09-05, this machine)

From the public repository only, with `requirements.txt`:

1. `python src/mac/generate_v2.py --out data/mac` → 3,400 rows, 207 corrupted,
   stages {1: 1478, 2: 1379, 3: 543}, splits 2,400/400/600; corpus SHA-256 above.
2. `python src/eval_baseline_v2.py` → T1 0.2106, T2 9.0076, T4 2.378, T5 89.393 —
   the first row of Table 2 (0.211 / 9.01 / 2.38 / 89.4) to every printed digit.
3. `python src/verify.py` → **VERIFY: PASS** — corpus determinism (byte-identical),
   retrain reproducibility (T1 0.9918, T2 0.0327, T3 0.0147, delta 0.00e+00),
   cross-model stage agreement 0.9817 ≥ 0.95, revision-3 optimisation chain
   (0.0293 → 0.0285), refusal gate 3.009 ≤ 3.475, coverage probe OOD 0.097 > 0.030
   with 0 clean rows flagged, linear-probe shuffled controls at chance,
   attribution shift 0.014 Å.

Every row of Table 2 reconciles to a record in this bundle; the probe figures match
`probe_readings.json`; cross-model agreement 98.3% = 0.9833 in the release record.

## What the paper changed relative to the v1.1 preprint (2026-09-03)

- Table 2 baseline row recomputed on corpus v2 with the repository's own code:
  0.211 / 9.01 / 2.38 (was 0.199 / 6.58 / 1.97 on corpus v1); the baseline's T5 (89.4 Å)
  is now reported instead of dashed.
- The CNN row is the revision-3 network (0.977 / 0.082 / 0.075 / 0.030 / 12.70).
- Cross-model agreement 98.3% (release record); the two acquisition-journal gates are
  stated as exercised on a separate simulated campaign outside this record.
- 205,147 is a count of points replaced by the despiker, not spike events;
  the attribution probe is a single representative query; the linear probes are
  in-sample fits on fixed representations of the training rows.
- The wavelength scaling (λ/514 nm)² is declared as a model choice with the measured
  alternatives cited; the D′ band is gone (the generator has none).
- The Zenodo records reserved on 2026-09-04 (10.5281/zenodo.22290391, 10.5281/zenodo.22290242)
  were withdrawn 2026-09-05 and are not part of this record.

## Reproduce

```
pip install -r requirements.txt
python src/mac/generate_v2.py --out data/mac   # regenerates mac_synthetic_v2.npz
python src/eval_baseline_v2.py                 # Table 2, first row (deterministic)
python src/verify.py                           # release gates on this bundle's records
```

## Licence

Data and the PDF are CC BY 4.0. Code is Apache-2.0 at
https://github.com/SSX360/raman-turnover-benchmark (commit ed1affc).
Copyright 2026 Ryan James York.
