calendar: exempt Vigils from Our Lady's Saturday's demotion
Deploy / deploy (push) Successful in 49s

Refined per direct correction: Our Lady's Saturday is really only a
Simplex-strength standing, not a privileged-feria-minor-shaped one --
a Vigil keeps forcing its own primacy on a Saturday the same way it
already does any other day (see calendar/commemorations.ts's own
transferDirectionOf special-casing for Vigils elsewhere). Only a
Simplex saint alone now loses to it; a Vigil, along with anything
Semiduplex-or-higher, wins outright and Marian Saturday doesn't apply.

Un-does the two test-date moves this same regression prompted last
time (Vigil of St. Lawrence, Vigil of St. John Baptist) -- both dates'
original years work again now that the fix is right.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 14:20:13 -04:00
parent 0404642614
commit 2247e8c27f
4 changed files with 34 additions and 26 deletions
+13 -8
View File
@@ -140,13 +140,18 @@ function applyChristTheKing(isoDate: string, winner: DayWinner, commemorations:
/**
* Layered on top of everything above, same spirit as applyOctaves: never
* changes decideOccurrence's own rules, just relabels the result on a free
* Saturday. Real standing of its own (per direct instruction, mirrors
* privileged-feria-minor exactly) — a Semiduplex-or-higher saint still
* wins outright and this never applies; a Simplex (or Vigil) saint loses
* to it and is commemorated instead, same as an Advent feria would demote
* one. `ordinary-feria` is the only category this touches — every
* privileged season/day (Ember Saturdays, Advent, Lent, ...) already has
* its own real standing and keeps it untouched.
* Saturday. Real standing of its own, but only really a Simplex-strength
* one (per direct instruction, refined from an earlier "mirrors
* privileged-feria-minor exactly" pass that also swept in Vigils, which
* turned out wrong: a Vigil keeps forcing its own primacy on a Saturday
* the same way it already does any other day, same as Simplex always has
* — see calendar/commemorations.ts's own transferDirectionOf for Vigil's
* usual special standing elsewhere) — a Simplex saint alone loses to it
* and is commemorated instead; anything Semiduplex-or-higher, or a Vigil,
* still wins outright and this never applies. `ordinary-feria` is the
* only category this touches — every privileged season/day (Ember
* Saturdays, Advent, Lent, ...) already has its own real standing and
* keeps it untouched.
*
* The relabel (not just leaving `winner` as the plain temporal id) is
* what lets getDayLabel/getBenedictusAntiphon/getDayCollects/getLaudsPsalmodyOverride
@@ -175,7 +180,7 @@ function applyMarianSaturday(
if (winner.kind === 'temporal') {
return MARIAN_SATURDAY;
}
if (isAtLeast(winner.rank, 'semiduplex')) {
if (winner.rank !== 'simplex') {
return winner;
}
commemorations.push({ kind: 'sanctoral', id: winner.id, name: winner.name, rank: winner.rank });