feat: place the special movable feasts (#22) #339

Merged
manlycucumber merged 1 commit from feature/22-movable-feasts into develop 2026-07-02 00:05:54 +00:00
manlycucumber commented 2026-07-02 00:04:51 +00:00 (Migrated from github.com)

Closes #22. Closes Epic #14 (the temporal cycle Factory — the whole Proper of Time).

The final piece: the six movable feasts of the Lord that are placed by a Sunday rule rather than filled as part of a block.

What's here

  • MovableFeastsforYear($year) places six feasts, each a white FEAST on its own date (feasts() / on()).
Feast Placement Class
Most Holy Name of Jesus Sunday of 2–5 Jan, else 2 Jan II
Holy Family Sunday of 7–13 Jan (first after Epiphany) II
Most Holy Trinity Easter+56 I
Corpus Christi Easter+60 I
Most Sacred Heart Easter+68 I
Christ the King last Sunday of October (1962) I

Scope & accuracy

Issue #22 is framed around the three civil-anchored feasts that need the dedicated Sunday-placement rules — including the edge case it calls out: when no Sunday falls in 2–5 January, the Holy Name is kept on 2 January (tested via 2023, whose 1 January is a Sunday). The three Easter-anchored feasts are trivial PaschalSkeleton offsets, included so the movable temporal cycle is complete.

All six are feasts of the Lord → temporale, under the anchor family that computes them. They overlay the temporal skeleton the block-fillers emit (Trinity occupies the first-Sunday-after-Pentecost slot); composing them by precedence/commemoration is the resolver's job (#29).

Verified across a 1583–2200 sweep (proper weekdays and placement windows; 266 years exercise the Holy Name 2-Jan edge; six distinct dated observances). An adversarial review (with web verification of the 1962 dates, ranks, and Latin titles) raised no findings.

Gates

composer lint · composer analyse (PHPStan L6) · composer test344 tests, 16421 assertions green.

Closes #22. **Closes Epic #14** (the temporal cycle Factory — the whole Proper of Time). The final piece: the six movable feasts of the Lord that are placed by a Sunday rule rather than filled as part of a block. ## What's here - **`MovableFeasts`** — `forYear($year)` places six feasts, each a white `FEAST` on its own date (`feasts()` / `on()`). | Feast | Placement | Class | |-------|-----------|:-----:| | Most Holy Name of Jesus | Sunday of 2–5 Jan, **else 2 Jan** | II | | Holy Family | Sunday of 7–13 Jan (first after Epiphany) | II | | Most Holy Trinity | Easter+56 | I | | Corpus Christi | Easter+60 | I | | Most Sacred Heart | Easter+68 | I | | Christ the King | last Sunday of October (1962) | I | ## Scope & accuracy Issue #22 is framed around the three **civil-anchored** feasts that need the dedicated Sunday-placement rules — including the **edge case** it calls out: when no Sunday falls in 2–5 January, the Holy Name is kept on **2 January** (tested via 2023, whose 1 January is a Sunday). The three **Easter-anchored** feasts are trivial `PaschalSkeleton` offsets, included so the movable temporal cycle is complete. All six are feasts of the Lord → `temporale`, under the anchor family that computes them. They overlay the temporal skeleton the block-fillers emit (Trinity occupies the first-Sunday-after-Pentecost slot); composing them by precedence/commemoration is the resolver's job (#29). Verified across a 1583–2200 sweep (proper weekdays and placement windows; 266 years exercise the Holy Name 2-Jan edge; six distinct dated observances). An adversarial review (with web verification of the 1962 dates, ranks, and Latin titles) raised **no findings**. ## Gates `composer lint` · `composer analyse` (PHPStan L6) · `composer test` — **344 tests, 16421 assertions** green.
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!339
No description provided.