Add November sanctoral content (5 saints/feasts)
Deploy / deploy (push) Successful in 1m6s

St. Charles Borromeo (11-04), the Octave Day of All Saints (11-08,
own real Cyprian/Augustine Nocturn 2-3 content, collect reused from
All Saints via cross-id propers), St. Albert the Great (11-15),
St. Gertrude (11-16), St. Felix of Valois (11-20). All Souls' Day
(11-02) deliberately skipped -- a Requiem office, not a normal
saint's office, a genuine mechanism gap.

Several new fixed-date Duplex+ saints displaced existing test
fixtures that had assumed particular dates were clean/ferial/
plain-Sunday: prime.test.ts's MONDAY constant, weekday.test.ts's
clean-Sunday case, and day-label.test.ts's post-Epiphany-overflow
and open-octave-day cases. Fixed by finding genuinely clean
alternate dates/years, never by weakening assertions.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 17:49:06 -04:00
parent 0955f7cbd1
commit f7af1e7cbf
18 changed files with 971 additions and 30 deletions
+41 -18
View File
@@ -60,22 +60,39 @@ describe('getDayLabel — ordinal temporal label', () => {
describe('getDayLabel — resumed post-Epiphany Sunday (overflow years)', () => {
it('labels a resumed Sunday/weekday as "after Epiphany", not the next Trinity-counted number', () => {
// 2026: post-epiphany-5 is Nov 8, post-epiphany-6 is Nov 15 (both
// Not 2026 any more: the November sanctoral pull gave fixed real
// content to Nov 8 (Octave Day of All Saints, Duplex majus) and Nov
// 15 (St. Albert the Great, Duplex) -- both now permanently win
// outright over whatever post-Epiphany-overflow Sunday lands there in
// any given year, the same "real content closed the gap" shape as
// several other months' collisions. 2024 is a clean overflow year
// instead: post-epiphany-5 is Nov 10, post-epiphany-6 is Nov 17 (both
// Sundays) -- see calendar/temporal-id.test.ts for the id-level
// coverage this label check builds on.
expect(getDayLabel(resolveDay('2026-11-08'))).toBe('The 5th Sunday after Epiphany');
// 2026-11-09 is also the Dedication of the Basilica of the Most Holy
// Savior (Duplex II Classis, added 2026-08 — see
// dedication-of-the-basilica-of-the-most-holy-savior.yml) — an
// ordinary (non-privileged) Monday fully yields to a real winning
// saint, so the label is just her name, not the ferial fallback; the
// 11-16 assertion below covers that fallback format on a genuinely
// saint-free day instead.
expect(getDayLabel(resolveDay('2026-11-09'))).toBe(
'Dedication of the Basilica of the Most Holy Savior (the Lateran)',
// coverage this label check builds on. Nov 10 itself also carries a
// Simplex commemoration (Ss. Tryphon, Respicius, and Nympha), shown
// appended to the Sunday's own label per this app's usual
// commemorated-Simplex display.
expect(getDayLabel(resolveDay('2024-11-10'))).toBe(
'Ss. Tryphon, Respicius, and Nympha, Martyrs — The 5th Sunday after Epiphany',
);
expect(getDayLabel(resolveDay('2026-11-15'))).toBe('The 6th Sunday after Epiphany');
expect(getDayLabel(resolveDay('2026-11-16'))).toBe('Monday in the 6th week after Epiphany');
// 2024-11-11 is St. Martin of Tours (Duplex, pre-existing content) --
// an ordinary (non-privileged) Monday fully yields to a real winning
// saint, so the label is just his name, not the ferial fallback; see
// the 2035-10-29 assertion below for that fallback format on a
// genuinely saint-free overflow-week Monday instead (no single
// Nov-dated Monday near this Sunday pair is clean any more, now that
// Nov 4/8/15/16/20 are all fixed real content).
expect(getDayLabel(resolveDay('2024-11-11'))).toBe('St. Martin of Tours, Bishop and Confessor');
expect(getDayLabel(resolveDay('2024-11-17'))).toBe('The 6th Sunday after Epiphany');
// 2024-11-18 is the Dedication of the Basilicas of Ss. Peter and Paul
// (pre-existing fixed content) -- again a real winning saint, not the
// ferial fallback.
expect(getDayLabel(resolveDay('2024-11-18'))).toBe('Dedication of the Basilicas of Ss. Peter and Paul');
// 2035-10-29, a Monday in the 3rd week of a different overflow
// stretch, is genuinely clean (no sanctoral entry, no commemoration)
// -- covers the ferial "Monday in the Nth week after Epiphany" format
// itself, independent of the specific 5th/6th Sunday pair above.
expect(getDayLabel(resolveDay('2035-10-29'))).toBe('Monday in the 3rd week after Epiphany');
});
it('the fixed final Sunday of the year always shows the fixed 23rd-after-Trinity ordinal, not a raw elapsed-week count', () => {
@@ -109,10 +126,16 @@ describe('getDayLabel — active octave', () => {
it('shows the octave day alone when nothing is separately commemorated that day', () => {
// Not Aug 17 (day 8, the last day, of St. Lawrence's octave): that
// date is now St. Hyacinth's own fixed day (Duplex, added per the
// full-year sanctoral import), which wins outright. All Saints' own
// octave (Nov 1-8) still has a genuinely open day 8 -- 2028-11-08 is
// a Wednesday, clear of both a Sunday and any sanctoral entry.
expect(getDayLabel(resolveDay('2028-11-08'))).toBe('8th Day within the Octave of All Saints');
// full-year sanctoral import), which wins outright. Not Nov 8 either
// (day 8, the last day, of All Saints' own octave): the November
// sanctoral pull gave that day its own real feast, the Octave Day of
// All Saints itself (Duplex majus, own proper Nocturn 2-3 content --
// see saints/octave-of-all-saints.yml), which now wins outright there
// too -- every year's Nov 8 is permanently claimed by it, the same
// "real content closed the gap" shape as August's Lawrence/Assumption
// overlap. Day 3 of the same octave (2028-11-03, a Friday) is still
// genuinely open -- no sanctoral entry, no separate commemoration.
expect(getDayLabel(resolveDay('2028-11-03'))).toBe('3rd Day within the Octave of All Saints');
});
it("a season's own named anchor day outranks an active octave, even though Trinity Sunday is technically also day 8 of Pentecost's own octave", () => {
+5 -2
View File
@@ -41,8 +41,11 @@ describe('resolveDay', () => {
// 2026-10-04 (moved here from there): since the October pull, that
// date is St. Francis's own day (Duplex), which wins outright even on
// an ordinary Sunday.
const day = resolveDay('2026-11-15');
expect(day.date).toBe('2026-11-15');
// Not 2026-11-15 either (moved here from there): since the November
// pull, that date is St. Albert the Great's own day (Duplex), same
// reason. 2026-09-06 (post-pentecost-15) is genuinely clean.
const day = resolveDay('2026-09-06');
expect(day.date).toBe('2026-09-06');
expect(day.weekday).toBe('sunday');
expect(day.winner.kind).toBe('temporal');
expect(day.commemorations).toEqual([]);