Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45c1f4e958 | |||
| 64271befee |
@@ -315,7 +315,6 @@ days:
|
|||||||
# Michaelmas. Kept mapped here anyway as a deliberate, informed
|
# Michaelmas. Kept mapped here anyway as a deliberate, informed
|
||||||
# simplification (explicit user decision, 2026-08), not an oversight --
|
# simplification (explicit user decision, 2026-08), not an oversight --
|
||||||
# see st-michael.yml.
|
# see st-michael.yml.
|
||||||
"09-01": [st-giles, ss-twelve-brothers]
|
|
||||||
"09-02": [st-stephen-of-hungary]
|
"09-02": [st-stephen-of-hungary]
|
||||||
"09-03": [st-pius-x]
|
"09-03": [st-pius-x]
|
||||||
"09-05": [st-lawrence-justinian]
|
"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
|
// the Sept 1 collision test deliberately uses 2025 *because* Aug 31
|
||||||
// falls on Sunday that year — see its own comment.
|
// falls on Sunday that year — see its own comment.
|
||||||
describe('September sanctoral pull (first pass)', () => {
|
describe('September sanctoral pull (first pass)', () => {
|
||||||
it('St. Giles wins outright at Simplex over a genuinely unwinnable stub', () => {
|
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', () => {
|
||||||
// 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.
|
|
||||||
const day = resolveDay('2026-09-01');
|
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.winner).toEqual({ kind: 'temporal', id: 'post-pentecost-14' });
|
||||||
expect(day.commemorations).toEqual([
|
expect(day.commemorations).toEqual([]);
|
||||||
{ kind: 'sanctoral', id: 'ss-twelve-brothers', name: 'Ss. Twelve Brothers, Martyrs', nameLa: 'Duodecim Fratres, Martyres', rank: 'simplex' },
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
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');
|
const day = resolveDay('2025-09-01');
|
||||||
expect(day.winner).toEqual({
|
expect(day.winner).toEqual({
|
||||||
kind: 'sanctoral',
|
kind: 'sanctoral',
|
||||||
@@ -30,10 +23,7 @@ describe('September sanctoral pull (first pass)', () => {
|
|||||||
rank: 'semiduplex',
|
rank: 'semiduplex',
|
||||||
transferredFrom: '2025-08-31',
|
transferredFrom: '2025-08-31',
|
||||||
});
|
});
|
||||||
expect(day.commemorations).toEqual([
|
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' },
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
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)', () => {
|
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', () => {
|
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
|
// Feb 5, 2026: St. Agatha (Semiduplex) vs. Feb 6's St. Dorothea
|
||||||
// (Simplex). Raymond outranks Giles, so Raymond should keep his own
|
// (Simplex). Agatha outranks Dorothea, so Agatha should keep her own
|
||||||
// evening even though Semiduplex never cleared the old fixed
|
// evening even though Semiduplex never cleared the old fixed
|
||||||
// duplex-2-classis floor -- the real "De Concurrentia Officii" rule is a
|
// duplex-2-classis floor -- the real "De Concurrentia Officii" rule is a
|
||||||
// direct comparison against tomorrow's rank, not a fixed threshold on
|
// direct comparison against tomorrow's rank, not a fixed threshold on
|
||||||
// today alone. Reported by the user 2026-08-31.
|
// today alone. Originally reported by the user 2026-08-31 against Aug
|
||||||
const day = resolveEveningDay('2026-08-31');
|
// 31/Sep 1 (St. Raymond Nonnatus vs. St. Giles); re-pointed at this pair
|
||||||
expect(day.date).toBe('2026-08-31');
|
// once St. Giles was dropped from the Sept 1 calendar (2026-09-01).
|
||||||
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-raymond-nonnatus' });
|
const day = resolveEveningDay('2026-02-05');
|
||||||
expect(day.commemorations).toContainEqual(expect.objectContaining({ kind: 'sanctoral', id: 'st-giles', vespersNote: 'tomorrow' }));
|
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', () => {
|
it('an exact rank tie goes to tomorrow, per the rubric\'s tie-break', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user