Precedence bug: commemoration-grade saints are celebrated instead of commemorated #424

Closed
opened 2026-07-02 17:32:11 +00:00 by manlycucumber · 0 comments
manlycucumber commented 2026-07-02 17:32:11 +00:00 (Migrated from github.com)

Problem

The validation harness (#45), cross-checked against the missalemeum oracle (the
base-1962 authority), shows the engine celebrates a IV-class commemoration as
the day's office and omits the feria, where the correct 1960 resolution is to
celebrate the feria and merely commemorate the saint.

Examples (all kind = commemoration-only, rank IV):

  • 20 Jun 2024 — St Silverius: engine celebrates the saint (red), omits the green
    feria; missalemeum celebrates the feria and commemorates Silverius.
  • 24 Jul (St Christina), 30 Jul (Ss Abdon & Sennen), 13 Aug (Ss Hippolytus &
    Cassian) — same pattern. ~50 days/year.

Root cause

ObservanceKind::COMMEMORATION_ONLY is defined but never consulted in the
precedence logic. A commemoration-grade saint (rank IV) therefore receives the same
fourth tier as the feria, ties, and wins DayResolver::sortByTier()'s id-based
tie-break (roman:sanctorale:… < roman:temporale:…), becoming the celebration.

A commemoration has no proper office (1960 rubrics, nn. 106–114): the feria or
Sunday is celebrated and the commemoration is made at Mass and Office.

Fix

Add a commemoration tier below fourth (ordinal 29) in the precedence data and
return it from tierOf() for kind === COMMEMORATION_ONLY. The saint then always
loses to a real office (feria/Sunday/feast) and is commemorated (or omitted where
the day admits none — e.g. the Triduum). Confined to ferial days that carry a
commemoration; the golden fixture will be re-frozen.

Notes

Corpus ranks are correct (the saints are already kind=commemoration-only); only
the engine ignored the kind. Found by Epic #45 against the missalemeum oracle;
sibling of #422.

## Problem The validation harness (#45), cross-checked against the missalemeum oracle (the base-1962 authority), shows the engine celebrates a IV-class **commemoration** as the day's office and *omits* the feria, where the correct 1960 resolution is to celebrate the feria and merely commemorate the saint. Examples (all `kind = commemoration-only`, rank IV): - 20 Jun 2024 — St Silverius: engine celebrates the saint (red), omits the green feria; missalemeum celebrates the feria and commemorates Silverius. - 24 Jul (St Christina), 30 Jul (Ss Abdon & Sennen), 13 Aug (Ss Hippolytus & Cassian) — same pattern. ~50 days/year. ## Root cause `ObservanceKind::COMMEMORATION_ONLY` is defined but never consulted in the precedence logic. A commemoration-grade saint (rank IV) therefore receives the same `fourth` tier as the feria, ties, and wins `DayResolver::sortByTier()`'s id-based tie-break (`roman:sanctorale:…` < `roman:temporale:…`), becoming the celebration. A commemoration has **no proper office** (1960 rubrics, nn. 106–114): the feria or Sunday is celebrated and the commemoration is made at Mass and Office. ## Fix Add a `commemoration` tier below `fourth` (ordinal 29) in the precedence data and return it from `tierOf()` for `kind === COMMEMORATION_ONLY`. The saint then always loses to a real office (feria/Sunday/feast) and is commemorated (or omitted where the day admits none — e.g. the Triduum). Confined to ferial days that carry a commemoration; the golden fixture will be re-frozen. ## Notes Corpus ranks are correct (the saints are already `kind=commemoration-only`); only the engine ignored the kind. Found by Epic #45 against the missalemeum oracle; sibling of #422.
Sign in to join this conversation.
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#424
No description provided.