diff --git a/src/data/propers/common/lauds-capitulum-annunciation.yml b/src/data/propers/common/lauds-capitulum-annunciation.yml new file mode 100644 index 0000000..f0f4066 --- /dev/null +++ b/src/data/propers/common/lauds-capitulum-annunciation.yml @@ -0,0 +1,21 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-25 (real fixed date, always winnable). Own proper +# chapter (Isa 7:14-15, "Ecce virgo concípiet"). Lauds responsory and +# both hours' hymns turn out byte-identical to Common-of-the-BVM's own +# already-authored content, but both versicles ("Ave, María, grátia +# plena") and the Vespers responsory ("Ángelus Dómini") are genuinely +# her own, distinct from the Common's -- authored explicitly under her +# own id rather than left to fall through (resolveOfficeBundle resolves +# a whole bundle per id, not per part). Same chapter reused for Vespers +# -- no separate vespers-capitulum- file authored, per vespers.ts's +# vespersCapitulumForOverride fallback. +id: lauds-capitulum-annunciation +text: + la: "Ecce virgo concípiet, et páriet fílium, et vocábitur nomen ejus Emmánuel. Butýrum et mel cómedet, ut sciat reprobáre malum, et elígere bonum." + en: "Behold a virgin shall conceive, and bear a son, and his name shall be called Emmanuel. He shall eat butter and honey, that he may know to refuse the evil, and to choose the good." +citation: + la: "Isa 7:14-15" + en: "Isa 7:14-15" +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-hymn-annunciation.yml b/src/data/propers/common/lauds-hymn-annunciation.yml new file mode 100644 index 0000000..ba57ebd --- /dev/null +++ b/src/data/propers/common/lauds-hymn-annunciation.yml @@ -0,0 +1,85 @@ +# Reused verbatim from Common-of-the-BVM's own Lauds hymn (2026-08-26): +# live-verified byte-identical on the Annunciation's own real day +# (2026-03-25). See lauds-capitulum-annunciation.yml's header. +# +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# `votive=C11` live query, 2026-08 -- see lauds-capitulum-common-of-the- +# bvm.yml's header. "O gloriósa Dómina" -- the same pre-Urban VIII hymn +# text already found for the Annunciation's own proper (a separate, +# individually-imported saint, not this Common) -- a real, confirmed +# overlap between the two, not a mix-up. +id: lauds-hymn-annunciation +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: verified + en: verified diff --git a/src/data/propers/common/lauds-responsory-annunciation.yml b/src/data/propers/common/lauds-responsory-annunciation.yml new file mode 100644 index 0000000..1bad27d --- /dev/null +++ b/src/data/propers/common/lauds-responsory-annunciation.yml @@ -0,0 +1,23 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-25 -- byte-identical to Common-of-the-BVM's own +# Lauds responsory, reused verbatim. See lauds-capitulum-annunciation.yml's +# header. +id: lauds-responsory-annunciation +text: + la: | + R.br. Ave María, grátia plena, * Dóminus tecum. + ℟. Ave María, grátia plena, * Dóminus tecum. + ℣. Benedícta tu in muliéribus, et benedíctus fructus ventris tui. + ℟. Dóminus tecum. + ℣. Glória Patri, et Fílio, * et Spirítui Sancto. + ℟. Ave María, grátia plena, * Dóminus tecum. + en: | + R.br. Hail Mary full of grace, * the Lord is with thee. + ℟. Hail Mary full of grace, * the Lord is with thee. + ℣. Blessed art thou among women, and blessed is the fruit of thy womb. + ℟. The Lord is with thee. + ℣. Glory be to the Father, and to the Son, * and to the Holy Ghost. + ℟. Hail Mary full of grace, * the Lord is with thee. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-versicle-annunciation.yml b/src/data/propers/common/lauds-versicle-annunciation.yml new file mode 100644 index 0000000..ed4e8d0 --- /dev/null +++ b/src/data/propers/common/lauds-versicle-annunciation.yml @@ -0,0 +1,15 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-25 -- her own versicle, distinct from Common-of- +# the-BVM's own ("Diffúsa est grátia"). Same versicle as Vespers -- see +# vespers-versicle-annunciation.yml. +id: lauds-versicle-annunciation +text: + la: | + ℣. Ave, María, grátia plena. + ℟. Dóminus tecum. + en: | + ℣. Hail, Mary, full of grace. + ℟. The Lord is with thee. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-hymn-annunciation.yml b/src/data/propers/common/vespers-hymn-annunciation.yml new file mode 100644 index 0000000..9d21363 --- /dev/null +++ b/src/data/propers/common/vespers-hymn-annunciation.yml @@ -0,0 +1,138 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# `votive=C11` live query, 2026-08 -- "Ave maris stella," the classic +# Common-of-the-BVM Vespers hymn, genuinely distinct from the Lauds hymn +# (unlike some other categories this session where the two hours shared +# one hymn text) -- see lauds-capitulum-common-of-the-bvm.yml's header +# for the fuller gap/sourcing writeup. +# Reused verbatim from Common-of-the-BVM's own Vespers hymn (2026-08-26): +# live-verified byte-identical on the Annunciation's own real day +# (2026-03-25). See lauds-capitulum-annunciation.yml's header. +id: vespers-hymn-annunciation +text: + la: >- + Ave maris stella, + + Dei Mater alma, + + Atque semper Virgo, + + Felix cæli porta. + + + Sumens illud Ave + + Gabriélis ore, + + Funda nos in pace, + + Mutans Hevæ nomen. + + + Solve vincla reis, + + Profer lumen cæcis, + + Mala nostra pelle, + + Bona cuncta posce. + + + Monstra te esse matrem, + + Sumat per te preces, + + Qui pro nobis natus, + + Tulit esse tuus. + + + Virgo singuláris, + + Inter omnes mitis, + + Nos culpis solútos + + Mites fac et castos. + + + Vitam præsta puram, + + Iter para tutum, + + Ut vidéntes Jesum, + + Semper collætémur. + + + Sit laus Deo Patri, + + Summo Christo decus, + + Spirítui Sancto, + + Tribus honor unus. Amen. + en: >- + Ave, star of ocean, + + Child divine who barest, + + Mother, ever-Virgin, + + Heaven's portal fairest. + + + Taking that sweet Ave + + Erst by Gabriel spoken, + + Eva's name reversing, + + Be of peace the token. + + + Break the sinners' fetters, + + Light to blind restoring, + + All our ills dispelling, + + Every boon imploring. + + + Show thyself a mother + + In thy supplication; + + He will hear who chose thee + + At his incarnation. + + + Maid all maids excelling, + + Passing meek and lowly, + + Win for sinners pardon, + + Make us chaste and holy. + + + As we onward journey + + Aid our weak endeavour, + + Till we gaze on Jesus + + And rejoice forever. + + + Father, Son, and Spirit, + + Three in One confessing, + + Give we equal glory + + Equal praise and blessing. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-responsory-annunciation.yml b/src/data/propers/common/vespers-responsory-annunciation.yml new file mode 100644 index 0000000..df2ee1c --- /dev/null +++ b/src/data/propers/common/vespers-responsory-annunciation.yml @@ -0,0 +1,26 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-03-25 -- her own proper responsory ("Ángelus Dómini * +# Nuntiávit Maríæ," the opening line of the Angelus), distinct from +# Common-of-the-BVM's own. No English rendering exists in the reference +# engine for this text -- own translation of this well-known, standard +# Angelus wording, marked draft. See lauds-capitulum-annunciation.yml's +# header. +id: vespers-responsory-annunciation +text: + la: | + R.br. Ángelus Dómini * Nuntiávit Maríæ. + ℟. Ángelus Dómini * Nuntiávit Maríæ. + ℣. Et concépit de Spíritu Sancto. + ℟. Nuntiávit Maríæ. + ℣. Glória Patri, et Fílio, * et Spirítui Sancto. + ℟. Ángelus Dómini * Nuntiávit Maríæ. + en: | + R.br. The Angel of the Lord * declared unto Mary. + ℟. The Angel of the Lord * declared unto Mary. + ℣. And she conceived of the Holy Ghost. + ℟. Declared unto Mary. + ℣. Glory be to the Father, and to the Son, * and to the Holy Ghost. + ℟. The Angel of the Lord * declared unto Mary. +status: + la: verified + en: draft diff --git a/src/data/propers/common/vespers-versicle-annunciation.yml b/src/data/propers/common/vespers-versicle-annunciation.yml new file mode 100644 index 0000000..c4c4196 --- /dev/null +++ b/src/data/propers/common/vespers-versicle-annunciation.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-03-25 -- same versicle as Lauds (see lauds-versicle- +# annunciation.yml). +id: vespers-versicle-annunciation +text: + la: | + ℣. Ave, María, grátia plena. + ℟. Dóminus tecum. + en: | + ℣. Hail, Mary, full of grace. + ℟. The Lord is with thee. +status: + la: verified + en: verified diff --git a/tests/hours/lauds.test.ts b/tests/hours/lauds.test.ts index b992f3b..021e31f 100644 --- a/tests/hours/lauds.test.ts +++ b/tests/hours/lauds.test.ts @@ -340,6 +340,17 @@ describe('resolveOrdo("lauds", ...)', () => { expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Jesu, coróna Vírginum'); }); + it("resolves the Annunciation's own proper chapter, with Common-of-the-BVM's hymn", () => { + // Live-verified against Divinum Officium (Monastic Tridentinum + // 1617), 2026-03-25 (fixed date, always winnable). See lauds- + // capitulum-annunciation.yml's header. + const ordo = resolveOrdo('lauds', '2026-03-25'); + const chapter = ordo.parts.find((p) => p.kind === 'chapter'); + expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Isa 7:14-15'); + const hymn = ordo.parts.find((p) => p.kind === 'hymn'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('O gloriósa Dómina'); + }); + it('includes the Kyrie + Our Father lead-in right after the Benedictus, before the day collect (either form)', () => { const ordo = resolveOrdo('lauds', FERIAL_TUESDAY); const litanyIndex = ordo.parts.findIndex((p) => p.kind === 'preces' && p.text.text.la?.includes('Kýrie, eléison')); diff --git a/tests/hours/vespers.test.ts b/tests/hours/vespers.test.ts index 91eb174..593c4d0 100644 --- a/tests/hours/vespers.test.ts +++ b/tests/hours/vespers.test.ts @@ -364,6 +364,16 @@ describe('resolveOrdo("vespers", ...)', () => { expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Láudibus cives résonent canóris'); }); + it("resolves the Annunciation's own proper Vespers responsory ('Angelus Domini'), distinct from Common-of-the-BVM's own", () => { + // Live-verified against Divinum Officium (Monastic Tridentinum + // 1617), 2026-03-25. See lauds-capitulum-annunciation.yml's header. + const ordo = resolveOrdo('vespers', '2026-03-25'); + const responsory = ordo.parts.find((p) => p.kind === 'responsory'); + expect(responsory?.kind === 'responsory' ? responsory.text.text.la : undefined).toContain('Ángelus Dómini'); + const hymn = ordo.parts.find((p) => p.kind === 'hymn'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Ave maris stella'); + }); + it("renders Passiontide's seasonal office, with the Gloria Patri omitted from the responsory", () => { // 2026-03-30 is Holy Monday (Passion Sunday 2026-03-22 through Holy // Saturday 2026-04-04) -- deliberately not 03-25, the Annunciation's