Materials Decoded Lab · Artifact 03
Does recycling actually matter at the scale of a real supply risk?
Two real, independent physical systems, Denmark's real wind turbine fleet and the global EV battery fleet, run through the same unmodified survival-analysis engine to project how much copper, lithium, nickel, cobalt, graphite and rare earths they release as they retire. That real recovery is then compared against crm-trade-network's real 2023 UN Comtrade concentration and single-supplier disruption analysis for the same materials, a connection existing modular MFA tools (ODYM, flodym, MISO2, GCMat) don't make. Copper is tracked from both systems on purpose, the one material both real case studies actually contain, so the same real recovered tonne can be compared across technologies, not just within one.
2
real, independent technology systems
Danish wind turbines and the global EV fleet, through one unmodified engine
7
material/system combinations
connected to real 2023 UN Comtrade supply-chain risk data
105
(material, supplier) combinations regression-tested
0 crashes, 0 mathematically impossible results
1
real methodological bug found and fixed
comparing a multi-decade cumulative total against a one-year risk figure, see below
Why this problem, why this architecture
One reusable base class, CohortSurvivalMFA, implements right-censored survival analysis (Kaplan-Meier), Weibull extrapolation, cohort-by-cohort conditional-survival retirement projection, and secondary material accounting, once. A subclass provides exactly one thing, real sourced material content by category, everything else is inherited unchanged. Running two genuinely different technology systems through that same base class, not just one, without modifying it beyond a single additive method, is the actual test of "modular and reusable," not just a claim.
How it's wired
Wind turbines have real individual retirement events to fit a lifetime model from, the Danish register has real decommissioned turbines, verified to reproducedk-wind-mfa's own published numbers exactly (9/9 checks). The global EV fleet does not, it is simply too young: Argonne National Laboratory's own real assessment found only about 3% of global PEV battery capacity had been scrapped as of December 2020. So the EV case sources its Weibull parameters from a real, externally published vehicle survivability table (NHTSA, DOT HS 809 952), the same real source Argonne's own EV assessment uses for exactly this purpose, via one small additive method (fit_weibull_to_curve) rather than a fork of the engine. Material content per vehicle is derived from real cathode chemistry: real chemical formulas (NMC811, LFP) and real atomic masses split a real, reported total cathode mass into individual elements, not an invented split.
| Piece | Real source | Job |
|---|---|---|
CohortSurvivalMFA | generalised from dk-wind-mfa's own code | Survival fitting, cohort projection, material accounting, shared by both systems |
WindTurbineMFA | Denmark's real turbine register | Verified to reproduce dk-wind-mfa's own published numbers exactly |
EVBatteryMFA | IEA, NHTSA, CRS/GREET, World Bank | Real sales, chemistry mix, and stoichiometry-derived material content |
supply_risk_context | crm-trade-network's real 2023 UN Comtrade data | Compares projected recovery against real concentration and cascade-shortfall risk |
A real bug this caught, not a hypothetical one
Building a cross-material comparison chart exposed a genuine mistake: the connector was comparing a multi-decade cumulative recovery total (2025-2050) against crm-trade-network's real one-year disruption-shortfall estimate, two different time scales silently compared as if they were the same thing. For copper the mismatch stayed under 1% and was easy to miss; for graphite, a smaller real global market, cumulative recovery came out to over 1,000% of one year's real shortfall, mathematically consistent with the inputs but not a meaningful claim.
What was actually verified before being trusted
- Every material has a real (low, central, high) content range, not a point estimate, propagated from source through to a real confidence band on the retirement-wave chart.
- Price is given the same treatment where a real market benchmark genuinely matches the traded product (copper, lithium, nickel); where the best benchmark found prices a different grade than the trade code actually blends (cobalt, graphite, a four-element rare-earth basket), that real citation is shown as disclosed context instead of forced into a misleading range.
- crm-trade-network's own 20%-slack cascade parameter has no independent citation, by its own README's admission, so the dashboard cites that gap directly rather than hiding it, and adds one real, independent consistency check instead (Statista's 2023 global copper mine capacity utilization, 77.6%, implying roughly 22.4% real spare capacity).
- Deployment itself was verified, not assumed: an actual
docker buildplusdocker runcaught a real pandas 2.x/3.x incompatibility in a sibling dependency before it ever reached this live demo, and the Streamlit Community Cloud path was checked by genuinely simulating its constraints (a bare container with only this one repo present, no sibling folders, no Docker) before deploying for real.
What this is not
- Not a finished substitute for either field: no scenario analysis, no life-cycle assessment, no geospatial layer yet.
- The risk side is a single real 2023 snapshot, not a multi-year trend (crm-trade-network's own fetcher supports other years, but a full second year is hundreds of rate-limited live UN Comtrade calls).
- Denmark's wind fleet is modeled nationally and the EV fleet globally, a consequence of which real data actually exists for each technology today, not an oversight, the live dashboard's own expander explains the reasoning in full.
- Not a claim that recycling solves supply concentration. It answers a narrower, honest question: does this specific real recovery pathway matter at the scale of a real measured disruption, and by how much.