Paper 2 — method catalogue & execution stack

Every interpretability method in the benchmark, with a link to its implementation, its reference, and the score it is graded on — plus how a run executes, what it writes, and where the records live. This is the Paper-2 counterpart of the conformance code tour.

Execution stack · Oracle & T3 · Phase A · Phase B (attribution) · Phase C (mechanistic) · Leaderboard & benchmark

How a measurement runs

Because the VCS is fully known and exactly intervenable, every explanation is scored against the truth. The intervention oracle records the exact causal effect |Δy(u)| of each candidate cause by clamping it and re-running bit-exact. Each method runner then produces its own attribution/circuit and is graded against that oracle on the correctness triad — F faithful (true causes), S sufficient (predicts held-out interventions), M minimal/right-level. Runners are Julia on the jutari substrate (jaxtari eager is ≈205× slower), seed = 0, on the 42 scored games, inside the Paper-1 bit-exact horizon.

  ROM  (AutoROM, SHA-256 verified — not redistributed)
    │   jutari substrate · seed 0 · state f120+30 · games: labeled (42 scored)
    ▼
  ground_truth/oracle_intervene.jl ── exact |Δy(u)| ──▶  the §1 oracle  (T1 causal truth)
    │
    ├─ phaseA_kording/A1..A8.jl       neuroscience battery
    ├─ phaseB_attribution/*.jl        12 XAI methods + N/A audit
    └─ phaseC_mechanistic/*.jl        10 mechanistic-interp methods
         each runner scores its output vs the oracle on the triad  F ∧ S ∧ M
         └─▶ writes a §R record   out//_.json  (+ .npz)
    ▼
  compare/leaderboard.py    ── pure read of every record ──▶  faithfulness × plausibility
  compare/benchmark/run.py  ── ROM-free scoring of a new method against the committed oracle

Every runner writes a self-describing §R record per game/regime — {paper, phase, method, game, state, target_output, metric_name, value, ci, n, seed, where, commit, oracle_ref, timestamp} plus an extra{} block carrying the exact oracle_abs_delta_per_cause map and the triad {F,S,M}. That is what makes the leaderboard a pure read and the benchmark ROM-free.

Shared infrastructure

ModuleRole
common/results.pywrites/reads the §R record schema
common/jutari_oracle.jlthe intervention/gradient oracle on the jutari substrate
common/replay.pydeterministic replay-to-state (the f<start>+<window> encoding)
common/seeds.pythe single seed=0 source
common/game_set.jsonthe labeled game set (42 scored games; 6-game core is a subset)
repro/make_hash_tables.pySHA-256 ROM + action-stream hashes (verify with --verify)

E1 · the ground-truth oracle & E2 · T3 labels

The instrument everything is scored against, and the game-concept labels.

StepImplementationWhat it computes
Intervention oracle — the primary ground truthoracle_intervene.jlocclude/clamp/resample a cause u, re-run bit-exact, record exact |Δy(u)|
Gradient oracle (content path)oracle_grad.jl∂y/∂u + Integrated Gradients through the differentiable substrate (content outputs only)
Cross-checkoracle_xcheck.jlcorrelation of intervention vs gradient; disagreement is reported, not hidden
Import candidate labelsimport_labels.pyOCAtari / AtariARI RAM→concept candidates
Verify by interventionverify_labels.jlset the byte, re-render, confirm the object moves → upgrades to verified-causal
Discover new labelsdiscover_labels.jlRAM↔framebuffer correlation + intervention sweeps

Oracle records: ground_truth/out3. T3 records: t3/out17.

Phase A — the Jonas & Kording battery (quantified)

Classical neuroscience methods, scored against the true register-transfer account. The calibration baseline: rich structure, low faithfulness.

Method (reference)ImplementationScore descriptionAudit triad (F / S / M)Page
A1 connectomics / data-flow graphA1_connectomics.jlprecision/recall + graph-edit-distance vs the true read/write graphF 0.207 ±0.084 / S 0.971 / M 0.967 · 35 gamesexplain & figure →
A2 single-unit lesionsA2_lesions.jlrank-correlation of importance with the unit's true role; spurious-specific countF 0.965 ±0.021 / S 0.589 / M 1.000 · 42 gamesexplain & figure →
A3 tuning curvesA3_tuning.jlspurious-tuning rate (strongly-tuned units whose tuning ≠ true role)F 0.213 ±0.080 / S 0.200 / M 0.928 · 42 gamesexplain & figure →
A4 spike-word / pairwise correlationsA4_correlations.jlweak-pairwise / strong-global structure reproduced vs true couplingF 0.225 ±0.060 / S 0.133 / M 0.363 · 34 gamesexplain & figure →
A5 local field potentialsA5_lfp.jl%-variance that is the known clocks (frame/scanline) → epiphenomenalF 0.376 ±0.055 / S n/a / M n/a · 40 gamesexplain & figure →
A6 Granger causalityA6_granger.jlfalse-edge / missed-edge rate vs the true data-flowF 0.136 ±0.047 / S 0.884 / M 0.647 · 35 gamesexplain & figure →
A7 dim-reduction (NMF/PCA)A7_dimred.jlmatched-component fraction vs known signals (clock, R/W, vsync)F 0.519 ±0.061 / S n/a / M n/a · 42 gamesexplain & figure →
A8 whole-state recordingA8_wholestate.jldescriptive baselineF 1.000 ±0.000 / S 1.000 / M 0.075 · 42 gamesexplain & figure →

F faithfulness (scored vs the oracle for every method) · S sufficiency (held-out predictive score in [−1, 1]; a negative value means the explanation predicts held-out interventions worse than the unperturbed baseline; reported for the predictive methods across all three phases where the calibration/held-out split is defined) · M minimality (true-minimal-set / named-set; where the method names a cause set) — n/a otherwise, per the paper's F ∧ S ∧ M triad.

Records: phaseA_kording/out54 committed §R JSON+npz.

Phase B — attribution / XAI methods

One runner per method; each saliency/attribution map scored against the oracle. References are the methods' original papers.

Method (reference)ImplementationScore descriptionAudit triad (F / S / M)Page
Vanilla gradient Simonyan et al. 2014saliency.jlcorr + deletion/insertion AUC + precision@k vs true causal top-kF 0.380 ±0.086 / S 0.593 / M 0.980 · 42 gamesexplain & figure →
Grad×Input / DeepLIFT Shrikumar et al. 2017gradxinput.jlas above + completeness where definedF 0.486 ±0.090 / S 0.625 / M 0.993 · 42 gamesexplain & figure →
Guided Backprop Springenberg et al. 2015guided_backprop.jlas above + the Adebayo et al. 2018 sanity checkF 0.322 ±0.087 / S 0.573 / M 0.964 · 42 gamesexplain & figure →
SmoothGrad Smilkov et al. 2017smoothgrad.jlnoise-averaged saliency; corr + del/insF 0.380 ±0.086 / S 0.597 / M 0.981 · 42 gamesexplain & figure →
Integrated Gradients Sundararajan et al. 2017ig_baseline_sweep.jlcorr + del/ins + completeness; baseline sweepF 0.379 ±0.086 / S 0.591 / M 0.984 · 42 gamesexplain & figure →
Expected Gradients Erion et al. 2021 (NMI)expected_gradients.jlbaseline-averaged IG; as aboveF 0.175 ±0.070 / S 0.576 / M 1.000 · 42 gamesexplain & figure →
Occlusion Zeiler & Fergus 2014occlusion.jldel/ins AUC ≈ coarse intervention oracleF 0.687 ±0.065 / S 0.667 / M 0.973 · 42 gamesexplain & figure →
Extremal / meaningful perturbation Fong & Vedaldi 2017; Fong et al. 2019perturbation.jllearned minimal mask; IoU vs true causal setF 0.461 ±0.059 / S 0.630 / M 0.969 · 42 gamesexplain & figure →
RISE Petsiuk et al. 2018rise.jlrandomized-mask saliency (N=500 masks); corr + del/insF 0.552 ±0.065 / S 0.583 / M 0.347 · 42 gamesexplain & figure →
LIME Ribeiro et al. 2016lime.jllocal linear weights; corr vs true; stabilityF 0.644 ±0.065 / S 0.655 / M 0.557 · 42 gamesexplain & figure →
KernelSHAP / Shapley Lundberg & Lee 2017; Štrumbelj & Kononenko 2014kernelshap.jlShapley values; corr vs true; convergence vs computeF 0.652 ±0.065 / S 0.657 / M 0.570 · 42 gamesexplain & figure →
On-distribution counterfactual cf. Olson 2021; Atrey 2020counterfactual.jlminimal valid edit: validity + minimality vs true minimal setF 0.433 ±0.081 / S 0.639 / M 0.989 · 42 gamesexplain & figure →
N/A audit: Grad-CAM/++, attention rollout, VIPER Selvaraju 2017; Abnar & Zuidema 2020; Bastani 2018na_audit.jlrecorded as does not apply (needs NN layers / a policy)excludedexplain & figure →

F faithfulness (scored vs the oracle for every method) · S sufficiency (held-out predictive score in [−1, 1]; a negative value means the explanation predicts held-out interventions worse than the unperturbed baseline; reported for the predictive methods across all three phases where the calibration/held-out split is defined) · M minimality (true-minimal-set / named-set; where the method names a cause set) — n/a otherwise, per the paper's F ∧ S ∧ M triad.

Records: phaseB_attribution/out166 committed §R JSON+npz.

Phase C — mechanistic interpretability

The state trajectory is the “activations”, the program's data-flow is the “circuit” — both known exactly, so recovered structure is scored against the truth.

Method (reference)ImplementationScore descriptionAudit triad (F / S / M)Page
Activation patching / causal mediation Vig et al. 2020; ROME, Meng et al. 2022activation_patching.jlrecovered effect vs the exact patch; site P/R vs true data-flowF 1.000 ±0.000 / S 0.996 / M 0.973 · 42 gamesexplain & figure →
Interchange interventions / DAS Geiger et al. 2021, 2023das.jlinterchange accuracy; alignment vs the true variableF 1.000 ±0.000 / S 1.000 / M 0.889 · 42 gamesexplain & figure →
Attribution / edge patching Nanda 2023; Syed et al. 2023attribution_patching.jlapprox error vs true patching; edge P/RF 0.456 ±0.113 / S 0.769 / M 0.995 · 42 gamesexplain & figure →
Path patching / IOI circuit Wang et al. 2022; Goldowsky-Dill et al. 2023path_patching.jlcircuit precision/recall vs the true routineF 0.580 ±0.133 / S n/a / M 1.000 · 42 gamesexplain & figure →
ACDC — automatic circuit discovery Conmy et al. 2023acdc.jledge P/R + scrubbing-preserved performance vs true data-flowF 0.625 ±0.110 / S 0.299 / M 1.000 · 35 gamesexplain & figure →
Sparse autoencoders Cunningham et al. 2023; Bricken et al. 2023; Templeton et al. 2024sae.jlfeature↔known-variable match (F1/MI) + causal use + monosemanticityF 0.153 ±0.061 / S 0.183 / M 0.934 · 40 gamesexplain & figure →
NMF/PCA dictionariesdictionaries.jlmatched-component fraction vs known variablesF 0.102 ±0.057 / S 0.751 / M 0.966 · 42 gamesexplain & figure →
Causal scrubbing Chan et al. 2022causal_scrubbing.jlscrubbing-preserved performance vs the true routineF 0.979 ±0.036 / S 0.979 / M 0.814 · 42 gamesexplain & figure →
Linear probing + control tasks Alain & Bengio 2017; Hewitt & Liang 2019linear_probing.jlaccuracy and selectivity (probe − control) → present-vs-used gapF 0.240 ±0.098 / S n/a / M 0.932 · 42 gamesexplain & figure →
Logit / tuned lens nostalgebraist 2020; Belrose et al. 2023logit_lens.jlreadout fidelity vs the true intermediate valueF 0.820 ±0.053 / S n/a / M 0.224 · 42 gamesexplain & figure →

F faithfulness (scored vs the oracle for every method) · S sufficiency (held-out predictive score in [−1, 1]; a negative value means the explanation predicts held-out interventions worse than the unperturbed baseline; reported for the predictive methods across all three phases where the calibration/held-out split is defined) · M minimality (true-minimal-set / named-set; where the method names a cause set) — n/a otherwise, per the paper's F ∧ S ∧ M triad.

Records: phaseC_mechanistic/out72 committed §R JSON+npz.

E6 — leaderboard & the ROM-free benchmark

StepImplementationOutput
Cross-tradition leaderboard (pure read of all records)compare/leaderboard.py compare/out/leaderboard.json
Headline faithful-vs-plausible democompare/faithful_demo.pycompare/out/faithful_demo.json
Packaged benchmark — score a new method, no ROM neededcompare/benchmark/run.py compare/benchmark/out (14)

The leaderboard re-orients each record's faithfulness onto the headline plot (faithfulness X vs a transparent plausibility proxy Y) and runs an embedded self-check; it never re-runs an experiment. The benchmark scores one method end-to-end against the committed oracle records — a third party needs no ROM.

Reproduce

# the oracle, then any method runner (Julia on the jutari substrate, seed 0)
julia --project=jutari tools/xai_study/ground_truth/oracle_intervene.jl --game pong
julia --project=jutari tools/xai_study/phaseB_attribution/ig_baseline_sweep.jl --games core
julia --project=jutari tools/xai_study/phaseC_mechanistic/activation_patching.jl --games core

# aggregate (pure reads — no ROM) and score a new method
python3 tools/xai_study/compare/leaderboard.py
python3 tools/xai_study/compare/benchmark/run.py --method magnitude_proxy

Full per-phase command list: REPRODUCIBILITY.md §3.