Assumption (Aug 15-22), Nativity of the BVM (Sep 8-15), Immaculate
Conception (Dec 8-15), and All Saints (Nov 1-8) now declare octave:
{ enabled: true }, same generic mechanism as St. Lawrence and the
Christmas trio. Every octave this pull has identified is now modeled;
Matins reading content is a separate, larger follow-up (see conversation)
-- these still just commemorate at L/V-equivalent level for now.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,3 +8,6 @@ name: "All Saints"
|
|||||||
rank: duplex-1-classis
|
rank: duplex-1-classis
|
||||||
common: proper-to-all-saints
|
common: proper-to-all-saints
|
||||||
propers: "all-saints"
|
propers: "all-saints"
|
||||||
|
# Has a real octave (Nov 1-8) -- see calendar/types.ts's OctaveConfig.
|
||||||
|
octave:
|
||||||
|
enabled: true
|
||||||
|
|||||||
@@ -9,3 +9,6 @@ name: "The Assumption of the Blessed Virgin Mary"
|
|||||||
rank: duplex-1-classis
|
rank: duplex-1-classis
|
||||||
common: common-of-the-bvm
|
common: common-of-the-bvm
|
||||||
propers: "assumption"
|
propers: "assumption"
|
||||||
|
# Has a real octave (Aug 15-22) -- see calendar/types.ts's OctaveConfig.
|
||||||
|
octave:
|
||||||
|
enabled: true
|
||||||
|
|||||||
@@ -7,3 +7,6 @@ name: "The Immaculate Conception of the Blessed Virgin Mary"
|
|||||||
rank: duplex-1-classis
|
rank: duplex-1-classis
|
||||||
common: common-of-the-bvm
|
common: common-of-the-bvm
|
||||||
propers: "immaculate-conception"
|
propers: "immaculate-conception"
|
||||||
|
# Has a real octave (Dec 8-15) -- see calendar/types.ts's OctaveConfig.
|
||||||
|
octave:
|
||||||
|
enabled: true
|
||||||
|
|||||||
@@ -8,3 +8,6 @@ name: "The Nativity of the Blessed Virgin Mary"
|
|||||||
rank: duplex-2-classis
|
rank: duplex-2-classis
|
||||||
common: common-of-the-bvm
|
common: common-of-the-bvm
|
||||||
propers: "nativity-bvm"
|
propers: "nativity-bvm"
|
||||||
|
# Has a real octave (Sep 8-15) -- see calendar/types.ts's OctaveConfig.
|
||||||
|
octave:
|
||||||
|
enabled: true
|
||||||
|
|||||||
@@ -76,13 +76,18 @@ describe('August sanctoral pull (first pass)', () => {
|
|||||||
expect(getDayCollect(day).status.en).toBe('verified');
|
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');
|
const clareDay = resolveDay('2025-08-12');
|
||||||
expect(clareDay.winner.kind).toBe('temporal');
|
expect(clareDay.winner.kind).toBe('temporal');
|
||||||
expect(clareDay.commemorations).toEqual([{ kind: 'octave', id: 'st-lawrence', name: 'St. Lawrence, Martyr' }]);
|
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');
|
const assumptionOctaveDay = resolveDay('2025-08-22');
|
||||||
expect(assumptionOctaveDay.winner.kind).toBe('temporal');
|
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', () => {
|
it('the Beheading of St. John the Baptist wins outright at Duplex with a real proper collect and antiphon, over a genuinely unwinnable stub', () => {
|
||||||
|
|||||||
@@ -10,10 +10,17 @@ describe('activeOctavesFor', () => {
|
|||||||
const day1 = activeOctavesFor('2026-08-10'); // St. Lawrence's own day
|
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 }]);
|
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');
|
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)", () => {
|
it("Pentecost's octave uses its own configured threshold (duplex), not the default (semiduplex)", () => {
|
||||||
|
|||||||
@@ -27,13 +27,18 @@ describe('September sanctoral pull (first pass)', () => {
|
|||||||
expect(getDayCollect(day).status.en).toBe('verified');
|
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');
|
const gorgoniusDay = resolveDay('2025-09-09');
|
||||||
expect(gorgoniusDay.winner.kind).toBe('temporal');
|
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');
|
const nicomedesDay = resolveDay('2025-09-15');
|
||||||
expect(nicomedesDay.winner.kind).toBe('temporal');
|
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', () => {
|
it('a monastic-calendar-specific reassignment replaces what the base Tridentine table treats as a plain Nativity-octave continuation', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user