Article
step · paper openDeclaration bf9f9533fb03 has not been accepted by anyone. · no paper read under it
What does the paper itself say, section by section?
Mechanical: re-runnable from its declared inputs.
Part of Source — What text did the readers read, and what does the paper itself say?
How it works
Parses the cached JATS into the structure a page needs: the section tree with its headings, each paragraph with its inline markup and its cross-references, each figure with its caption and the image eLife serves, each table with its rows. The abstract is split into sentences here; the body's sentences are not, because those come from the marked paper, and splitting them twice by two rules would give the site two sentences to reconcile where the claim assignments are.
Sub-articles are excluded. eLife's JATS carries the editor assessment, the referee reports and the author response inside the same document, each with a of its own, and a search that reaches into them renders the reviews as part of the paper.
Rests on
- prepare · 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.
What it says it does
The article, as the site renders it: JATS-XML into one JSON file per paper.
`prepare` already fetches the JATS and keeps four flattened strings from it — abstract,
results, captions, methods — which is everything the three readers need and nothing a page
needs. `results_text` is one string with the section headings glued to the sentences that
follow them, so a site that wants to show the paper cannot recover where the sections were.
This keeps the structure instead: the section tree, each paragraph with its inline markup,
the figures with their captions, the tables with their rows. It calls no model and reads the
same cached XML `prepare` fetched, so it is free to re-run and its output is byte-stable —
nothing here stamps a date, which is what stops a rebuild from marking every paper stale.
python3 scripts/article_json.py gadeke-2026-guilt-insula
python3 scripts/article_json.py --allWhat it produces
One paper, as the worked example — Artiushin, v3. Read from site/src/data/article/artiushin-2026-spider-atlas.json · 205 KB. slug artiushin-2026-spider-atlasdoi 10.7554/eLife.107732articleId 107732source https://cdn.elifesciences.org/articles/107732/elife-107732-v1.xmltitle A three-dimensional immunofluorescence atlas of the brain of the hackled-orb weaver spider, Uloborus diversusyear 2026
Nothing on this page renders document for this file yet — the link above is the artifact itself.
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/article_json.py · 307 lines
- Produces
-
- site/src/data/article/{paper}.json
One per paper — the table above links each one that exists.
- Views
-
- document — declared, and this artifact is not the shape this view needs
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> article
Underneath, that runs python3 scripts/article_json.py {paper}.