diff --git a/src/data/propers/common/lauds-capitulum-corpus-christi.yml b/src/data/propers/common/lauds-capitulum-corpus-christi.yml new file mode 100644 index 0000000..217afeb --- /dev/null +++ b/src/data/propers/common/lauds-capitulum-corpus-christi.yml @@ -0,0 +1,16 @@ +# Corpus Christi's own Lauds chapter (1 Cor 11:23-24) — shared with +# Vespers via vespersCapitulumForOverride's own cross-hour fallback (see +# hours/vespers.ts), not duplicated into a separate vespers-capitulum- +# corpus-christi.yml. Live-verified against Divinum Officium (Monastic +# Tridentinum 1617), Lauds/Vespers live query, 2026-06-04 (Corpus Christi +# itself). +id: lauds-capitulum-corpus-christi +text: + la: "Fratres: Ego enim accépi a Dómino quod et trádidi vobis, quóniam Dóminus Jesus, in qua nocte tradebátur, accépit panem, et grátias agens fregit, et dixit: Accípite et manducáte: hoc est corpus meum, quod pro vobis tradétur: hoc fácite in meam commemoratiónem." + en: "Brothers: For I have received of the Lord that which also I delivered unto you, that the Lord Jesus, the same night in which he was betrayed, took bread. And giving thanks, broke, and said: Take ye, and eat: this is my body, which shall be delivered for you: this do for the commemoration of me." +citation: + la: "1 Cor 11:23-24" + en: "1 Cor 11:23-24" +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-capitulum-sacred-heart.yml b/src/data/propers/common/lauds-capitulum-sacred-heart.yml new file mode 100644 index 0000000..f513132 --- /dev/null +++ b/src/data/propers/common/lauds-capitulum-sacred-heart.yml @@ -0,0 +1,17 @@ +# The Sacred Heart's own Lauds chapter (Eph 3:8-9) — shared with Vespers +# via vespersCapitulumForOverride's own cross-hour fallback (see +# hours/vespers.ts), not duplicated into a separate vespers-capitulum- +# sacred-heart.yml. Live-verified against Divinum Officium (Divino +# Afflatu - 1954), Lauds/Vespers live query, 2026-06-12 (the Sacred +# Heart itself) — see matins-hymn-sacred-heart.yml's own header on why +# this track, not Monastic Tridentinum 1617. +id: lauds-capitulum-sacred-heart +text: + la: "Fratres: Mihi ómnium sanctórum mínimo data est grátia hæc, in géntibus evangelizáre investigábiles divítias Christi; et illumináre omnes, quæ sit dispensátio sacraménti abscónditi a sǽculis in Deo." + en: "Brethren: Unto me, who am less than the least of all saints, is this grace given, that I should preach among the Gentiles the unsearchable riches of Christ; and to make all men see what is the fellowship of the Mystery, which from the beginning of the world hath been hid in God." +citation: + la: "Eph 3:8-9" + en: "Eph 3:8-9" +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-hymn-corpus-christi.yml b/src/data/propers/common/lauds-hymn-corpus-christi.yml new file mode 100644 index 0000000..40c809f --- /dev/null +++ b/src/data/propers/common/lauds-hymn-corpus-christi.yml @@ -0,0 +1,120 @@ +# Corpus Christi's own Lauds hymn ("Verbum supérnum pródiens") — whose +# final 2 stanzas ("O salutáris hóstia... Uni trinóque Dómino...") are +# the separately-famous "O Salutaris Hostia" often sung on its own. +# Distinct from Matins' own ("Sacris solémniis") and Vespers' own +# ("Pange, lingua, gloriósi Córporis mystérium" — the "Tantum Ergo" +# hymn). Live-verified against Divinum Officium (Monastic Tridentinum +# 1617), Lauds live query, 2026-06-04 (Corpus Christi itself). Self- +# contained — its own final stanza is the hymn's natural theological +# close, not a separate swappable doxology. +id: lauds-hymn-corpus-christi +text: + la: >- + Verbum supérnum pródiens, + + Nec Patris linquens déxteram, + + Ad opus suum éxiens, + + Venit ad vitæ vésperam. + + + In mortem a discípulo + + Suis tradéndus ǽmulis, + + Prius in vitæ férculo + + Se trádidit discípulis. + + + Quibus sub bina spécie + + Carnem dedit et sánguinem; + + Ut dúplicis substántiæ + + Totum cibáret hóminem. + + + Se nascens dedit sócium, + + Convéscens in edúlium, + + Se móriens in prétium, + + Se regnans dat in prǽmium. + + + O salutáris hóstia, + + Quæ cæli pandis óstium, + + Bella premunt hostília; + + Da robur, fer auxílium. + + + Uni trinóque Dómino, + + Sit sempitérna glória: + + Qui vitam sine término + + Nobis donet in pátria. Amen. + en: >- + The heav'nly Word proceeding forth, + + Yet leaving not the Father's side, + + And going to his work on earth + + Had reached at length life's eventide. + + + By false disciple to be given + + To foemen for his blood athirst, + + Himself, the living bread from heaven, + + He gave to his disciples first. + + + To them he gave, in twofold kind, + + His very flesh, his very blood: + + In love's own fullness thus designed + + Of the whole man to be the food. + + + By birth, our fellow-man was he; + + Our meat, while sitting at the board; + + He died, our ransomer to be; + + He ever reigns, our great reward. + + + O saving victim, opening wide + + The gate of heaven to man below, + + Our foes press on from every side, + + Thine aid supply, thy strength bestow. + + + To thy great name be endless praise, + + Immortal Godhead, One in Three; + + O grant us endless length of days + + In our true native land, with thee. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-hymn-sacred-heart.yml b/src/data/propers/common/lauds-hymn-sacred-heart.yml new file mode 100644 index 0000000..af97e92 --- /dev/null +++ b/src/data/propers/common/lauds-hymn-sacred-heart.yml @@ -0,0 +1,123 @@ +# The Sacred Heart's own Lauds hymn ("Cor, arca legem cóntinens") — +# distinct from Matins' own ("Auctor beáte sǽculi") and Vespers' own +# ("En, ut supérba críminum"). Live-verified against Divinum Officium +# (Divino Afflatu - 1954), Lauds live query, 2026-06-12 (the Sacred +# Heart itself) — see matins-hymn-sacred-heart.yml's own header on why +# this track. Self-contained — its own final stanza is the hymn's +# natural theological close, not a separate swappable doxology. +# +# This day's own Lauds genuinely has no responsory in the source at all +# (straight from chapter to hymn) — see lauds-capitulum-sacred-heart.yml +# and hours/lauds.ts's own resolveOffice, which omits the responsory +# part entirely rather than rendering an empty one. +id: lauds-hymn-sacred-heart +text: + la: >- + Cor, arca legem cóntinens + + Non servitútis véteris, + + Sed grátiæ, sed véniæ, + + Sed et misericórdiæ. + + + Cor, sanctuárium novi + + Intemerátum fœ́deris, + + Templum vetústo sánctius, + + Velúmque scisso utílius. + + + Te vulnerátum cáritas + + Ictu paténti vóluit, + + Amóris invisíbilis + + Ut venerémur vúlnera. + + + Hoc sub amóris sýmbolo + + Passus cruénta et mýstica, + + Utrúmque sacrifícium + + Christus sacérdos óbtulit. + + + Quis non amántem rédamet? + + Quis non redémptus díligat, + + Et Corde in isto séligat + + Ætérna tabernácula? + + + Jesu, tibi sit glória, + + Qui Corde fundis grátiam, + + Cum Patre, et almo Spíritu, + + In sempitérna sǽcula. Amen. + en: >- + Jesus, behind thy temple's veil, + + Hid in an ark of gold, + + On stones engraven, lay the law + + thy finger wrote of old. + + + But in thy body's temple new, + + thy life-blood's throbbing shrine, + + Held, upon fleshly tables graved, + + The law of love divine. + + + And when that heart in death was stilled, + + Each temple's veil was riven: + + And lo, within thy love's red shrine, + + To us to look was given. + + + There make us gaze and see the love + + Which drew thee, for our sake, + + O great high-priest, thyself to God + + A sacrifice to make. + + + Thou, Saviour, cause that every soul + + Which thou hast loved so well, + + May will within thine open heart + + In life and death to dwell. + + + Grant it, O Father, only Son, + + And Spirit, God of grace, + + To whom all worship shall be done, + + In every time and place. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-responsory-corpus-christi.yml b/src/data/propers/common/lauds-responsory-corpus-christi.yml new file mode 100644 index 0000000..2fb0354 --- /dev/null +++ b/src/data/propers/common/lauds-responsory-corpus-christi.yml @@ -0,0 +1,24 @@ +# Corpus Christi's own Lauds responsory ("Panem cæli dedit eis") — +# distinct from Vespers' own ("Cibávit illos ex ádipe fruménti", see +# vespers-responsory-corpus-christi.yml). Live-verified against Divinum +# Officium (Monastic Tridentinum 1617), Lauds live query, 2026-06-04 +# (Corpus Christi itself). +id: lauds-responsory-corpus-christi +text: + la: | + R.br. Panem cæli dedit eis, * Allelúja, allelúja. + R. Panem cæli dedit eis, * Allelúja, allelúja. + V. Panem Angelórum manducávit homo. + R. Allelúja, allelúja. + V. Glória Patri, et Fílio, * et Spirítui Sancto. + R. Panem cæli dedit eis, * Allelúja, allelúja. + en: | + R.br. He gave them the bread of heaven. * Alleluia, Alleluia. + R. He gave them the bread of heaven. * Alleluia, Alleluia. + V. Man did eat Angels' bread. + R. Alleluia, Alleluia. + V. Glory be to the Father, and to the Son, * and to the Holy Ghost. + R. He gave them the bread of heaven. * Alleluia, Alleluia. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-versicle-corpus-christi.yml b/src/data/propers/common/lauds-versicle-corpus-christi.yml new file mode 100644 index 0000000..aeeda11 --- /dev/null +++ b/src/data/propers/common/lauds-versicle-corpus-christi.yml @@ -0,0 +1,12 @@ +# Corpus Christi's own Lauds versicle — distinct from Vespers' own +# ("Panem de cælo præstitísti eis", see +# vespers-versicle-corpus-christi.yml). Live-verified against Divinum +# Officium (Monastic Tridentinum 1617), Lauds live query, 2026-06-04 +# (Corpus Christi itself). +id: lauds-versicle-corpus-christi +text: + la: "V. Pósuit fines tuos pacem, allelúja.\nR. Et ádipe fruménti sátiat te, allelúja." + en: "V. He maketh peace in thy borders, alleluia.\nR. And filleth thee with the finest of wheat, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-versicle-sacred-heart.yml b/src/data/propers/common/lauds-versicle-sacred-heart.yml new file mode 100644 index 0000000..80473e4 --- /dev/null +++ b/src/data/propers/common/lauds-versicle-sacred-heart.yml @@ -0,0 +1,11 @@ +# The Sacred Heart's own versicle — identical at both Lauds and Vespers +# (see vespers-versicle-sacred-heart.yml). Live-verified against Divinum +# Officium (Divino Afflatu - 1954), Lauds/Vespers live query, 2026-06-12 +# (the Sacred Heart itself). +id: lauds-versicle-sacred-heart +text: + la: "V. Hauriétis aquas in gáudio.\nR. De fóntibus Salvatóris." + en: "V. With joy shall ye draw water.\nR. Out of the fountains of the Saviour." +status: + la: verified + en: verified diff --git a/src/data/propers/common/matins-hymn-corpus-christi.yml b/src/data/propers/common/matins-hymn-corpus-christi.yml new file mode 100644 index 0000000..7861e6c --- /dev/null +++ b/src/data/propers/common/matins-hymn-corpus-christi.yml @@ -0,0 +1,183 @@ +# Corpus Christi's own Matins hymn ("Sacris solémniis"), St. Thomas +# Aquinas's own composition for this feast. Live-verified against +# Divinum Officium (Monastic Tridentinum 1617), Matins live query, +# 2026-06-04 (Corpus Christi itself). Self-contained — its own final +# stanza ("Te, trina Déitas...") is the hymn's natural theological +# close, not a separate swappable doxology. +# +# Closes the same real mechanism gap already fixed for Ascension/ +# Pentecost (`corpus-christi` is a temporal-feast id, not a saint +# record, so `resolveOfficeWinner`'s octave-synthesis needed the same +# fix already in place — see hours/resolve-common.ts's +# `ALWAYS_OVERRIDE_TEMPORAL_IDS`). +id: matins-hymn-corpus-christi +text: + la: >- + Sacris solémniis juncta sint gáudia, + + Et ex præcórdiis sonent præcónia; + + Recédant vétera, nova sint ómnia, + + Corda, voces, et ópera. + + + Noctis recólitur cœna novíssima, + + Qua Christus créditur agnum et ázyma + + Dedísse frátribus, juxta legítima + + Priscis indúlta pátribus. + + + Post agnum týpicum, explétis épulis, + + Corpus Domínicum datum discípulis, + + Sic totum ómnibus, quod totum síngulis, + + Ejus fatémur mánibus. + + + Dedit fragílibus córporis férculum, + + Dedit et trístibus sánguinis póculum, + + Dicens: Accípite quod trado vásculum; + + Omnes ex eo bíbite. + + + Sic sacrifícium istud instítuit, + + Cujus offícium commítti vóluit + + Solis presbýteris, quibus sic cóngruit, + + Ut sumant, et dent céteris. + + + Panis angélicus fit panis hóminum; + + Dat panis cǽlicus figúris términum; + + O res mirábilis: mandúcat Dóminum + + Pauper, servus et húmilis. + + + Te, trina Déitas únaque, póscimus; + + Sic nos tu vísita, sicut te cólimus: + + Per tuas sémitas duc nos quo téndimus, + + Ad lucem quam inhábitas. Amen. + en: >- + At this our solemn feast, + + Let holy joys abound, + + And from the inmost breast + + Let songs of praise resound; + + Let ancient rites depart, + + And all be new around, + + In ev'ry act and voice and heart. + + + Remember we that eve, + + When, the last supper spread, + + Christ, as we all believe, + + The lamb, with leavenless bread, + + Among his brethren shared, + + And thus the law obeyed, + + Of old unto their sires declared. + + + The typic lamb consumed, + + The legal feast complete, + + The Lord unto the twelve + + His body gave to eat; + + The whole to all, no less + + The whole to each, did mete + + With his own hands, as we confess. + + + He gave them, weak and frail, + + His flesh, their food to be; + + On them, downcast and sad, + + His blood bestowèd he: + + And thus to them he spake, + + "Receive this cup from me, + + And all of you of this partake." + + + So he this sacrifice + + To institute did will, + + And charged his priests alone + + That office to fulfil: + + In them he did confide: + + To whom pertaineth still + + To take, and to the rest divide. + + + Thus angels' bread is made + + The bread of man today: + + The living bread from heaven + + With figures doth away: + + O wondrous gift indeed! + + The poor and lowly may + + Upon their Lord and Master feed. + + + O Triune Deity, + + To thee we meekly pray, + + So mayst thou visit us, + + As we our homage pay; + + And in thy footsteps bright + + Conduct us on our way + + To where thou dwell'st in cloudless light. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/matins-hymn-sacred-heart.yml b/src/data/propers/common/matins-hymn-sacred-heart.yml new file mode 100644 index 0000000..c54666d --- /dev/null +++ b/src/data/propers/common/matins-hymn-sacred-heart.yml @@ -0,0 +1,125 @@ +# The Sacred Heart's own Matins hymn ("Auctor beáte sǽculi"). Live- +# verified against Divinum Officium (Divino Afflatu - 1954, 2026-06-12, +# the Sacred Heart itself) — not the Monastic Tridentinum 1617 track, +# which doesn't observe this feast on the same date at all (live- +# checked: shows St. Barnabas instead, unaffected). This project's own +# rubric/precedence track is Divino Afflatu anyway (see the repo's +# CLAUDE.md), so this is a real, consistent source choice, not a +# deviation. Self-contained — its own final stanza is the hymn's natural +# theological close, not a separate swappable doxology. +# +# Closes the same real mechanism gap already fixed for Ascension/ +# Pentecost/Corpus Christi (`sacred-heart` is a temporal-feast id, not a +# saint record — see hours/resolve-common.ts's +# `ALWAYS_OVERRIDE_TEMPORAL_IDS`). +id: matins-hymn-sacred-heart +text: + la: >- + Auctor beáte sǽculi, + + Christe, Redémptor ómnium, + + Lumen Patris de lúmine, + + Deúsque verus de Deo. + + + Amor coégit te tuus + + Mortále corpus súmere, + + Ut novus Adam rédderes, + + Quod vetus ille abstúlerat. + + + Ille amor, almus ártifex + + Terræ marísque, et síderum, + + Erráta patrum míserans, + + Et nostra rumpens víncula. + + + Non Corde discédat tuo + + Vis illa amóris íncliti: + + Hoc fonte gentes háuriant + + Remissiónis grátiam. + + + Percússum ad hoc est láncea, + + Passúmque ad hoc est vúlnera: + + Ut nos laváret sórdibus, + + Unda fluénte, et sánguine. + + + Jesu, tibi sit glória, + + Qui Corde fundis grátiam, + + Cum Patre, et almo Spíritu, + + In sempitérna sǽcula. Amen. + en: >- + O Christ, the world's Creator bright, + + Who didst mankind from sin redeem, + + Light from the Father's glorious light, + + True God of God, in bliss supreme. + + + Thy love compelled thee to assume + + A mortal body, man to save; + + Reversing the old Adam's doom; + + Our ransom the new Adam gave. + + + That love which gloriously framed all + + The earth, the stars, and wondrous sea + + Took pity on our parents' fall, + + Broke all our bonds and set us free. + + + O Saviour, let thy potent love + + Flow ever from thy bounteous heart; + + To nations that pure fount above + + The grace of pardon will impart. + + + His heart for this was opened wide, + + And wounded by the soldier's spear, + + That freely from his sacred side + + Might flow the streams our souls to clear. + + + Glory to Father and to Son, + + And to the Holy Ghost the same, + + To whom all power, when time is done, + + And endless rule, in endless fame. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-hymn-corpus-christi.yml b/src/data/propers/common/vespers-hymn-corpus-christi.yml new file mode 100644 index 0000000..e3b996a --- /dev/null +++ b/src/data/propers/common/vespers-hymn-corpus-christi.yml @@ -0,0 +1,169 @@ +# Corpus Christi's own Vespers hymn ("Pange, lingua, gloriósi Córporis +# mystérium") — St. Thomas Aquinas's own Eucharistic hymn, whose final 2 +# stanzas ("Tantum ergo Sacraméntum..." — sung genuflecting per the +# source's own rubric, not modeled here) are the separately-famous +# "Tantum Ergo" sung constantly at Benediction. Distinct from Matins' +# own ("Sacris solémniis") and Lauds' own ("Verbum supérnum pródiens"). +# Live-verified against Divinum Officium (Monastic Tridentinum 1617), +# Vespers live query, 2026-06-04 (Corpus Christi itself). Self-contained +# — its own final stanza is the hymn's natural theological close, not a +# separate swappable doxology. +id: vespers-hymn-corpus-christi +text: + la: >- + Pange, lingua, gloriósi + + Córporis mystérium, + + Sanguinísque pretiósi, + + Quem in mundi prétium + + Fructus ventris generósi + + Rex effúdit géntium. + + + Nobis datus, nobis natus + + Ex intácta Vírgine, + + Et in mundo conversátus, + + Sparso verbi sémine, + + Sui moras incolátus + + Miro clausit órdine. + + + In suprémæ nocte cenæ + + Recúmbens cum frátribus, + + Observáta lege plene + + Cibis in legálibus, + + Cibum turbæ duodénæ + + Se dat suis mánibus. + + + Verbum caro, panem verum + + Verbo carnem éfficit; + + Fitque sanguis Christi merum: + + Et si sensus déficit, + + Ad firmándum cor sincérum + + Sola fides súfficit. + + + Tantum ergo Sacraméntum + + Venerémur cérnui: + + Et antíquum documéntum + + Novo cedat rítui: + + Præstet fides suppleméntum + + Sénsuum deféctui. + + + Genitóri, Genitóque + + Laus et jubilátio, + + Salus, honor, virtus quoque + + Sit et benedíctio: + + Procedénti ab utróque + + Compar sit laudátio. Amen. + en: >- + Sing, my tongue, the Saviour's glory, + + Of his flesh the mystery sing; + + Of the blood, all price exceeding, + + Shed by our immortal King, + + Destined, for the world's redemption, + + From a noble womb to spring. + + + Of a pure and spotless Virgin + + Born for us on earth below, + + He, as man, with man conversing, + + Stayed, the seeds of truth to sow; + + Then he closed in solemn order + + Wondrously his life of woe. + + + On the night of that last supper + + Seated with his chosen band, + + He, the paschal victim eating, + + First fulfills the law's command: + + Then as food to all his brethren + + Gives himself with his own hand. + + + Word made flesh, the bread of nature + + By his word to flesh he turns; + + Wine into his blood he changes: + + What though sense no change discerns? + + Only be the heart in earnest, + + Faith her lesson quickly learns. + + + Down in adoration falling, + + Lo! the sacred Host we hail; + + Lo! o'er ancient forms departing, + + Newer rites of grace prevail; + + Faith for all defects supplying, + + Where the feeble senses fail. + + + To the everlasting Father, + + And the Son who reigns on high, + + With the Holy Ghost proceeding + + Forth from each eternally, + + Be salvation, honour, blessing, + + Might, and endless majesty. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-hymn-sacred-heart.yml b/src/data/propers/common/vespers-hymn-sacred-heart.yml new file mode 100644 index 0000000..75906e1 --- /dev/null +++ b/src/data/propers/common/vespers-hymn-sacred-heart.yml @@ -0,0 +1,123 @@ +# The Sacred Heart's own Vespers hymn ("En, ut supérba críminum") — +# distinct from Matins' own ("Auctor beáte sǽculi") and Lauds' own +# ("Cor, arca legem cóntinens"). Live-verified against Divinum Officium +# (Divino Afflatu - 1954), Vespers live query, 2026-06-12 (the Sacred +# Heart itself) — see matins-hymn-sacred-heart.yml's own header on why +# this track. Self-contained — its own final stanza is the hymn's +# natural theological close, not a separate swappable doxology. +# +# This day's own Vespers genuinely has no responsory in the source at +# all (straight from chapter to hymn), same as its own Lauds — see +# hours/vespers.ts's own resolveOffice, which omits the responsory part +# entirely rather than rendering an empty one. +id: vespers-hymn-sacred-heart +text: + la: >- + En, ut supérba críminum + + Et sæva nostrórum cohors + + Cor sauciávit ínnocens + + Meréntis haud tale Dei! + + + Vibrántis hastam mílitis + + Peccáta nostra dírigunt, + + Ferrúmque diræ cúspidis + + Mortále crimen ácuit. + + + Ex Corde scisso Ecclésia, + + Christo jugáta, náscitur: + + Hoc óstium arcæ in látere est + + Genti ad salútem pósitum. + + + Ex hoc perénnis grátia, + + Ceu septifórmis flúvius, + + Stolas ut illic sórdidas + + Lavémus Agni in sánguine. + + + Turpe est redíre ad crímina, + + Quæ Cor beátum lácerent: + + Sed æmulémur córdibus + + Flammas amóris índices. + + + Jesu, tibi sit glória, + + Qui Corde fundis grátiam, + + Cum Patre, et almo Spíritu, + + In sempitérna sǽcula. Amen. + en: >- + Lo, how the savage crew + + Of our proud sins hath rent + + The heart of our all-gracious God, + + That heart so innocent. + + + The soldier's quivering lance + + Our guilt it was that drave, + + Our wicked deeds that to its point + + Such cruel sharpness gave. + + + O wounded heart, whence sprang + + The Church, the Saviour's bride; + + Thou door of our salvation's ark + + Set in its mystic side. + + + Thou holy fount, whence flows + + The sacred sevenfold flood, + + Where we our filthy robes may cleanse + + In the Lamb's saving blood: + + + By sorrowful relapse, + + thee will we rend no more; + + But like the flames, those types of love, + + Strive heavenward to soar. + + + Father and Son supreme + + And Spirit, hear our cry; + + Whose is the kingdom, praise and power, + + Through all eternity. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-responsory-corpus-christi.yml b/src/data/propers/common/vespers-responsory-corpus-christi.yml new file mode 100644 index 0000000..c6e8d23 --- /dev/null +++ b/src/data/propers/common/vespers-responsory-corpus-christi.yml @@ -0,0 +1,24 @@ +# Corpus Christi's own Vespers responsory ("Cibávit illos ex ádipe +# fruménti") — distinct from Lauds' own ("Panem cæli dedit eis", see +# lauds-responsory-corpus-christi.yml). Live-verified against Divinum +# Officium (Monastic Tridentinum 1617), Vespers live query, 2026-06-04 +# (Corpus Christi itself). +id: vespers-responsory-corpus-christi +text: + la: | + R.br. Cibávit illos ex ádipe fruménti, * Allelúja, allelúja. + R. Cibávit illos ex ádipe fruménti, * Allelúja, allelúja. + V. Et de petra, melle saturávit eos. + R. Allelúja, allelúja. + V. Glória Patri, et Fílio, * et Spirítui Sancto. + R. Cibávit illos ex ádipe fruménti, * Allelúja, allelúja. + en: | + R.br. He fed them with the finest of the wheat. * Alleluia, Alleluia. + R. He fed them with the finest of the wheat. * Alleluia, Alleluia. + V. And with honey out of the rock did He satisfy them. + R. Alleluia, Alleluia. + V. Glory be to the Father, and to the Son, * and to the Holy Ghost. + R. He fed them with the finest of the wheat. * Alleluia, Alleluia. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-versicle-corpus-christi.yml b/src/data/propers/common/vespers-versicle-corpus-christi.yml new file mode 100644 index 0000000..c8c3bc4 --- /dev/null +++ b/src/data/propers/common/vespers-versicle-corpus-christi.yml @@ -0,0 +1,11 @@ +# Corpus Christi's own Vespers versicle — distinct from Lauds' own +# ("Pósuit fines tuos pacem", see lauds-versicle-corpus-christi.yml). +# Live-verified against Divinum Officium (Monastic Tridentinum 1617), +# Vespers live query, 2026-06-04 (Corpus Christi itself). +id: vespers-versicle-corpus-christi +text: + la: "V. Panem de cælo præstitísti eis, allelúja.\nR. Omne delectaméntum in se habéntem, allelúja." + en: "V. Thou didst send them from heaven, alleluia.\nR. Bread able to content every man's delight, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-versicle-sacred-heart.yml b/src/data/propers/common/vespers-versicle-sacred-heart.yml new file mode 100644 index 0000000..8e8a8a6 --- /dev/null +++ b/src/data/propers/common/vespers-versicle-sacred-heart.yml @@ -0,0 +1,11 @@ +# The Sacred Heart's own versicle — identical at both Vespers and Lauds +# (see lauds-versicle-sacred-heart.yml). Live-verified against Divinum +# Officium (Divino Afflatu - 1954), Vespers live query, 2026-06-12 (the +# Sacred Heart itself). +id: vespers-versicle-sacred-heart +text: + la: "V. Hauriétis aquas in gáudio.\nR. De fóntibus Salvatóris." + en: "V. With joy shall ye draw water.\nR. Out of the fountains of the Saviour." +status: + la: verified + en: verified diff --git a/src/hours/lauds.ts b/src/hours/lauds.ts index d6aa4de..4bf36ad 100644 --- a/src/hours/lauds.ts +++ b/src/hours/lauds.ts @@ -321,12 +321,18 @@ function resolveLaudsHymn(day: LiturgicalDay, key: string): ResolvedText { function resolveOffice(day: LiturgicalDay): ResolvedPart[] { const bundle = resolveOfficeBundle('lauds', day); if (bundle) { - return [ - { kind: 'chapter', text: bundle.chapter }, - { kind: 'responsory', text: bundle.responsory }, - { kind: 'hymn', text: bundle.hymn }, - { kind: 'versicle', text: bundle.versicle }, - ]; + const parts: ResolvedPart[] = [{ kind: 'chapter', text: bundle.chapter }]; + // The Sacred Heart's own Lauds genuinely has no responsory at all in + // the source (live-verified, Divino Afflatu 1954, 2026-06-12: straight + // from chapter to hymn, "Capitulum Hymnus Versus" with no + // "Responsorium" in between) — an intentionally missing part, not an + // unauthored one, so omitted from the page entirely rather than + // rendering an empty section. + if (bundle.responsory.status.la !== 'missing' || bundle.responsory.status.en !== 'missing') { + parts.push({ kind: 'responsory', text: bundle.responsory }); + } + parts.push({ kind: 'hymn', text: bundle.hymn }, { kind: 'versicle', text: bundle.versicle }); + return parts; } const seasonSuffix = seasonalOfficeSuffix(day.season); const key = seasonSuffix ?? day.weekday; diff --git a/src/hours/resolve-common.ts b/src/hours/resolve-common.ts index d6b1cf0..20cd137 100644 --- a/src/hours/resolve-common.ts +++ b/src/hours/resolve-common.ts @@ -62,6 +62,8 @@ export const ALWAYS_OVERRIDE_TEMPORAL_IDS = new Set([ 'immaculate-heart-of-mary', 'ascension', 'pentecost-sunday', + 'corpus-christi', + 'sacred-heart', 'circumcision', 'holy-name-of-jesus', 'vigil-of-christmas', diff --git a/src/hours/vespers.ts b/src/hours/vespers.ts index 40e93e7..2328f2c 100644 --- a/src/hours/vespers.ts +++ b/src/hours/vespers.ts @@ -229,12 +229,14 @@ function resolveVespersHymn(day: LiturgicalDay, key: string): ResolvedText { function resolveOffice(day: LiturgicalDay): ResolvedPart[] { const bundle = resolveOfficeBundle('vespers', day, vespersCapitulumForOverride); if (bundle) { - return [ - { kind: 'chapter', text: bundle.chapter }, - { kind: 'responsory', text: bundle.responsory }, - { kind: 'hymn', text: bundle.hymn }, - { kind: 'versicle', text: bundle.versicle }, - ]; + const parts: ResolvedPart[] = [{ kind: 'chapter', text: bundle.chapter }]; + // The Sacred Heart's own Vespers genuinely has no responsory at all in + // the source, same as its own Lauds — see lauds.ts's identical check. + if (bundle.responsory.status.la !== 'missing' || bundle.responsory.status.en !== 'missing') { + parts.push({ kind: 'responsory', text: bundle.responsory }); + } + parts.push({ kind: 'hymn', text: bundle.hymn }, { kind: 'versicle', text: bundle.versicle }); + return parts; } const seasonSuffix = seasonalOfficeSuffix(day.season); const key = seasonSuffix ?? day.weekday; diff --git a/tests/hours/lauds.test.ts b/tests/hours/lauds.test.ts index 7558e41..8b8fb27 100644 --- a/tests/hours/lauds.test.ts +++ b/tests/hours/lauds.test.ts @@ -6,7 +6,7 @@ import { getLaudsCommonOverride } from '../../src/hours/lauds-psalmody-overrides // and src/hours/lauds.ts's own generation-script provenance comments for // why these particular dates. const FERIAL_SUNDAY = '2026-06-21'; -const FERIAL_MONDAY = '2026-06-08'; // not 08-31 -- St. Raymond Nonnatus's own day (common-of-a-confessor) +const FERIAL_MONDAY = '2026-09-07'; // not 2026-06-08 -- that fell inside Corpus Christi's own octave once its own hymnody was modeled 2026-09-04, see TODO.md; not 08-31 either -- St. Raymond Nonnatus's own day (common-of-a-confessor) const FERIAL_TUESDAY = '2033-09-06'; // not 2026-06-16 -- that fell inside Sacred Heart's own octave once modeled 2026-08-26, see TODO.md const LAWRENCE_OCTAVE_DAY = '2026-08-11'; // Semiduplex -- exercises isDoubleOrHigher's false branch differently than a plain feria only in rank, not in psalms (Commune override not modeled, see below) diff --git a/tests/hours/vespers.test.ts b/tests/hours/vespers.test.ts index e61d0da..882f842 100644 --- a/tests/hours/vespers.test.ts +++ b/tests/hours/vespers.test.ts @@ -524,15 +524,23 @@ describe('resolveOrdo("vespers", ...)', () => { // to the octave -- and Jun 9 itself is *also* inside the same // octave, already having lost its own Simplex saint (Ss. Primus and // Felicianus) to it, so neither day has any sanctoral winner left to - // anticipate. Jun 9's evening falls all the way through to the plain - // ferial Vespers default (Trinity week's own governing chapter/hymn), - // with both Primus & Felicianus and Corpus Christi's octave merely - // commemorated, not any widow-specific content at all. + // anticipate. + // + // Corrected 2026-09-04: Jun 9's evening does NOT fall through to the + // plain ferial Vespers default -- that was this test's own original, + // never-actually-verified guess, documenting the same real + // resolveOfficeWinner gap already fixed for Ascension/Pentecost (see + // TODO.md): a temporal-feast octave (Corpus Christi, no saint + // record) wasn't being recognized on ordinary-feria days within it. + // Live-verified against Divinum Officium (Monastic Tridentinum 1617, + // 2026-06-09, "Feria Tertia infra Octavam Corporis Christi"): the + // real content is Corpus Christi's own chapter/hymn ("ex Commune aut + // Festo" in the source), not Trinity week's own governing default. const ordo = resolveOrdo('vespers', '2026-06-09'); const chapter = ordo.parts.find((p) => p.kind === 'chapter'); - expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('2 Cor 1:3-4'); + expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('1 Cor 11:23-24'); const hymn = ordo.parts.find((p) => p.kind === 'hymn'); - expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Tellúris ingens Cónditor'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Pange, lingua, gloriósi'); }); it("uses common-of-the-bvm's real office bundle for Our Lady of Mount Carmel's First Vespers", () => {