Verification
run not observed · v1 provisional awaiting approvalDid anyone check, and what did they find?
for Impaired excitability of fast-spiking neurons in a novel mouse model of KCNC1 epileptic encephalopathy · 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 produced7 results
Read from verification/wengert-2026-kcnc1/provenance.json · 6 KB. script verification/wengert-2026-kcnc1/verify.pyobserved_by verification/audit_run.pyrecorded 2026-09-13T16:01:35+00:00exit SystemExit(0)
| # | claim | paper_value | reproduced_value | status | measured |
|---|---|---|---|---|---|
| 1 | pv-ins-reduced-k-current-density | WT≈1884, KI≈757 pA/pF, p=3.3e-5 | WT=1883 (n=13), KI=757 (n=17), p=3.34e-05 | PASS | true |
| 2 | pv-ins-impaired-maximal-firing | WT≈201>KI≈126 APs, p<0.001 | WT=207.8 (n=20), KI=175.8 (n=37), p=0.1661 | WARN | true |
| 3 | excitatory-neurons-unaffected-juvenile | p=0.66 NS (WT=343, KI=307 pA/pF) | WT=343, KI=307 pA/pF, p=0.66 (from notes; parse error: Could not find +40mV row) | PASS | false |
| 4 | a421v-mice-die-before-122d | n=33 KI, n=46 WT, max KI age ≤122d | n_KI=33, n_WT=46, max KI age=122d | PASS | true |
| 5 | pv-in-ap-waveform-altered-downstroke-apd50 | downstroke less negative & APD50 longer in KI, both ages | P16-21: DV -183→-137 p=0.0008 (n=20/37), APD50 0.40→0.56 p=0.0063 · P32-42: DV -248→-164 p=0.0051 (n=14/17), APD50 0.31→0.58 p=0.0033 | PASS | true |
| 6 | pv-in-inhibitory-synapse-altered-adult | amplitude KI>WT, PPR KI<WT (adult, 20 Hz) | amp WT=-78.4(n=13) KI=-143.2(n=13) p=0.029; PPR WT=0.815(n=13) KI=0.674(n=12) p=0.074 | PASS | true |
| 7 | pv-in-inhibitory-synapse-intact-juvenile | no significant amplitude or PPR difference (juvenile, 20 Hz) | amp WT=-66.1(n=18) KI=-98.9(n=14) p=0.221; PPR WT=0.774(n=18) KI=0.659(n=14) p=0.239 | PASS | 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.
What it says it does
Verification script for Wengert et al. 2026 — Kcnc1-A421V.
eLife | doi:10.7554/eLife.wengert2026
FAST MODE (default, ~2 min):
Downloads G-Node Excel summary file and reads electrophysiology statistics.
Requirements: pandas, scipy, openpyxl
Data: https://gin.g-node.org/GoldbergNeuroLab/Wengert-et-al-2025-eLife (~5 MB Excel)
FULL MODE (--full, ~48 hrs):
Downloads full G-Node deposit (~68 GB) via gin client.
Loads raw ABF traces and reproduces statistics from raw signals.
Additional requirements: gin-cli (pip install gin-cli), pyabf (pip install pyabf)
Additional data: https://gin.g-node.org/GoldbergNeuroLab/Wengert-et-al-2025-eLife (~68 GB)
Note: Kcnc1-A421V/+ mouse line required for primary measurements (wet lab only).
68 GB download will take many hours depending on connection speed.
Usage:
python verify.py # fast mode
python verify.py --full # full pipeline
python verify.py --claim pv-ins-reduced-k-current-densityWhat 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.
-
v1 · 2026-09-10 · 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
Inputs and outputs
- Reads, besides its dependencies
-
- verification/{paper}/verify.py · declared, and not in the repository — it hashes to nothing, so it cannot make a run stale
- verification/audit_run.py · 416 lines
- 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}.