feat: Novus Ordo Ordinary Time in the cited corpus (#108) #483

Merged
manlycucumber merged 1 commit from feature/108-no-ordinary-time-corpus into develop 2026-07-11 07:05:53 +00:00
manlycucumber commented 2026-07-11 07:03:27 +00:00 (Migrated from github.com)

First slice of #108 (the NO general-calendar corpus): declare the Novus Ordo (editio typica 2002) as a whole peer edition and land its Ordinary Time temporal data, cited — the load-bearing whole-edition-temporale mechanism plus the one season the reform genuinely invents.

What lands

  • meta.yaml — declare roman-novus-ordo-2002 with a new whole: true flag. A whole edition takes its temporal archetypes entire from its own temporale.yaml rather than unioning the base 1962 archetypes onto it (the additive-octave model the 1954 diff uses). It still shares the cross-edition identity union (a saint kept from the traditional calendar is referenced by the same id — alignment-by-id for the v2.0 comparison tool).
  • facts/editions/roman-novus-ordo-2002/temporale.yaml — the ot-sunday / ot-feria archetypes (Dominica … per annum, Feria … Hebdomadae … per annum), cited via option A: a generic temporal day-label is an uncopyrightable descriptor, so it cites the norming reference (Normae universales 1969) rather than a PD text. Ranks/colour are facts, likewise cited.
  • sources.yaml — register nu-1969 (kind: reference).
  • build.mjs — a whole edition's temporale is own-only; skip emitting an edition's empty shapes (a whole edition may be authored one half at a time — the sanctoral lands in a later slice).
  • OrdinaryTime (#258) now resolves against the shipped corpus, not only the two-row fixture.

Guarantees

  • 1962 / 1954 / 1955 stay byte-identical — the base pass and the diff editions are untouched; only the shared identity/temporale.ndjson (+2 rows), sources.ndjson (+1), MANIFEST.json, and the new NO temporale file change.
  • The edition is isBuilt=false in the engine, so nothing is publicly resolvable until validation (#260).

Verification

  • corpus verify OK — 33 files, reproducible; Node generator tests 55/55 (incl. a new build.test.mjs locking the whole-vs-diff temporale rule); PHPUnit 1075/1075 (incl. a new shipped-corpus OT test); phpcs/phpstan clean.
  • Adversarially reviewed: no CRITICAL/HIGH findings; the option-A citation, the byte-identical guarantee, and the gate-integrity of skip-empty were each verified. Two NITs (Latin capitalization → house-style Hebdomadae; symmetric empty-file handling) applied.

Part of #108 · milestone v1.1.0 · #256.

First slice of #108 (the NO general-calendar corpus): declare the Novus Ordo (editio typica 2002) as a **whole peer edition** and land its **Ordinary Time** temporal data, cited — the load-bearing whole-edition-temporale mechanism plus the one season the reform genuinely invents. ## What lands - **`meta.yaml`** — declare `roman-novus-ordo-2002` with a new `whole: true` flag. A whole edition takes its temporal archetypes **entire** from its own `temporale.yaml` rather than unioning the base 1962 archetypes onto it (the additive-octave model the 1954 diff uses). It still shares the cross-edition **identity union** (a saint kept from the traditional calendar is referenced by the same id — alignment-by-id for the v2.0 comparison tool). - **`facts/editions/roman-novus-ordo-2002/temporale.yaml`** — the `ot-sunday` / `ot-feria` archetypes (`Dominica … per annum`, `Feria … Hebdomadae … per annum`), cited via **option A**: a generic temporal day-label is an uncopyrightable descriptor, so it cites the norming **reference** (Normae universales 1969) rather than a PD text. Ranks/colour are facts, likewise cited. - **`sources.yaml`** — register `nu-1969` (`kind: reference`). - **`build.mjs`** — a whole edition's temporale is own-only; skip emitting an edition's empty shapes (a whole edition may be authored one half at a time — the sanctoral lands in a later slice). - **`OrdinaryTime`** (#258) now resolves against the **shipped** corpus, not only the two-row fixture. ## Guarantees - **1962 / 1954 / 1955 stay byte-identical** — the base pass and the diff editions are untouched; only the shared `identity/temporale.ndjson` (+2 rows), `sources.ndjson` (+1), `MANIFEST.json`, and the new NO temporale file change. - The edition is **`isBuilt=false`** in the engine, so nothing is publicly resolvable until validation (#260). ## Verification - `corpus verify OK — 33 files, reproducible`; Node generator tests **55/55** (incl. a new `build.test.mjs` locking the whole-vs-diff temporale rule); PHPUnit **1075/1075** (incl. a new shipped-corpus OT test); `phpcs`/`phpstan` clean. - Adversarially reviewed: no CRITICAL/HIGH findings; the option-A citation, the byte-identical guarantee, and the gate-integrity of skip-empty were each verified. Two NITs (Latin capitalization → house-style `Hebdomadae`; symmetric empty-file handling) applied. Part of #108 · milestone v1.1.0 · #256.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Directorium/Core!483
No description provided.