feat: Novus Ordo Advent + Christmas Time in the cited corpus (#108) #484

Merged
manlycucumber merged 1 commit from feature/108-no-advent-christmas into develop 2026-07-11 17:56:08 +00:00
manlycucumber commented 2026-07-11 17:54:49 +00:00 (Migrated from github.com)

Second slice of the Novus-Ordo general-calendar corpus (#108), building on the whole-edition temporale mechanism from #483. Fills the reform's Advent → Christmas Time block.

What lands

  • NovusOrdo\ChristmasCycle — the Advent-I-to-Baptism filler, mirroring the traditional ChristmasCycle's year-spanning shape. Wired into NovusOrdoTemporalCycle as two instances (the previous Advent's January tail + the current December Advent) alongside OrdinaryTime, tiling a civil year with no gap and no overlap outside the still-deferred paschal window (a full-year tiling test proves it).
  • {dies} name grammar on TemporalArchetype — renders the civil day-of-month for the reform's date-named privileged and octave weekdays (Die 17 decembris, Die 2 ianuarii). Internal; the public renderName signature is unchanged.
  • Cited archetypes in the whole edition's temporale.yaml (13 rows):
    • the great feasts nativity / epiphany re-declared with the exact base identity (kind, Latin name, mr-1920 citation) so they dedupe into the shared identity union and align across editions;
    • every reform-shaped structure keyed no-* — Advent Sundays (Gaudete rose), the Hebdomadae … Adventus weekdays, the date-named Die N decembris/ianuarii privileged/octave ferias, the Holy Family (Sunday within the octave, else 30 Dec), the octave day, the Second Sunday after the Nativity, the post Epiphaniam weekdays, and the Baptism.

Modeling & provenance

Christmas Time is one continuous white season to the Baptism (no distinct green time-after-Epiphany). Names cite the public-domain Missal (mr-1920) where the label is verbatim the ancient one (Advent Sundays, … post Epiphaniam), and the reform's norms (nu-1969, option A) only where the reform coined or re-worded a generic label — never a copyrighted modern book.

Scope

NO stays isBuilt=false (refused at the public boundary until #260). The paschal half (Lent / Holy Week / Easter Time + movable feasts + Triduum) is the next slice.

Verification

  • Local gate green: phpcs, PHPStan [OK], PHPUnit 1091 (1 pre-existing skip), Node 56, corpus verify (33 files, reproducible).
  • 1962 / 1954 / 1955 corpus byte-identical (only the NO temporale + shared identity + manifest changed).
  • Two-lens adversarial review (liturgical-correctness + code/generator/provenance): no CRITICAL/HIGH; date arithmetic verified across 1970–2100 (0 invariant violations, 0 tiling overlaps); the two MEDIUM findings (provenance hygiene for ancient labels; full-year tiling coverage) are addressed in this PR.
Second slice of the Novus-Ordo general-calendar corpus (#108), building on the whole-edition temporale mechanism from #483. Fills the reform's **Advent → Christmas Time** block. ## What lands - **`NovusOrdo\ChristmasCycle`** — the Advent-I-to-Baptism filler, mirroring the traditional `ChristmasCycle`'s year-spanning shape. Wired into `NovusOrdoTemporalCycle` as two instances (the previous Advent's January tail + the current December Advent) alongside `OrdinaryTime`, tiling a civil year with **no gap and no overlap** outside the still-deferred paschal window (a full-year tiling test proves it). - **`{dies}` name grammar** on `TemporalArchetype` — renders the civil day-of-month for the reform's date-named privileged and octave weekdays (`Die 17 decembris`, `Die 2 ianuarii`). Internal; the public `renderName` signature is unchanged. - **Cited archetypes** in the whole edition's `temporale.yaml` (13 rows): - the great feasts `nativity` / `epiphany` re-declared with the exact base identity (kind, Latin name, `mr-1920` citation) so they **dedupe into the shared identity union** and align across editions; - every reform-shaped structure keyed `no-*` — Advent Sundays (Gaudete rose), the `Hebdomadae … Adventus` weekdays, the date-named `Die N decembris/ianuarii` privileged/octave ferias, the Holy Family (Sunday within the octave, else 30 Dec), the octave day, the Second Sunday after the Nativity, the `post Epiphaniam` weekdays, and the Baptism. ## Modeling & provenance Christmas Time is one continuous white season to the Baptism (no distinct green time-after-Epiphany). Names cite the **public-domain Missal (`mr-1920`)** where the label is verbatim the ancient one (Advent Sundays, `… post Epiphaniam`), and the **reform's norms (`nu-1969`, option A)** only where the reform coined or re-worded a generic label — never a copyrighted modern book. ## Scope NO stays `isBuilt=false` (refused at the public boundary until #260). The paschal half (Lent / Holy Week / Easter Time + movable feasts + Triduum) is the next slice. ## Verification - Local gate green: phpcs, PHPStan `[OK]`, **PHPUnit 1091** (1 pre-existing skip), **Node 56**, corpus verify (33 files, reproducible). - **1962 / 1954 / 1955 corpus byte-identical** (only the NO temporale + shared identity + manifest changed). - Two-lens adversarial review (liturgical-correctness + code/generator/provenance): **no CRITICAL/HIGH**; date arithmetic verified across **1970–2100** (0 invariant violations, 0 tiling overlaps); the two MEDIUM findings (provenance hygiene for ancient labels; full-year tiling coverage) are addressed in this PR.
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!484
No description provided.