feat: Novus Ordo Lent, Holy Week, Easter Time & movable feasts (#108) #485

Merged
manlycucumber merged 1 commit from feature/108-no-paschal-half into develop 2026-07-11 19:43:16 +00:00
manlycucumber commented 2026-07-11 19:41:48 +00:00 (Migrated from github.com)

Completes the reformed Proper of Time by filling the paschal half — the last gap in the Novus-Ordo temporal cycle (part of #108, v1.1 milestone #256). After this, every day of a civil year is owned by exactly one Novus-Ordo temporal filler.

What's in it

  • NovusOrdo\PaschalCycle fills [Ash Wednesday, Pentecost], tiling exactly with Ordinary Time either side:
    • Lent — Ash Wednesday, the "post Cineres" ferias, the five Sundays in Quadragesima (Laetare rose on the fourth), the reworded weekdays. No Septuagesima, no distinct Passiontide.
    • Holy Week — the merged red Dominica in Palmis de Passione Domini, the Hebdomadae Sanctae weekdays, and the Sacred Triduum (Holy Thursday reuses the shared base office; Good Friday red, Holy Saturday white). It also supplies the TriduumWindow the precedence context reads.
    • Easter Time — the Octave of Easter as solemnities of the Lord, the Second Sunday de divina Misericordia, the Sundays and weekdays of Easter, the fortieth-day (Thursday) Ascension, and Pentecost. No Ascension or Pentecost octave.
  • NovusOrdo\MovableFeasts places the four solemnities the reform keeps in Ordinary Time — the Most Holy Trinity, the Body and Blood of Christ (Thursday), the Sacred Heart, and Christ the King (the Sunday before Advent) — re-placed and re-titled.
  • 24 cited archetypes in the NO temporale.yaml. Reform-coined labels cite the 1969 Normae (nu-1969); ancient labels cite the public-domain Missal (mr-1920). The shared feasts of the Lord and Holy Thursday reuse the base keys ascension/pentecost/maundy-thursday so their identity dedupes into the cross-edition union; re-titled Easter takes its own key.

Architecture

  • New TriduumWindow and MovableFeastCalendar seams let the resolver read the Triduum context and the movable feasts edition-agnostically (mirroring the existing TemporalCycle seam). The traditional 1962/1954/1955 paths are byte-identical — corpus unchanged, golden fixture unmoved.
  • NovusOrdoPrecedence now routes Ash Wednesday, the Holy-Week weekdays, and the Easter octave to Table line 2 (via a privileged-temporal-weekday membership set) and the Christmas octave to line 9 — the previously-dormant routing the PR7 comment flagged, now live and tested.

Verification

  • Green local gate: PHPCS, PHPStan (L6), PHPUnit (1121 tests), Node generator (56), corpus verify (33 files reproducible).
  • Only 3 corpus files changed (MANIFEST + NO attributes.temporale.ndjson + shared identity/temporale.ndjson); 1962/1954/1955 byte-identical.
  • Two-lens adversarial review (GO/GO, no CRITICAL/HIGH): date arithmetic verified across 1970–2100 (0 tiling gaps/overlaps; Ascension always Thursday at Easter+39; Pentecost always Sunday at Easter+49; citations byte-verified honest), and cross-read day-by-day against the reformed 2024–2025 calendar. The three review advisories are addressed (the Triduum-season modelling choice documented in KNOWN-LIMITATIONS.md; the deferred-precedence-set note added to NovusOrdoPrecedence).

The Novus-Ordo edition stays refused at the public boundary until it is validated (#260); this cycle is exercised directly by the filler tests.

Completes the reformed **Proper of Time** by filling the paschal half — the last gap in the Novus-Ordo temporal cycle (part of #108, v1.1 milestone #256). After this, every day of a civil year is owned by exactly one Novus-Ordo temporal filler. ## What's in it - **`NovusOrdo\PaschalCycle`** fills `[Ash Wednesday, Pentecost]`, tiling exactly with Ordinary Time either side: - **Lent** — Ash Wednesday, the "post Cineres" ferias, the five Sundays *in Quadragesima* (Laetare rose on the fourth), the reworded weekdays. No Septuagesima, no distinct Passiontide. - **Holy Week** — the merged red *Dominica in Palmis de Passione Domini*, the *Hebdomadae Sanctae* weekdays, and the **Sacred Triduum** (Holy Thursday reuses the shared base office; Good Friday red, Holy Saturday white). It also supplies the `TriduumWindow` the precedence context reads. - **Easter Time** — the Octave of Easter as solemnities of the Lord, the Second Sunday *de divina Misericordia*, the Sundays and weekdays of Easter, the fortieth-day (Thursday) **Ascension**, and **Pentecost**. No Ascension or Pentecost octave. - **`NovusOrdo\MovableFeasts`** places the four solemnities the reform keeps in Ordinary Time — the Most Holy Trinity, the Body and Blood of Christ (Thursday), the Sacred Heart, and Christ the King (the Sunday before Advent) — re-placed and re-titled. - **24 cited archetypes** in the NO `temporale.yaml`. Reform-coined labels cite the 1969 *Normae* (`nu-1969`); ancient labels cite the public-domain Missal (`mr-1920`). The shared feasts of the Lord and Holy Thursday reuse the base keys `ascension`/`pentecost`/`maundy-thursday` so their identity **dedupes** into the cross-edition union; re-titled Easter takes its own key. ## Architecture - New **`TriduumWindow`** and **`MovableFeastCalendar`** seams let the resolver read the Triduum context and the movable feasts edition-agnostically (mirroring the existing `TemporalCycle` seam). The traditional **1962/1954/1955 paths are byte-identical** — corpus unchanged, golden fixture unmoved. - **`NovusOrdoPrecedence`** now routes Ash Wednesday, the Holy-Week weekdays, and the Easter octave to **Table line 2** (via a `privileged-temporal-weekday` membership set) and the Christmas octave to line 9 — the previously-dormant routing the PR7 comment flagged, now live and tested. ## Verification - Green local gate: PHPCS, PHPStan (L6), PHPUnit (1121 tests), Node generator (56), corpus verify (33 files reproducible). - Only 3 corpus files changed (MANIFEST + NO `attributes.temporale.ndjson` + shared `identity/temporale.ndjson`); 1962/1954/1955 byte-identical. - Two-lens adversarial review (**GO/GO**, no CRITICAL/HIGH): date arithmetic verified across **1970–2100** (0 tiling gaps/overlaps; Ascension always Thursday at Easter+39; Pentecost always Sunday at Easter+49; citations byte-verified honest), and cross-read day-by-day against the reformed **2024–2025** calendar. The three review advisories are addressed (the Triduum-season modelling choice documented in `KNOWN-LIMITATIONS.md`; the deferred-precedence-set note added to `NovusOrdoPrecedence`). The Novus-Ordo edition stays refused at the public boundary until it is validated (#260); this cycle is exercised directly by the filler tests.
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!485
No description provided.