Formats comparison
step · paper openDeclaration 423c528af048 has not been accepted by anyone. · no paper read under it
Measured from the exports, what did each conversion cost?
Mechanical: re-runnable from its declared inputs.
Part of Interchange — What survives when a claim tree leaves this format?
How it works
Measures each conversion from the generated files rather than from the mapping tables. A mapping table says what a converter intends; the export says what it did, and those two came apart once already — the Discourse Graphs exporter looked for claims one level above where they sit and wrote a file with a single node, in valid JSON-LD that nothing would have flagged.
The markdown report is the artifact and the site renders it, so a figure on the page cannot disagree with the export it describes.
Rests on
- mira-export · step
- oxa-export · step
- dg-export · step
Feeds
Nothing — this is a leaf.
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.
The declaration names this path and the repository does not have it. An input that does not exist hashes to nothing, so it cannot make a run stale — the layer is declared to depend on something it is not in fact tracking.
A claim tree is a set of typed claims with typed relations between them. Three interchange formats can hold some version of that — MIRA, the discourse-graph schema eLife's article platform reads; OXA, the open document architecture; and Discourse Graphs JSON-LD. Each one keeps a different part, and the interesting question is not which is best but what each conversion costs.
These pages answer that per paper, and they answer it by measuring the generated exports rather than by reading the converters' mapping tables. A mapping table says what a converter intends. The export says what it did, and those are not the same thing.
This distinction is not hypothetical. The comparison first reported that MIRA drops 57% of this corpus's relations, and later that MIRA drops 100% of them. Both were facts about our own measuring code — the first counted a declared relation as a dropped one, the second looked for edges as node properties after the exporter had moved to MIRA's reified encoding. MIRA had not changed between the two. Neither had the corpus.
So the page you are reading renders exports/<slug>.formats.md directly. There is no second copy of these numbers to drift.
Across the corpus
The middle two numbers are the ones worth separating. A relation that is neither support nor opposition — scopes, entails, requires — is not dropped by MIRA and not flattened into supports. MIRA imports a Discourse Graphs base schema in which relations are definable, and its AbstractRelationDef is a neutral root, so each such relation is declared in the document with a domain, a range and a description, and the edges are typed by that declaration. A reader who follows only core MIRA sees an edge and learns that it is neither supporting nor opposing, which is true.
What is genuinely lost is narrower: relations whose target is *, meaning the claim constrains the paper as a whole rather than another claim. MIRA has no paper-level node for those to point at, so no edge is emitted and none is invented. Each paper's gap-report.md names them.
And one thing no format carries at all: verification — that a claim was checked, by what code, against what deposited data, with what result beside the published value. None of the three has a node for it.
| Paper | Claims | Relations | MIRA lost | OXA | DG |
|---|---|---|---|---|---|
| artiushin-2026-spider-atlas | 17 | 67 | 0 | 67 | 67 |
| bouyeure-2026-fear-rsa | 30 | 83 | 0 | 83 | 83 |
| ejdrup-2026-dopamine | 25 | 95 | 1 | 95 | 94 |
| gadeke-2026-guilt-insula | 68 | 85 | 0 | 77 | 77 |
| headley-2026-inhibitory-rhythms | 29 | 88 | 2 | 85 | 83 |
| kammer-2026-foveal-feedback | 24 | 66 | 0 | 65 | 65 |
| kolb-2026-igabasnfr2 | 21 | 90 | 0 | 90 | 90 |
| rozak-2026-neurovascular-dl | 24 | 129 | 0 | 129 | 129 |
| scheller-2026-self-prioritization | 23 | 91 | 0 | 90 | 90 |
| wengert-2026-kcnc1 | 32 | 122 | 0 | 122 | 122 |
| 10 papers | 293 | 916 | 3 | 903 | 900 |
Read from exports/<slug>.formats.json. The OXA and DG columns count the relations actually present in those exports, so a column that does not match the tree is either a mapping the format cannot express or an export left stale — the paper's page says which. Regenerate with python3 scripts/formats_report.py --all.
Worked example
mira:supports or mira:opposes · 0 lost
Every paper
Across the corpus
10 stale·a paper links to its own cell, where this layer's output for it is rendered
Inputs and outputs
- Reads, besides its dependencies
-
- scripts/formats_report.py · declared, and not in the repository — it hashes to nothing, so it cannot make a run stale
- Produces
-
- exports/{paper}.formats.md
- exports/{paper}.formats.json
One per paper — the table above links each one that exists.
- Views
-
- table — declared, and this artifact is not the shape this view needs
- 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> formats-report
Underneath, that runs python3 scripts/formats_report.py {paper}.