Compare commits

...

2 Commits

Author SHA1 Message Date
will 45c1f4e958 Update tests for Sept 1 saints removal
Deploy / deploy (push) Successful in 1m28s
september-sanctoral.test.ts: Sept 1 now resolves to a plain temporal
day with no commemorations; the Raymond Nonnatus transfer-collision
case now wins uncontested since the native Sept 1 saints are gone.

vespers.test.ts: the semiduplex-keeps-its-own-Vespers-against-a-
lower-ranked-tomorrow regression test used Raymond Nonnatus vs. St.
Giles as its example pair; re-pointed to St. Agatha (semiduplex) vs.
St. Dorothea (simplex), a different adjacent pair that exercises the
same concurrentia rule.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XMSokiTD2Qc5vPP2YQu3Q
2026-09-01 06:24:20 -04:00
will 64271befee Drop St. Giles and Ss. Twelve Brothers from Sept 1
User decision to carry no saints on Sept 1. Data files for both
saints (and their propers/commemoration bundles) are left in place,
restorable by re-adding the sanctoral-calendar.yml list entry, same
pattern used when St. Hermes was dropped from 8/28.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XMSokiTD2Qc5vPP2YQu3Q
2026-09-01 06:24:14 -04:00
3 changed files with 14 additions and 23 deletions
-1
View File
@@ -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]
+5 -15
View File
@@ -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)', () => {
+9 -7
View File
@@ -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', () => {