Word-by-word annotated Latin sacral texts — the traditional Roman liturgy (1962 Missale Romanum) first, the Church's common prayers as the corpus grows — with gloss layers in Polish and English.
Every Latin word carries its lemma, a full morphological analysis, and a reading gloss. A deliberately smaller set also carries a contextual explanation where idiom, ellipsis, translation, textual history, or sacred imagery adds something the structured analysis cannot say. Rubrics carry a narrative layer describing what is happening at the altar. The corpus is the data behind the Scrutabor reading app (scrutabor), live at scrutabor.org.
Status: working edition. 156 texts, fully annotated in both languages: the complete Ordinary of the Mass, the prayers after low Mass, the common prayers, three litanies, the prayers for the dead, the first psalm stanza, and the complete Propers of the four Sundays of Advent, the Most Holy Trinity, Corpus Christi, and the Most Sacred Heart of Jesus — with the 1962 temporal calendar computed for 76 years and verified against the Missale's own table. Every analysis carries its sources, a confidence grade and a review state, and nothing is presented as settled until it has passed expert review. Every text has been collated against at least two independent witnesses and adversarially reviewed, and the disputed readings are listed rather than hidden.
Neutral cores and independently publishable language packages, JSON, UTF-8:
texts/<category>/<name>.json Latin, morphology and neutral editorial topology
formularies/<collection>/ canonical ordered assemblies of Mass texts
languages/<lang>/ manifest, text layers, senses and provenance
lexicon/lemmata.json language-neutral dictionary heads
bibliography/graph.json works, editions, digital items, uses and witnesses
kalendarium/ the 1962 temporal cycle, computed and verified
witnesses/<text-id>/ witness transcriptions + adjudicated apparatus
build_reader/, build.py the reader edition the app ships
checks/, run_checks.py mechanical validation (see below)
The reader edition uses descriptive base paths (texts/, tables/,
lexicon/heads.json, calendar.json, formularies.json, metrics.json, and
concordance.json) and mirrors each
published language under languages/<lang>/. Root and language manifests make
the base and every language independently packageable for mobile downloads or
offline archives. The shared Latin concordance and each package's localized
concordance name candidate texts and segments before they are opened.
The formulary catalogue supplies each Mass's ordered, explicit component list,
including shared and transferred texts; applications do not infer the Mass
from filenames. Each language package supplies its localized formulary titles.
Localized titles and aliases travel in the same language manifest, so a
partial package exposes only readings it can render and a one-language mobile
download needs no index from another package. The compact JSON keeps one
logical record per line. Table and text addresses come from tracked append-only files
under build_reader/registry/; after adding a genuinely new record, run
python -m build_reader.update_registry and review only the appended lines.
Ordinary builds refuse to invent or renumber those addresses.
The reader also exposes a normalized bibliography catalogue, a functional source index, and independently loadable evidence files beside the texts that have evidence. Each language package contains its own wording evidence and only the global catalogue identities absent from the neutral package; it never imports another language's sources. A text page loads the small neutral catalogue once, then its neutral slice and one selected language slice; source identities are not repeated in every text file, and uses sharing one source locator are grouped. The global index names affected texts and counts while detailed claims remain lazy. The legacy inline citation tables remain available while their exact source pointers are migrated, and the corpus gate prevents that inventory from changing without an explicit parity update.
Word ids are stable forever — external references (spaced-repetition
decks, links) never break. SCHEMA.md documents the format,
ORTHOGRAPHY.md the editorial policy (1962 liturgical orthography),
TERMINOLOGY.md the gloss-language vocabulary contract.
The guiding rule: no unreviewed single-source claim. Concretely:
- Text fidelity by collation. Every text is compared, character by character, against independent witnesses of the same recension; the substantive text must match with zero divergence. Edition-variable accidentals (punctuation, capitalization, capital accents) are each adjudicated in a per-text apparatus with a recorded ruling.
- Mechanical linting. Orthography rules, accent-versus-syllable verification, cross-reference and quoted-form checks, terminology bans, and completeness against each language manifest run on every push.
- Provenance on every claim. Each analysis names its sources and confidence; disagreements are flagged for review rather than resolved silently.
Run the checks locally (Python 3.10+, standard library only):
python run_checks.py ordinarium.confiteor
python -m checks.apparatus --write # regenerate derived apparatus summariesThe verdict line names its subject — text, word count, languages, witnesses, adjudicated variants — and the gate refuses to pass on zero of any of them.
Documents are kept in one layout, so that a diff over a text stays readable: one Latin word to a line in the core and one target-language entry to a line in its package. Editing Polish does not touch English or Latin.
python -m checks.layout --check # is every file in layout?
python -m checks.layout # put them thereCorrections are welcome as issues or pull requests — a philological argument with sources beats a bare diff. The review workflow and contributor guide will be published as the corpus grows.
The Polish and English translations are either this edition's own renderings from the printed Latin or revisions made openly from page-verified historical translations that are in the public domain. A defined familiar core — such as the Lord's Prayer, Hail Mary, Creeds, ordinary responses and selected litanies — retains the forms readers know where those forms are historically attested or consist of fixed elementary formulas. Modern vernacular missals and Bible translations remain in the source registry only where they supplied reference evidence or recorded prior exposure; no current segment cites them as its wording source. The word-by-word glosses, notes, apparatus and rubrical narratives are this edition's own work.
The editorial layer — the word-by-word glosses, analyses and notes,
apparatus, rubrical narratives, introductions, and translations this edition
wrote itself — is licensed under
CC BY-SA 4.0, including the EU database right in the
compilation. The Latin texts this edition prints — the 1962 Missale
Romanum and the Clementine psalter — are in the public domain. The
historical translations named in per-segment translation_citations remain
public-domain source material; the citations identify the wording basis and
the exact pages examined rather than claiming ownership of those source
texts. Contemporary wording is not reproduced under a bare acknowledgement.
The validation code in checks/ and
run_checks.py is licensed under AGPL-3.0.
The rights report counts every translated verse segment × language site,
including a translation with no wording citation. An uncited site is counted
as this edition's own wording; a site with several cited wording sources takes
the most restrictive recorded status. Removing a citation therefore changes a
site's classification instead of removing it from the denominator. These are
provenance states recorded by the repository, not legal conclusions.
Each languages/<lang>/translation-provenance.json is the
exhaustive ledger for that language's manifest. It binds each public origin and
review state to hashes of the exact
Latin source segment and target string, so a changed translation cannot retain
an old state silently. The schema still admits working-unsettled for future
work: it means that a site's independent-origin or historical-wording review is
not complete, not that infringement or ecclesiastical disapproval has been
established.
Each language also carries a grouped translation-basis.json. It distinguishes
wording that is exact, normalized, revised, or assembled as a traditional
composite. The build expands that relationship into the one language-and-text
file a reader has already requested, avoiding both a second request and a
repeated field at every authored translation site.
Witness transcriptions marked do were derived from the Divinum Officium
Project. The archived snapshot was checked at revision
712035707cf1bbab75d22966fb1ceabaecae592f (2026-08-05); that revision's
README grants the MIT License. Its required permission notice is preserved in
THIRD-PARTY-NOTICES.md. These witness files are
source evidence, not an endorsement by the Divinum Officium Project.