feat: order co-occurring sanctoral feasts by rank (#25) #341

Merged
manlycucumber merged 1 commit from feature/25-sanctoral-rank-sort into develop 2026-07-02 02:11:55 +00:00
manlycucumber commented 2026-07-02 02:10:59 +00:00 (Migrated from github.com)

Closes #25. Epic #23, issue 2/6.

What

SanctoralCalendar now orders co-occurring offices on a date highest rank
first
(ascending RankClass ordinal — class I is ordinal 1), tie-broken by
the canonical ObservanceId string. That key is fixed and edition-invariant, so
the ordering is deterministic and reproducible run to run (the validation
oracle depends on it). Documented in code and in docs/design/sanctoral-overlay-model.md.

This is a pre-sort of the day's candidates; deciding which office is actually
celebrated, commemorated, or displaced is the resolver's work (#29).

Verification

composer lint (clean) · composer analyse (PHPStan L6, no errors) ·
composer test (368 tests, 16,485 assertions — +5 sort tests covering two and
three offices on one date, the id tiebreak, rank dominance, and reproducibility).
Commits signed + DCO.

Closes #25. Epic #23, issue 2/6. ## What `SanctoralCalendar` now orders co-occurring offices on a date **highest rank first** (ascending `RankClass` ordinal — class I is ordinal 1), tie-broken by the canonical `ObservanceId` string. That key is fixed and edition-invariant, so the ordering is **deterministic and reproducible** run to run (the validation oracle depends on it). Documented in code and in `docs/design/sanctoral-overlay-model.md`. This is a pre-sort of the day's candidates; deciding which office is actually celebrated, commemorated, or displaced is the resolver's work (#29). ## Verification `composer lint` (clean) · `composer analyse` (PHPStan L6, no errors) · `composer test` (368 tests, 16,485 assertions — +5 sort tests covering two and three offices on one date, the id tiebreak, rank dominance, and reproducibility). 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!341
No description provided.