From 73f9c1aebe60b3359e93461d7a8171ab15177ad7 Mon Sep 17 00:00:00 2001 From: Will Estes Date: Tue, 11 Aug 2026 11:57:57 -0400 Subject: [PATCH] hours: use the Marian Sabbato hymn as Saturday's own Lauds default By explicit choice, not the honest-missing placeholder from before: a genuinely per-annum, unprivileged Saturday isn't achievable (every one is either Marian-Sabbato-overridden or in a privileged season with its own swapped hymn), so Sanctae Mariae Sabbato's own hymn ("O gloriosa Domina") becomes Saturday's default rather than leaving a gap. Co-Authored-By: Claude Sonnet 5 --- .../propers/common/lauds-hymn-saturday.yml | 60 +++++++++++++++---- tests/hours/lauds.test.ts | 5 +- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/data/propers/common/lauds-hymn-saturday.yml b/src/data/propers/common/lauds-hymn-saturday.yml index e5b35ca..9c9e5f3 100644 --- a/src/data/propers/common/lauds-hymn-saturday.yml +++ b/src/data/propers/common/lauds-hymn-saturday.yml @@ -1,12 +1,52 @@ -# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live query. -# Every ordinary-time Saturday is either Marian-Sabbato-overridden or -# falls in a privileged season (Lenten/Advent Ember Saturday) whose hymn is -# itself swapped for the season's own -- there's no achievable date that -# shows a genuinely per-annum, unprivileged Saturday Lauds hymn. Left -# missing rather than presenting a season-specific hymn as if it were the -# plain weekday default. +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live +# query, Sanctæ Mariæ Sabbato (2026-09-05). By explicit choice, this -- +# not a genuinely per-annum unprivileged Saturday, which isn't achievable +# (see hours/types.ts's 'lauds-psalmody' doc comment on the Marian +# Saturday) -- is Saturday's own default hymn. id: lauds-hymn-saturday -text: {} +text: + la: | + O gloriósa Dómina, + Excélsa super sídera: + Qui te creávit, próvide + Lactásti sacro úbere. + + Quod Heva tristis ábstulit, + Tu reddis almo gérmine: + Intrent ut astra flébiles, + Cæli fenéstra facta es. + + Tu Regis alti jánua, + Et porta lucis fúlgida: + Vitam datam per Vírginem, + Gentes redémptæ, pláudite. + + Glória tibi Dómine, + Qui natus es de Vírgine, + Cum Patre et Sancto Spíritu, + In sempitérna sǽcula. + Amen. + en: | + O glorious lady! throned on high + Above the star-illumined sky; + Thereto ordained, thy bosom lent + To thy Creator nourishment. + + Through thy sweet offspring we receive + The bliss once lost through hapless Eve; + And heaven to mortals open lies + Now thou art portal of the skies. + + Thou art the door of heaven's high King, + Light's gateway fair and glistering; + Life through a Virgin is restored; + Ye ransomed nations, praise the Lord! + + All honour, laud, and glory be, + O Jesu, Virgin-born, to thee; + All glory, as is ever meet, + To Father and to Paraclete. + Amen. status: - la: missing - en: missing + la: verified + en: verified diff --git a/tests/hours/lauds.test.ts b/tests/hours/lauds.test.ts index 7ff4a05..d2d971f 100644 --- a/tests/hours/lauds.test.ts +++ b/tests/hours/lauds.test.ts @@ -105,10 +105,11 @@ describe('resolveOrdo("lauds", ...)', () => { expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Ales diéi núntius'); }); - it("marks Saturday's hymn honestly missing rather than presenting a privileged season's swapped hymn as the default", () => { + it("uses the Marian Sabbato hymn as Saturday's own default (explicit choice, since a genuinely unprivileged Saturday isn't achievable)", () => { const ordo = resolveOrdo('lauds', '2026-06-20'); const hymn = ordo.parts.find((p) => p.kind === 'hymn'); - expect(hymn?.kind === 'hymn' ? hymn.text.status.la : undefined).toBe('missing'); + expect(hymn?.kind === 'hymn' ? hymn.text.status.la : undefined).toBe('verified'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('O gloriósa Dómina'); }); it('resolves the Benedictus as a canticle with an opening antiphon and a full repeat, same shape as Compline\'s Nunc Dimittis', () => {