feat: represent commemorations and the displaced set (#26) #342

Merged
manlycucumber merged 1 commit from feature/26-commemoration-displaced into develop 2026-07-02 02:16:32 +00:00
manlycucumber commented 2026-07-02 02:15:36 +00:00 (Migrated from github.com)

Closes #26. Epic #23, issue 3/6.

What

Makes the day-roles and the 1960 commemoration limits representable — the
overlay does not decide them (that is the resolver, #29):

  • Calendar\CelebrationRole — the four roles a LiturgicalDay groups
    offices into: celebration, commemoration, displaced, tempora.
  • Calendar\RoledObservance — a realized office paired with its role. It
    keeps the whole RealizedObservance, so a displaced office retains all the
    data the transfer queue (#34) needs to re-place it, and a commemoration
    keeps everything needed to render it.
  • Calendar\CommemorationLimit::forDayClass() — the 1960 counts: class I → 1
    (privileged only), II → 1, III/IV → 2. (The privileged-only restriction and the
    zero-commemoration days are enforced in #29/#36.)

Verification

composer lint · composer analyse (PHPStan L6, no errors) · composer test
(382 tests, 16,510 assertions — +14). Commit numbers cited-verified in the design
pass (Code of Rubrics). Commits signed + DCO.

Closes #26. Epic #23, issue 3/6. ## What Makes the day-roles and the 1960 commemoration limits **representable** — the overlay does not decide them (that is the resolver, #29): - **`Calendar\CelebrationRole`** — the four roles a `LiturgicalDay` groups offices into: celebration, commemoration, displaced, tempora. - **`Calendar\RoledObservance`** — a realized office paired with its role. It keeps the whole `RealizedObservance`, so a **displaced** office retains all the data the transfer queue (#34) needs to re-place it, and a **commemoration** keeps everything needed to render it. - **`Calendar\CommemorationLimit::forDayClass()`** — the 1960 counts: class I → 1 (privileged only), II → 1, III/IV → 2. (The privileged-only restriction and the zero-commemoration days are enforced in #29/#36.) ## Verification `composer lint` · `composer analyse` (PHPStan L6, no errors) · `composer test` (382 tests, 16,510 assertions — +14). Commit numbers cited-verified in the design pass (Code of Rubrics). 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!342
No description provided.