diff --git a/src/data/propers/common/apparition-of-st-michael-antiphon.yml b/src/data/propers/common/apparition-of-st-michael-antiphon.yml new file mode 100644 index 0000000..7f2caa8 --- /dev/null +++ b/src/data/propers/common/apparition-of-st-michael-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Latin/English Sancti/05-08.txt's own +# [Ant 1] — the Lauds-hour antiphon, not Terce's, which falls back to a +# generic Common text instead. See apparition-of-st-michael.yml on why +# this is a separate record from st-michael.yml (Sept 29). +id: apparition-of-st-michael-antiphon +text: + la: "Dum sacrum mystérium * cérneret Joánnes, Archángelus Míchaël tuba cécinit: Ignósce, Dómine, Deus noster, qui áperis librum, et solvis signácula ejus, allelúja." + en: "While John was gazing * upon the holy mystery, the Archangel Michael sounded his trumpet: Forgive us, O Lord our God, Who openest the book, and loosest the seals thereof, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/common/apparition-of-st-michael-collect.yml b/src/data/propers/common/apparition-of-st-michael-collect.yml new file mode 100644 index 0000000..b75301c --- /dev/null +++ b/src/data/propers/common/apparition-of-st-michael-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-08). +# Same convention as data/propers/temporal/*-collect.yml. +id: apparition-of-st-michael-collect +text: + la: | + Orémus. + Deus, qui, miro órdine, Angelórum ministéria hominúmque dispénsas: concéde propítius; ut, a quibus tibi ministrántibus in cælo semper assístitur, ab his in terra vita nostra muniátur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, Who hast ordained and constituted the services of angels and men in a wonderful order, mercifully grant that as thy holy angels alway do thee service in heaven, so, by thy appointment, they may succour and defend us on earth. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/ss-nereus-achilleus-domitilla-and-pancras-collect.yml b/src/data/propers/common/ss-nereus-achilleus-domitilla-and-pancras-collect.yml new file mode 100644 index 0000000..8906e42 --- /dev/null +++ b/src/data/propers/common/ss-nereus-achilleus-domitilla-and-pancras-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-12). +# Same convention as data/propers/temporal/*-collect.yml. +id: ss-nereus-achilleus-domitilla-and-pancras-collect +text: + la: | + Orémus. + Semper nos, Dómine, Mártyrum tuórum Nérei, Achíllei, Domitíllæ atque Pancrátii fóveat, quǽsumus, beáta solémnitas: et tuo dignos reddat obséquio. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + May the holy feast of thy Martyrs, Nereus, Achilleus, Domitilla and Pancras, ever comfort us, we beseech thee, O Lord, and make us worthy to serve thee. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/ss-philip-and-james-antiphon.yml b/src/data/propers/common/ss-philip-and-james-antiphon.yml new file mode 100644 index 0000000..e7eb335 --- /dev/null +++ b/src/data/propers/common/ss-philip-and-james-antiphon.yml @@ -0,0 +1,10 @@ +# Verified against Divinum Officium (Latin/English Sancti/05-01.txt's own +# [Ant 1] — the Lauds-hour antiphon, not Terce's, which falls back to a +# generic Common text instead. +id: ss-philip-and-james-antiphon +text: + la: "Non turbétur * cor vestrum, neque formídet: créditis in Deum, et in me crédite: in domo Patris mei mansiónes multæ sunt, allelúja, allelúja." + en: "Let not your heart be troubled, * neither let it be afraid: ye believe in God, believe also in me: in my Father's house are many mansions, alleluia, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/common/ss-philip-and-james-collect.yml b/src/data/propers/common/ss-philip-and-james-collect.yml new file mode 100644 index 0000000..fe84746 --- /dev/null +++ b/src/data/propers/common/ss-philip-and-james-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-01). +# Same convention as data/propers/temporal/*-collect.yml. +id: ss-philip-and-james-collect +text: + la: | + Orémus. + Deus, qui nos ánnua Apostolórum tuórum Philíppi et Jacóbi solemnitáte lætíficas: præsta, quǽsumus; ut, quorum gaudémus méritis, instruámur exémplis. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, Who dost every year gladden us by the solemn memorial of thine Apostles Philip and James, grant us grace, we beseech thee, not only to rejoice because of their worthy deeds, but also to tread in their footsteps. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-athanasius-collect.yml b/src/data/propers/common/st-athanasius-collect.yml new file mode 100644 index 0000000..0601cf7 --- /dev/null +++ b/src/data/propers/common/st-athanasius-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-02). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-athanasius-collect +text: + la: | + Orémus. + Exáudi, quǽsumus, Dómine, preces nostras, quas in beáti Athanásii Confessóris tui atque Pontíficis solemnitáte deférimus: et, qui tibi digne méruit famulári, ejus intercedéntibus méritis, ab ómnibus nos absólve peccátis. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + Hear, O Lord, we beseech thee, the prayers which we offer thee on this the solemn feast-day of thy blessed Confessor and bishop Athanasius, and, for the sake of him who so nobly served thee, forgive us our trespasses. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-boniface-collect.yml b/src/data/propers/common/st-boniface-collect.yml new file mode 100644 index 0000000..0cd0396 --- /dev/null +++ b/src/data/propers/common/st-boniface-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2031-05-14). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-boniface-collect +text: + la: | + Orémus. + Da, quǽsumus, omnípotens Deus: ut qui beáti Bonifátii Mártyris tui solémnia cólimus, ejus apud te intercessiónibus adjuvémur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + Grant, we beseech thee, O Almighty God, that we who do make solemn remembrance of thine holy Martyr, Boniface, may be helped in thy presence by his prayers. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-eleutherius-collect.yml b/src/data/propers/common/st-eleutherius-collect.yml new file mode 100644 index 0000000..742b015 --- /dev/null +++ b/src/data/propers/common/st-eleutherius-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2038-05-26). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-eleutherius-collect +text: + la: | + Orémus. + Infirmitátem nostram réspice, omnípotens Deus: et, quia pondus própriæ actiónis gravat, beáti Eleuthérii Mártyris tui atque Pontíficis intercéssio gloriósa nos prótegat. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + Mercifully consider our weakness, O Almighty God, and whereas by the burden of our sins we are sore, may the glorious intercession of blessed Eleutherius, Your Martyr and Bishop, sustain us. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-john-before-the-latin-gate-antiphon.yml b/src/data/propers/common/st-john-before-the-latin-gate-antiphon.yml new file mode 100644 index 0000000..7918439 --- /dev/null +++ b/src/data/propers/common/st-john-before-the-latin-gate-antiphon.yml @@ -0,0 +1,10 @@ +# Verified against Divinum Officium (Latin/English Sancti/05-06.txt's own +# [Ant 1] — the Lauds-hour antiphon, not Terce's, which falls back to a +# generic Common text instead. +id: st-john-before-the-latin-gate-antiphon +text: + la: "In ferventis * ólei dolium missus beátus Joánnes Apóstolus, divina se protegénte grátia, illæsus exívit, allelúja." + en: "The blessed Apostle John, * being cast into a vessel of boiling oil, came forth unharmed, by the protection of the divine grace, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-john-before-the-latin-gate-collect.yml b/src/data/propers/common/st-john-before-the-latin-gate-collect.yml new file mode 100644 index 0000000..9fd19a7 --- /dev/null +++ b/src/data/propers/common/st-john-before-the-latin-gate-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-06). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-john-before-the-latin-gate-collect +text: + la: | + Orémus. + Deus, qui conspicis, quia nos undique mala nostra perturbant: præsta, quǽsumus; ut beáti Joánnis Apóstoli tui et Evangelistæ intercéssio gloriósa nos prótegat. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, Which seest that sins and sufferings do on every side rise up to trouble us, grant, we beseech thee, that we may find a shield in time of need through the glorious intercession of thy blessed Apostle and Evangelist John. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-john-i-collect.yml b/src/data/propers/common/st-john-i-collect.yml new file mode 100644 index 0000000..fef169b --- /dev/null +++ b/src/data/propers/common/st-john-i-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2038-05-27). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-john-i-collect +text: + la: | + Orémus. + Deus, qui nos beáti Joannis Mártyris tui atque Pontíficis ánnua solemnitáte lætíficas: concéde propítius; ut, cujus natalítia cólimus, de ejúsdem étiam protectióne gaudeámus. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, who year by year dost gladden us by the solemn feast day of thy Blessed Martyr and Bishop John, mercifully grant that we who keep his birthday, may ever feel the joyful effects of his protection. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-monica-collect.yml b/src/data/propers/common/st-monica-collect.yml new file mode 100644 index 0000000..b4bff3e --- /dev/null +++ b/src/data/propers/common/st-monica-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-04). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-monica-collect +text: + la: | + Orémus. + Deus, mæréntium consolátor et in te sperántium salus, qui beátæ Mónicæ pias lácrimas in conversióne fílii sui Augustíni misericórditer suscepísti: da nobis utriúsque intervéntu; peccáta nostra deploráre, et grátiæ tuæ indulgéntiam inveníre. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, the consoler of those Who mourn and the safety of those who put their trust in thee; Who mercifully accepted the holy tears of blessed Monica for the conversion of Augustine, her son; grant us through the intercession of both to bewail our sins and to obtain the grace of thy forgiveness. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-peter-celestine-collect.yml b/src/data/propers/common/st-peter-celestine-collect.yml new file mode 100644 index 0000000..c06b006 --- /dev/null +++ b/src/data/propers/common/st-peter-celestine-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2038-05-19). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-peter-celestine-collect +text: + la: | + Orémus. + Deus, qui beátum Petrum Cælestínum ad summi pontificátus ápicem sublimásti, quique illum humilitáti postpónere docuísti: concéde propítius; ut ejus exémplo cuncta mundi despícere, et ad promíssa humílibus prǽmia perveníre felíciter mereámur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, Who raised blessed Peter Celestine to the lofty dignity of Supreme Pontiff and taught him to prefer self-abasement instead; mercifully grant that by his example we may look upon all worldly things as naught, and may be worthy to reap in joy the rewards promised to the humble. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-stanislaus-collect.yml b/src/data/propers/common/st-stanislaus-collect.yml new file mode 100644 index 0000000..2a132e7 --- /dev/null +++ b/src/data/propers/common/st-stanislaus-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-07). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-stanislaus-collect +text: + la: | + Orémus. + Deus, pro cujus honóre gloriósus Póntifex Stanisláus gládiis impiórum occúbuit: præsta, quǽsumus; ut omnes, qui ejus implórant auxílium, petitiónis suæ salutárem consequántur efféctum. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O God, for Whose glory the noble Bishop Stanislaw fell by the swords of sinful men, grant, we beseech thee, that all whosoever ask his help, may find such answer to their petition as may profit them to the everlasting salvation of their souls. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-ubald-collect.yml b/src/data/propers/common/st-ubald-collect.yml new file mode 100644 index 0000000..20607e0 --- /dev/null +++ b/src/data/propers/common/st-ubald-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2029-05-16). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-ubald-collect +text: + la: | + Orémus. + Auxílium tuum nobis, Dómine, quǽsumus, placátus impénde: et, intercessióne beáti Ubáldi Confessóris tui atque Pontíficis, contra omnes diáboli nequítias déxteram super nos tuæ propitiatiónis exténde. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + Graciously help us, we beseech thee, O Lord, and at the petition of thy blessed Confessor and Bishop Ubald, stretch forth the right hand of thy mercy to shield us against all the fiery darts of the wicked one. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/st-urban-i-collect.yml b/src/data/propers/common/st-urban-i-collect.yml new file mode 100644 index 0000000..981bf8b --- /dev/null +++ b/src/data/propers/common/st-urban-i-collect.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617) — read +# directly from the reference engine's own real-date output (2038-05-25). +# Same convention as data/propers/temporal/*-collect.yml. +id: st-urban-i-collect +text: + la: | + Orémus. + Da, quǽsumus, omnípotens Deus: ut qui beáti Urbáni Mártyris tui atque Pontíficis solémnia cólimus, ejus apud te intercessiónibus adjuvémur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + ℟. Amen. + en: | + Let us pray. + O Almighty God, of Whose blessed Martyr and Bishop Urban we do make solemn memorial, grant, we beseech thee, that we may be helpen of his prayers in thy presence. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + ℟. Amen. +status: + la: verified + en: verified diff --git a/tests/calendar/may-sanctoral.test.ts b/tests/calendar/may-sanctoral.test.ts new file mode 100644 index 0000000..1c8d142 --- /dev/null +++ b/tests/calendar/may-sanctoral.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, it } from 'vitest'; +import { resolveDay } from '../../src/calendar'; +import { getDayCollect } from '../../src/hours/resolve-common'; + +// Clean per-annum years for these dates (no Sunday collision, and clear of +// the movable Ascension/Pentecost/Trinity-adjacent observances that usually +// overshadow several of them) — see data/calendar/saints/*.yml for +// per-saint source detail. +describe('May sanctoral pull (first pass)', () => { + it('Ss. Philip and James win outright with a real proper collect and antiphon', () => { + const day = resolveDay('2029-05-01'); + expect(day.winner).toEqual({ + kind: 'sanctoral', + id: 'ss-philip-and-james', + name: 'Ss. Philip and James, Apostles', + rank: 'duplex-2-classis', + }); + 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', () => { + // 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. + 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', + }); + + // St. Pudentiana always loses to St. Peter Celestine (May 19, also fixed-date) — + // this one *is* modeled (both are real sanctoral records), so it + // resolves correctly. + const may19 = resolveDay('2038-05-19'); + expect(may19.winner).toEqual({ + kind: 'sanctoral', + id: 'st-peter-celestine', + name: 'St. Peter Celestine, Pope and Confessor', + rank: 'duplex', + }); + expect(may19.commemorations).toEqual([ + { kind: 'sanctoral', id: 'st-pudentiana', name: 'St. Pudentiana, Virgin', rank: 'simplex' }, + ]); + }); + + it('a saint with no dedicated Sancti file at all still resolves cleanly, honestly missing a collect', () => { + const day = resolveDay('2038-05-22'); // St. Romanus, Abbot + expect(day.winner).toEqual({ kind: 'sanctoral', id: 'st-romanus-abbot', name: 'St. Romanus, Abbot', rank: 'duplex' }); + expect(getDayCollect(day).status.en).toBe('missing'); + }); +});