build_substitution.py → substitution.json.
Two honest limits. (1) The share is mine concentration; for materials whose real chokepoint is refining or separation — lithium, gallium, graphite, rare-earth magnets — the binding concentration is downstream and higher than the mine number here, so read those rows against the Chokepoint Map. (2) An “escape” means the substitute is geologically abundant (iron, ceramics, silicon, sodium); we do not measure the substitute’s own processing concentration, so it is an escape from this material’s exposure, not a guarantee the new chain is unconcentrated.
The decision that falls out
Substitution is a real lever — but only pointed the right way. The swaps worth public money and R&D are the ones that escape to abundance: they are the only moves that actually reduce the number of chokepoints in the system, rather than trading one country’s grip for another’s. LFP for cobalt, ceramic capacitors for tantalum — these shrink the map. Most substitutions only help in some uses (silicon for gallium, sodium-ion for lithium, no-magnet motors for some drivetrains): real relief, but partial — the material stays load-bearing everywhere else. The shifts — more nickel for less cobalt, niobium for tantalum, palladium for platinum — feel like progress and deliver none: the dependency simply changes address. Read alongside Break the chokepoint (who could build an alternative supplier) and the Chokepoint Map (why each stage concentrates): substitution is the one lever that can remove a chokepoint instead of relocating it — when it escapes.