diff --git a/.gitignore b/.gitignore
index 2d52304..2ac80ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ out/
tsconfig.tsbuildinfo
*.tsbuildinfo
.env*.local
+slideshows/*/*.pdf
diff --git a/lib/slideshows.ts b/lib/slideshows.ts
index 2e7e02c..292fb5b 100644
--- a/lib/slideshows.ts
+++ b/lib/slideshows.ts
@@ -19,8 +19,10 @@ import { civicBuilders2026Config } from "@/slideshows/civic-builders-2026/config
import { policybenchWebinarConfig } from "@/slideshows/policybench-webinar/config";
import { aspenBenefits2026Config } from "@/slideshows/aspen-benefits-2026/config";
import { l0Ima2026Config } from "@/slideshows/l0-ima-2026/config";
+import { iariw2026Config } from "@/slideshows/iariw-2026/config";
export const slideshows: SlideshowConfig[] = [
+ iariw2026Config,
l0Ima2026Config,
aspenBenefits2026Config,
policybenchWebinarConfig,
diff --git a/public/images/iariw-2026/forecast-disagreement.png b/public/images/iariw-2026/forecast-disagreement.png
new file mode 100644
index 0000000..5804a83
Binary files /dev/null and b/public/images/iariw-2026/forecast-disagreement.png differ
diff --git a/public/images/iariw-2026/qr-axiom.png b/public/images/iariw-2026/qr-axiom.png
new file mode 100644
index 0000000..a285585
Binary files /dev/null and b/public/images/iariw-2026/qr-axiom.png differ
diff --git a/public/logos/iariw/beamm.png b/public/logos/iariw/beamm.png
new file mode 100644
index 0000000..65391bf
Binary files /dev/null and b/public/logos/iariw/beamm.png differ
diff --git a/public/logos/iariw/cape.png b/public/logos/iariw/cape.png
new file mode 100644
index 0000000..1a157f0
Binary files /dev/null and b/public/logos/iariw/cape.png differ
diff --git a/public/logos/iariw/uclouvain-saint-louis.jpg b/public/logos/iariw/uclouvain-saint-louis.jpg
new file mode 100644
index 0000000..4a0475c
Binary files /dev/null and b/public/logos/iariw/uclouvain-saint-louis.jpg differ
diff --git a/public/screenshots/iariw-2026/axiom-browse.png b/public/screenshots/iariw-2026/axiom-browse.png
new file mode 100644
index 0000000..2fbb4be
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-browse.png differ
diff --git a/public/screenshots/iariw-2026/axiom-graph.png b/public/screenshots/iariw-2026/axiom-graph.png
new file mode 100644
index 0000000..ef8e22a
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-graph.png differ
diff --git a/public/screenshots/iariw-2026/axiom-home.png b/public/screenshots/iariw-2026/axiom-home.png
new file mode 100644
index 0000000..a8f44ae
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-home.png differ
diff --git a/public/screenshots/iariw-2026/axiom-provision.png b/public/screenshots/iariw-2026/axiom-provision.png
new file mode 100644
index 0000000..0fbe01b
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-provision.png differ
diff --git a/public/screenshots/iariw-2026/axiom-rulespec.png b/public/screenshots/iariw-2026/axiom-rulespec.png
new file mode 100644
index 0000000..4a50491
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-rulespec.png differ
diff --git a/public/screenshots/iariw-2026/axiom-validation.png b/public/screenshots/iariw-2026/axiom-validation.png
new file mode 100644
index 0000000..32cc11a
Binary files /dev/null and b/public/screenshots/iariw-2026/axiom-validation.png differ
diff --git a/public/screenshots/iariw-2026/calibration-dashboard-be.png b/public/screenshots/iariw-2026/calibration-dashboard-be.png
new file mode 100644
index 0000000..eb098d9
Binary files /dev/null and b/public/screenshots/iariw-2026/calibration-dashboard-be.png differ
diff --git a/public/screenshots/iariw-2026/pe-be-demo.png b/public/screenshots/iariw-2026/pe-be-demo.png
new file mode 100644
index 0000000..1a54293
Binary files /dev/null and b/public/screenshots/iariw-2026/pe-be-demo.png differ
diff --git a/public/screenshots/iariw-2026/pe-be-household.png b/public/screenshots/iariw-2026/pe-be-household.png
new file mode 100644
index 0000000..42c0a41
Binary files /dev/null and b/public/screenshots/iariw-2026/pe-be-household.png differ
diff --git a/public/screenshots/iariw-2026/pe-be-results.png b/public/screenshots/iariw-2026/pe-be-results.png
new file mode 100644
index 0000000..90a9b7a
Binary files /dev/null and b/public/screenshots/iariw-2026/pe-be-results.png differ
diff --git a/public/screenshots/iariw-2026/pe-household.png b/public/screenshots/iariw-2026/pe-household.png
new file mode 100644
index 0000000..eceedee
Binary files /dev/null and b/public/screenshots/iariw-2026/pe-household.png differ
diff --git a/slideshows/cbo-2026/slides/CalibrationSlide.tsx b/slideshows/cbo-2026/slides/CalibrationSlide.tsx
index 8773b30..e364425 100644
--- a/slideshows/cbo-2026/slides/CalibrationSlide.tsx
+++ b/slideshows/cbo-2026/slides/CalibrationSlide.tsx
@@ -14,7 +14,7 @@ export default function CalibrationSlide() {
The method
- Gradient descent over
+ Gradient descent{' '}over
household weights, optimizing simultaneously against thousands
of published administrative targets — SOI tables, BLS
series, Census tabulations, agency program totals.
diff --git a/slideshows/cbo-2026/slides/Evo4ValidationSlide.tsx b/slideshows/cbo-2026/slides/Evo4ValidationSlide.tsx
index c3d7388..3b9dd87 100644
--- a/slideshows/cbo-2026/slides/Evo4ValidationSlide.tsx
+++ b/slideshows/cbo-2026/slides/Evo4ValidationSlide.tsx
@@ -70,7 +70,7 @@ export default function Evo4ValidationSlide() {
- We added edge-case-generator, reference-validator, and ci-fixer to automatically iterate on failures. The workflow now loops—when tests fail, ci-fixer analyzes the error and retries.
+ We added edge-case-generator, reference-validator, and ci-fixer{' '}to automatically iterate on failures. The workflow now loops—when tests fail, ci-fixer analyzes the error and retries.
diff --git a/slideshows/cbo-2026/slides/Evo6FullWorkflowSlide.tsx b/slideshows/cbo-2026/slides/Evo6FullWorkflowSlide.tsx
index d7e5871..8f42c7c 100644
--- a/slideshows/cbo-2026/slides/Evo6FullWorkflowSlide.tsx
+++ b/slideshows/cbo-2026/slides/Evo6FullWorkflowSlide.tsx
@@ -131,7 +131,7 @@ export default function Evo6FullWorkflowSlide() {
- The complete pipeline: 12 agents and 6 skills working together. One command triggers the entire workflow—from issue creation to a draft PR ready for human review.
+ The complete pipeline: 12 agents and 6 skills{' '}working together. One command triggers the entire workflow—from issue creation to a draft PR ready for human review.
diff --git a/slideshows/iariw-2026/DEMO-SCRIPT.md b/slideshows/iariw-2026/DEMO-SCRIPT.md
new file mode 100644
index 0000000..ba727f3
--- /dev/null
+++ b/slideshows/iariw-2026/DEMO-SCRIPT.md
@@ -0,0 +1,70 @@
+# Live demo script — IARIW 2026 (~8 min inside the 14:40–15:30 talk)
+
+The deck embeds the LIVE apps directly: slide 21 (Axiom App, Belgium), slide 35 (calibration
+dashboard), and slide 41 (policyengine.org/be) are live iframes with an Expand button — you
+can drive the whole demo without leaving the deck. Preloaded browser tabs remain the smoother
+option for deep interaction; use whichever feels better in the moment. Every beat also has
+static screenshot slides right after it (22–25, 36, 42). If the network dies mid-beat,
+advance and keep talking.
+
+## Before the talk (10 min, on venue wifi or hotspot)
+
+1. Open these tabs, in order, and let each fully load:
+ - https://axiom.org
+ - https://axiom.org/axiom?country=be (Belgium field view)
+ - https://axiom.org/axiom/graph?compose=be (composition graph)
+ - https://axiom.org/validation
+ - https://policyengine.org/be
+ - https://microcosm.institute/calibration/dashboard/microcosm?country=be
+2. On policyengine.org/be: confirm the yellow provenance banner renders and the
+ "Society-wide impacts" tab shows €0.00B at baseline.
+3. Phone hotspot ready as backup. If neither works, the deck carries every beat.
+4. ⚠️ Do NOT quote per-suite numbers from axiom.org/oracles live — the deployed scoreboard
+ is serving a pre-Aug-22 snapshot (two newest Belgian suites 404 there). The slide numbers
+ come from origin/main and are correct. Redeploy the oracles dashboard before the talk if
+ you want it live; otherwise skip that page.
+
+## Beat 1 — the Axiom App, Belgium (≈3 min)
+
+| Step | Do | Say |
+|---|---|---|
+| 1.1 | Switch to the tab at axiom.org/axiom?country=be | "This is Belgium in the Axiom App — 107 provisions, clustered federal, Flanders, Wallonia, Brussels, German-speaking community." |
+| 1.2 | Hover the middle cluster; click a highlighted provision (e.g. "Income tax — benefits — company car (Belgium)") | "Each node is a rule encoded from the statute." |
+| 1.3 | In the side panel, click "Read the law →" | "The CIR 92 text sits beside the RuleSpec rule that computes it — name, entity, unit, effective-from date. The interpretation is the published artifact, not something buried in an engine." |
+| 1.4 | Close the modal; open the tab at axiom.org/axiom/graph?compose=be; click the final-result node | "And the computation graph: every result traces to its parameters and inputs. The dependency structure of the law becomes data you can analyze." |
+
+Fallback slides: "Browse the encoded law" → "The law at the node" → "The computation graph".
+
+## Beat 2 — policyengine.org/be (≈3 min)
+
+| Step | Do | Say |
+|---|---|---|
+| 2.1 | Switch to policyengine.org/be; point at the banner | "Everything here is labeled: Axiom rules engine, Microcosm-BE v0.5, 2025 law — and the provenance line states the US donor pool and the planned Belgian upgrade." |
+| 2.2 | Drag "Top bracket rate" 50% → 55% | "One statute parameter — art. 130 CIR 92. Budget impact, Gini, poverty recompute from 155 precomputed cells across 28 encoded parameters." |
+| 2.3 | Click "Reset to current law" | — |
+| 2.4 | Scroll to "The population, checked" | "The same population, computed by both engines against administrative truth. The misses are shown in red, not hidden — each carries a named mechanism in the cross-engine ledger." |
+
+Fallback slide: "A Belgian reform, computed".
+
+## Beat 3 — policyengine.py (≈1 min, works offline)
+
+Stay on the code slide in the deck (no network needed). Walk the two calls:
+a UK household in four lines; the same call for the US with a reform attached.
+"This is the interface the Belgian work targets — the apps and the notebook run the same package."
+
+## Beat 4 — if time allows (≈1 min)
+
+| Step | Do | Say |
+|---|---|---|
+| 4.1 | microcosm.institute dashboard tab | "Every one of the 254 Belgian calibration targets published with its error — 96.1% within 10%." |
+| 4.2 | axiom.org/validation tab | "And the standing rule: the model that wrote the rules never grades its own work." |
+
+Fallback slides: "The data, anchored in public" → "Validation, in the open".
+
+## Hard rules during the demo
+
+- Never say "certified" about any program. The honest line: "conformant, and the certificate
+ registry says certified = no — that honesty is the design."
+- The 15 July 2026 Belgian PIT reform estimates are held — do not compute or mention them live.
+- If someone asks to try an arbitrary household in the BE prototype: it is a precomputed-cell
+ prototype, not a free calculator — say so and offer the US/UK household calculator instead.
diff --git a/slideshows/iariw-2026/SPEAKER-NOTES.md b/slideshows/iariw-2026/SPEAKER-NOTES.md
new file mode 100644
index 0000000..f79557f
--- /dev/null
+++ b/slideshows/iariw-2026/SPEAKER-NOTES.md
@@ -0,0 +1,272 @@
+# Speaker notes — From open models to executable law
+
+IARIW–CAPE workshop "New technologies for evidence-based policy making"
+Thursday 27 August 2026 · 14:40–15:30 · Room P02, UCLouvain Saint-Louis, Brussels
+Deck: policyengine.org/slides/iariw-2026 (local: /slides/iariw-2026) · 48 slides, ~42 presented
+
+**Room:** IARIW measurement economists; Koen Algoed (Director General, Budget and Finance,
+Flemish Region) and Jean-Baptiste Traversa (head of microsimulation modelling, FPS Finance)
+up front; Hélène Latzer (moderates the 16:00 roundtable); CAPE researchers; possibly EC/JRC.
+Tom Truyts has just finished the BEAMM talk and demo (13:45–14:35).
+
+**The arc:** the CBO questions, generalized → in an era where conditions may change fast,
+you'd need AI for all of it → but AI alone fails (PolicyBench) → so what do we arm it with?
+Five primitives, each with a feedback loop → brief history (six years under one roof) → walk
+the five, demoing each → the loop that matters most → roundtable hand-off.
+
+**⚠️ Numbers that changed from the CBO deck, verified 2026-08-26:**
+1. PolicyBench: "1 in 3 to 1 in 7" is stale. Published v1.1 board (32 models): best 88.7%
+ exact ≈ 1 in 9 wrong; weakest 62.3%.
+2. Certification: NOTHING is certified today — not Denmark, not the US tariff arc.
+ Denmark conformant-everywhere with certified = no (81 open dependencies) IS the story.
+ Never say "certified" as a positive claim about any program.
+3. Facts register rows moved: 103 programs, 332 repos, 133 contributors, 4,693 test files,
+ team of 8. Chronicle: 148 source packages, 40 publishers (verified on main 2026-08-27).
+
+**Held — never say aloud:** the 15 July 2026 Belgian PIT reform cross-engine estimates
+(Tom sees them first; Max's gate). Statistics Belgium conversations. Anything about other
+modeling groups' publication records.
+
+---
+
+## Timing map (45 min)
+
+| Clock | Section | Slides | Minutes |
+|---|---|---|---|
+| 14:40 | Opening | 1–3 | 3 |
+| 14:43 | The question sequence | 4–8 | 6 |
+| 14:49 | Five primitives + history + roadmap | 9–11 | 4 |
+| 14:53 | 1 · Axiom | 12–27 (skip 22–25 if live demo works) | 13 |
+| 15:06 | 2 · Chronicle | 28–29 | 2 |
+| 15:08 | 3 · Microcosm | 30–37 (skip 36 if live) | 6.5 |
+| 15:14 | 4 · PolicyEngine | 38–43 (skip 42 if live) | 6 |
+| 15:20 | 5 · Together | 44–48 | 5.5 |
+| 15:26 | Buffer + questions | — | 4 |
+
+Cut-first if long: Microplex (37), WhoUsesIt (40), and skim Evo3/Evo5. Static screenshot
+slides (22–25, 36, 42) are presented ONLY if the network dies.
+
+---
+
+## Slide-by-slide track
+
+### 1 · Title (30s)
+Thank Tom. One sentence: "Tom showed you Belgium's platform; I want to show you where I think
+all of our stacks are heading."
+
+### 2 · Tom just showed you the platform (1.5m)
+BEAMM, EUROMOD, FPS Finance's models, PolicyEngine — same craft: encoded rules, a
+representative population, validation against what the state publishes. No microsim 101 —
+Tom did that. This talk: what changes when AI joins each layer.
+
+### 3 · The craft, scaled (1m)
+Personal: "I love building models." The four elements of the craft. What changes: thousands
+of agents poking at every piece at once. Tee the questions: "so here is the question I put to
+the Congressional Budget Office in May — and any organization here can translate it to its own."
+
+### 4 · What if every bill had a score? (1.5m)
+~10k bills per US Congress × 10 years × 3 budget categories = >300k cells as the FLOOR — an
+order of magnitude more proposals than ever get a formal public score. One legislature;
+Belgium alone legislates through six parliaments. [Scale check, stated on-slide.]
+
+### 5 · What if every outcome had an estimate? (1m)
+A fiscal score is one number. Policy also moves poverty, inequality, regions, take-up — and
+this room publishes the cells: 1m public statistical cells × 10-year horizon = >10m, before
+uncertainty bands.
+
+### 6 · What if you cross them? (1m)
+>100 billion bill-statistic-year cells. The hard question is not writing down more numbers —
+it is which cells deserve estimates, which deserve bands, and which are out of domain.
+
+### 7 · And the baseline itself may be moving (1.5m)
+The chart: professional 10-year consensus has never been tighter (SPF IQR 0.2pp, half its
+1990s level) while published AI-era growth estimates span +0.07pp to +30pp per year
+[Philadelphia Fed SPF; AI Frontiers compilation]. If you assign any real probability to rapid
+change, analysis has to recompute the present, not defend one number. "So — you would need AI
+to help with all of these pieces."
+
+### 8 · PolicyBench: AI alone can't do it (2m)
+Ask a frontier model a basic tax-benefit question, check against the computed answer:
+best model 88.7% exact ≈ 1 in 9 wrong; weakest of 32 more than 1 in 3. On SNAP cases where a
+family is owed benefits, no model gets more than 1 in 20 right [policybench.org, v1.1].
+Landing: AI is impressive at code, search, summarization. It is not a substitute for a model.
+"So what would the AI need? What do we arm it with?"
+
+### 9 · What do we arm the AI with? (2m — the thesis slide)
+Five primitives, each a project, each with a feedback loop:
+1 rules → Axiom (loop: oracles, zero unexplained mismatches) · 2 official statistics →
+Chronicle (loop: completeness + lineage) · 3 the world at micro level → Microcosm (loop:
+published calibration error, surveys held out) · 4 a model → PolicyEngine (loop: cross-engine
+agreement + users) · 5 judgment — expertise, discretion, uncertainty (loop: forecasts that
+resolve — the most important). Landing: the same primitives norm AIs AND human researchers.
+
+### 10 · Six years under one roof (1.5m)
+The history: PolicyEngine since 2021 built the first four together — encoded US/UK rules (by
+hand, increasingly AI), microdata imputed + calibrated to official statistics, the simulation
+engine, the web app (still there, no longer the center). The realization behind the split:
+each layer deserves its own name, users, and feedback loop — Axiom, Chronicle, Microcosm,
+with PolicyEngine as the model that composes them.
+
+### 11 · Five primitives, five demos (30s)
+The roadmap. "Let's walk them."
+
+### 12–19 · Axiom divider → encoder evolution (30s + ~40s each Evo, ~5m)
+Divider, then the pivot: AI can't compute policy, it can help build the substrate that does.
+The encoder history [our own project history, from the CBO deck]: single prompt (70% error) →
+pipeline → parallel agents → validation gates → skills → full workflow (12 agents, ~90 min to
+a draft PR). Tell it as adding verification, not adding intelligence.
+
+### 20 · The Axiom Foundation: encode, verify, publish (1.5m)
+Why a foundation: the rules layer should be a public good. Encode (statute → RuleSpec, every
+value cites its authority, effective dates) → verify (deterministic gauntlet + oracles:
+PolicyEngine, TAXSIM, EUROMOD, SNAP quality-control data — the model that wrote the rules
+never grades its own work) → publish (statute, encoding, validation record, computation graph
+in one place). axiom.org.
+
+### 21 · DEMO — the Axiom App, Belgium, live (~3m; slides 22–25 are the fallback)
+Live iframe in-deck (Expand button), or the preloaded tab. Beats: field view (107 Belgian
+provisions, five clusters) → open a provision → "Read the law" (CIR 92 text beside the
+RuleSpec rule, effective dates) → the computation graph. See DEMO-SCRIPT.md.
+
+### 26 · Belgian income tax, validated against EUROMOD (2m — the rules feedback loop)
+23/23 in-scope BE_2025 policies conformant; 33 suites, 156 household comparisons; zero
+unexplained mismatches. All 40 raw disagreements dispositioned: 33 filed as findings for the
+EUROMOD team's review on the public EC-JRC tracker, 7 explained residuals on our side
+[axiom-oracles origin/main, verified 2026-08-26]. Tone: EUROMOD is the reference we're
+grateful exists; cross-checks flow both directions. PIT arc merged on main; dependants +
+child benefits held at the signed-corpus release frontier. NEVER "perfect match" or
+certified language.
+
+### 27 · Complete is not certified (2m — the honesty machinery)
+Certified = computed(conformant AND exercised AND closed AND executable), no flag set by hand
+[CERTIFIED.md v3]. Today: 13 programs, 10 conformant, ZERO certified. Denmark: matches
+EUROMOD on every case, blockers empty — certified = no, 81 open dependencies. US tariff:
+216M comparisons vs the Yale panel, 0 unexplained — still not conformant (1.59M open units).
+For officials: this is the answer to "why trust an AI-built model" — you don't; you check
+the certificate.
+
+### 28–29 · Chronicle (2m)
+Divider, then: official statistics as source-backed facts — typed values with units,
+geography, period, and lineage to the source artifact. 148 source packages from 40 official
+publishers [chronicle main, verified 2026-08-27]. The Belgian shelf built in a week: Statbel
+fiscal income by €1,000 class, SPF Finances/ONSS/ONEM totals, Eurostat national accounts,
+FPB outlook, JRC EUROMOD baselines. The loop: Microcosm calibrates ONLY to sums of Chronicle
+facts — every target traces to a publisher; surveys enter as validation only.
+
+### 30–31 · Microcosm divider → the data challenge (1m)
+Comprehensive AND accurate. US: no single survey has everything. The European inversion:
+Belgian registers are linked — the constraint is release, which is why BEAMM invests in
+synthesis. Both directions converge on calibration targets + validation services.
+
+### 32 · Imputation (45s)
+Quantile regression forests, full conditional distributions, tails included. AI reads survey
+documentation and catches definitional mismatches.
+
+### 33 · Calibration (45s)
+Gradient descent over household weights against thousands of published targets. AI ingests
+targets, reconciles schemas; analysts decide what goes live.
+
+### 34 · Microcosm-BE (2m)
+The recipe on Belgium [sealed v0.5 artifacts]: 57,240 household records, 254 targets (sums of
+Chronicle facts), mean |error| 1.84%, 242/254 within 5%. The EUROMOD column ledger: all 182
+substantive output columns — 10 matched, 143 explained, 29 named gaps, 0 unclassified.
+Provenance line said straight: US survey donor pool, reweighted; Belgian donor pool is the
+planned upgrade. If SILC comes up: CAPE holds access — the acceptance test can run on their
+machines.
+
+### 35 · DEMO — the calibration dashboard, live (1.5m; slide 36 is the fallback)
+Every target published with its error; 96.1% within 10% on the live page. "You don't have to
+take my word for any of this — it's a website."
+
+### 37 · Microplex (30s) — CUT FIRST IF LONG
+Where the US data layer heads: multi-spine, automated target discovery, promote-on-review,
+versioned public releases.
+
+### 38–39 · PolicyEngine divider → PolicyEngine today (1.5m)
+The model that composes the primitives. Open source since June 2021 (AGPL-3.0); 95,000+
+parameters, 5,500+ variables, 4,693 test files, 103 programs; 133 contributors. No 10's data
+science team built 10ds-microsim on it; MOUs with NBER (open source TAXSIM emulator) and the
+Atlanta Fed (Policy Rules Database). For this room: an open EUROMOD-family stack for the US
+and UK, built in public.
+
+### 40 · Who uses it (30s) — CUT IF LONG
+Logo wall. One sentence and move.
+
+### 41 · DEMO — a Belgian reform, live (~3m; slide 42 is the fallback)
+policyengine.org/be in-deck: move the top bracket rate, watch budget/Gini/poverty recompute
+(155 precomputed cells, 28 CIR 92 parameters); scroll to "The population, checked" — both
+engines against administrative truth, misses in red with named mechanisms.
+
+### 43 · policyengine.py (1m — works offline)
+The same models as a Python package: a UK household in four lines; the same call for the US
+with a reform attached. This is the interface the Belgian work targets.
+
+### 44–45 · Together divider → Conductors, not oracles (2m)
+The model routes to verified tools and integrates calibrated outputs; analyst judgment lives
+at every routing decision. The judgment-to-mechanism loop: intuition becomes mechanism over
+time.
+
+### 46 · The loop that matters most (2m)
+Every primitive has its gauge; the one that ranks them all is whether forecasts resolve
+against reality. The measurable question: when the stack covers a new country — Belgium took
+weeks because Microcosm calibrates to official statistics — do calibrated agents predict
+outcomes there better? We intend to score that. And the deeper point for 16:00: policy takes
+a different shape when baseline conditions change quickly; if you assign real probability to
+that, how does this community arm policymakers to respond?
+
+### 47 · It takes all of us (1.5m)
+Model-building has always been about making consequences visible before the choice.
+Statistical offices, EUROMOD, BEAMM, ministries, open models — each doing what it does best.
+"Which is exactly what the roundtable is about — see you at 16:00."
+
+### 48 · Thank you / QR (leave up)
+QR → axiom.org. Links: axiom.org · policyengine.org/be · both GitHub orgs.
+
+---
+
+## Likely questions (roundtable themes: transparency, trust, entering public administrations)
+
+**"How do we know the AI encoded the law correctly?"**
+Same way you'd know for a human: you don't trust, you check. Every encoding compiles, passes
+its tests, and is cross-checked against engines we don't control — EUROMOD here, TAXSIM and
+SNAP quality-control data in the US. The certificate is computed, and today it honestly says
+"not certified" for everything — the misses are published.
+
+**"Could FPS Finance / the Flemish administration use this?"** (Algoed, Traversa)
+The on-ramp is verification, not replacement: run your existing system against the encodings
+as a test oracle, catch discrepancies, keep your engine and your timeline. Everything is open
+(encodings CC BY 4.0, code Apache-2.0), so there is no procurement cliff to try it.
+
+**"What about EUROMOD — are you competing with it?"**
+We validate against it, we file what we find on the public tracker, and 33 of our 40 Belgian
+disagreements were explained by differences we documented for their team's review. A shared
+reference engine makes every model better, ours included. (Never comparative-negative;
+never name other platforms' publication records.)
+
+**"Is the Belgian population real Belgian microdata?"**
+No — and the label says so. A synthetic population calibrated to 254 Belgian administrative
+and national-accounts targets; support records are a reweighted US donor pool; a Belgian
+donor pool (e.g. SILC-based, run by partners who hold access) is the planned upgrade.
+Cross-engine agreement on it is evidence about the encodings.
+
+**"Can it score the July 2026 PIT reform?"** (likely from officials)
+The reform is encoded and a cross-engine comparison is in validation with partners — results
+aren't public yet. [Numbers are HELD — do not state them.]
+
+**"What about data protection / can our data leave the building?"**
+It doesn't need to: acceptance tests and calibration run wherever the data lives. What we
+need published is aggregates: calibration targets and validation statistics, not microdata.
+
+**"Who pays for this / what's the business model?"** (no funding ask in the talk)
+PolicyEngine is a nonprofit; the Axiom Foundation is a fiscally sponsored project of the PSL
+Foundation. The encodings are a public good; paid work products fund the org.
+
+**"Is AI going to replace modelers?"**
+Conductors, not oracles: the craft moves up a level — source interpretation, assumptions,
+edge cases, sign-off. Every encoder-evolution step that worked added a check, not a bigger
+model.
+
+**"What would a BEAMM/CAPE collaboration look like?"**
+Tom and I are discussing exactly that — shared validation surfaces, a Belgian donor pool,
+BEAMM's published estimates alongside ours on public scoreboards. The workshop is the public
+face of that conversation. [Keep at this altitude; funding vehicle status is not public.]
diff --git a/slideshows/iariw-2026/config.ts b/slideshows/iariw-2026/config.ts
new file mode 100644
index 0000000..b9dec0d
--- /dev/null
+++ b/slideshows/iariw-2026/config.ts
@@ -0,0 +1,142 @@
+import { SlideshowConfig } from '@/lib/types';
+import { speakers } from '@/lib/speakers';
+// Opening
+import TitleSlide from './slides/TitleSlide';
+import BridgeSlide from './slides/BridgeSlide';
+import CraftScaledSlide from './slides/CraftScaledSlide';
+// The question sequence
+import WhatIfEveryBillSlide from './slides/WhatIfEveryBillSlide';
+import WhatIfEverySeriesSlide from './slides/WhatIfEverySeriesSlide';
+import CrossScaleSlide from './slides/CrossScaleSlide';
+import ForecastUncertaintySlide from './slides/ForecastUncertaintySlide';
+import PolicyBenchSlide from './slides/PolicyBenchSlide';
+// The spine
+import FivePrimitivesSlide from './slides/FivePrimitivesSlide';
+import HistorySlide from './slides/HistorySlide';
+import OutlineSlide from './slides/OutlineSlide';
+import {
+ AxiomDividerSlide,
+ ChronicleDividerSlide,
+ MicrocosmDividerSlide,
+ EngineDividerSlide,
+ TogetherDividerSlide,
+} from './slides/SectionDivider';
+// 1 — Axiom
+import BridgeToEvolutionSlide from './slides/BridgeToEvolutionSlide';
+import Evo1SinglePromptSlide from './slides/Evo1SinglePromptSlide';
+import Evo2PipelineSlide from './slides/Evo2PipelineSlide';
+import Evo3ParallelSlide from './slides/Evo3ParallelSlide';
+import Evo4ValidationSlide from './slides/Evo4ValidationSlide';
+import Evo5SkillsSlide from './slides/Evo5SkillsSlide';
+import Evo6FullWorkflowSlide from './slides/Evo6FullWorkflowSlide';
+import AxiomIntroSlide from './slides/AxiomIntroSlide';
+import BelgiumParitySlide from './slides/BelgiumParitySlide';
+import CertificationLadderSlide from './slides/CertificationLadderSlide';
+// 2 — Chronicle
+import ChronicleSlide from './slides/ChronicleSlide';
+// 3 — Microcosm
+import DataChallengeSlide from './slides/DataChallengeSlide';
+import ImputationSlide from './slides/ImputationSlide';
+import CalibrationSlide from './slides/CalibrationSlide';
+import MicrocosmBESlide from './slides/MicrocosmBESlide';
+import MicroplexSlide from './slides/MicroplexSlide';
+// 4 — PolicyEngine
+import PEOverviewSlide from './slides/PEOverviewSlide';
+import WhoUsesItSlide from './slides/WhoUsesItSlide';
+import DemoPySlide from './slides/DemoPySlide';
+// Live embeds + static fallbacks
+import {
+ DemoAxiomBrowseSlide,
+ DemoAxiomProvisionSlide,
+ DemoAxiomGraphSlide,
+ DemoAxiomValidationSlide,
+ DemoPeBeSlide,
+ MicrocosmDashboardSlide,
+} from './slides/DemoSlides';
+import {
+ DemoAxiomLiveSlide,
+ DemoPeBeLiveSlide,
+ DemoDashboardLiveSlide,
+} from './slides/DemoLiveSlides';
+// 5 — Together
+import ConductorsSlide from './slides/ConductorsSlide';
+import ClosingLoopSlide from './slides/ClosingLoopSlide';
+import CommunityClosingSlide from './slides/CommunityClosingSlide';
+import QuestionsSlide from './slides/QuestionsSlide';
+
+export const iariw2026Config: SlideshowConfig = {
+ id: 'iariw-2026',
+ title: 'From open models to executable law',
+ description:
+ 'PolicyEngine and Axiom — open models, simulation-ready microdata, and encoding and verifying policy rules',
+ date: '2026-08-27',
+ location: 'IARIW–CAPE workshop, UCLouvain Saint-Louis, Brussels',
+ footerText: 'PolicyEngine · IARIW–CAPE workshop · August 2026',
+ speakers: [speakers['max-ghenis']],
+ private: false,
+ slides: [
+ // Opening
+ TitleSlide,
+ BridgeSlide,
+ CraftScaledSlide,
+
+ // The question sequence
+ WhatIfEveryBillSlide,
+ WhatIfEverySeriesSlide,
+ CrossScaleSlide,
+ ForecastUncertaintySlide,
+ PolicyBenchSlide,
+
+ // The spine: what do we arm the AI with?
+ FivePrimitivesSlide,
+ HistorySlide,
+ OutlineSlide,
+
+ // 1 — Axiom (the rules)
+ AxiomDividerSlide,
+ BridgeToEvolutionSlide,
+ Evo1SinglePromptSlide,
+ Evo2PipelineSlide,
+ Evo3ParallelSlide,
+ Evo4ValidationSlide,
+ Evo5SkillsSlide,
+ Evo6FullWorkflowSlide,
+ AxiomIntroSlide,
+ DemoAxiomLiveSlide,
+ DemoAxiomBrowseSlide,
+ DemoAxiomProvisionSlide,
+ DemoAxiomGraphSlide,
+ DemoAxiomValidationSlide,
+ BelgiumParitySlide,
+ CertificationLadderSlide,
+
+ // 2 — Chronicle (official statistics)
+ ChronicleDividerSlide,
+ ChronicleSlide,
+
+ // 3 — Microcosm (the world at micro level)
+ MicrocosmDividerSlide,
+ DataChallengeSlide,
+ ImputationSlide,
+ CalibrationSlide,
+ MicrocosmBESlide,
+ DemoDashboardLiveSlide,
+ MicrocosmDashboardSlide,
+ MicroplexSlide,
+
+ // 4 — PolicyEngine (the model)
+ EngineDividerSlide,
+ PEOverviewSlide,
+ WhoUsesItSlide,
+ DemoPeBeLiveSlide,
+ DemoPeBeSlide,
+ DemoPySlide,
+
+ // 5 — Together
+ TogetherDividerSlide,
+ ConductorsSlide,
+ ClosingLoopSlide,
+ CommunityClosingSlide,
+ QuestionsSlide,
+ ],
+};
diff --git a/slideshows/iariw-2026/outline.md b/slideshows/iariw-2026/outline.md
new file mode 100644
index 0000000..801f0bb
--- /dev/null
+++ b/slideshows/iariw-2026/outline.md
@@ -0,0 +1,115 @@
+# IARIW 2026 workshop talk — outline
+
+**From open models to executable law: PolicyEngine and Axiom**
+Thursday 27 August 2026, 14:40–15:30 (~45 min + questions), Room P02, UCLouvain Saint-Louis, Brussels.
+Workshop: "New technologies for evidence-based policy making" (co-located with the 39th IARIW General Conference), co-organized by Tom Truyts (CAPE, UCLouvain Saint-Louis) and Max Ghenis (PolicyEngine).
+
+## Context
+
+- Tom Truyts presents BEAMM (Belgium's open microsimulation platform) 13:45–14:35, immediately before.
+ Do not re-explain tax-benefit microsimulation. Build on Tom's talk explicitly: "Tom just showed you
+ the platform; here's where the stack is heading."
+- Audience: IARIW measurement economists (DINA/national-accounts crowd), Belgian officials
+ (Koen Algoed — Director General, Budget and Finance, Flemish Region; Jean-Baptiste Traversa —
+ head of microsimulation modelling, FPS Finance), Hélène Latzer (UCLouvain, moderates the 16:00
+ roundtable on AI tools entering public administrations), CAPE researchers, possibly EC/JRC people.
+- EUROMOD is the shared reference point. Community-of-modelers framing throughout — never
+ vendor-vs-incumbent, never argue with anyone's claims. Euros where possible.
+- A live demo (~8 min) sits inside the talk; every demo beat has a fallback screenshot slide.
+- 16:00 roundtable follows — the closing should hand off to its themes (transparency, trust,
+ what it takes for these tools to enter public administrations).
+
+## The argument
+
+Model-building is a craft: structure, program rules, calibrated data, tests that try to break the
+model, validation that catches when it does. That is the work BEAMM does, EUROMOD does, FPS Finance
+does, PolicyEngine does. What changes with AI is not the craft — it is that agents can now poke at
+every piece of it, at a scale no individual analyst can match. That scale only helps if the
+verification machinery scales with it: encode → verify → publish, with the scoreboard public,
+including the misses. Belgium is the live case: an AI-encoded Belgian PIT validated case-by-case
+and population-wide against EUROMOD, on a Belgian population calibrated to Belgian administrative
+totals — built in weeks, honestly labeled everywhere it falls short. The endgame is a shared,
+open, checkable evidence layer that any ministry can recompute — which matters more as credible
+forecasts of the AI era itself diverge by orders of magnitude.
+
+## Slide-by-slide
+
+> ⚠️ Superseded 2026-08-27: the deck was restructured around Max's five-primitives arc
+> (questions → what do we arm the AI with? → Axiom / Chronicle / Microcosm / PolicyEngine /
+> Together, each with its feedback loop and demo). SPEAKER-NOTES.md carries the current
+> 48-slide structure and timing; the sections below describe the earlier format-led cut.
+
+### Opening + question sequence (8 slides, ~8 min)
+1. **TitleSlide** — cover, partner context (IARIW–CAPE workshop).
+2. **BridgeSlide** — "Tom just showed you the platform." Same craft, shared stack directions.
+3. **CraftScaledSlide** — the craft, scaled: what agents change and what they don't.
+4. **WhatIfEveryBillSlide** — what if every bill had a score? (>300k cells; six Belgian
+ parliaments beyond the one US legislature).
+5. **WhatIfEverySeriesSlide** — what if every statistical series had a forecast? (>10m cells).
+6. **CrossScaleSlide** — what if you cross them? (>100b bill-statistic-year cells; which cells
+ deserve estimates, bands, or out-of-domain marks).
+7. **HowWeGetThereSlide** — two compounding tracks: build the apparatus with AI, then equip AI
+ to run it at scale.
+8. **OutlineSlide** — Rules / Data / Live / Where this goes.
+
+### Section 1 — Rules (~14 min)
+5. **RulesDivider**
+6. **PEOverviewSlide** — PolicyEngine today: open US/UK models, who uses them (10 Downing Street,
+ legislative users, NBER + Atlanta Fed MOUs), all Facts-Register-sourced.
+7. **PolicyBenchSlide** — where plain LLMs fail on policy computation (verified numbers).
+8. **BridgeToEvolutionSlide** — so how do you get AI to do this reliably?
+9–14. **Evo1–Evo6** — the encoder evolution, single prompt → full workflow (adapted from cbo-2026).
+15. **AxiomIntroSlide** — the Axiom Foundation: encode → verify → publish.
+16. **BelgiumParitySlide** — rulespec-be × EUROMOD: suites, comparisons, explained rate;
+ findings flow both directions (we file what we find upstream, we fix what the oracle catches
+ in ours). Verified numbers only.
+17. **CertificationLadderSlide** — complete ≠ certified: the certificate is computed, not asserted;
+ what the registry honestly says today (per verified axiom-oracles state).
+
+### Section 2 — Data (~8 min)
+18. **DataDivider**
+19. **DataChallengeSlide** — why survey microdata alone can't answer reform questions; the EU
+ inversion (linkage vs release constraints).
+20. **ImputationSlide** — fusing surveys with ML (US pipeline, adapted).
+21. **CalibrationSlide** — reweighting to administrative truth (US pipeline, adapted).
+22. **MicrocosmBESlide** — Microcosm-BE: Belgian population calibrated to Belgian admin +
+ national-accounts targets (sums of Chronicle facts); the EUROMOD column ledger
+ (matched / explained / gap); provenance line (US donor pool, Belgian donor = planned upgrade).
+23. **MicroplexSlide** — where the data layer heads next (brief).
+
+### Section 3 — Live (~9 min; live embedded apps with Expand, static screenshots as fallbacks)
+24. **DemoDivider** — the three beats.
+25. **DemoAxiomLiveSlide** — LIVE iframe: the Axiom App, Belgium (app.axiom-foundation.org).
+26. Static fallbacks: browse → provision → RuleSpec/graph → validation screenshots.
+27. **DemoPeBeLiveSlide** — LIVE iframe: policyengine.org/be reform simulator (+ static fallback).
+28. **DemoPySlide** — policyengine.py in a few lines (code slide; works offline).
+(The data section also carries **DemoDashboardLiveSlide** — the live calibration dashboard —
+with its static screenshot right after as the fallback.)
+
+### Section 4 — Where this goes (~8 min)
+28. **FutureDivider**
+29. **ConductorsSlide** — conductors, not oracles.
+30. **ForecastUncertaintySlide** — optional closing beat: when credible AI-era growth forecasts
+ span orders of magnitude, evidence infrastructure's job shifts from defending one number to
+ letting a ministry recompute the present. (Skippable live.)
+31. **CommunityClosingSlide** — it takes all of us: stat offices, EUROMOD, BEAMM, ministries,
+ open models. Hands off to the 16:00 roundtable themes.
+32. **QuestionsSlide** — links.
+
+## Cut from cbo-2026
+
+CBO-specific opening (CboScaleSlide, ScaleOpportunity/EverySeriesForecast/CrossScale/ScaleAccuracy/
+HowWeGetThere/ProjectionApparatus — US-forecasting agency framing), CliffWatch, Theory section
+(LLMBeliefs, LLMETI), Analysis section (AnalysisLogos, PolicyAnalysis, ClaudePlugin,
+ClaudeComparison, UKChatPrototype, PredictAll, MarketsMock, AIInequality), WhoUsesIt (folded into
+PEOverview), ObbbaExplorer (Max presents the OBBBA paper elsewhere at IARIW), parked legacy slides.
+
+## Claim gates (standing)
+
+- Belgium is never "certified". Complete ≠ certified. Certification language quotes the computed
+ certificate only.
+- Microcosm-BE is a product lineage, not a demo: provenance line, never a scare banner.
+- "the Axiom Foundation" in full in prose; no funder names; no completeness claims; demos are demos.
+- Every org number from messaging/Facts-Register.md or a named artifact verified this session.
+- No policy positions. No funding asks. Sentence case. No emoji. Numbers speak for themselves.
+- The 15 July 2026 Belgian PIT reform cross-engine estimates are HELD (Max's gate) — not in this deck.
diff --git a/slideshows/iariw-2026/slides/AxiomIntroSlide.tsx b/slideshows/iariw-2026/slides/AxiomIntroSlide.tsx
new file mode 100644
index 0000000..a2219f9
--- /dev/null
+++ b/slideshows/iariw-2026/slides/AxiomIntroSlide.tsx
@@ -0,0 +1,115 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const requirements = [
+ {
+ title: 'Accuracy at every step',
+ detail:
+ 'Every parameter, formula, citation, and test produced along the way — not only the final answer.',
+ },
+ {
+ title: 'Cross-validation against other sources',
+ detail:
+ 'TAXSIM, agency tables, peer modelers — multiple ground truths beyond our own.',
+ },
+ {
+ title: 'Deterministic quality gates',
+ detail:
+ 'Tests, lint, type checks, structural rules that the agents must pass — not opinions about quality.',
+ },
+ {
+ title: 'Human review at the right boundary',
+ detail:
+ 'Not every prompt. The final PR, the assumptions, the edge cases worth a second pair of eyes.',
+ },
+ {
+ title: 'A canvas wide enough for the work',
+ detail:
+ 'A queue that can hold thousands of policies and run them in parallel without losing context.',
+ },
+];
+
+const verbs = [
+ {
+ verb: 'Encode',
+ detail:
+ 'Statute to RuleSpec. Every value cites its authority; every clause carries its effective dates.',
+ },
+ {
+ verb: 'Verify',
+ detail:
+ 'A deterministic gauntlet, then oracles that cross-check against external engines and datasets — PolicyEngine, TAXSIM, EUROMOD, SNAP quality-control data — so the model that wrote the rules never grades its own work.',
+ },
+ {
+ verb: 'Publish',
+ detail:
+ 'Source document, encoding, validation record, and computation graph in one place.',
+ },
+];
+
+export default function AxiomIntroSlide() {
+ return (
+
+
+
+ The Axiom Foundation: encode, verify, publish
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/BelgiumParitySlide.tsx b/slideshows/iariw-2026/slides/BelgiumParitySlide.tsx
new file mode 100644
index 0000000..3586f7b
--- /dev/null
+++ b/slideshows/iariw-2026/slides/BelgiumParitySlide.tsx
@@ -0,0 +1,66 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const stats = [
+ { value: '23/23', label: 'in-scope BE_2025 policies conformant' },
+ { value: '156', label: 'household comparisons across 33 suites' },
+ { value: '0', label: 'unexplained mismatches' },
+];
+
+export default function BelgiumParitySlide() {
+ return (
+
+
+ Belgian income tax, validated against EUROMOD
+
+
+
+ {stats.map((s) => (
+
+
{s.value}
+
{s.label}
+
+ ))}
+
+
+
+
+
Every disagreement dispositioned
+
+ The suites raised 40 raw disagreements. 33 traced to upstream
+ engine differences and are filed as findings for the EUROMOD
+ team's review on the public EC-JRC tracker; 7 are explained
+ residuals.
+
+
+ EUROMOD is the reference we are glad exists — the
+ cross-checks flow both directions.
+
+
+
+
+
+ Worked example
+
+
+ The Belgian PIT arc — couples, pensions, self-employment,
+ and replacement-income pipelines — is merged on main.
+ Dependants and child benefits are encoded, held at the
+ signed-corpus release frontier.
+
+
+
+
+
+ rulespec-be and the oracle harness are public at{' '}
+ github.com/TheAxiomFoundation{' '}
+ · scoreboard at{' '}
+ axiom.org/oracles
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/BridgeSlide.tsx b/slideshows/iariw-2026/slides/BridgeSlide.tsx
new file mode 100644
index 0000000..f1db1a1
--- /dev/null
+++ b/slideshows/iariw-2026/slides/BridgeSlide.tsx
@@ -0,0 +1,53 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const sharedCraft = [
+ {
+ title: 'Encoded rules',
+ detail: 'Tax and benefit law, written as code that computes.',
+ },
+ {
+ title: 'A representative population',
+ detail: 'Microdata that stands in for the country.',
+ },
+ {
+ title: 'Validation',
+ detail: 'Checks against what the state publishes.',
+ },
+];
+
+export default function BridgeSlide() {
+ return (
+
+
+ Tom just showed you the platform
+
+
+
+
+ BEAMM, EUROMOD, FPS Finance's models, PolicyEngine — the
+ same craft, built by the same kind of people:
+
+
+
+ {sharedCraft.map((c) => (
+
+
{c.title}
+
{c.detail}
+
+ ))}
+
+
+
+
+ This talk is about where that stack is heading as AI joins the work
+ — rules that carry their citations, populations calibrated to
+ administrative totals, and verification that scales with the
+ encoding. The code and the scoreboards are public.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/BridgeToEvolutionSlide.tsx b/slideshows/iariw-2026/slides/BridgeToEvolutionSlide.tsx
new file mode 100644
index 0000000..775beec
--- /dev/null
+++ b/slideshows/iariw-2026/slides/BridgeToEvolutionSlide.tsx
@@ -0,0 +1,36 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function BridgeToEvolutionSlide() {
+ return (
+
+
+ But it can help us encode them faster
+
+
+
+
+ AI can't accurately compute policy on its own.{' '}
+
+ It can help us build the substrate that does.
+
+
+
+
+
+ Over the last three years we have evolved how AI assists with the
+ encoding work itself — from a single prompt that often
+ failed to a multi-agent pipeline that produces tested,
+ citation-backed PRs.
+
+
+
+
+ Six stages of evolution, six lessons learned, one workflow we use
+ today.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/CalibrationSlide.tsx b/slideshows/iariw-2026/slides/CalibrationSlide.tsx
new file mode 100644
index 0000000..f6b5386
--- /dev/null
+++ b/slideshows/iariw-2026/slides/CalibrationSlide.tsx
@@ -0,0 +1,74 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function CalibrationSlide() {
+ return (
+
+
+ Calibration: matching administrative totals
+
+
+
+
+
+
The method
+
+ Gradient descent{' '}over
+ household weights, optimizing simultaneously against published
+ administrative targets — tax authority tables, statistical
+ office series, census tabulations, program totals.
+
+
+
+
+
Why it works
+
+ When the optimizer fits all targets at once, the resulting
+ weights reproduce the cross-tabulations ministries and
+ statistical offices already publish — while preserving the
+ joint distribution the microdata carries.
+
+
+
+
+
+
Where AI changes this layer
+
+
+ ·
+
+ Target ingestion.{' '}
+ Agents read statistical releases, tax authority tables, and
+ ministry PDFs and pull numbers into a canonical target format,
+ keeping pace as publications land.
+
+
+
+ ·
+
+ Schema reconciliation.{' '}
+ When definitions change between releases, agents surface the
+ diff before it silently miscalibrates the model.
+
+
+
+ ·
+
+ Promotion decisions.{' '}
+ The agent proposes which targets to add; analysts decide
+ which ones go into the live calibration and which stay in
+ reserve.
+
+
+
+
+
+
+
+ Same calibration discipline. Many more targets, much faster turn,
+ humans on the judgment calls.
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/CertificationLadderSlide.tsx b/slideshows/iariw-2026/slides/CertificationLadderSlide.tsx
new file mode 100644
index 0000000..46998f1
--- /dev/null
+++ b/slideshows/iariw-2026/slides/CertificationLadderSlide.tsx
@@ -0,0 +1,126 @@
+import { Fragment } from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import { IconChevronRight } from '@tabler/icons-react';
+
+const rungs = [
+ {
+ label: 'Encoded',
+ detail: 'The program exists as executable rules.',
+ },
+ {
+ label: 'Conformant',
+ detail: 'Agrees with the reference engine, with zero unexplained mismatches.',
+ },
+ {
+ label: 'Closed',
+ detail: 'Every law-derived dependency it relies on is encoded too.',
+ amber: true,
+ },
+ {
+ label: 'Certified',
+ detail: 'Conformant, exercised, closed, and executable, with zero open defects.',
+ unreached: true,
+ },
+];
+
+export default function CertificationLadderSlide() {
+ return (
+
+
+ Complete is not certified
+
+
+
+ Agreement with the reference engine is necessary — and nowhere
+ near sufficient.
+
+
+
+ {rungs.map((rung, i) => (
+
+ {i > 0 && (
+
+
+
+ )}
+ {rung.unreached ? (
+
+
+ {rung.label}
+
+
+ {rung.detail}
+
+
+ ) : (
+
+
+ {rung.label}
+
+
+ {rung.detail}
+
+
+ )}
+
+ ))}
+
+
+
+
+
+
+ Where Denmark stops
+
+
+ Denmark's child and youth benefit matches EUROMOD on every
+ case across three reference legs, and its blocker list is empty.
+ Certified still reads no — dependency closure fails, with
+ 81 law-derived dependencies open, among them the income basis in
+ personskatteloven §7.
+
+
+
+ The US tariff schedule tells the same story — 216 million
+ row-level comparisons against the Yale Budget Lab statutory panel,
+ zero unexplained mismatches, and conformant still reads no with
+ 1.59M units open.
+
+
+
+
+
0 / 13
+
programs certified today
+
10 of 13 conformant
+
+
+
+
+
+ Certified is computed, never set by hand, and the registry publishes
+ whatever the computation says. The scoreboard grades itself honestly
+ — that is the point.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/ChronicleSlide.tsx b/slideshows/iariw-2026/slides/ChronicleSlide.tsx
new file mode 100644
index 0000000..3b9a22d
--- /dev/null
+++ b/slideshows/iariw-2026/slides/ChronicleSlide.tsx
@@ -0,0 +1,68 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const belgianPackages = [
+ 'Statbel — fiscal income by €1,000 class, population by region, sex, and age',
+ 'SPF Finances, ONSS, ONEM — tax and social security administrative totals',
+ 'Eurostat — national accounts for the household sector',
+ 'Federal Planning Bureau — the medium-term outlook, history and forecast',
+ 'JRC — published EUROMOD baseline statistics',
+];
+
+export default function ChronicleSlide() {
+ return (
+
+
+ Chronicle: official statistics, as facts
+
+
+
+
+
+ A source-backed fact store: every published value captured with its
+ type, unit, geography, period, and lineage back to the source
+ artifact.
+
+
+
+
+
148
+
source packages
+
+
+
40
+
+ official publishers
+
+
+
+
+
+
+ The feedback loop: Microcosm calibrates only to sums of Chronicle
+ facts, so every target traces to a publisher — and gaps in
+ the store show up as gaps in what can be calibrated.
+
+
+
+
+
+
The Belgian shelf, built this summer
+
+ {belgianPackages.map((p) => (
+
+ +
+ {p}
+
+ ))}
+
+
+ Survey aggregates are labeled as such and enter downstream work as
+ validation only.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/ClosingLoopSlide.tsx b/slideshows/iariw-2026/slides/ClosingLoopSlide.tsx
new file mode 100644
index 0000000..f7ee8fa
--- /dev/null
+++ b/slideshows/iariw-2026/slides/ClosingLoopSlide.tsx
@@ -0,0 +1,44 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function ClosingLoopSlide() {
+ return (
+
+
+ The loop that matters most
+
+
+
+
+ Every primitive has its gauge — conformance suites, provenance,
+ calibration error, cross-engine agreement. The one that ranks them
+ all: do the forecasts
+ resolve against reality?
+
+
+
+
The measurable question
+
+ When this stack covers a new country, do calibrated agents predict
+ outcomes there better? We built the Belgian prototype in weeks
+ because Microcosm calibrates to official statistics rather than
+ rebuilding a survey pipeline — the same recipe now applies
+ country by country. Whether that improves resolved forecasts is a
+ question we can score, and intend to.
+
+
+
+
+
+ And policy takes a different shape when baseline conditions change
+ quickly. If you assign any real probability to rapid AI-driven
+ change, the question for this community is how policy analysis
+ arms policymakers to respond — a thread for the roundtable
+ at 16:00.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/CommunityClosingSlide.tsx b/slideshows/iariw-2026/slides/CommunityClosingSlide.tsx
new file mode 100644
index 0000000..7f201fa
--- /dev/null
+++ b/slideshows/iariw-2026/slides/CommunityClosingSlide.tsx
@@ -0,0 +1,45 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function CommunityClosingSlide() {
+ return (
+
+
+ It takes all of us
+
+
+
+
+ Model-building has always been about making the consequences of
+ policy visible before the choice is made.
+
+
+
+ AI lets this community produce more evidence — at more scale,
+ more conditionally, more calibrated against what governments publish.
+
+
+
+
+ The work is not choosing the policy.
+
+
+ The work is knowing what each policy will actually do — so
+ the people who do choose can align outcomes with what they are
+ trying to achieve.
+
+
+
+
+ Statistical offices, EUROMOD, BEAMM, ministries, open models —
+ each piece, doing what it does best.
+
+
+
+ It is the work of a community, not any one institution.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/ConductorsSlide.tsx b/slideshows/iariw-2026/slides/ConductorsSlide.tsx
new file mode 100644
index 0000000..85e7856
--- /dev/null
+++ b/slideshows/iariw-2026/slides/ConductorsSlide.tsx
@@ -0,0 +1,53 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function ConductorsSlide() {
+ return (
+
+
+ Conductors, not oracles
+
+
+
+
+
Oracle (the wrong frame)
+
+ An LLM absorbs text and emits text. Confidently. Without calling
+ the models that would actually answer the question.
+
+
+ This is the failure mode PolicyBench measures.
+
+
+
+
+
+ Conductor (the right frame)
+
+
+ The model routes a question to the right tool — microsim,
+ structural model, statistical method, archival lookup — with
+ parameters, and integrates calibrated outputs.
+
+
+ Analyst judgment lives at every routing decision.
+
+
+
+
+
+
+ The judgment-to-mechanism loop:{' '}
+ where LLM judgment captures something current models miss, that
+ judgment eventually gets formalized into the next generation of
+ models. Analyst intuition becomes mechanism over time — not the
+ other way around.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/CraftScaledSlide.tsx b/slideshows/iariw-2026/slides/CraftScaledSlide.tsx
new file mode 100644
index 0000000..3f789b4
--- /dev/null
+++ b/slideshows/iariw-2026/slides/CraftScaledSlide.tsx
@@ -0,0 +1,61 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const craft = [
+ 'Program rules, encoded from the statute',
+ 'Data calibrated to what agencies publish',
+ 'Case studies that try to break the model',
+ 'Validation that catches when it does',
+];
+
+export default function CraftScaledSlide() {
+ return (
+
+
+ The craft, scaled
+
+
+
+
+
+ I love building models. The work has always been:
+
+
+ {craft.map((item) => (
+
+ ▪
+ {item}
+
+ ))}
+
+
+
+
+
+
+ What changes
+
+
+ Thousands of AI agents can now poke at every piece of that craft
+ — encoding, testing, cross-checking — at a scale no
+ individual analyst can match.
+
+
+
+
+
+ The question for the next 45 minutes: what does that scale make
+ possible — and what does it not change?
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/CrossScaleSlide.tsx b/slideshows/iariw-2026/slides/CrossScaleSlide.tsx
new file mode 100644
index 0000000..790fceb
--- /dev/null
+++ b/slideshows/iariw-2026/slides/CrossScaleSlide.tsx
@@ -0,0 +1,60 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const dimensions = [
+ { label: 'Bills', value: '~10k' },
+ { label: 'Public cells', value: '1m+' },
+ { label: 'Years', value: '10' },
+ { label: 'Policy states', value: 'Many' },
+];
+
+export default function CrossScaleSlide() {
+ return (
+
+
+ What if you cross them?
+
+
+
+
+
>100b
+
+ bill-statistic-year cells
+
+
+ 10k bills x 1m public statistical cells x 10 years.
+
+
+
+
+
+ {dimensions.map((dimension) => (
+
+
+ {dimension.value}
+
+
+ {dimension.label}
+
+
+ ))}
+
+
+
+ The hard question is not whether we can write down more numbers. It
+ is which cells deserve estimates, which deserve uncertainty bands,
+ and which should be marked out of domain.
+
+
+
+
+ This is where AI changes the shape of the work: routing, checking,
+ backtesting, and surfacing the cells where human judgment matters.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/DataChallengeSlide.tsx b/slideshows/iariw-2026/slides/DataChallengeSlide.tsx
new file mode 100644
index 0000000..caca41f
--- /dev/null
+++ b/slideshows/iariw-2026/slides/DataChallengeSlide.tsx
@@ -0,0 +1,61 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function DataChallengeSlide() {
+ return (
+
+
+
+ Building a dataset that is comprehensive and accurate
+
+
+
+
+
+ To represent every household's tax and benefit position, the
+ microdata needs to be{' '}
+ comprehensive{' '}
+ enough to cover the relevant variables and{' '}
+ accurate{' '}enough to
+ reproduce administrative totals.
+
+
+
+
+
The US constraint
+
+ No single public survey has everything. The CPS misses capital
+ gains. The SCF misses program participation. Administrative data
+ is locked behind privacy walls we cannot link through.
+
+
+
+
+
The European inversion
+
+ In Belgium the registers are already linked. The binding
+ constraint is release, not linkage — which is why BEAMM
+ works on synthesis, building populations the public can use.
+
+
+
+
+
+ Whether you start from survey fragments or from locked registers,
+ both directions converge on the same need — calibration
+ targets and validation services.
+
+
+
+
+ AI has accelerated both halves of this work — from
+ understanding what each source actually contains, to ingesting the
+ growing universe of administrative targets, to rethinking the
+ whole pipeline from scratch.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/DemoLiveSlides.tsx b/slideshows/iariw-2026/slides/DemoLiveSlides.tsx
new file mode 100644
index 0000000..35e2994
--- /dev/null
+++ b/slideshows/iariw-2026/slides/DemoLiveSlides.tsx
@@ -0,0 +1,91 @@
+'use client';
+
+import LiveAppSlide from './LiveAppSlide';
+
+/**
+ * Live demo slides — the actual apps, embedded with Expand. The static
+ * screenshot slides that follow each beat are the no-network fallback.
+ */
+
+export const DemoAxiomLiveSlide = () => (
+
+
+
What you are seeing
+
+ 107 Belgian provisions, clustered federal, Flanders, Wallonia,
+ Brussels, and German-speaking community. Each node is a rule encoded
+ from the statute.
+
+
+
+
+
The walkthrough
+
+ Open a provision → read the law beside the RuleSpec rule that
+ computes it → trace the computation graph from result back to
+ parameters.
+
+
+
+
+
+ Live walkthrough — screenshots follow if the network does not
+ cooperate.
+
+ A prototype on the Axiom rules engine and Microcosm-BE v0.5 — 28
+ encoded CIR 92 parameters, budget, Gini, and poverty impacts, and the
+ population checked against administrative truth by both engines.
+
+
+
+
+
The walkthrough
+
+ Move the top bracket rate → watch the impacts recompute →
+ scroll to the population table, where the misses are shown in red with
+ named mechanisms.
+
+ Every one of the 254 Belgian calibration targets, published with its
+ error. The provenance line states the US donor pool and the planned
+ Belgian upgrade.
+
+
+
+
+
+ You do not have to take my word for any of this — it is a
+ website.
+
+
+
+);
diff --git a/slideshows/iariw-2026/slides/DemoPySlide.tsx b/slideshows/iariw-2026/slides/DemoPySlide.tsx
new file mode 100644
index 0000000..158019a
--- /dev/null
+++ b/slideshows/iariw-2026/slides/DemoPySlide.tsx
@@ -0,0 +1,69 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import CodeBlock from '@/components/content/CodeBlock';
+
+export default function DemoPySlide() {
+ return (
+
+
+ The same models, as a Python package
+
+ pip install policyengine — the interface behind the apps
+
+
+
+
+
+
+ {`import policyengine as pe
+
+# UK: single adult earning £50,000
+uk = pe.uk.calculate_household(
+ people=[{"age": 35, "employment_income": 50_000}],
+ year=2026,
+)
+print(uk.person[0].income_tax)
+
+# US: same call, with a reform attached
+us = pe.us.calculate_household(
+ people=[{"age": 35, "employment_income": 60_000}],
+ tax_unit={"filing_status": "SINGLE"},
+ household={"state_code": "CA"},
+ year=2026,
+ reform={"gov.irs.credits.ctc.amount.adult_dependent": 1000},
+)
+print(us.tax_unit.income_tax)`}
+
+
+
+
+
+
+ Households and populations
+
+
+ The same package runs a single household or a full calibrated
+ population, baseline against reform.
+
+
+
+
+ Reforms are parameter changes
+
+
+ Every parameter carries its legislative reference; a reform is a
+ dated override of the ones you name.
+
+
+
+
+ This is the interface new engines plug into — the Belgian
+ work you just saw targets the same contract.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/DemoSlides.tsx b/slideshows/iariw-2026/slides/DemoSlides.tsx
new file mode 100644
index 0000000..d9cbedf
--- /dev/null
+++ b/slideshows/iariw-2026/slides/DemoSlides.tsx
@@ -0,0 +1,66 @@
+import ScreenshotSlide from './ScreenshotSlide';
+
+/**
+ * Demo fallback slides — one per live demo beat, presentable if the venue
+ * network fails. Screenshots captured 2026-08-26 from the live sites.
+ */
+
+export const DemoAxiomBrowseSlide = () => (
+
+);
+
+export const DemoAxiomProvisionSlide = () => (
+
+);
+
+export const DemoAxiomGraphSlide = () => (
+
+);
+
+export const DemoAxiomValidationSlide = () => (
+
+);
+
+export const DemoPeBeSlide = () => (
+
+);
+
+export const MicrocosmDashboardSlide = () => (
+
+);
diff --git a/slideshows/iariw-2026/slides/Evo1SinglePromptSlide.tsx b/slideshows/iariw-2026/slides/Evo1SinglePromptSlide.tsx
new file mode 100644
index 0000000..5b27fdb
--- /dev/null
+++ b/slideshows/iariw-2026/slides/Evo1SinglePromptSlide.tsx
@@ -0,0 +1,72 @@
+import React from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import IconDefs from '@/components/IconDefs';
+
+export default function Evo1SinglePromptSlide() {
+ return (
+
+
+ Evolution step 1: single prompt
+
70% error rate
+
+
+
+ {/* Left: diagram */}
+
+
+
+
+ {/* Right: text */}
+
+
+
+ We started with the simplest approach: a single prompt asking Claude to implement one benefit program end-to-end. One command, one output—parameters, variables, tests, everything in one shot.
+
+
+
+
+
+
+
What worked
+
What didn't
+
+
+
+ {[
+ ['Simple to start\u2014one prompt', '70% of outputs had errors'],
+ ['Produces accurate code on simple tasks', 'Hard-coded values'],
+ ['Fast iteration cycles', 'No source citations'],
+ ].map((row, i) => (
+
+
{row[0] && <>✓{row[0]}>}
+
{row[1] && <>✗{row[1]}>}
+
+ ))}
+
+
+
+
+
+ Key insight: Too much context for one prompt. The model couldn't hold code standards, legal requirements, and testing patterns all at once.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/Evo2PipelineSlide.tsx b/slideshows/iariw-2026/slides/Evo2PipelineSlide.tsx
new file mode 100644
index 0000000..71a8724
--- /dev/null
+++ b/slideshows/iariw-2026/slides/Evo2PipelineSlide.tsx
@@ -0,0 +1,86 @@
+import React from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import IconDefs from '@/components/IconDefs';
+
+export default function Evo2PipelineSlide() {
+ return (
+
+
+ Evolution step 2: core pipeline
+
4 agents, sequential
+
+
+
+ {/* Left: diagram */}
+
+
+
+
+ {/* Right: text */}
+
+
+
+ We introduced agents—specialized AI workers that each focus on a single concern. A document-collector gathers sources. A parameter-architect structures data. A rules-engineer implements logic. A test-creator writes validations.
+
+
+
+
+
+
+
What worked
+
What didn't
+
+
+
+ {[
+ ['Each agent focused on one task', 'Tests run with variable logic in mind'],
+ ['Clearer, shorter prompts', 'Bugs are reinforced, not fixed'],
+ ['Easier to debug failures', 'No validation step'],
+ ['Improve agents independently', null],
+ ].map((row, i) => (
+
+
{row[0] && <>✓{row[0]}>}
+
{row[1] && <>✗{row[1]}>}
+
+ ))}
+
+
+
+
+
+ Key insight: Sequential execution means tests validate existing code patterns—not actual program document requirements.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/Evo3ParallelSlide.tsx b/slideshows/iariw-2026/slides/Evo3ParallelSlide.tsx
new file mode 100644
index 0000000..73bd651
--- /dev/null
+++ b/slideshows/iariw-2026/slides/Evo3ParallelSlide.tsx
@@ -0,0 +1,88 @@
+import React from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import IconDefs from '@/components/IconDefs';
+
+export default function Evo3ParallelSlide() {
+ return (
+
+
+ Evolution step 3: parallel execution
+
5 agents, 40% error rate
+
+
+
+ {/* Left: diagram */}
+
+
+
+
+ {/* Right: text */}
+
+
+
+ Test-creator and rules-engineer run in parallel. Both read the same documentation. Neither sees the other's output. When tests fail, it reveals actual discrepancies between implementation and requirements.
+
+
+
+
+
+
+
What worked
+
What didn't
+
+
+
+ {[
+ ['Tests verify requirements', 'No reference validation'],
+ ['Catches real bugs', 'No edge case testing'],
+ ['Error rate dropped to 40%', 'Manual review iterations'],
+ ['Added impl-validator', 'Styling mismatch between params and vars'],
+ ].map((row, i) => (
+
+
✓{row[0]}
+
✗{row[1]}
+
+ ))}
+
+
+
+
+
+ Key insight: Agent isolation prevents confirmation bias but requires manual intervention on each iteration.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/Evo4ValidationSlide.tsx b/slideshows/iariw-2026/slides/Evo4ValidationSlide.tsx
new file mode 100644
index 0000000..3b9dd87
--- /dev/null
+++ b/slideshows/iariw-2026/slides/Evo4ValidationSlide.tsx
@@ -0,0 +1,108 @@
+import React from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+import IconDefs from '@/components/IconDefs';
+
+export default function Evo4ValidationSlide() {
+ return (
+
+
+ Evolution step 4: validation loop
+
8 agents with CI feedback
+
+
+
+ {/* Left: diagram */}
+
+
+
+
+ {/* Right: text */}
+
+
+
+ We added edge-case-generator, reference-validator, and ci-fixer{' '}to automatically iterate on failures. The workflow now loops—when tests fail, ci-fixer analyzes the error and retries.
+
+ We introduced skills—reusable knowledge modules that agents load on demand. Instead of repeating instructions in every prompt, we extracted shared knowledge into focused documents.
+
Complete pipeline — one command to a draft PR in ~90 minutes
+
+
+
+ {/* Left: diagram */}
+
+
+
+
+ {/* Right: text */}
+
+
+
+ The complete pipeline: 12 agents and 6 skills{' '}working together. One command triggers the entire workflow—from issue creation to a draft PR ready for human review.
+
+
+
+
+ What it produces:
+ 11 parameter files, 8 variable files, 65 test cases, 1 complete PR—all in ~90 minutes.
+
+
+
+ Human role:
+ Review the final PR and make the merge decision. Agents handle all mechanical work.
+
+
+
+
+
~90
+
minutes
+
+
+
12
+
agents
+
+
+
6
+
skills
+
+
+
+
+
+ The orchestrator never writes code—it invokes agents and checks quality gates.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/FivePrimitivesSlide.tsx b/slideshows/iariw-2026/slides/FivePrimitivesSlide.tsx
new file mode 100644
index 0000000..1e60d72
--- /dev/null
+++ b/slideshows/iariw-2026/slides/FivePrimitivesSlide.tsx
@@ -0,0 +1,75 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const primitives = [
+ {
+ n: '1',
+ need: 'Understand the policy rules',
+ project: 'Axiom',
+ loop: 'Loop: oracles — external engines re-run every encoding; zero unexplained mismatches.',
+ },
+ {
+ n: '2',
+ need: 'Ready access to official statistics',
+ project: 'Chronicle',
+ loop: 'Loop: completeness against what publishers release, with lineage to every source.',
+ },
+ {
+ n: '3',
+ need: 'The world at a micro level',
+ project: 'Microcosm',
+ loop: 'Loop: calibration error published per target; surveys held out for validation.',
+ },
+ {
+ n: '4',
+ need: 'A model that computes reforms',
+ project: 'PolicyEngine',
+ loop: 'Loop: cross-engine agreement, and a community that uses the results.',
+ },
+ {
+ n: '5',
+ need: 'Judgment to put it together',
+ project: 'Expertise, discretion, uncertainty',
+ loop: 'Loop: forecasts that resolve against reality — the most important one.',
+ },
+];
+
+export default function FivePrimitivesSlide() {
+ return (
+
+
+ What do we arm the AI with?
+
+ Five primitives — each with a feedback loop for whether it is
+ getting it right
+
+
+
+
+ {primitives.map((p) => (
+
+
+ {p.n}
+
+
+ {p.need}
+
+
{p.project}
+
+ {p.loop}
+
+
+ ))}
+
+
+
+
+ The same primitives norm AI agents and human researchers alike
+ — toward faster, more accurate, more epistemically rigorous
+ estimates of what policy will do.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/ForecastUncertaintySlide.tsx b/slideshows/iariw-2026/slides/ForecastUncertaintySlide.tsx
new file mode 100644
index 0000000..819af45
--- /dev/null
+++ b/slideshows/iariw-2026/slides/ForecastUncertaintySlide.tsx
@@ -0,0 +1,47 @@
+import Image from '@/components/core/BasePathImage';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function ForecastUncertaintySlide() {
+ return (
+
+
+
+
+ Forecasters agree with each other — and the AI literature
+ does not
+
+
+
+
+
+
+
+
+
+ The professional 10-year consensus has never been tighter (IQR
+ 0.2pp, half its 1990s level), while published AI-era growth
+ estimates span +0.07pp to +30pp per year.
+
+
+ Philadelphia Fed SPF; AI Frontiers compilation
+
+
+
+
+ When credible forecasts of the era span orders of magnitude, evidence
+ infrastructure's job shifts from defending one number to letting
+ a ministry recompute the present.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/HistorySlide.tsx b/slideshows/iariw-2026/slides/HistorySlide.tsx
new file mode 100644
index 0000000..8fd4fb3
--- /dev/null
+++ b/slideshows/iariw-2026/slides/HistorySlide.tsx
@@ -0,0 +1,74 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const layers = [
+ {
+ title: 'Encoded the rules',
+ detail:
+ 'US and UK tax and benefit law — by hand at first, increasingly with AI.',
+ },
+ {
+ title: 'Built the microdata',
+ detail:
+ 'Imputed across surveys and administrative sources, calibrated to official statistics.',
+ },
+ {
+ title: 'Ran the simulations',
+ detail: 'Households to full populations, baseline against reform.',
+ },
+ {
+ title: 'Shipped the web app',
+ detail:
+ 'Where people explore it — still there, no longer the center of gravity.',
+ },
+];
+
+export default function HistorySlide() {
+ return (
+
+
+ Six years under one roof
+
+
+
+
+
+ This paradigm comes out of building PolicyEngine since 2021 —
+ the first four primitives, together, under one brand:
+
+
+ {layers.map((l) => (
+
+
+ {l.title}
+
+
{l.detail}
+
+ ))}
+
+
+
+
+
+ The realization
+
+
+ Each layer deserves to stand on its own — with its own name,
+ its own users, and its own feedback loop.
+
+
+ So the rules layer became the Axiom Foundation, the fact store
+ became Chronicle, the population layer became Microcosm —
+ and PolicyEngine is the model that composes them.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/HowWeGetThereSlide.tsx b/slideshows/iariw-2026/slides/HowWeGetThereSlide.tsx
new file mode 100644
index 0000000..33ddf23
--- /dev/null
+++ b/slideshows/iariw-2026/slides/HowWeGetThereSlide.tsx
@@ -0,0 +1,62 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function HowWeGetThereSlide() {
+ return (
+
+
+ How do we get there?
+
+
+
+
+ AI can't do it on its own today.{' '}
+
+ But we can do two things that compound.
+
+
+
+
+
+
+ Track 1
+
+
+ Use AI to build the apparatus for projections
+
+
+ AI helps us assemble what we project with — the encoded
+ rules, the calibrated data, the behavioral theory, the analysis
+ tooling. The modeling craft, accelerated. Human review at every
+ step.
+
+
+
+
+
+ Track 2
+
+
+ Equip AI to do the projections at scale
+
+
+ With the apparatus in place, AI agents can run projections with
+ comparable fidelity — calling the right pieces, integrating
+ baselines, propagating uncertainty, surfacing calibrated answers
+ by the thousand.
+
+
+
+
+
+ The rest of this talk is the apparatus — rules, data, and the
+ verification that has to scale with both.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/ImputationSlide.tsx b/slideshows/iariw-2026/slides/ImputationSlide.tsx
new file mode 100644
index 0000000..df89b65
--- /dev/null
+++ b/slideshows/iariw-2026/slides/ImputationSlide.tsx
@@ -0,0 +1,70 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const sources = [
+ { code: 'CPS', name: 'Current Population Survey', role: 'Spine — demographics, income, labor force.' },
+ { code: 'ACS', name: 'American Community Survey', role: 'Geography, housing, sub-state detail.' },
+ { code: 'SCF', name: 'Survey of Consumer Finances', role: 'Wealth, capital income, debt.' },
+ { code: 'SIPP', name: 'Survey of Income and Program Participation', role: 'Program take-up, dynamics, transitions.' },
+ { code: 'PUF', name: 'IRS Public Use File', role: 'Tax-unit income detail, itemized deductions.' },
+];
+
+export default function ImputationSlide() {
+ return (
+
+
+ Imputation at scale: many sources, one microdata
+
+
+
+
+
+ Sources we fuse in the US model
+
+ {sources.map((s) => (
+
+
+ {s.code}
+
+
+
{s.name}
+
{s.role}
+
+
+ ))}
+
+
+
+
+
Technique
+
+ Quantile regression forests.{' '}
+ For each variable missing from the spine, learn its full
+ conditional distribution given many potentially non-linear
+ predictors — then sample from it.
+
+
+ The whole distribution survives, including the tails that matter
+ for distributional analysis.
+
+
+
+
+
Where AI helps
+
+ The hard part is knowing what each column actually means
+ — the same name across two surveys often hides different
+ definitions. AI reads the documentation, surfaces mismatches,
+ and proposes the apples-to-apples mapping. Get this wrong and
+ the imputation silently drifts.
+
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/LiveAppSlide.tsx b/slideshows/iariw-2026/slides/LiveAppSlide.tsx
new file mode 100644
index 0000000..0ff0050
--- /dev/null
+++ b/slideshows/iariw-2026/slides/LiveAppSlide.tsx
@@ -0,0 +1,107 @@
+'use client';
+
+import React, { ReactNode, useState } from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+interface LiveAppSlideProps {
+ title: string;
+ url: string;
+ displayUrl?: string;
+ /** Side-column content (cards, notes). */
+ children?: ReactNode;
+ /** Grid split, defaults to narrow side / wide iframe. */
+ sideWidth?: string;
+}
+
+/**
+ * Live embedded app with an Expand button — the cbo-2026 AxiomDemoSlide
+ * pattern. The screenshot fallback slides that follow in the deck cover the
+ * no-network case.
+ */
+export default function LiveAppSlide({
+ title,
+ url,
+ displayUrl,
+ children,
+ sideWidth = '0.62fr',
+}: LiveAppSlideProps) {
+ const [expanded, setExpanded] = useState(false);
+
+ return (
+
+
+
+ )}
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/MicrocosmBESlide.tsx b/slideshows/iariw-2026/slides/MicrocosmBESlide.tsx
new file mode 100644
index 0000000..4594107
--- /dev/null
+++ b/slideshows/iariw-2026/slides/MicrocosmBESlide.tsx
@@ -0,0 +1,83 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const stats = [
+ { value: '57,240', label: 'household records' },
+ { value: '254', label: 'calibration targets' },
+ { value: '1.84%', label: 'mean absolute error' },
+ { value: '242/254', label: 'targets within 5%' },
+];
+
+export default function MicrocosmBESlide() {
+ return (
+
+
+ Microcosm-BE: a calibrated Belgian population
+
+
+
+ {stats.map((s) => (
+
+
{s.value}
+
+ {s.label}
+
+
+ ))}
+
+
+
+ v0.5 release. Targets are sums of Chronicle facts — Belgian
+ administrative and national-accounts data. Surveys enter as validation
+ only.
+
+
+
+
+
+ Every EUROMOD output column accounted for
+
+
+ All 182 substantive EUROMOD output columns sit in a ledger on this
+ release: 10 matched to 1e-9, 143 explained, 29 named gaps,
+ 0 unclassified.
+
+
+
+
+
+ Same population, two engines
+
+
+ Joint-vs-separate PIT on the identical calibrated population
+ (v0.2): €2.16B in Axiom, €1.83B in EUROMOD. The residual
+ is decomposed mechanism by mechanism.
+
+
+
+
+
+
+
+ Provenance
+
+
+ Support records are a reweighted US survey donor pool; a Belgian
+ donor pool is the planned upgrade.
+
+
+
+
+ Live
+
+
+ The calibration dashboard at{' '}
+ microcosm.institute{' '}
+ serves this release publicly.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/MicroplexSlide.tsx b/slideshows/iariw-2026/slides/MicroplexSlide.tsx
new file mode 100644
index 0000000..27cc7f9
--- /dev/null
+++ b/slideshows/iariw-2026/slides/MicroplexSlide.tsx
@@ -0,0 +1,70 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const changes = [
+ {
+ title: 'Multi-spine, not single-spine',
+ detail:
+ 'CPS and ACS combined as the foundation, with structured ingestion from each — rather than treating CPS as the spine and bolting everything onto it.',
+ },
+ {
+ title: 'Automated target discovery',
+ detail:
+ 'Agents continuously crawl agency publications for new administrative totals, structured into the canonical target format.',
+ },
+ {
+ title: 'Promote-on-review',
+ detail:
+ 'New targets land in a reserve queue. An analyst decides whether each becomes a live calibration target or stays as reference information.',
+ },
+ {
+ title: 'Replicable, versioned, public',
+ detail:
+ 'Every microplex release is reproducible end-to-end from public inputs. Calibration scores published openly, per release.',
+ },
+];
+
+export default function MicroplexSlide() {
+ return (
+
+
+ Microplex: rethinking the whole pipeline
+
+
+
+
+
+ We are replacing Enhanced CPS, our US microdata product, with a
+ new paradigm we call{' '}
+ Microplex.
+
+
+ Same imputation + calibration discipline. Different architecture
+ — designed so the next decade of survey changes,
+ administrative releases, and program reforms can flow through
+ without rebuilding from scratch.
+
+
+
+ AI is what makes this scope tractable. Without it, rebuilding
+ the substrate at this depth would take many years of analyst
+ time. With it, we can iterate releases on a quarterly cadence.
+
+
+
+
+
+ {changes.map((c) => (
+
+
+ {c.title}
+
+
{c.detail}
+
+ ))}
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/OutlineSlide.tsx b/slideshows/iariw-2026/slides/OutlineSlide.tsx
new file mode 100644
index 0000000..9135dce
--- /dev/null
+++ b/slideshows/iariw-2026/slides/OutlineSlide.tsx
@@ -0,0 +1,59 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const sections = [
+ {
+ number: '1',
+ title: 'Axiom',
+ detail: 'The rules, executable — verified against EUROMOD in Belgium.',
+ },
+ {
+ number: '2',
+ title: 'Chronicle',
+ detail: 'Official statistics as source-backed facts.',
+ },
+ {
+ number: '3',
+ title: 'Microcosm',
+ detail: 'The world at micro level, calibrated to administrative truth.',
+ },
+ {
+ number: '4',
+ title: 'PolicyEngine',
+ detail: 'The model that composes them — live, in the browser and in Python.',
+ },
+ {
+ number: '5',
+ title: 'Together',
+ detail: 'Judgment, uncertainty, and the loop that matters most.',
+ },
+];
+
+export default function OutlineSlide() {
+ return (
+
+
+ Five primitives, five demos
+
+
+
+ {sections.map((section) => (
+
+
+
+ {section.number}
+
+
+ {section.title}
+
+
+
+ {section.detail}
+
+
+ ))}
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/PEOverviewSlide.tsx b/slideshows/iariw-2026/slides/PEOverviewSlide.tsx
new file mode 100644
index 0000000..72a8947
--- /dev/null
+++ b/slideshows/iariw-2026/slides/PEOverviewSlide.tsx
@@ -0,0 +1,86 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const stats = [
+ { value: '95,000+', label: 'parameters in the US model' },
+ { value: '5,500+', label: 'variables' },
+ { value: '4,693', label: 'test files' },
+ { value: '103', label: 'programs in the coverage registry' },
+];
+
+const credibility = [
+ {
+ org: 'No 10 Downing Street',
+ detail:
+ 'The data science team built 10ds-microsim on PolicyEngine; CTO Nikhil Woodruff has served there as an Innovation Fellow since summer 2025.',
+ },
+ {
+ org: 'NBER',
+ detail: 'MOU for an open source TAXSIM emulator.',
+ },
+ {
+ org: 'Federal Reserve Bank of Atlanta',
+ detail:
+ 'MOU bringing the Policy Rules Database into our validation infrastructure.',
+ },
+];
+
+export default function PEOverviewSlide() {
+ return (
+
+
+ PolicyEngine today
+
+
+
+ Free, open source software to compute the impact of public policy.
+ US and UK tax-benefit models, public code since June 2021 (AGPL-3.0),
+ 133 contributors to the US model.
+
+
+
+
+ {stats.map((s) => (
+
+
+ {s.value}
+
+
+ {s.label}
+
+
+ ))}
+
+
+
+
+ In other institutions' hands
+
+
+ {credibility.map((c) => (
+
+
{c.org}
+
+ {c.detail}
+
+
+ ))}
+
+
+
+
+
+
+ Think of it as an open EUROMOD-family stack for the US and UK, built
+ in public.
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/PolicyBenchSlide.tsx b/slideshows/iariw-2026/slides/PolicyBenchSlide.tsx
new file mode 100644
index 0000000..0de1515
--- /dev/null
+++ b/slideshows/iariw-2026/slides/PolicyBenchSlide.tsx
@@ -0,0 +1,120 @@
+'use client';
+
+import React, { useState } from 'react';
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const IFRAME_URL = 'https://policybench.org';
+
+export default function PolicyBenchSlide() {
+ const [expanded, setExpanded] = useState(false);
+
+ return (
+
+
+ AI cannot calculate taxes and benefits accurately today
+
+
+
+
+
+
PolicyBench.org · v1.1 · 2026-08-22
+
+ 32 frontier models are scored on 100 real households —
+ basic tax-and-transfer calculations, the building blocks of any
+ microsimulation model.
+
+
+
+
+
+
+
1 in 9
+
+ amounts wrong to the dollar
+
+ best model — 88.7% exact (GPT-5.6 Sol)
+
+
+
+
>1 in 3
+
+ wrong
+
+ weakest model — 62.3% exact
+
+
+
+
+ On SNAP cases where the family is owed benefits, models mostly
+ answer $0 — none gets more than 1 in 20 right.
+
+
+
+
+
+ AI is impressive at code, search, and summarization. It is not a
+ substitute for analyst judgment, institutional knowledge, or
+ quality-control processes.
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/WhatIfEveryBillSlide.tsx b/slideshows/iariw-2026/slides/WhatIfEveryBillSlide.tsx
new file mode 100644
index 0000000..f5e14c8
--- /dev/null
+++ b/slideshows/iariw-2026/slides/WhatIfEveryBillSlide.tsx
@@ -0,0 +1,75 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+export default function WhatIfEveryBillSlide() {
+ return (
+
+
+ What if every bill had a score?
+
+
+
+
+
>300k
+
+ minimum bill-year-category cells
+
+
+ ~10k bills per US Congress x 10 years x 3 headline budget
+ categories.
+
+
+
+
+
+ The US Congress introduces an order of magnitude more proposals
+ than ever receive a formal public score. And that is one
+ legislature — Belgium alone legislates through six
+ parliaments.
+
+
+
+
+
+ ~10k
+
+
+ Bills
+
+
+
+
+ 10
+
+
+ Years
+
+
+
+
+ 3+
+
+
+ Categories
+
+
+
+
+
+
+ The lower bound is already hundreds of thousands of atomic
+ estimates before section-level detail, interactions, uncertainty,
+ or alternative implementation assumptions.
+
+
+
+
+ This is not a claim that every bill deserves a formal score. It is
+ a scale check on the information legislatures could ask for.
+
+
+
+
+ );
+}
diff --git a/slideshows/iariw-2026/slides/WhatIfEverySeriesSlide.tsx b/slideshows/iariw-2026/slides/WhatIfEverySeriesSlide.tsx
new file mode 100644
index 0000000..052ee08
--- /dev/null
+++ b/slideshows/iariw-2026/slides/WhatIfEverySeriesSlide.tsx
@@ -0,0 +1,60 @@
+import Slide from '@/components/core/Slide';
+import SlideHeader from '@/components/layout/SlideHeader';
+import SlideTitle from '@/components/layout/SlideTitle';
+
+const examples = [
+ 'Employment by industry and place',
+ 'Income by source and percentile',
+ 'Program participation by household type',
+ 'Prices, wages, demographics, health, housing',
+];
+
+export default function WhatIfEverySeriesSlide() {
+ return (
+
+
+ What if every outcome had an estimate?
+
+
+
+
+
+ A fiscal score is one number. Policy also moves poverty,
+ inequality, regions, take-up — and statistical systems
+ already publish millions of cells that could each carry a
+ forecast. This room produces many of them.
+
+
+
+
+ What counts as a cell?
+
+
+ {examples.map((example) => (
+
+ +
+ {example}
+
+ ))}
+
+
+
+
+
+
>10m
+
+ forecast cells
+
+
+ 1m public statistical cells x a 10-year horizon, before uncertainty
+ intervals or conditional scenarios.
+
+
+ A conservative order-of-magnitude floor: a single large household
+ survey can produce millions of geography-by-variable cells.
+