Verification

run not observed · v1 provisional awaiting approval

Did anyone check, and what did they find?

for Contributions of insula and superior temporal sulcus to interpersonal guilt and responsibility in social decisions · this layer across all papers · json

Provisional

This layer needs a corpus-scope decision that has not been ruled on yet, so what it produces would change if the decision changed. It waits on claim-format, relation-vocab.

Awaiting approval

Waiting for approval. That is a statement about the record, not about whether anyone has read this: people read the corpus without stamping what they read, and only a stamp leaves a trace. Approval is an operation on a version, not a step of its own — it is recorded against the version it was granted to, so running this layer again does not carry it forward.

What it produced17 results

Read from verification/gadeke-2026-guilt-insula/provenance.json · 16 KB. script verification/gadeke-2026-guilt-insula/verify.pyobserved_by verification/audit_run.pyrecorded 2026-09-13T16:01:27+00:00exit SystemExit(0)data_commit 11854fe

# claimpaper_valuereproduced_valuestatusmeasured
1 participants-probability-choosing-risky-option [fMRI] β>0, p<0.05 β=0.032, p=9.55e-68, n=2400 PASS true
2 participant-momentary-happiness-varied-rewards-2 [fMRI R²] 0.185 0.184 PASS true
3 participant-momentary-happiness-varied-rewards-2 [Behav R²] 0.147 0.145 PASS true
4 when-partner-received-low-lottery [fMRI β] 0.33 0.34 PASS true
5 when-partner-received-low-lottery [Behav β] 0.39 0.40 PASS true
6 mass-univariate-voxel-wise-analysis-found-small peak MNI [-28, 24, -4] peak MNI [-28, 24, -4] PASS true
7 dot-products-between-individual-neural sign test p<0.05 sign p=0.008, wilcoxon p=0.021 (n_pos=28/40) PASS true
8 individual-grbs-dot-product-values-not Spearman rho=-0.058, p=0.725 rho=0.088, p=0.588, n=40 — null reproduces, coefficient differs from the reported -0.058. Volume i is assumed to be row i: the deposit ships no participant order for the 4D map, so the pairing cannot … WARN true
9 manipulation-check-bilateral-ventral-striatum L 110vox [-14 8 -8] T=5.63 · R 80vox [10 10 -4] T=5.46 110vox [-14, 8, -8] T=5.63 · 80vox [10, 10, -4] T=5.46 PASS true
10 bilateral-ventral-striatum-more-active bilateral VS, risky>safe (d=0.72 / 0.85) 401vox [10, 12, -4] T=7.18 · 390vox [-10, 8, -6] T=6.12 PASS true
11 decisions-social-compared-solo-condition 3 clusters: precuneus, left TPJ, mPFC 758vox [0, -62, 38] T=5.72 · 216vox [-34, -58, 26] T=4.5 · 135vox [4, 52, 22] T=3.97 PASS true
12 one-cluster-left-sts-responded left STS, pRPEsocial > pRPEpartner 99vox [-52, -32, 0] T=4.7 PASS true
13 connectivity-between-left-anterior-insula aIns seed, condition-dependent IFG coupling 113vox [46, 16, 22] T=4.34 · 38vox [-38, -2, 26] T=4.08 PASS true
14 partner-reward-prediction-errors-resulting Z=2.85, p=0.004 (social_pRPE > 0) median=0.197, wilcoxon p=0.0037, 27/40 above zero PASS true
15 guilt-effect-occurred-whether-participant own-win t(39)=-3.58 p<0.001 · own-loss t(39)=-3.39 p=0.002 own-win t(39)=-3.57 p=0.0010 · own-loss t(36)=-3.59 p=0.0010 PASS true
16 participant-happiness-lower-when-participant t(3600)=-3.92, p<0.0001, beta=-0.14 decided=-0.048 vs not=0.122, t(39)=-2.60 p=0.0131 — direction reproduces on the deposited subset (social risky choices, 1216 trials); the paper's model covers ~3600 WARN true
17 participants-chose-risky-option-lottery t(4796)=2.54, p=0.011 (weak, not replicated in Study 2) cond0=0.518 vs cond1=0.536, t(39)=-1.06 p=0.297 per participant — the deposit does not document which level is Solo, and a per-participant test has far less power than the paper's trial-level model WARN true

How it is defined

What this layer reads besides its dependencies. Each is a declared input: its content is hashed into every run, so editing one makes those runs stale.

verification/gadeke-2026-guilt-insula/verify.pythe script that runs it938 lines

What it says it does

Verification script for Gadeke et al. 2026 — guilt and anterior insula.
eLife 105391 | doi:10.7554/eLife.105391

FAST MODE (default, ~3 min):
  Clones GitHub repo, loads pre-computed CSVs, runs logistic regression,
  and checks NIfTI peak coordinate from deposited contrast map.
  Requirements: pandas, scipy, statsmodels, nibabel
  Data: https://github.com/BonnSocialNeuroscienceUnit/ResponsibilityExperiment (~50 MB)

FULL MODE (--full, ~3 hrs):
  Downloads raw fMRI data from OpenNeuro ds005588 (~15 GB).
  Runs SPM12 first-level GLMs for all 28 subjects.
  Runs computational model fitting.
  Reproduces all manuscript figures.
  Additional requirements: MATLAB + SPM12
  Additional data: https://openneuro.org/datasets/ds005588 (~15 GB)
  Note: MATLAB license and SPM12 toolbox required.

Usage:
  python verify.py           # fast mode
  python verify.py --full    # full pipeline
  python verify.py --claim participants-probability-choosing-risky-option
verification/audit_run.pythe script that runs it416 lines

What it says it does

Run a verification script under observation, and record what it actually did.

Only one of the nine verification scripts was ever audited, and auditing it found two
failures that no amount of reading would have caught:

  * a claim recorded `verified` while the function named in its record raised
    `shapes (4,4) and (5,5) not aligned` -- the verdict had been narrated, not observed;
  * a reproduction record naming `fMRI - Choices_singleTrialData.csv` while the code opened
    `Behav - Choices_singleTrialData.csv`.

Both were found by making the script report every path it opened and every value it computed.
That was done for Gaedeke by editing the script to call `used()` at each open. Doing the same
to eight more scripts would mean eight sets of hand-edits, each an opportunity to annotate a
path the code does not take -- which is the very failure being audited.

So this observes from outside instead. It patches `open` and the common loaders, executes the
script in-process, and reads its `ROWS` list afterwards. Nothing is taken from the script's
own account of itself: the file list comes from the file system calls, the results come from
the list the printed table is built from, and an exception is recorded whether or not the
script caught it.

What it emits, beside the script it ran:

  verification/<paper>/provenance.json    files opened, results produced, exceptions raised

Usage:
  python3 verification/audit_run.py <paper-slug> [-- script args]
  python3 verification/audit_run.py --all
  python3 verification/audit_run.py --all --timeout 1800

`--timeout` now defaults to 1800s rather than to no limit. The documented example used to say
900, which is shorter than the slowest verification script's own internal budget: Ejdrup's fast
mode runs two figure scripts and allows each 600s, so its worst case is 1200s before the clone
is counted, and an uncontended run measured 1064s. A run killed at 900s writes no results, and
`audit_verifications` then reports the paper as a failed run — which it was not. The script had
been working the whole time and the observer was giving up first.

A default that cannot accommodate the slowest thing it observes is a fault in the observer, and
one that reads as a fault in the observed, which is the worst way for it to be wrong.

Artifacts

Versions

From the run ledger. There is no changelog beside it to keep in step.

  1. v1 · 2026-09-11 · unrecorded backfilled from the artifact

    backfilled from the artifact on disk

This layer across the corpus

Across the corpus

3 not run · 7 run not observed·a paper links to its own cell, where this layer's output for it is rendered

PaperStateVersionLast runOutputCell
A three-dimensional immunofluorescence atlas of the …not run———json
Distinct representational properties of cues and con…backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson
Computational modelling identifies key determinants …backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson
Contributions of insula and superior temporal sulcus…backfilled from the artifact on diskrun not observedv12026-09-11provenance.jsonjson
Spatially targeted inhibitory rhythms differentially…backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson
Feedback of peripheral saccade targets to early fove…not run———json
iGABASnFR2 is an improved genetically encoded protei…backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson
A deep learning pipeline for mapping in situ network…not run———json
Self-association enhances early attentional selectio…backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson
Impaired excitability of fast-spiking neurons in a n…backfilled from the artifact on diskrun not observedv12026-09-10provenance.jsonjson

Inputs and outputs

Reads, besides its dependencies
Produces
  • verification/{paper}/provenance.json

One per paper — the table above links each one that exists.

Views
  • graph — on the paper page, as the claim graph
  • table — rendered above, over the 5 results in the artifact
  • comparison — on the cell page, two versions aligned by the matcher, wherever the ledger holds more than one

Running it

The command comes from the declaration, so this text and what actually runs cannot diverge. pipeline.py run also runs the unmet dependencies first.

python3 scripts/pipeline.py run <paper> verification

Underneath, that runs python3 verification/audit_run.py {paper}.