feat: fill the Septuagesima-to-Passiontide temporal block (#18) #335

Merged
manlycucumber merged 1 commit from feature/18-septuagesima-lent into develop 2026-07-01 20:43:08 +00:00
manlycucumber commented 2026-07-01 20:42:07 +00:00 (Migrated from github.com)

Closes #18.

The second temporal block-filler — the penitential run toward Easter, entirely Easter-anchored via PaschalSkeleton. Also extracts the shared TemporalCalendar helper and corrects the ferial Latin titles in both cycles to the 1962 Missal form.

What's here

  • LentenCycleforYear($year) fills [Septuagesima, Palm Sunday) (a fixed 56-day, Easter-anchored run) with one principal temporal office per day: pre-Lent (Septuagesima/Sexagesima/Quinquagesima), Lent (from Ash Wednesday), and Passiontide (from Passion Sunday). All violet. Hands off to the Holy Week block (#19) at Palm Sunday.
  • TemporalCalendar — extracts the UTC-midnight date arithmetic and the single definition of liturgical weekday naming (roman, feriaToken, feriaLatin) shared by the block-fillers. ChristmasCycle is migrated onto it with no behaviour change (#17's tests still pass; the refactor was independently verified behaviour-preserving).
  • Design doc gains the Lenten-cycle section + the shared-helper note.

Accuracy (1960 rubrics — the raised ferial ranks)

Ash Wednesday is a first-class feria; the Ember Days of Lent are second class; the other ferias of Lent and Passiontide are third class; pre-Lenten ferias stay fourth class. The Sundays of Lent are all first class (feasts transfer off them); the pre-Lenten Sundays are second class. Laetare (Lent IV) is violet with rose permitted; Passion Sunday opens Passiontide.

An adversarial multi-agent review drove two corrections (applied to both cycles):

  • Ferial Latin titles now use the authoritative Missal construction Feria N infra Hebdomadam W <season> — e.g. "Feria II infra Hebdomadam I in Quadragesima", "… Adventus", "… post Epiphaniam", "… Passionis" — replacing a non-authoritative "hebdomadae" form.
  • Ember-day titles use "Quatuor Temporum" (the 1962 Missal spelling).

Both verified against reproductions of the 1962 Missale Romanum (Lent, Advent).

Gates

Anchors match PaschalSkeleton; a 1583–2200 sweep confirms a 56-day contiguous block, monotonic Septuagesima→Lent→Passiontide seasons, and unique identities. composer lint (PSR-12) · composer analyse (PHPStan L6) · composer test254 tests, 7990 assertions green locally.

Closes #18. The second temporal block-filler — the penitential run toward Easter, entirely Easter-anchored via `PaschalSkeleton`. Also extracts the shared `TemporalCalendar` helper and corrects the ferial Latin titles in both cycles to the 1962 Missal form. ## What's here - **`LentenCycle`** — `forYear($year)` fills `[Septuagesima, Palm Sunday)` (a fixed 56-day, Easter-anchored run) with one principal temporal office per day: pre-Lent (Septuagesima/Sexagesima/Quinquagesima), Lent (from Ash Wednesday), and Passiontide (from Passion Sunday). All violet. Hands off to the Holy Week block (#19) at Palm Sunday. - **`TemporalCalendar`** — extracts the UTC-midnight date arithmetic and the *single* definition of liturgical weekday naming (`roman`, `feriaToken`, `feriaLatin`) shared by the block-fillers. `ChristmasCycle` is migrated onto it with **no behaviour change** (#17's tests still pass; the refactor was independently verified behaviour-preserving). - **Design doc** gains the Lenten-cycle section + the shared-helper note. ## Accuracy (1960 rubrics — the raised ferial ranks) Ash Wednesday is a **first-class** feria; the Ember Days of Lent are **second class**; the other ferias of Lent and Passiontide are **third class**; pre-Lenten ferias stay **fourth class**. The Sundays of Lent are all **first class** (feasts transfer off them); the pre-Lenten Sundays are **second class**. Laetare (Lent IV) is violet with rose permitted; Passion Sunday opens Passiontide. An adversarial multi-agent review drove two corrections (applied to **both** cycles): - Ferial Latin titles now use the authoritative Missal construction **`Feria N infra Hebdomadam W <season>`** — e.g. *"Feria II infra Hebdomadam I in Quadragesima"*, *"… Adventus"*, *"… post Epiphaniam"*, *"… Passionis"* — replacing a non-authoritative *"hebdomadae"* form. - Ember-day titles use **"Quatuor Temporum"** (the 1962 Missal spelling). Both verified against reproductions of the 1962 Missale Romanum ([Lent](https://tlm-md.blogspot.com/2015/03/feria-secunda-infra-hebdomadam-iii-in.html), [Advent](https://tlm-md.blogspot.com/2015/12/greater-feria-of-advent-feria-v-infra.html)). ## Gates Anchors match `PaschalSkeleton`; a 1583–2200 sweep confirms a 56-day contiguous block, monotonic Septuagesima→Lent→Passiontide seasons, and unique identities. `composer lint` (PSR-12) · `composer analyse` (PHPStan L6) · `composer test` — **254 tests, 7990 assertions** green locally.
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!335
No description provided.