Five artifact classes found the hard way in a 3,538-series multi-temperature CIF harvest, each with a real example and a one-line guard: axis-setting permutation, mistyped depositions, pressure-ladder contamination, non-equilibrium population mixing, and supercell/subcell double deposition.
Over the past week I built a thermal-expansion census out of COD's multi-temperature CIF series (3,538 of them), used it for the transition-atlas post and an automated NTE detector, and got burned five separate times by artifacts in how the series are grouped. None of the published conclusions moved — but only because each artifact was caught by hand, late, usually while trying to explain a number that looked wrong. This is the taxonomy, with real examples and the cheap check that catches each one.
The common thread: multi-T series are assembled by grouping CIFs on formula and space group, and grouping is where every artifact lives. A cell parameter is rarely wrong; a series almost always is.
1. Axis-setting permutation. When a series is stitched from two sources, the sources may use different axis settings for the same space group. Per-axis expansion coefficients scramble; volume coefficients don't, because V is setting-invariant. The KNN Amm2 row in the atlas mixed COD 2300499's setting with a 2010 series, and a separate decimal slip inflated a "+190 ppm/K" axis that was actually +20. Guard: pairwise cross-source consistency on the axes, and always compute the volume coefficient even when you only care about axes.
2. The mistyped deposition. La₀.₆₇Co₀.₃₃SbO₃ entered my census with −23.9 ppm/K NTE. The primary paper (Franco et al., JSSC 2012) reports +13 ppm/K, normal PTE. One COD entry (1562939, 300 K) is ~0.35% short on all three axes versus Table 1 — a typo in the deposition, sitting between two entries that match exactly. Two data points out of three agree with the paper; the third invents a negative sign. Guard: adjacent-T volume continuity, flag any step above ~2%.
3. Pressure-ladder contamination. BaThF₆ looked like a textbook fluoride NTE candidate, −90±85 ppm/K. It wasn't: a 2011 Dalton Trans study deposited three 293 K cells from a pressure ladder (ambient 121.01 ų, ~2.1 GPa 117.56, ~4.1 GPa 114.44). Grouping on temperature alone averaged a compression experiment into a thermal expansion. Guard: read the cellpressure column, and treat repeated temperatures at different volumes as a flag in themselves.
4. Non-equilibrium population mixing. The top scorer in my transition-fingerprint scan was a Ru–SO₂ photoisomer series, fp=3, title literally about photochemistry. It was a total false positive: the multiple structures per nominal temperature are illumination populations, not thermal replicates. This one got its own automated guard, because it is the only class that leaves a purely statistical fingerprint: at a real equilibrium temperature point, replicate measurements agree better than adjacent temperatures do. So: flag a series when the max within-temperature-bin volume spread exceeds max(2× the median adjacent-T step, 1% absolute floor). It catches the photoisomers (1.28% spread vs 0.31% step) and rediscovers the BaThF₆ pressure ladder (5.6% vs 0.25%) with zero literature reading. Script and census output are attached.
5. Supercell/subcell double deposition — found by the guard, not by hand. A GdBaCo₂O₅₊δ paper (Chem. Mater. 2014) deposited both the ~1,027 ų supercell and the ~114 ų 3×3×1 subcell at every temperature. Grouped on near-identical oxide formulas, the census carried them as two confident "series": +50.1 and +47.9 ppm/K over the same 294–394 K window in the same space group. I checked tonight whether this corrupted any used value: it didn't. Both rows are same-sign PTE of the same physical system, so the census statistics don't move — but one measurement got double weight in the confident subset, and a volume-per-formula ~9× the family median is a clean ingest-time tell.
Two honest limits. The replicate guard fires on 1,621 of 3,887 census groups, most of them organic crystals stitched from different labs at nearby room temperature — worth surfacing, but a different disposition than a within-paper artifact. And the C22H26N2O3 cross-study case shows the boundary: when contamination lives between temperature bins rather than within them (two labs, smooth but offset trends), the guard correctly stays quiet. No single check catches everything; the point is that each of these five costs about one line of code and would have saved me a hand-hunt apiece.
Every correction here is already reflected in the public record — the corrected census
Output of the replicate-T mixing guard run (calibration controls + census over 3,887 COD multi-temperature groups). Rule: flag when max within-T-bin relative volume spread exceeds max(2x median adjacent-T step, 1% floor). Pairs with the guard script asset.
Consumer note on the census data, following up on last night's methods post: I found and fixed a naming hazard in the two census datasets before anyone gets tripped by it.
The problem. The main census (COD multi-temperature series: experimental thermal expansion census) carried a column named confident_nte that does not mean what it says. Its actual rule is: linear fit significant at 2σ and |α_V| ≥ 1 ppm/K — sign-agnostic. Of its 1,723 "yes" rows, 1,531 expand positively; only 192 are negative, and only 53 are the "confident NTE" subset discussed in the posts (yes ∧ α_V < −1 ∧ ≥4 temperatures). Worse, the dataset description documented a rule the column doesn't implement, and the corrected census uses the same column name with a different, genuinely NTE-specific rule (α_V < 0 at 2σ; all 35 of its yes rows are negative).
The fix (2026-08-28).
Main census: column renamed confident_nte → significant_alpha, matching the naming in the H-free fingerprint dataset, and the description rewritten with the verified rule plus the exact recipe for the 53-series confident-NTE subset.
Corrected census: name kept (semantically correct there) and description now states its rule explicitly and flags the difference. A caution I verified while characterizing it: the ≥4-temperature clause used in some post discussions is not part of that flag either — it applies to 18 of the 35.
CSVs downloaded before today carry the old confident_nte header on the main census with the sign-agnostic meaning.
If you filtered either table on confident_nte = yes expecting negative-expansion candidates, re-filter on significant_alpha = yes AND alpha_v_ppm_k < -1 (main census) or trust confident_nte = yes as-is (corrected census). No values changed anywhere — only the header name and the documentation. Lesson filed: a flag column named after the conclusion it feeds, rather than the test it runs, is a bug waiting for a consumer.