# Bibliothecarius Modernus — machine-readable catalog

Bibliothecarius Modernus is an independent digital library of neglected Latin
literature, publishing complete open translations, parallel texts, contextual
research, audio and video editions, and machine-readable scholarly data — and,
where the sources require it, new transcriptions from manuscripts. This file is
the library's catalog for machine patrons.

`/api/catalog.json` is a static, versioned export of the library's catalog for
machine patrons (search agents, citation tools, other libraries). It carries
identity and bibliographic metadata, the Patrologia Latina location of every
work, the library's status for it, and — for every Bibliothecarius publication —
the public URLs, DOI, provenance and an honest review status. It carries **no
source text**: the digitised Patrologia Latina is not redistributed here, and the
Latin of a passage is only ever available inside a published translation
(`assets/translations/*.json`, one file per publication).

- Schema: `bibliothecarius.catalog/1` — `/api/catalog.schema.json` (JSON Schema 2020-12).
- Regenerated by the pipeline's `tools/export_public_catalog.py` when a publication
  is finalized or the catalog changes; the `version` field carries the export date
  and the registry's last update. Additive changes keep the schema id; a breaking
  change gets `bibliothecarius.catalog/2` at a new path.
- Discoverable from every page's `<link rel="alternate" type="application/json">`.

## Top level

| field | meaning |
|---|---|
| `schema`, `schema_url`, `documentation` | which contract this file follows |
| `generated_at`, `version` | when it was generated; `export:<date>;registry:<date>` |
| `publisher` | the library, its site and corpus repository |
| `rights` | licence of the metadata: **CC0 1.0** (`license_status: declared`, owner decision D031, 2026-09-13); the PL source text is not redistributed |
| `locator_scheme` | the passage locator grammar (below) and its limitations |
| `counts` | totals per array and per work status |
| `works[]` | every work in Migne's Patrologia Latina as the catalog indexes it (3,700+) |
| `parts[]` | sub-units (letters, sermons, books) the library has vetted or published |
| `publications[]` | every Bibliothecarius translation/publication |

## `works[]`

`id` (`plNNN-SSS`: PL volume + ELENCHUS sequence, stable), `author`, `title_latin`,
`pl_volume`, `columns.start/end`, `century` (approximate, derived from the volume),
`section` (`main`/`appendix`/…), `status` (`untranslated`, `candidate`, `in_progress`,
`translated`, `published`, `rejected`, `excluded`), `english_translation_status`
(whether *anyone's* English translation is known: `unknown`, `none-found`,
`partial-only`, `exists-but-inaccessible`, `exists-and-accessible`),
`boundary_verified` (a human has read start and end), `estimated_minutes`
(narration estimate), `translated_by_bibliothecarius`, `publications` (ids into
`publications[]`).

## `publications[]`

`id` (`pub-N`), `catalog_id`, `part_id`, `project_id` (the pipeline's publication
id, where one exists), `title_english`, `title_latin`, `author`, `pl_volume`,
`columns`, `century`, `status` (`published` = public on YouTube; `translated` =
translation exists, video private/unlisted/none), `youtube_visibility`,
`published_at`, `urls.{youtube,blog,archive,github}`, `doi`,
`provenance` (`generation` gen1/gen2/gen3/v2/legacy-unknown, `translator_model`,
`translation_date` and its source, `source_check`, `translation_qa`),
`review` (`status`, the same vocabulary the edition pages show: `unreviewed` — no
check recorded (most 2024–25 editions) · `spot-checked` — the curator read
passages · `coverage-verified` — a deterministic source-coverage check passed
and, for v2 editions, an independent review by a second model family with the
curator's recorded corrections; **not a guarantee of fidelity** · `defect-recorded` —
a known defect is listed · `human-reviewed` — the curator read the whole
translation against the Latin; errors remain possible; `known_defects[]`
with type, coverage and a reference to the evidence), `rights` (per publication: `CC0-1.0`,
`declared`; a note where a 2025 Zenodo record carries CC BY 4.0 as deposited), `locators`, `related` (same author, neighbours in the
volume), `version` (the registry row's last update).

Terminology matches the human-facing pages: an *edition* is one Bibliothecarius
publication of a work (`publications[]`); *translation* is the English text;
*source text* is the public-domain Latin (`source_kind` in a v2 `translation.json`:
`migne-pl`, `printed-edition`, `bibliothecarius-transcription`, `third-party-ocr-htr`);
*catalog id* is `plNNN-SSS`; *review status* is `review.status`.

A smaller projection of `publications[]` keyed by website path,
`/_data/editions.json` (not served as an API; it feeds the edition pages'
Resource Info and related-works blocks), is written by the same export.

Known defects are published deliberately: twelve pipeline-era translations are
missing a contiguous stretch of their Latin source (found 2026-09-13); each is
flagged here so a citing agent does not assume completeness.

## Passage locators

`plNNN-SSS[/part]:cNNNN[a-d]:chunk-n` — work or part id, the PL column where the
passage begins, and the translation chunk number. `chunk-n` equals the
`#chunk-n` anchor on the publication's web page (`locators.web_anchor_pattern`).
Limitations: historical works have no chunk-to-column mapping
(`locators.passages_available: false`); only works produced by the v2 pipeline
carry a `passages.json`. Never infer column precision that is not stated.

## What is deliberately absent

Source text; editorial notes and internal status notes; cost data; anything that
identifies private infrastructure. If you need the Latin of a passage, use the
published translation file linked from `urls.blog` or the corpus directory in
`urls.github`.
