diff --git a/src/data/calendar/saints/all-saints.yml b/src/data/calendar/saints/all-saints.yml index dc0d18c..ffe9516 100644 --- a/src/data/calendar/saints/all-saints.yml +++ b/src/data/calendar/saints/all-saints.yml @@ -8,3 +8,6 @@ name: "All Saints" rank: duplex-1-classis common: proper-to-all-saints propers: "all-saints" +# Has a real octave (Nov 1-8) -- see calendar/types.ts's OctaveConfig. +octave: + enabled: true diff --git a/src/data/calendar/saints/assumption.yml b/src/data/calendar/saints/assumption.yml index 31cdb6d..1d12548 100644 --- a/src/data/calendar/saints/assumption.yml +++ b/src/data/calendar/saints/assumption.yml @@ -9,3 +9,6 @@ name: "The Assumption of the Blessed Virgin Mary" rank: duplex-1-classis common: common-of-the-bvm propers: "assumption" +# Has a real octave (Aug 15-22) -- see calendar/types.ts's OctaveConfig. +octave: + enabled: true diff --git a/src/data/calendar/saints/immaculate-conception.yml b/src/data/calendar/saints/immaculate-conception.yml index 07c7707..668617f 100644 --- a/src/data/calendar/saints/immaculate-conception.yml +++ b/src/data/calendar/saints/immaculate-conception.yml @@ -7,3 +7,6 @@ name: "The Immaculate Conception of the Blessed Virgin Mary" rank: duplex-1-classis common: common-of-the-bvm propers: "immaculate-conception" +# Has a real octave (Dec 8-15) -- see calendar/types.ts's OctaveConfig. +octave: + enabled: true diff --git a/src/data/calendar/saints/nativity-bvm.yml b/src/data/calendar/saints/nativity-bvm.yml index a41d1d6..def4243 100644 --- a/src/data/calendar/saints/nativity-bvm.yml +++ b/src/data/calendar/saints/nativity-bvm.yml @@ -8,3 +8,6 @@ name: "The Nativity of the Blessed Virgin Mary" rank: duplex-2-classis common: common-of-the-bvm propers: "nativity-bvm" +# Has a real octave (Sep 8-15) -- see calendar/types.ts's OctaveConfig. +octave: + enabled: true diff --git a/tests/calendar/august-sanctoral.test.ts b/tests/calendar/august-sanctoral.test.ts index 7c695a1..2007237 100644 --- a/tests/calendar/august-sanctoral.test.ts +++ b/tests/calendar/august-sanctoral.test.ts @@ -76,13 +76,18 @@ describe('August sanctoral pull (first pass)', () => { expect(getDayCollect(day).status.en).toBe('verified'); }); - it('dates within St. Lawrence and the Assumption\'s own octaves still exclude the real secondary saint the source names (St. Clare, Aug 12) -- Clare herself isn\'t modeled yet -- but St. Lawrence\'s own octave (now modeled, see calendar/octaves.ts) correctly keeps commemorating him through it regardless. The Assumption\'s own octave isn\'t populated with octave data yet, so Aug 22 stays plain.', () => { + it("dates within St. Lawrence and the Assumption's own octaves still exclude the real secondary saint the source names (St. Clare, Aug 12) -- Clare herself isn't modeled yet -- but both octaves themselves (now modeled, see calendar/octaves.ts) correctly keep commemorating through them regardless", () => { const clareDay = resolveDay('2025-08-12'); expect(clareDay.winner.kind).toBe('temporal'); expect(clareDay.commemorations).toEqual([{ kind: 'octave', id: 'st-lawrence', name: 'St. Lawrence, Martyr' }]); + // Aug 22 is the Assumption's own octave day (In Octava Assumptionis), + // Duplex, blocking Ss. Timothy/Hippolytus/Symphorian the same way -- + // it's also day 8 of the Assumption's own octave. const assumptionOctaveDay = resolveDay('2025-08-22'); expect(assumptionOctaveDay.winner.kind).toBe('temporal'); - expect(assumptionOctaveDay.commemorations).toEqual([]); + expect(assumptionOctaveDay.commemorations).toEqual([ + { kind: 'octave', id: 'assumption', name: 'The Assumption of the Blessed Virgin Mary' }, + ]); }); it('the Beheading of St. John the Baptist wins outright at Duplex with a real proper collect and antiphon, over a genuinely unwinnable stub', () => { diff --git a/tests/calendar/octaves.test.ts b/tests/calendar/octaves.test.ts index b4ac692..31e1135 100644 --- a/tests/calendar/octaves.test.ts +++ b/tests/calendar/octaves.test.ts @@ -10,10 +10,17 @@ describe('activeOctavesFor', () => { const day1 = activeOctavesFor('2026-08-10'); // St. Lawrence's own day expect(day1).toEqual([{ id: 'st-lawrence', name: 'St. Lawrence, Martyr', wins: 'semiduplex', dayNumber: 1 }]); + // Aug 17 is also day 3 of the Assumption's own octave (started Aug 15) -- + // the two run concurrently this time of year. const day8 = activeOctavesFor('2026-08-17'); - expect(day8).toEqual([{ id: 'st-lawrence', name: 'St. Lawrence, Martyr', wins: 'semiduplex', dayNumber: 8 }]); + expect(day8).toEqual([ + { id: 'st-lawrence', name: 'St. Lawrence, Martyr', wins: 'semiduplex', dayNumber: 8 }, + { id: 'assumption', name: 'The Assumption of the Blessed Virgin Mary', wins: 'semiduplex', dayNumber: 3 }, + ]); - expect(activeOctavesFor('2026-08-18')).toEqual([]); + // Aug 23: past both Lawrence's (ended Aug 17) and the Assumption's + // (ended Aug 22) windows. + expect(activeOctavesFor('2026-08-23')).toEqual([]); }); it("Pentecost's octave uses its own configured threshold (duplex), not the default (semiduplex)", () => { diff --git a/tests/calendar/september-sanctoral.test.ts b/tests/calendar/september-sanctoral.test.ts index b4384e3..0a09ba0 100644 --- a/tests/calendar/september-sanctoral.test.ts +++ b/tests/calendar/september-sanctoral.test.ts @@ -27,13 +27,18 @@ describe('September sanctoral pull (first pass)', () => { expect(getDayCollect(day).status.en).toBe('verified'); }); - it("dates within the Nativity's own octave are excluded entirely, even where the source names a real secondary saint, pending octave support", () => { + it("dates within the Nativity's own octave still exclude the real secondary saints the source names (Ss. Gorgonius, Nicomedes) -- neither is modeled yet -- but the octave itself (now modeled, see calendar/octaves.ts) correctly commemorates through it", () => { const gorgoniusDay = resolveDay('2025-09-09'); expect(gorgoniusDay.winner.kind).toBe('temporal'); - expect(gorgoniusDay.commemorations).toEqual([]); + expect(gorgoniusDay.commemorations).toEqual([ + { kind: 'octave', id: 'nativity-bvm', name: 'The Nativity of the Blessed Virgin Mary' }, + ]); + // Sep 15 is also day 8 of the Nativity's own octave (started Sep 8). const nicomedesDay = resolveDay('2025-09-15'); expect(nicomedesDay.winner.kind).toBe('temporal'); - expect(nicomedesDay.commemorations).toEqual([]); + expect(nicomedesDay.commemorations).toEqual([ + { kind: 'octave', id: 'nativity-bvm', name: 'The Nativity of the Blessed Virgin Mary' }, + ]); }); it('a monastic-calendar-specific reassignment replaces what the base Tridentine table treats as a plain Nativity-octave continuation', () => {