Add 4 more fixed Lord's/BVM feasts, and fix Our Lady of the Snows' Nocturn 3
Deploy / deploy (push) Successful in 1m6s

Finding of the Holy Cross (May 3), the Transfiguration (Aug 6), the
Exaltation of the Holy Cross (Sep 14), and Dedication of the Basilica of
the Most Holy Savior (Nov 9, the Lateran) were all excluded under the
same stale "fixed feast of the Lord, not modeled" note that turned out
wrong for Our Lady of the Snows. All four have real, complete content in
the reference engine. Presentation of the BVM (Nov 21) was excluded
under the equivalent "fixed BVM feast" note and is added the same way.

- finding-of-the-holy-cross: fully proprium, own collect/antiphon/Matins
  throughout; now correctly outranks
  ss-alexander-eventius-theodulus-and-juvenal, matching what that
  saint's own file already documented as the live reality.
- transfiguration: same proprium shape. Its subordinate saints (Ss.
  Xystus/Felicissimus/Agapitus) stay excluded -- blocked by the real,
  separate octave/subordination-rendering gap, not by an unmodeled
  Transfiguration.
- exaltation-of-the-holy-cross: reuses the Finding of the Holy Cross's
  content wholesale (ex Sancti/05-03) -- collect/antiphon via a cross-id
  `propers` pointer, Matins nocturn-readings duplicated (no cross-id
  lookup exists for that mechanism).
- dedication-of-the-basilica-of-the-most-holy-savior: reuses the
  existing Common-of-a-Dedication (collect-c8, benedictus-antiphon-
  common-of-a-dedication), real unique Nocturn 2 vita of her own. Her
  secondary, St. Theodore, stays excluded for the same
  octave/subordination reason as above.
- presentation-of-the-bvm: real unique collect of her own; her
  Benedictus antiphon is a substituted Common reference
  (truncate-and-add-alleluia edit specific to this feast), authored as
  her own file.

Also: our-lady-of-the-snows.yml was missing its own Nocturn 3 (she
defers to Commune/C11's own Gospel-incipit-plus-Bede-homily, same as
Presentation of the BVM) -- added.

Test updates (not regressions): three tests had fixed proof dates
colliding with the newly-added feasts, updated to reflect the new,
correct behavior. npm test (365 tests) and tsc --noEmit both pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 14:48:50 -04:00
parent 42d0b21c2a
commit 80f4f935be
21 changed files with 1264 additions and 63 deletions
+16 -9
View File
@@ -18,20 +18,27 @@ describe('May sanctoral pull (first pass)', () => {
expect(getDayCollect(day).status.en).toBe('verified');
});
it('two stubs are genuinely unwinnable in the real historical calendar, not just an artifact of the year checked', () => {
it('genuinely unwinnable stubs correctly lose to their real competitor, now that both are modeled', () => {
// Ss. Alexander/Eventius/Theodulus/Juvenal always lose to the Finding
// of the Holy Cross (May 3) in real practice — but that's a fixed
// feast of the Lord, which this app doesn't model at all (same known
// gap as Circumcision/Epiphany/Purification/Annunciation), so the stub
// wins by default here rather than being displaced the way it really
// would be.
// of the Holy Cross (May 3) in real practice — both are now modeled
// (see finding-of-the-holy-cross.yml), so the collision engine
// correctly demotes the stub to a commemoration instead of letting it
// win by default.
const may3 = resolveDay('2033-05-03');
expect(may3.winner).toEqual({
kind: 'sanctoral',
id: 'ss-alexander-eventius-theodulus-and-juvenal',
name: 'Ss. Alexander I, Eventius, and Theodulus, Martyrs, and Juvenal, Bishop and Confessor',
rank: 'simplex',
id: 'finding-of-the-holy-cross',
name: 'The Finding of the Holy Cross',
rank: 'duplex-2-classis',
});
expect(may3.commemorations).toEqual([
{
kind: 'sanctoral',
id: 'ss-alexander-eventius-theodulus-and-juvenal',
name: 'Ss. Alexander I, Eventius, and Theodulus, Martyrs, and Juvenal, Bishop and Confessor',
rank: 'simplex',
},
]);
// St. Pudentiana always loses to St. Peter Celestine (May 19, also fixed-date) —
// this one *is* modeled (both are real sanctoral records), so it