1 September 2026 analysis
The stockpile that mostly isn’t there — the buffer, measured
Half the atlas’s remedies end in “stockpile,” but the buffer was never measured. New strategic stockpiles page does, honestly (the data is opaque — China’s reserves are secret): for 27 of 32 critical materials the West holds no public strategic reserve — spot-market dependent. The US National Defense Stockpile covers only ~6% of its own identified $15bn shortfall; Japan’s JOGMEC holds ~60–180 days on just 7 metals (the model few copy); China’s reserves are real but undisclosed. The point: a stockpile is the only lever that works on the timescale of an actual shock, and for the geological chokepoints it’s the front line, not a backstop — the cheapest insurance in the toolkit, and almost no one has bought it. Web-verified (CRS, GAO, CGEP, JOGMEC); build_stockpiles.py.
1 September 2026 analysis
The furnace concentrates at cheap power — now measured
The chokepoint map asserts that the “thermodynamic” chokepoints concentrate because their refining is too energy-hungry to site anywhere but the cheapest power. New energy footprint page puts numbers on it: the most energy-intensive refining stages are the most concentrated — magnesium (~78 MWh/t, 87% China), polysilicon (~50, 95%), aluminium (~14, 59%) — while low-energy copper smelting (~2.5 MWh/t) stays diffuse. Energy intensity predicts the geography, the ore doesn’t decide, and the concentration carries an enormous carbon bill (magnesium & polysilicon ~25–36 t CO₂ per tonne). The decision that falls out: diversifying and decarbonising these is the same project — build the furnace at cheap clean power. Extremes web-verified; build_energy_footprint.py.
1 September 2026 analysis
Can the rest really cover the cut? Grounded in USGS capacity, the answer sours
The reallocation stress test asked whether survivors could cover a producer-cut, under an assumed scale-up ceiling (κ). For the 8 commodities where USGS publishes real forward capacity to 2029, we grounded it in the number — on a consistent production basis (dominant producer’s share vs projected capacity growth). Two failure modes: concentration too high (gallium 87%, magnesium 89%, cobalt 75% — even doubling everyone else barely helps: real coverage 14/-3/36%), or capacity not being built (palladium and platinum leaders are under 75%, so doubling would cover a cut, but USGS projects capacity flat/shrinking, so real coverage is 0–2%). Only lithium (+111%) escapes both. (Corrected same-day: a first pass divided capacity growth by the export-leader share — a different country than the producer for cobalt etc. — which made the numbers incoherent; now on one production basis.) build_ot_capacity.py.
1 September 2026 analysis
Scale and timeline on the decision layer — capex + first-production year per flagship project
The Break the chokepoint layer named the projects diversifying each dependency but not their scale — so a $3bn 2029 mine read the same as a pilot. Fixed for the flagship projects, with figures cross-checked against 2025-26 company and agency announcements (web-verified): Perpetua Stibnite (antimony) ~$2.2bn, 2028; MP Materials “10X” (magnets) ~$1.25bn, 2028; Thacker Pass (lithium) ~$2.9bn, 2027; Arafura Nolans (rare earths) ~US$1bn, 2029; Lynas Seadrift ~$0.3bn, 2026; Almonty Sangdong (tungsten) ~2,300 t/yr, 2025-26. Now the reader sees not just who is building an alternative but how big and how soon. build_pipeline_specs.py.
1 September 2026 analysis
One reweightable risk index — the answer to five arguing rankings
The audit’s biggest quality lever: the atlas carried several risk rankings (value, tonnes, governance-weighted, recycling-adjusted) that all reweight the same concentration index and argue about the weights. The honest answer isn’t another fixed ranking — it’s to hand over the dial. New reweightable risk index: pick the concentration basis (trade value / tonnes / mine production), toggle governance, recycling and substitution credits, and watch the ranking of 28 materials move. A dependency that stays on top under every setting is robust; one that swings was an artefact of the weighting. It becomes the “start here” for risk; the fixed rankings remain as method references. build_risk_index.py, from the atlas’s own risk data.
1 September 2026 analysis
Platinum-group metals, end to end — the third deep-dive, and a deliberate contrast
Gallium and cobalt are chokepoints you can’t scale (they ride a host). Platinum-group metals are the opposite: a chokepoint you can’t out-build, because it is the mine. One ore body — South Africa’s Bushveld — holds ~90% of reserves, and platinum, palladium and rhodium come out of the same rock in a ratio geology fixes. So a shortage of one (rhodium ran past $29,000/oz in 2021) can’t be answered by mining more of just that metal — there is no such mine. The series now spans the three ways a material goes out of reach: can’t scale it, can’t see past the refiner, can’t out-build the rock. build_pgm.py.
1 September 2026 analysis
The origin gap, fully traced — the “data-limited” flank closed
The flagship origin-gap finding had a soft spot: the ore→refined hand-off was directly traced for only 6 materials (those with a separate ore-HS trade series); the rest were flagged “data-limited.” Closed. A new enumerated table traces every gap material to its origin the truer way — to the mine (production), not to an ore-trade series that is itself re-exportable: Indonesia digs the nickel, Norway leads its exports; the DRC mines the tantalum, the US exports it; and so on for 15 clean mine≠exporter splits. Four still carry the separate ore-trade cross-check and agree. Reproducible via build_origin_ledger.py.
1 September 2026 site
Consolidation: four near-duplicate pages folded into their fuller versions
The product audit found the atlas was broad to the point of re-slicing the same data. First consolidation pass, done so no link ever breaks (each old page now redirects to its survivor): Shock scenarios → the interactive shock builder; Host shock → the fuller supply-shock cascade; Demand by bloc (which used gross imports) → apparent consumption; Commodity attribution (a single limits note) → the satellite cross-check. Tighter surface, same rigor. (The larger risk-index cluster — several pages that reweight one concentration index — is a separate build: one reweightable index, later.)
1 September 2026 analysis
Substitution networks — does the swap escape the chokepoint, or just move it?
The audit’s top missing dimension, now built. Substitution networks takes the reflex answer to a supply dependency (“just use something else”) and applies the atlas’s own concentration data: a substitute only relieves a chokepoint if it sits in a less concentrated supply chain. Of 15 real substitutions, 6 escape to abundance (LFP for cobalt, sodium for lithium, silicon for gallium, no-magnet motors for rare earths) and 4 just shift the dependency to another single country (high-nickel for cobalt → Indonesia; niobium for tantalum → Brazil 92%; palladium for platinum, same basket). The decision that falls out: fund the escapes, not the shifts. Reproducible via build_substitution.py.
31 August 2026 analysis
Cobalt, end to end — the second material deep-dive
A product audit found the atlas is broad but that its highest-value growth is depth: single-metal deep-dives that follow one material physically to the bottom. New Cobalt end-to-end joins gallium: cobalt is a by-product (~98% comes up with copper or nickel), mined in one country (DR Congo ~75%) and refined in another (China ~76%), and it is the one material where the atlas’s own engine understated reality — the page shows that miss (2020: engine $0.7B / DRC 15% vs BACI $3.5B / DRC 84%) and corrects it. Built from World Mining Data, USGS/Cobalt Institute, IEA and the reconciled trade (build_cobalt.py).
31 August 2026 site
A “What you can trust” page — the rigor, made legible
Three review rounds produced a lot of honest method work that lived only in dense method pages. New What you can trust page turns it into the short, confident version: the discipline (every claim an open script, ten guards, three red-team rounds), the reliability map (21 of 31 commodities robust), the findings the atlas can state with confidence — each with a “so what” — and a public ledger of the three errors the review caught. Linked from the homepage and the Method hub.
31 August 2026 method
A per-commodity status map, so the caveats stop burying the findings
Three review rounds added a lot of honest caveats; scattered, they hid the actual result. So we fuse them into one status per commodity (build_commodity_status.py), on the Method page: of 31 tracked commodities, 21 robust, 4 spread-sensitive, 2 shared-code (gallium/germanium), 3 thin-fragile (graphite, beryllium, arsenic), 1 engine-understated (cobalt). Headline findings should be drawn from the robust rows. Building it also fixed the thinness screen itself: high single-exporter leverage is no longer treated as fragility — in a deep market (bauxite→Guinea, tungsten→China) it is genuine one-country dominance, a finding, not a data flaw. That cut the thin-fragile list from a mislabelled 9 to a real 3.
31 August 2026 method
Cobalt: a wrong diagnosis, corrected the same day — the engine missed a real event
Correction. A first pass this morning called cobalt’s trend conflict a “thin-code artifact” ($1–5M/yr). That was wrong — built on a buggy extraction that dropped most exporters. A round-three review pushed us to screen thinness across all commodities up front, which surfaced the contradiction. The real story is the opposite and more important: cobalt’s code (HS 2822.00) is a genuine $0.8–4.9 billion market, and BACI captures a real event — DR Congo’s share of cobalt-hydroxide exports surged from 41% (2016) to ~85% (2020–2023), then fell back in 2024. The atlas engine missed it: in 2020 it reconstructs $0.7B of the trade (BACI: $3.5B) and puts DRC at 15%, not 84%, because its reliability weighting shrinks DRC’s under-corroborated export reports. So this is a real instance of the engine understating concentration — on a big dependency, not a thin one. The honest reading reverses: for cobalt, trust BACI and production (DRC ~70% of mine), not the engine’s smoothed series. Kept in view on Method, not buried.
31 August 2026 method
We tried to fix the concentration understatement at source — and it can’t be, cleanly
The honest next step after flagging that the engine runs low on concentration was to try to fix it in the reconciliation, not just caveat it. We did (reconcile/operator_test.py), and the result is a genuine null:
- The two-sided reconciliation’s geometric mean was the obvious suspect (a geometric mean sits below the arithmetic one), but switching to an arithmetic level-space mean changes the HHI almost nothing (beryllium 0.52 either way).
- The real diluter is importer-only flows (imports with no matching exporter report, often re-export/entrepôt) inflating the tail — but dropping them over-corrects, pushing the engine past BACI and making the absolute error worse.
- Because the two raw reports disagree by ~0.15 HHI and BACI is not ground truth, no operator lands on the true value. So the “report it as a spread” treatment stays — now a tested conclusion, not an unexamined limitation.
30 August 2026 method
Two statistical refinements the second review asked for
- Trend test, now autocorrelation-corrected. Annual HHI is serially correlated, which inflates plain Mann–Kendall significance, so the trend robustness check now uses the Hamed–Rao corrected variant. It barely moves the result (engine significant trends 21→20 of 29) — the series really trend. Among the 18 commodities where both the engine and BACI series detect a significant trend, direction agrees 18/18 (all surviving a BH-FDR correction); the disagreements are significance-level, except cobalt (unresolved).
- Forecast verdict, now robust to a two-way resample. The material-only bootstrap conditioned on the 2019–2024 window, so we re-ran it as a two-way (material×year) cluster bootstrap. The Holm-corrected conclusion is unchanged: no model beats naive persistence.
30 August 2026 method
Round-two review: the fixes themselves corrected for overreach
A second maximum-strictness pass attacked the day’s fixes and landed four hits — all now corrected, several by tightening the statistics rather than the wording:
- The HHI “envelope” was overstated. Two mirror reports biased the same way do not “bracket the truth,” and the engine sits below both for some commodities — so “lower bound” was wrong. Reframed as a mirror-report spread (a measure of uncertainty, not a confidence interval); the engine “tends to run low,” a direction, not a proven bound.
- Forecast: multiplicity correction flips the verdict — in our favour. The compositional model’s −0.32pp edge does not survive Holm–Bonferroni across the models (raw p=0.018, needed <0.010). So the honest, corrected statement is cleaner: no model reliably beats naive persistence at all, and that survives the correction.
- Trend robustness: the 27/29 headline was inflated by cheap null/null agreement. Corrected to the quantity that matters — among the 19 commodities where both series find a significant trend, direction agrees 19/19; phosphorus dissolves under a Benjamini–Hochberg correction (threshold noise), leaving cobalt as the lone conflict. Autocorrelation caveat added.
- Taxonomy: “almost perfect inter-rater reliability” downgraded. The second coder is an automated classifier, not a human expert, and may share priors — so κ=0.83 is recoding consistency, not external validation.
30 August 2026 method
The two open council items closed: forecast confidence intervals, and a blind second rater for the taxonomy
- Forecast bake-off, now with confidence intervals. A paired block-bootstrap over the 32 materials (2,000 resamples, respecting the China-tops-many dependence;
build_nowcast_bootstrap.py) replaces the bare leaderboard. Result: on who leads, no model separates from persistence; on the leader’s share, exactly one is statistically distinguishable as better — the compositional CLR-shrink model, by −0.31pp (95% CI −0.55 to −0.07). The rest are indistinguishable or worse. So “only a compositional model reliably beats naive persistence, and only by a third of a point.” See the backtest.
- Mechanism taxonomy, now with an inter-rater check. All 58 chokepoints were re-coded by an independent classifier working blind (stage facts + the eight definitions only, atlas labels hidden;
build_taxonomy_agreement.py). Agreement 86%, Cohen’s κ = 0.83 (“almost perfect”). The eight disagreements land mainly on chains the atlas already shows as blends (beryllium, cobalt, antimony) — it stays a consistency check, not a domain-expert panel. Shown on the Chokepoint Map and Report 04.
30 August 2026 method
Concentration reported as an envelope, and the trend claim tested on 23 years, not two
A maximum-strictness adversarial council (two independent engines) attacked the corrections shipped earlier the same day and landed real hits — on the corrections themselves. Both were addressed with new work, not new wording:
- “Correct toward BACI” was itself an overclaim — replaced with a reconciliation envelope. BACI is not ground truth; it is CEPII’s reconciliation of the same mirror reports, and our engine is a reconciliation too (CIF/FOB + inverse-variance weights, not a plain average, as a stray earlier line implied).
build_recon_envelope.py now reports concentration four ways per commodity — exporter-only (FOB) and importer-only (CIF), which bracket the truth, plus the two reconciliations inside. The finding sharpens the critique: the raw bracket is wide (median 0.07–0.09 HHI, up to 0.54), and BACI falls outside it for 24 of 30 commodities, usually at the high end. There is no true point to correct to — only a band, with the atlas engine near its lower edge. The one-number “beryllium 0.53→0.80” is now shown as a band ~0.5–0.8.
- The “level not trend” claim, previously resting on two years, tested across 23.
build_trend_robustness.py recomputes the export-HHI series every year 2002–2024 on the engine and on CEPII BACI independently, and runs Mann–Kendall on each. The reconciliation choice does not change the trend for 27 of 29 commodities (same sign and significance). Two exceptions named: phosphorus (borderline, same direction) and cobalt (a genuine disagreement — now flagged unresolved).
The council also left standing items we did not close and say so on Method: a codebook + second rater for the mechanism taxonomy, and per-commodity confidence bands on the forecast bake-off (a paired block-bootstrap). Cross-checked with two external engines.
30 August 2026 method
Concentration corrected, the level-bias claim retracted, and the taxonomy set beside its peers
- Concentration (HHI) corrected, not just flagged. Two audit items turned out to be one phenomenon. The engine averages each flow’s exporter- and importer-reported value, and that average is not a uniform offset — it shrinks the dominant exporter more than the tail. Measured across every commodity and both audited years (2022 and 2024), it preserves the leader’s identity (73% / 83% of commodities) but dilutes the leader’s share by a median ~2pp and understates HHI (median +0.01, up to +0.27 for beryllium). The authoritative concentration is now the un-diluted official value, published per material in
out/hhi_correction.json (build_hhi_correction.py) and used to correct the figures on Method.
- Level-bias claim retracted. The earlier statement that the ~1.5–1.8× level offset is a clean multiplicative factor that “cancels in shares by construction” was too strong. The two-year measurement shows the offset falls unevenly on the leader — which is exactly why concentration needed correcting. Ranks and trends are unaffected; share magnitude and concentration are not.
- Forecast bake-off widened to nine models. Following a reviewer’s challenge, the nowcast is now tested against compositional (log-ratio), state-space (ETS), hierarchical-panel and a Bayesian Dirichlet model, not just moving averages. No model clearly dominates persistence — most are worse on who-leads; only the Bayesian Dirichlet edges it (84.9% vs 84.4%), within noise, and the ~4.5pp share errors carry no confidence intervals yet. Read as a cluster of indistinguishable models, not a leaderboard; a paired block-bootstrap is the next step. See the backtest.
- The mechanism taxonomy set beside the established ones. Report 04 §5 now compares it directly with the EU CRM/CRMA screen, USGS criticality and the Payne Institute structural view. They classify materials by how critical; this classifies stages by why they concentrate — orthogonal and complementary, not a rival list.
29 August 2026 site
Navigation rebuilt: clean URLs, five hubs, a site search, and an accessibility pass
- Clean URLs. Every page moved to an extensionless address (
/explorer, /value-chains, …); the old .html links still resolve and point at the clean form via canonical tags, so no existing link breaks.
- Five clear destinations. The old six-dropdown menu (58 links) became five hubs — Explore, Value Chains, Analysis, Reports, Method — plus a persistent search box over 168 pages. The new Analysis and Method hubs index every analytical and methodological page as described cards, so nothing is buried in a menu.
- A front door. The homepage now routes three audiences — explore the tool, read the findings, use the data — and every page carries a share-preview image and structured data for search engines.
- Accessibility & consistency. A
<main> landmark and a skip-to-content link on every page, labelled controls in the explorer, and one consistent dark footer site-wide (a council audit found and fixed several pages that had drifted).
25 August 2026 rigor
A third production source (BGS) — and two new reports
- Production triangulated three ways. The production cross-check added the British Geological Survey’s World Mineral Statistics alongside USGS and World Mining Data. All three name the same top producer for 15 of 18 checkable materials; where they split — bauxite (Guinea), baryte (China) — the two independents agree against the USGS figure, the third source adjudicating rather than rubber-stamping.
- Report 05 — Chokepoints in motion. The chokepoint mechanism predicts the direction of change: built-capability chokepoints erode (rare-earth refining 84→73% by 2035), policy and thermodynamic ones entrench. Tested against the IEA Global Critical Minerals Outlook 2026.
- Report 06 — Does a public-data risk index recover the IEA’s? A falsification test: the atlas’s free public-data risk index independently reproduces 4 of the IEA’s 6 discrete high-risk minerals in its top third, converging on the same by-product and hard-to-process metals.
24 August 2026 feature
The Value Chains layer: 58 end-use supply chains and a mechanism-sorted Chokepoint Map
- 58 value chains, from raw material to finished technology (chips, solar, wind, EVs, batteries, magnets, nuclear, grids, heat pumps, and more), each tracing where the real bottleneck sits — which is rarely the mine. Browse the hub.
- The Chokepoint Map classifies all 58 by why the binding stage concentrates — seven mechanisms (thermodynamic, by-product, built-capability, geological, governance, policy, diffuse). Only 4 of 58 are geological; the other 54 are “made”, and therefore rebuildable.
- Written up in Report 04 — a mechanism taxonomy from 58 value chains.
11 August 2026 product
Material profiles rebuilt: analytical layers, per-layer year sliders, and a new refined source (BGS)
- Each layer is now an analytical paragraph, not a caption. Reserves, Mined and Refined each carry a short read of the material’s own numbers and their implication — concentration, reserve-life framing, the geology-vs-supplier mismatch, and the mine-vs-refiner gatekeeper split — all computed from the data, with the layer’s source and vintage labelled on each.
- Per-layer year sliders. Drag to scrub years and the bars re-rank live: Traded 2018–2026 (reconciled BACI + 2025 nowcast + 2026 scenario, all materials), Mined 2019–2023 (18 materials, USGS editions), Reserves 2019–2023 (9 materials, USGS), Refined 2019–2024 (7 materials). You can now watch a stage’s country mix move over time — e.g. cobalt’s Indonesia climbing 0→7% at the mine, or China’s refined-copper share rising 40→47%.
- New refined source — BGS World Mineral Statistics. The refined layer was an IEA projection or a single EU-CRM year; for the 7 metals BGS reports (copper, cobalt, nickel, alumina, magnesium, germanium, arsenic) it is now authoritative annual actuals by country, pulled from the free BGS OGC API (
build_bgs_refined.py, no key). Best-source-per-material: BGS where it has the data, IEA 2026 kept only for the battery minerals it doesn’t (lithium, graphite, rare-earth magnets), USGS/EU-CRM elsewhere — each profile shows the source it used.
- Data completeness. Mine and reserve layers filled to the full USGS country breakdowns (no more overclaiming “rest of world”); refined breakdowns filled for 16 materials; two lead-country corrections surfaced — nickel’s top refiner is Indonesia (not China) and arsenic’s is Peru (not China).
- By-product seam made explicit. Six materials now flag their parent metal — gallium←aluminium, germanium←zinc, hafnium←zirconium, arsenic←copper, cobalt←copper & nickel, helium←natural gas — with the key point stated: their supply tracks the host metal’s market, not their own price, so it can’t respond to their own shortage. The shared HS-code caveat (gallium/germanium/hafnium under 811292) is now a prominent flag on their trade sections.
10 August 2026 data refresh
Full USGS country breakdowns replace the hand-picked top-4 — and the flagship moves 19 → 18
- What changed. The mine and reserve layers previously carried only a hand-selected top few producers per material, with the remainder swept into an undifferentiated “rest of world”. They now carry the complete country breakdown read straight from the USGS Mineral Commodity Summaries 2024: 28 of 32 materials with full mine-production shares, 19 with full reserve shares, every value checked against the published world total. Added alongside: reserve life (reserves ÷ annual production), US net-import-reliance for 28 materials, and export-control flags where a producer has imposed them.
- The flagship moved — honestly. Re-running the origin-gap finding on the better data shifts the headline from 19 of 32 to 18 of 32 materials where the top exporter is not the top miner. One example row was simply wrong before: strontium’s true lead miner is Iran (38%), not Spain — a lower-quality source had mis-assigned it. Several shares tightened too (lithium’s Australia 37→48%, beryllium’s US 65→58%, cobalt’s DR Congo 76→74%). This finding is not pre-registered — only the nowcast is — so updating it to reflect better inputs is the correct move, and the change is logged here rather than made silently.
- Propagated everywhere it feeds. The mine layer drives the derived analytics, so all of them were regenerated and the numbers re-checked: the origin trace (now 25 of 32 materials more concentrated at the mine than in trade, was 27), the governance-weighted criticality (which correctly re-rates strontium up as Iran’s governance risk replaces Spain’s), plus the risk, complexity, case-study, synthesis and country-vulnerability pages. No page was left pointing at the old numbers.
15 July 2026 correction
“The host decides the direction” — the mechanism test refutes the mechanism
- What we claimed. The host-coupling page was built to prove the price test’s mechanism: that a by-product’s price direction is set by its host’s cycle. It reported a mean best-host correlation of 0.29 and named five metals — palladium, gallium, germanium, helium, rare earths — as beating the control. All of that is withdrawn.
- Three broken legs. (1) The control was not a control. It computed corr(companion, host) − corr(companion, base index) and called the pair host-specific if the gap beat an arbitrary 0.1. Subtracting two correlations is not residualisation and has no sampling theory; the correct statistic is the partial correlation — regress the cycle out of both series, then correlate the residuals. (2) It was never significant. At n≈21 the 5% critical correlation is |r|≈0.44; 0.29 is below it. (3) It cherry-picked. It reported the best-matching host out of two or three candidates and then tested at 5% — roughly 30 such tests manufacture ~1.5 false positives by chance, about the number it “found”. Hosts are now pre-specified (one per companion, from where the metal actually comes from) with a Benjamini–Hochberg FDR correction across the 18 tests.
- The result. Rebuilt on real USGS prices (DS-140, constant 1998$) on both sides instead of trade unit values, the mean coupling falls from 0.27 to 0.03. Watch it happen per metal: antimony +0.58 → −0.05, molybdenum +0.56 → +0.03, silver +0.50 → −0.01, cobalt +0.47 → −0.23, germanium +0.33 → −0.14. That gap was the macro commodity cycle, credited to the host. One pair survives: bismuth←lead (partial r=0.68, p=0.001, CI 0.35–0.87) — strong, real, and one of the pairs the published literature independently identifies.
- And it tested the wrong channel. Joint production says the host’s output drags the companion out of the ground: host produces more → companion floods out → companion price falls. That is a claim about tonnes, not dollars — and host price is dominated by the same demand cycle that lifts every metal at once, so a price-price correlation cannot identify it. Run on host production: only 4 of 17 even carry the theory’s negative sign, and none is significant. Meanwhile the commodity cycle is significant for germanium, antimony, bismuth and silver. That is the finding underneath: these metals are not pushed around by their hosts. They are pushed around by whatever pushes every commodity at once.
- What this costs, and what survives. The episodes stand — gallium and germanium did spike on China’s 2023 export controls; cobalt did crash as Indonesian nickel surged. Those are documented events, not artifacts. What is not supported is the general law that companion prices systematically track their hosts, and the price test’s text is narrowed accordingly. Honest limit: host output moves a few percent a year while companion prices swing 30–50%, and a multi-year structural surge is not a year-on-year wiggle — so an annual test is poorly shaped to catch this, and absence of evidence is not proof of absence. But the claim was ours to prove, and we have not. Why no VAR: the frontier here (Toda–Yamamoto, cointegration, TVP-VAR, multiscale nonlinear Granger) needs monthly or daily series with hundreds of observations, and the minor metals have no open high-frequency prices at all. Twenty annual points will not support a VAR; fitting one would produce output, not evidence.
15 July 2026 correction
“By-product metals are more volatile” — retested on real prices, and withdrawn
- What we claimed. The price test reported that by-product metals run more price-volatile than primary ones (37% vs 31%), from trade unit values over 2018–24. It is one of the best-known regularities in mineral economics, and we asserted it as a mean-versus-mean comparison — with no control for market size. That is the flaw: by-product metals are also tiny markets, and thin markets swing for liquidity reasons that have nothing to do with companionality.
- The retest. New page: volatility — by-product, or just small? It replaces the proxy with real price series (USGS Historical Statistics, Data Series 140, constant 1998 dollars, public domain — one series per commodity, so the gallium/germanium/hafnium shared-HS6 problem dissolves rather than gets patched), and runs the regression the literature runs: volatility ~ by-product status, then the same plus market size.
- The result. Uncontrolled, by-products really are more volatile: +9.25pp (p=0.017), replicating the published direction. Add market size and the by-product effect collapses to +0.9pp (p=0.85) while size is strongly significant (p=0.003) and R² more than doubles (0.18→0.41). The confound, measured: by-product metals are ~174× smaller markets (median output 6,100 t vs 1,060,500 t; r=−0.55, p=0.0008). The volatility is accounted for by smallness, not by stuck supply — with the causal caveat spelled out below.
- It survives six ways of asking. A permutation test (20,000 label shuffles, assuming no normality): by-product p=0.78. A rank-based model, immune to the huge leverage of bulk commodities (iron ore is 109 t, rhenium 101.7): p=0.89, while size holds at p=0.001. A physical-tonnes control with no price on the right-hand side: p=0.37. Contested classifications dropped: p=0.45. Drop-one (iron ore, aluminium, rhenium): size stays p=0.003–0.007. And non-overlapping 5/8/12/24-year windows: by-product insignificant at all four. Errors are HC3, not HC0 — HC0 is biased downward at n<250 (Long & Ervin 2000) and was flattering our own numbers; under HC3 our size term weakens from p=0.0008 to p=0.003, which is the honest figure.
- The hardest objection, and the honest answer. “Market size is a bad control”: if being a by-product causes a small market (output is capped by whatever the host mine yields), then size sits on the causal path, and controlling it subtracts companionality’s own mechanism — so a null would mean “no direct effect”, not “companionality is irrelevant”. The objection is legitimate and no further regression answers it, so the page now (1) reports the total effect as the headline (+9.25pp, p=0.017 — by-product metals are more volatile, we are explaining that, not denying it); (2) re-runs with size measured 1985–99 against volatility 2000–23 — by-product +0.6pp (p=0.91), size still −6.3 (p=0.003), so volatility cannot be what kept these markets small; and (3) points at the metals mediation cannot reach: rare earths (50.0%), tantalum (45.0%) and beryllium (42.7%) are primary metals with no host to be hostage to, small only because demand is small, and among the most volatile prices in the data. Matched on size, the by-product gap is +1.7pp (p=0.75) — nothing. Smallness alone is sufficient for volatility. What we still cannot settle, and say so plainly: whether companionality contributes to these markets being small in the first place.
- On “n=33 is small”. It is, and it cannot be fixed: only ~40 metals have a published price series, so this is most of the population, not a sample of a larger one — the same bound binds the literature. Worth naming the trap, since it nearly caught us: slicing into rolling 5-year windows gives n=614 and appears to reverse the finding (by-product +7.8pp, p=0.07). It is pseudo-replication — overlapping windows reuse each return up to four times, counting the 2023 export-control spike repeatedly. The same window without overlap gives +1.5pp (p=0.70) and size returns (p=0.003). By-product status also never varies within a metal, so a panel adds no information about it: naive errors claim p<0.0001, but cluster by metal and the effective sample is 33 again. A panel gives you the same evidence, counted more times.
- The proxy failed too. Trade unit-value volatility correlates with real price volatility at r=0.13 (p=0.52) — indistinguishable from no relationship. For second moments, unit values were not a noisy measure of price; they were not a measure of it. A separate discovery forced the window: before ~2000 the USGS nominal series for minor metals are administered list prices, frozen for 8–13 years at a time, so deflating them manufactures fake “real” volatility — landing on exactly the by-product metals. Window restricted to 2000–2023, where every series is market-priced.
- What survives. The hostage-metals thesis is untouched and sharper for it: inelasticity is a claim about supply response (no gallium price builds a gallium mine), evidenced independently. What falls is the lazy corollary that inelasticity must therefore show up as turbulence. The risk re-weighting penalises companionality via elasticity, not observed volatility, and is unaffected — a reason to keep it that way. The price test’s direction findings (who rose, who crashed, why the host decides) also stand. The claim is withdrawn in place, not quietly deleted.
15 July 2026 correction
Demand multiples recomputed from IEA scenarios — and they corrected us
- The forward demand multiple g was a curated point estimate, which hid the fact that it is scenario-dependent by construction. The IEA Critical Minerals Dataset (CC BY 4.0) publishes total demand under all three scenarios, so g is now computed for the six minerals it covers and carried as a band: STEPS → APS → NZE (lithium 4.5–7.5×, graphite 2.3–3.9×). The other materials keep a curated estimate, now labelled as such in the table.
- The correction: five of our six curated values sat above even the Net-Zero scenario — magnets were carried at 3.5× when the IEA’s most aggressive case is 1.9×, cobalt 2.5× vs 1.98×, lithium 8× vs 7.54×. They were 2024-report headlines on a 2023 base, superseded by the May-2025 update on a 2024 base. Consequence: cobalt no longer clears g ≥ 2 and drops out of the structural-squeeze set (now gallium, germanium, vanadium). Earlier entries below quoting ~8× lithium and cobalt-in-the-squeeze reflect what was published then; this entry supersedes them.
- The headline survived it: gallium (99%) and germanium (96%) remain the hardest cases under Monte-Carlo — they never leaned on the numbers that moved. Also decomposed the pull by end-use technology: the growth driver is the same for all six minerals — the electric vehicle (89% of lithium’s growth, 75% nickel, 74% cobalt) — while for copper/cobalt/nickel/magnets clean tech is still a minority of 2040 demand. On the demand page.
15 July 2026 data
Refining capacity computed, not curated — and the attribution ceiling reached the frontier
- Capacity wedge. The refining wedge measured only exported refined metal, so refining consumed at home was invisible. The IEA dataset publishes mining and refining supply by country, so that view is now computed: lithium is mined in Australia (35%) and refined in China (70%), +19pp; magnets +11, copper +9, cobalt +8. China refines 5 of these 6 minerals but mines only 2. It also reaches lithium/graphite/magnets, whose refined stage has no clean trade code and is invisible to the trade wedge. Nickel is the control: +0pp, independently matching the trade wedge’s Indonesia 43% — two datasets, same answer. This corrects an earlier claim on that page that no clean open capacity dataset existed.
- Attribution reached the published frontier. Thirteen stacked registers (added the ICMM Global Mining Dataset 2025) lift labelling to 63%, and grouping neighbouring polygons into mining districts — the method the frontier uses — reaches ~73%, matching Maus et al. 2026 / Mine the Gap on fully open data. A census of the unlabelled remainder shows it is ~81% coal and construction minerals, not hidden criticals — so the residual is mostly bulk material, not a blind spot over critical supply.
10 July 2026 data
Eight public registers + a diagnostic: where the unlabelled footprint actually is
- Tested directly whether more mine registers close the satellite-attribution gap: stacked six independent public sources onto the join against the Maus polygons — Jasansky, USGS MRDS (~284k), OpenStreetMap (~54k), the USGS critical-minerals set (PP1802, ~2,100), a national cadastre (Geoscience Australia, ~420), and the one dataset that covers artisanal mining, IPIS (~8,000 eastern-DRC & CAR sites).
- Since expanded to eight sources (added Wikidata ~7,300 mines, and BC MINFILE ~15,000 occurrences): footprint labelled 17% → 55%, critical 4% → 17%, ~81% inter-source agreement. Two structural findings: (1) IPIS’s 8,000 artisanal sites barely overlap the satellite footprint (+0.1pp) — informal mining is invisible to the ~2019 imagery itself; (2) a per-country diagnostic shows the still-unlabelled footprint is concentrated in Russia (7.5%), China (6.9%), Indonesia (4.5%), Myanmar (2%) — all countries with no open, downloadable mine database. The remaining ceiling is therefore a data-transparency limit, not an effort limit. On the attribution page.
10 July 2026 method
Concentration measured the standard way — production tonnes & GeoPolRisk
- New page: concentration in tonnes. The atlas headlines concentration on trade value (the engine’s most attackable input); this recomputes it the way the field does — the Herfindahl on physical production tonnes (World Mining Data), weighted by governance (WGI), aligned to the GeoPolRisk indicator (Gemechu et al. 2016; Cimprich/Helbig/Sonnemann 2017–2024) and the EU CRM methodology.
- Value, volume and production HHI side by side shows where the dollar view misleads: it badly understates gallium’s real concentration (value 0.50 vs production 0.97, China ~98%) because its trade is smeared across a re-export/shared code, and overstates boron (0.96 vs 0.28) and feldspar, where many countries produce but few export. Highest GeoPolRisk: gallium, germanium, niobium, cobalt. Puts the concentration claim on physical footing and closes the gap the engine’s own caveat left open.
10 July 2026 rigor
Break this atlas — an open adversarial-review challenge
- New page: Break this atlas. Self-review has a ceiling — internal cross-checks test consistency, not correctness — so this opens the atlas to adversarial outside review. It lists the five load-bearing claims with the concrete test that would falsify each, names the soft spots it already flags, and invites public issues with a commitment to fix, bound, or rebut every substantive challenge in the open.
10 July 2026 depth
Gallium end to end — the thesis proved on one metal
- A single-metal deep dive: gallium traced physically from bauxite through alumina refining to recovery and export, with explicit bias bounds at every step — depth to balance the atlas’s breadth.
- The mass balance is the point: ~20,700 t of gallium is embedded in world bauxite and ~17,600 t passes through alumina refineries, but only ~987 t is recovered — ~94% is discarded to red mud (recovery ~5.6%), because the extraction step exists at only a few plants. So a price spike can’t summon supply; capacity is a multi-year refinery retrofit. “Can’t scale” is no longer asserted but quantified — with the HS-811292 trade-aliasing (Ga+Ge+Hf) and China’s non-reporting flagged as honest bounds.
10 July 2026 rigor
Scorecard under uncertainty — probabilities, not a threshold cliff
- Answering a fair critique that the hardest-cases scorecard’s hard cutoffs hide borderline metals: a new Monte-Carlo page puts an explicit uncertainty on all five axis inputs and propagates it with 20,000 draws per material, reporting P(hardest) and expected failures with a 90% interval.
- The binary “only gallium and germanium” becomes a gradient: gallium (99%) and germanium (96%) survive every reasonable perturbation — robust, not a threshold fluke — while vanadium (23%) is genuinely borderline and the rest fall away. And it reframes the message: supply elasticity and market thinness, not geographic concentration, are what most decide the hardest set. Model spreads are stated on-page as explicit judgement calls.
10 July 2026 synthesis
The hardest cases — the whole argument on one scorecard
- New synthesis page: the hardest cases. It scores all 32 materials on five independent failure axes drawn from the session’s layers — can’t scale (by-product), can’t diversify (concentrated), can’t recycle, surging demand, and a physically tiny market — and counts how many safeguards are gone at once.
- The conclusion: most materials trip one or two axes; only gallium and germanium trip four or five. Concentration — where the critical-materials conversation usually starts and stops — is just one of at least five ways a material gets stuck, and rarely the binding one. A coarse scorecard by design (count of failures, not a false-precision composite).
10 July 2026 data
Production in real tonnes — and an independent cross-check
- New data acquisition + page: the atlas in absolute tonnes. Added World Mining Data 6.4 (Austrian Federal Ministry of Finance, 2026 ed.) — mine production by country in metric tonnes — for 28 of the 32 materials, and laid it beside the atlas’s USGS-derived shares.
- Independent cross-validation: a second authority names the same top producer for 26 of 28 materials, mean share gap 6.4pp (gallium 98.7% vs 98%, phosphate 44% vs 44%, tantalum 41% vs 40%) — so the producer geography isn’t a one-source artefact; the two genuine disagreements (coking coal, bauxite: production vs export leadership) are flagged. And the scale finally shows: gallium is a ~1,000-tonne world, germanium ~150 t, versus coking coal at ~1 billion t. Data fetched with the atlas’s own web tools.
- The tonnages are already fed back into the supply-shock cascade, which now quantifies every hit in real tonnes at risk (a full China shock removes ~967 t of the world’s ~987 t of gallium) rather than an index — the step from shares toward quantities.
10 July 2026 method
Supply-shock cascade — the first-order hit and the companion echo
- New capstone: an interactive supply-shock cascade. A shock to a producer country is propagated through production geography (USGS shares), then the companion web (a lost host drags its by-products down), then out to the exposed importing blocs — and each country is scored as a single point of failure.
- China scores far above any other producer (14.1 vs ~2.7 next); the model makes the second-order damage explicit — shock Congo and its copper drags extra cobalt down, shock Indonesia’s nickel and cobalt falls again. Structural first-and-second-order map from public data, honestly short of a calibrated forecast (no price feedback; echo only through hosts the atlas tracks).
10 July 2026 method
Net demand — stripping the re-export confound out of the bloc picture
- New page: net demand by bloc. The demand-by-bloc page conflated consumption with refine-and-re-export; this nets it out (imports − exports per bloc), so trans-shipment hubs collapse toward zero and refiner-exporters are revealed as net suppliers.
- The reveal: China is a net supplier (net exporter) of eight squeezed metals it is said to dominate demand for — gallium, germanium, rare earths, cobalt, graphite, vanadium, hafnium, arsenic — because it imports the ore and exports the refined output. It still tops the net table only via raw-ore imports it processes; the finished squeezed metals are pulled by the EU, US, Japan and Korea. Honest limit: net trade, not full apparent consumption (production is available only as shares, not tonnes).
10 July 2026 method
Demand by bloc — whose industrial policy pulls which metal
- New page: demand by bloc. Using the atlas’s own import flows as a revealed-demand proxy, it reads which bloc — China, EU, US, Japan, Korea, India — pulls hardest on each squeezed metal, and names the industrial policy behind it (EU CRMA, US IRA/CHIPS, China export controls, Japan/Korea supply-security).
- Demand is as concentrated as supply, just in different capitals: batteries pull toward China/Korea/EU, chips toward the US/Japan/Korea, magnets and defence toward the EU/US. Stated loudly: import share is revealed trade pull, not final consumption — China tops several tables for metals it refines and re-exports (read beside the origin trace).
10 July 2026 method
Host coupling — testing the mechanism directly
- New page: does a companion’s price track its host? The price test claimed a by-product metal’s direction is set by its host’s cycle; this correlates each companion’s price against its host commodity (World Bank Pink Sheet spot prices, 2002–24) with the general base-metals cycle as a control.
- Mixed but honest: mean best-host correlation 0.29; palladium, gallium and vanadium track a host at r≥0.4, and five pairs (palladium, gallium, germanium, helium, REE magnets) beat the common-cycle control. The mechanism is visible for some pairs and lost in trade-unit-value noise for others — the next step is to re-run on clean reported prices where they exist. Update: that re-run has happened, and it withdrew this entry’s finding — the 0.29 was the commodity cycle, the control was not a valid control, and the result was never significant.
10 July 2026 method
Price test — does the market already show the squeeze?
- New page: a falsification of the squeeze thesis against the atlas’s own implied trade-price series (BACI unit values, 2018–2024). The clean result would have been “squeeze predicts price”; the honest one is sharper.
- Of the seven by-product-locked metals, four surged and three crashed — same structural inelasticity, opposite outcomes, because the host’s cycle sets the direction (gallium/germanium up on 2023 export controls; cobalt/vanadium down on host oversupply). The raw correlation (+0.39) is modest and leans on gallium/germanium/hafnium, which share one HS6 code and post identical moves — de-duplicated and flagged. The thesis survives, refined not refuted. Update: this entry originally also reported that by-product metals run more volatile (37% vs 31%). That claim has since been retested and withdrawn — the gap is market size, not companionality.
10 July 2026 method
Demand arm — the squeeze, where surging demand meets inelastic supply
- New page: Demand & the squeeze. The atlas’s first demand-side lens — principal end-use sectors, clean-energy exposure, and a demand-growth multiple to ~2040 (IEA Global Critical Minerals Outlook 2024 + USGS end-use).
- The synthesis with the supply-structure arm splits “critical + high-demand” into two problems: demand-driven but mineable (lithium ~8×, graphite ~4.5× — capital and time can answer) versus the structural squeeze — surging demand and by-product-locked supply that can’t scale: gallium, cobalt, germanium, vanadium. Different problems need different playbooks; subsidising mines helps only the first.
10 July 2026 method
Supply-structure arm — companionality and its children
- Hostage metals: 7 of 32 materials are produced mostly as by-products (gallium, germanium, hafnium, helium, arsenic ~100%; cobalt, vanadium ~90%), so their supply can’t answer their own price. Crossed with trade concentration, three are in double jeopardy: arsenic, germanium, gallium. Data from USGS MCS 2024 + Nassar et al. 2015.
- Risk when supply can’t respond: re-weighting the risk index by supply elasticity lifts the hostage metals past materials whose risk is addressable with new mines (biggest movers: hafnium +10, germanium +9).
- Host shock: inverts the map to the bulk commodities that gate critical supply — zinc, nickel and copper each carry three critical riders — with a live slider to propagate a host cut into companion losses.
- Secondary supply: by-product metals recycle at 3.9% end-of-life vs 8.8% for primary; six are fully trapped — no new mine and no scrap (Ga, As, Hf, He, Ge, V).
10 July 2026 method
Which mineral is that mine? — the satellite footprint’s hard limit, quantified
- New page: commodity attribution of the satellite footprint. It overlays the peer-reviewed Jasansky et al. (2023, Scientific Data; Zenodo, CC-BY) mine-facility database — 2,413 georeferenced mines with a commodity label — onto the all-commodity Maus polygons, and measures how much can actually be named.
- Result: only ~17% of mapped footprint is commodity-labellable, and ~4% ties to a tracked critical material (almost all copper) — stable across a 0–25 km join buffer. Open mine data resolves ~11 broad classes and never names lithium, cobalt, rare earths or tungsten as a primary product; they surface only as sparse byproducts. The receipt for why the atlas reads material identity from USGS/IEA production + trade, not imagery.
- Method hardened after an independent methodological review: added a byproduct pass on the richer
commodities_products field, a join-buffer sensitivity band, and the shared-authorship / temporal caveats. Reproducible via build_commodity_attribution.py → commodity_attribution.json.
29 June 2026 method
Robustness & falsification — the project tests its own claims
- Added an autocorrelation-robust re-test (Hamed-Rao) plus a vintage-splice sub-period check on the concentration trends: 7 of 9 rising-HHI findings survive, the weaker two are now labelled exploratory.
- Network truncation sensitivity: rebuilt every 2024 graph fully uncapped — China’s centrality holds, but the fragility figures are relabelled an upper bound (they fall 34%→12% once alternative routes are included).
- A “what this is not” page: every known limitation with its direction of bias, and a concrete falsifier for each headline claim.
29 June 2026 data
Two views from orbit — satellite mine footprints
- Mine footprint from space (Maus et al. 2022, 44,929 Sentinel-2 polygons) as an independent cross-check: 12 of the top-15 footprint countries are major critical-material producers, and 34 flagship mines are snapped to their real district footprints.
- Where new mining is appearing (Sepin et al. 2025): tropical mine footprint grew +47% (2016–2023), concentrated on Indonesia’s nickel, the lithium triangle, and the copper-cobalt belts.
29 June 2026 method
Value vs volume, implied price, and a risk panel
- Value vs volume: concentration computed in tonnes as well as dollars, separating real concentration from price effects. The implied unit-value chart shows China exporting the higher-value processed form (tungsten +107% $/tonne vs the rest of the world) — why its value-share beats its volume-share.
- A risk-assessment panel: entropy-weighted TOPSIS (data-driven weights), GeoPolRisk, and a Monte-Carlo supply-at-risk model (ESaR / VaR / CVaR tail risk).
29 June 2026 data
Two decades of trade — and tested trends
- Extended the reconciled bilateral series back to 2002 (CEPII BACI HS02), and added a Trends page charting the 22-year evolution of concentration, China’s rise, and the origin gap.
- Tested whether the trends are statistically real (Mann-Kendall / Theil-Sen / Pettitt change-points with FDR control), added China’s network centrality over time, a ΔHHI decomposition, and a one-page findings brief (HTML + PDF).
28 June 2026 method
Four replicated published methods + a case-study audit
26 June 2026 feature
Material profiles, open data page, and a cadence
26 June 2026 method
End-to-end reproducible engine + technical note
- Committed the raw Comtrade fixture so CI now regenerates the reconciliation from raw and validates it against BACI (top-1 25/30, share MAE 3.5%, HHI 0.92) — no key.
- Published the technical note (HTML + PDF): method, validation, the out-of-sample backtest (85% persistence; P50 3.5 / P90 8.7pp bands), and the pre-registration.
- Pre-registered how the 2025 nowcast will be scored when BACI 2025 releases.
26 June 2026 design
Redesign into a research publication
- New teal-charcoal identity, masthead, hero, key-figures strip, and a structured footer across all pages; a styled findings report, methodology, share card, and 404.
Earlier · 2026 data
Foundations
- 32 critical materials; five layers (reserves, mined, refined, traded, EU lens); 2018–2024 reconciled trade with a provisional 2025 and directional 2026; exposure metrics, year-vs-year compare, per-country dependency reports, permalinks, CSV.
For the full commit-level history, see the repository.