Strengthen the Assumption's octave against a demoted St. John Eudes

Demote St. John Eudes (Aug 19) from Duplex to Semiduplex -- too minor
a confessor to keep outranking the Assumption's octave. To make that
demotion actually cede the day, raise the Assumption's octave to
`wins: duplex` (same pattern already used by Pentecost's octave), so an
ordinary-day tie no longer automatically favors the occurring saint.

Promote St. Thomas of Canterbury (Dec 29) to Duplex so he keeps
winning against the Christmas octave stack now that ordinary-day ties
are no longer a given.

Also add a closing-day tie-break to octave-vs-octave precedence
(pickWinningOctave): when two active octaves tie in rank, the one on
its own closing day now wins the label contest, ahead of the existing
"more recently started" tie-break. Needed because Assumption's day 3
and St. Lawrence's own closing day (Aug 17) now tie at Duplex, and the
closing day should still govern that date's label.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 07:39:58 -04:00
parent 9364185f70
commit 6f8f6618b9
8 changed files with 75 additions and 38 deletions
+2 -2
View File
@@ -23,7 +23,7 @@ describe('activeOctavesFor', () => {
{
id: 'assumption',
name: 'The Assumption of the Blessed Virgin Mary',
wins: 'semiduplex',
wins: 'duplex',
dayNumber: 3,
isClosingDay: false,
},
@@ -60,7 +60,7 @@ describe('resolveActiveOctave / pickWinningOctave -- overlapping-octave preceden
expect(resolveActiveOctave('2026-08-10')?.id).toBe('st-lawrence');
});
it("St. Lawrence's own elevated closing day (duplex) outranks the Assumption's ordinary day 3 (semiduplex) on their one real overlap, Aug 17", () => {
it("St. Lawrence's own elevated closing day (duplex) wins the closing-day tie-break over the Assumption's ordinary day 3 (also duplex) on their one real overlap, Aug 17", () => {
const winner = resolveActiveOctave('2026-08-17');
expect(winner?.id).toBe('st-lawrence');
expect(winner?.wins).toBe('duplex');