Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45c1f4e958 | |||
| 64271befee |
@@ -315,7 +315,6 @@ days:
|
||||
# Michaelmas. Kept mapped here anyway as a deliberate, informed
|
||||
# simplification (explicit user decision, 2026-08), not an oversight --
|
||||
# see st-michael.yml.
|
||||
"09-01": [st-giles, ss-twelve-brothers]
|
||||
"09-02": [st-stephen-of-hungary]
|
||||
"09-03": [st-pius-x]
|
||||
"09-05": [st-lawrence-justinian]
|
||||
|
||||
@@ -7,20 +7,13 @@ import { getDayCollect } from '../../src/hours/resolve-common';
|
||||
// the Sept 1 collision test deliberately uses 2025 *because* Aug 31
|
||||
// falls on Sunday that year — see its own comment.
|
||||
describe('September sanctoral pull (first pass)', () => {
|
||||
it('St. Giles wins outright at Simplex over a genuinely unwinnable stub', () => {
|
||||
// 2025-09-01 no longer qualifies as a clean year for this: Aug 31,
|
||||
// 2025 is a Sunday, and St. Raymond Nonnatus (semiduplex as of the
|
||||
// rank-deflation fix) loses outright to an ordinary Sunday and
|
||||
// transfers forward onto Sept 1, winning there instead of Giles
|
||||
// (semiduplex > simplex) -- see the collision test below.
|
||||
it('Sept 1 is a plain ferial day -- St. Giles and Ss. Twelve Brothers deliberately dropped from the calendar (user decision, 2026-09-01), files kept on disk for possible restoration', () => {
|
||||
const day = resolveDay('2026-09-01');
|
||||
expect(day.winner).toEqual({ kind: 'sanctoral', id: 'st-giles', name: 'St. Giles, Abbot', nameLa: 'Sanctus Ægidius, Abbas', rank: 'simplex' });
|
||||
expect(day.commemorations).toEqual([
|
||||
{ kind: 'sanctoral', id: 'ss-twelve-brothers', name: 'Ss. Twelve Brothers, Martyrs', nameLa: 'Duodecim Fratres, Martyres', rank: 'simplex' },
|
||||
]);
|
||||
expect(day.winner).toEqual({ kind: 'temporal', id: 'post-pentecost-14' });
|
||||
expect(day.commemorations).toEqual([]);
|
||||
});
|
||||
|
||||
it('in a year where Aug 31 falls on Sunday, St. Raymond Nonnatus (semiduplex) loses outright to the Sunday, transfers forward onto Sept 1, and wins the collision there over both native Simplex candidates', () => {
|
||||
it('in a year where Aug 31 falls on Sunday, St. Raymond Nonnatus (semiduplex) loses outright to the Sunday and transfers forward onto Sept 1, winning there uncontested now that the native Sept 1 saints are dropped from the calendar', () => {
|
||||
const day = resolveDay('2025-09-01');
|
||||
expect(day.winner).toEqual({
|
||||
kind: 'sanctoral',
|
||||
@@ -30,10 +23,7 @@ describe('September sanctoral pull (first pass)', () => {
|
||||
rank: 'semiduplex',
|
||||
transferredFrom: '2025-08-31',
|
||||
});
|
||||
expect(day.commemorations).toEqual([
|
||||
{ kind: 'sanctoral', id: 'ss-twelve-brothers', name: 'Ss. Twelve Brothers, Martyrs', nameLa: 'Duodecim Fratres, Martyres', rank: 'simplex' },
|
||||
{ kind: 'sanctoral', id: 'st-giles', name: 'St. Giles, Abbot', nameLa: 'Sanctus Ægidius, Abbas', rank: 'simplex' },
|
||||
]);
|
||||
expect(day.commemorations).toEqual([]);
|
||||
});
|
||||
|
||||
it('the Nativity of the BVM wins outright with a real proper collect and antiphon, commemorating a real secondary saint blocked by its own day (not its octave)', () => {
|
||||
|
||||
@@ -92,16 +92,18 @@ describe('resolveEveningDay', () => {
|
||||
});
|
||||
|
||||
it('a higher-ranked today keeps its own Second Vespers against a lower-ranked tomorrow, even below the old duplex-2-classis floor', () => {
|
||||
// Aug 31, 2026: St. Raymond Nonnatus (Semiduplex) vs. Sep 1's St. Giles
|
||||
// (Simplex). Raymond outranks Giles, so Raymond should keep his own
|
||||
// Feb 5, 2026: St. Agatha (Semiduplex) vs. Feb 6's St. Dorothea
|
||||
// (Simplex). Agatha outranks Dorothea, so Agatha should keep her own
|
||||
// evening even though Semiduplex never cleared the old fixed
|
||||
// duplex-2-classis floor -- the real "De Concurrentia Officii" rule is a
|
||||
// direct comparison against tomorrow's rank, not a fixed threshold on
|
||||
// today alone. Reported by the user 2026-08-31.
|
||||
const day = resolveEveningDay('2026-08-31');
|
||||
expect(day.date).toBe('2026-08-31');
|
||||
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-raymond-nonnatus' });
|
||||
expect(day.commemorations).toContainEqual(expect.objectContaining({ kind: 'sanctoral', id: 'st-giles', vespersNote: 'tomorrow' }));
|
||||
// today alone. Originally reported by the user 2026-08-31 against Aug
|
||||
// 31/Sep 1 (St. Raymond Nonnatus vs. St. Giles); re-pointed at this pair
|
||||
// once St. Giles was dropped from the Sept 1 calendar (2026-09-01).
|
||||
const day = resolveEveningDay('2026-02-05');
|
||||
expect(day.date).toBe('2026-02-05');
|
||||
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-agatha' });
|
||||
expect(day.commemorations).toContainEqual(expect.objectContaining({ kind: 'sanctoral', id: 'st-dorothea', vespersNote: 'tomorrow' }));
|
||||
});
|
||||
|
||||
it('an exact rank tie goes to tomorrow, per the rubric\'s tie-break', () => {
|
||||
|
||||
Reference in New Issue
Block a user