Full precedence sweep of temporal-categories.yml, two more real bugs
Deploy / deploy (push) Successful in 1m27s

Following the Ascensiontide fix, swept every remaining unverified Sunday/
feria precedence tier against the live reference engine:

- commemorations.ts's privileged-sunday rule was itself wrong: a
  duplex-majus+ candidate was given a bare commemoration instead of
  transferring, never actually verified. Live-checked the Immaculate
  Conception (transfers off Advent II) and the Annunciation (transfers
  off Palm/Easter Sunday) - confirmed correct by direct instruction.
  privileged-sunday now transfers every rank unconditionally.

- eastertide's own Sunday tier was backwards (privileged-sunday instead
  of ordinary-sunday) for the ordinary Sundays after Easter - live-
  verified twice (Finding of the Holy Cross, St. Mark both win outright).
  Easter Day itself still needs the stronger tier, now special-cased
  directly since Sundays never consult the offset table.

Six existing tests updated to reflect real, live-verified behavior - each
had the old wrong "commemorated in place" assumption baked into its
expected value. Remaining unverified entries (Vigil of Pentecost/
Christmas, Corpus Christi/Sacred Heart) documented as such rather than
silently assumed correct.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XMSokiTD2Qc5vPP2YQu3Q
This commit is contained in:
2026-09-01 11:45:04 -04:00
parent 6b66999908
commit 4adbb71ddf
10 changed files with 190 additions and 63 deletions
+12 -8
View File
@@ -104,17 +104,21 @@ describe('resolveOrdo("compline", ...)', () => {
it('anticipates Advent I: the Saturday evening before switches to the Alma Redemptoris Mater and shows the anticipated day label', () => {
// Nov 30, 2025 is Advent I Sunday -- also St. Andrew's own day
// (Duplex II. classis), correctly commemorated alongside it since the
// November sanctoral pull (see tests/calendar/day-label.test.ts). This
// evening also anticipates Advent I from Nov 29, itself the Vigil of
// St. Andrew -- but the Vigil isn't also shown alongside his own
// feast (calendar/vespers.ts's own isVigilOfTomorrow check, keyed off
// each Vigil's explicit `vigilOf` field): showing both would just be
// redundant, the same feast named twice.
// (Duplex II. classis), but a privileged Sunday transfers him
// entirely rather than commemorating him in place (live-verified
// 2026-09-01, see tests/calendar/day-label.test.ts). This evening
// also anticipates Advent I from Nov 29, itself the Vigil of St.
// Andrew -- calendar/vespers.ts's own isVigilOfTomorrow check only
// suppresses the Vigil's own commemoration when tomorrow's page
// *also* shows St. Andrew (which would be redundant); since he no
// longer does (he's transferred away, not commemorated), both pieces
// of information are genuinely distinct and both show.
const eve = resolveOrdo('compline', '2025-11-29');
const last = eve.parts[eve.parts.length - 1];
expect(last?.kind === 'preces' ? last.label : undefined).toBe('Alma Redemptoris Mater');
expect(eve.dayLabel?.en).toBe('The 1st Sunday of Advent (Semiduplex) — St. Andrew, Apostle');
expect(eve.dayLabel?.en).toBe(
'The 1st Sunday of Advent (Semiduplex) — Vigil of St. Andrew (of today) — St. Andrew, Apostle (transferred away)',
);
const dayBefore = resolveOrdo('compline', '2025-11-28');
const lastBefore = dayBefore.parts[dayBefore.parts.length - 1];
+12 -10
View File
@@ -565,18 +565,20 @@ describe('resolveOrdo("lauds", ...)', () => {
});
it('resolves both the winners collect and a commemorated saints collect on a day with a real commemoration', () => {
// 2025-11-30: Advent I (the winner) with St. Andrew, Duplex II. classis,
// commemorated alongside it (see tests/calendar/day-label.test.ts) --
// he has only a bare collect authored (no st-andrew-commemoration.yml
// Ant+V/R bundle yet), so this renders as a labeled 'preces' block
// (see resolve-common.ts's sanctoralCommemorationPart), not a second
// unlabeled 'prayer' the way it used to.
const ordo = resolveOrdo('lauds', '2025-11-30');
// 2029-01-14: post-Epiphany II (the winner, `ordinary-sunday`) with
// St. Felix Presbyter, Simplex, commemorated alongside it — live-
// verified 2026-09-01. (Not 2025-11-30/St. Andrew as this test used
// to: a privileged Sunday transfers *everything*, no rank exception
// — Andrew doesn't get a bare commemoration there at all, see
// tests/calendar/day-label.test.ts. `ordinary-sunday`'s own Simplex
// branch is the real case that still commemorates a saint in place.)
const ordo = resolveOrdo('lauds', '2029-01-14');
const collects = ordo.parts.filter((p) => p.kind === 'prayer');
expect(collects.length).toBe(1);
const andrewCommemoration = ordo.parts.find((p) => p.kind === 'preces' && p.label?.includes('Andrew'));
expect(andrewCommemoration?.kind === 'preces' ? andrewCommemoration.text.text.en : undefined).toContain(
'Andrew',
const felixCommemoration = ordo.parts.find((p) => p.kind === 'preces' && p.label?.includes('Felix'));
expect(felixCommemoration).toBeDefined();
expect(felixCommemoration?.kind === 'preces' ? felixCommemoration.text.text.en : undefined).toContain(
'palm tree',
);
});
+1 -1
View File
@@ -718,7 +718,7 @@ describe('resolveOrdo("matins", ...) rest-of-year temporal nocturn-readings swee
['2026-04-19', 'easter-3'],
['2026-04-27', 'easter-4'],
['2026-05-04', 'easter-5'],
['2026-05-11', 'easter-6'],
['2026-05-10', 'easter-6 (the real Sunday — not 2026-05-11: since the eastertide-Sunday precedence fix (2026-09-01), St. Antoninus, Duplex, now correctly wins outright on his own day, May 10, rather than transferring onto Monday, so easter-6\'s own pooled readings show up there commemorated, not on the 11th)'],
['2026-05-18', 'sunday-after-ascension'],
['2026-04-05', 'easter-sunday'],
['2026-05-24', 'pentecost-sunday'],