Not just OCR · section 8
Annex B
Annex B — Data shapes
One real, lightly trimmed record from each artifact, because a data shape is easier shown than described. Every example below is quoted from the repository as of July 2026; Annex A has the commands that produce each file.
The corpus (corpus/v1p051.md)
One Markdown file per typescript page, opening with its page anchor. Verse sits in fenced divs that carry the language; nothing else marks it, so the line structure survives every later processing stage untouched:
<!-- page: v1p051 -->
[CHANSON I]{.underline} : TEXTE ET TRADUCTION
::: {.verse lang=oc}
Cars, douz e fenhz del bederesc
m'es sos bas chanz, vas cui m'azerc;
c'ap joi s'espan, viu e noire,
...
:::
Provenance tables (CSV)
page_numbers.csv maps page ids to printed numbers (v1p050,45).
corpus-v2-sources.csv records which model transcribed each page:
pageid,provenance
v1p000,gpt-4o
...
Totals: 499 × gpt-4o, 87 × claude.
manifest.json — reading order
{ "order": 50, "pageid": "v1p050", "vol": 1, "idx": 50,
"printed": "45", "file": "corpus/v1p050.md", "kind": "body" }
chansons.json — the catalogue (39 records)
{ "num": 1, "roman": "I", "incipit": "Cars, douz e fenhz del bederesc",
"remarques": { "pages": ["v1p038", "…", "v1p050"],
"printed_range": ["33", "45"] },
"texte": { "pages": ["v1p051", "v1p052"], … } }
bibliography.json — the real vol. 2 bibliography (printed pp. 470–554)
A sections tree mirrors the thesis's own hierarchy (I. Généralités → A.
Études littéraires générales, …). Entries keep the full printed text plus
extracted fields:
{ "author": "AUERBACH",
"title": "Mimésis — la représentation de la réalité dans la littérature occidentale",
"siglum": "",
"text": "AUERBACH, Erich, *Mimésis — la représentation de la réalité…*" }
par_chanson holds, per chanson, the manuscript sigla lines and the
editions and studies lists:
{ "raw": "RvO,86",
"cite": "APPEL, Carl, *Raïmbaut von Orange*, Berlin, Weidmannsche
Buchhandlung, 1928, …, p. 86" }
citations.json — the sigla (24)
The editorial section on sigla explains how these are harvested and overridden.
{ "siglum": "ALF",
"definition": "GILLIERON, Atlas linguistique de la France",
"defined_on_page": null,
"source": "bibliography",
"bibliography": { "section": "general", "author": "GILLIERON",
"title": "Atlas linguistique de la France", "page": 475 } }
Plus manuscript_sigla, a usage list of every occurrence, and an
unresolved list (currently one entry) for what resisted.
references.json — the op. cit. resolutions
Confidence grades and the resolution method are discussed in the internal references section.
"stats": { "resolved": 473, "unresolved": 4, "high_conf": 126,
"medium_conf": 347, "low_conf": 0, "via_bibliography": 9 }
{ "page": "v1p006", "note": "3", "kind": "bare", "phrase": "ibid.",
"target": { "author": "BRUYNE", "title": "Etudes d'esthétique médiévales", … },
"confidence": "medium" }
footnote-normalization.json — reading-view rewrites
Keyed by pageid|note; consumed only by the reading views (the file's own
_note field says so: "Consumed by
site/lib/render.js
applyFootnoteNorm() in reading views only"). The facsimile never sees it.
"v1p006|3": { "backrefs": [
{ "idx": 0, "from": "ibid.", "kind": "short-ibid",
"to": "BRUYNE, *Etudes d'esthétique médiévales*", "conf": "medium" } ] }
book.md — the assembled edition
The 586 corpus pages joined into one document, with page anchors preserved, footnotes namespaced by page id, overflowed notes reunited, and cross-page hyphenations healed (each repair logged to a CSV). This file plus the JSONs above is everything the site build consumes.