feat: resolve occurrence outcomes, first class (#31) #347

Merged
manlycucumber merged 1 commit from feature/31-occurrence-first-class into develop 2026-07-02 03:16:20 +00:00
manlycucumber commented 2026-07-02 03:14:25 +00:00 (Migrated from github.com)

Closes #31. Epic #29, issue 2/8.

What

Adds PrecedenceRules::occurrenceOutcome($winner, $loser, $context) and its 1962
implementation. The higher office (by tierOf()) is celebrated; this returns the
loser's fate as an OccurrenceOutcomecommemorate | transfer | omit:

  • Transfer — only first-class feasts (n. 95), plus All Souls (n. 96b). The
    displaced feast keeps its identity for the transfer queue (#34).
  • Omit — days admitting no commemoration (Triduum n. 23; Easter/Pentecost
    octave days n. 66; first-class vigils n. 30), or an ordinary office impeded
    by a first-class day (n. 111a).
  • Commemorate — otherwise; a privileged commemoration (n. 108) survives
    even on a first-class day.

Correctness

Grounded in the 1960 New Rubrics nn. 92–114 (verbatim, from the Divinum Officium
transcription, cross-checked against the SSPX summary). The tests pin the
headline first-class cases: Immaculate Conception celebrated + Advent Sunday
commemorated; St Joseph transferred off a first-class Lenten Sunday; a
third-class saint on a first-class Sunday omitted; a first-class feast in the
Easter octave transferred, a lower one omitted. Second/third/fourth-class
coverage and the Sunday-vs-feast-of-the-Lord bars are #32/#33; the count limit is #36.

Verification

composer lint · composer analyse (PHPStan L6, no errors) · composer test
(435 tests, 30,258 assertions — +9). Commits signed + DCO.

Closes #31. Epic #29, issue 2/8. ## What Adds `PrecedenceRules::occurrenceOutcome($winner, $loser, $context)` and its 1962 implementation. The higher office (by `tierOf()`) is celebrated; this returns the loser's fate as an `OccurrenceOutcome` — **commemorate | transfer | omit**: - **Transfer** — only first-class *feasts* (n. 95), plus All Souls (n. 96b). The displaced feast keeps its identity for the transfer queue (#34). - **Omit** — days admitting no commemoration (Triduum n. 23; Easter/Pentecost octave days n. 66; first-class vigils n. 30), or an *ordinary* office impeded by a first-class day (n. 111a). - **Commemorate** — otherwise; a *privileged* commemoration (n. 108) survives even on a first-class day. ## Correctness Grounded in the 1960 New Rubrics nn. 92–114 (verbatim, from the Divinum Officium transcription, cross-checked against the SSPX summary). The tests pin the headline first-class cases: **Immaculate Conception** celebrated + Advent Sunday **commemorated**; **St Joseph transferred** off a first-class Lenten Sunday; a third-class saint on a first-class Sunday **omitted**; a first-class feast in the Easter octave **transferred**, a lower one **omitted**. Second/third/fourth-class coverage and the Sunday-vs-feast-of-the-Lord bars are #32/#33; the count limit is #36. ## Verification `composer lint` · `composer analyse` (PHPStan L6, no errors) · `composer test` (435 tests, 30,258 assertions — +9). Commits signed + DCO.
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!347
No description provided.