Compare commits

...

3 Commits

Author SHA1 Message Date
will a6a72f277d propers: add May's collect and antiphon text
Deploy / deploy (push) Successful in 42s
Real collect text for all 13 May saints that have one, plus a real
antiphon for the 3 that have one of their own (Ss. Philip and James, St.
John Before the Latin Gate, the Apparition of St. Michael) — same
extraction method as prior months. Two saints (St. Peter Celestine, St.
Urban I) have an [Ant 1] in the source that turned out to just be a
cross-reference to the generic Common template, not real unique text, so
no antiphon file was authored for them.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:25:56 -04:00
will 2d5857f71c calendar: pull May's sanctoral calendar (pre-1955 pull, 5/12)
18 saints for May (16 real + 2 stubs). Both stubs this month are
genuinely unwinnable in the real historical calendar in any year (their
competing observances are fixed-date, not movable) — flagged explicitly
in their own files as distinct from the usual "just an artifact of the
year checked" caveat.

A second, distinct feast of St. Michael (his Apparition, May 8) is kept
as its own record separate from st-michael.yml's Sept 29 dedication
feast, same precedent as the two Chair-of-Peter feasts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:25:41 -04:00
will f0e32ae0c1 calendar: fix transferred candidates blindly winning outright
Found via real data (the May sanctoral pull): a transfer landing on a day
whose own native winner was temporal blindly took over as winner,
regardless of that day's own precedence category — so a transferred-in
Simplex saint (St. Felix I, impeded by Pentecost's Ember Saturday) was
overwriting Trinity Sunday itself instead of being merely commemorated,
the way a native Simplex candidate on an ordinary Sunday already
correctly is.

Fixes applyIncomingTransfer to run the arriving candidate through
decideOccurrence using the receiving day's own temporalCategory, the same
rules a native occurrence there would use, instead of assuming an empty
temporal slot means automatic victory.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:25:27 -04:00
39 changed files with 567 additions and 2 deletions
+11 -1
View File
@@ -59,7 +59,17 @@ function applyIncomingTransfer(
return winner; return winner;
} }
if (winner.kind === 'temporal') { if (winner.kind === 'temporal') {
return { kind: 'sanctoral', id: candidate.id, name: candidate.name, rank: candidate.rank }; // Found via real data: a transferred-in Simplex saint was blindly
// winning outright even when it landed on a privileged Sunday (Trinity
// Sunday, specifically) — the arriving candidate needs to go through
// the *same* precedence rules a native occurrence would have used,
// not just take over because nothing else was assigned here.
const decided = decideOccurrence(temporalCategory, winner.id, candidate);
commemorations.push(...decided.commemorations);
// If the candidate fails here too (decided.transfer set), that's a
// transfer chain — not modeled, same "not delivered rather than
// guessed at" stance as the privileged-feria-major case above.
return decided.winner;
} }
const collision = resolveCollision(candidate, winner); const collision = resolveCollision(candidate, winner);
commemorations.push(...collision.commemorations); commemorations.push(...collision.commemorations);
@@ -0,0 +1,11 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-08, no Sunday collision) -- winner outright, Duplex majus.
# A second, distinct feast of St. Michael (his apparition at Monte Gargano)
# from st-michael.yml's Sept 29 dedication feast -- kept as a separate
# record, same precedent as the two Chair-of-Peter feasts. Own proper
# collect and antiphon.
id: apparition-of-st-michael
name: "The Apparition of St. Michael the Archangel"
rank: duplex-majus
common: common-of-an-angel
propers: "apparition-of-st-michael"
@@ -0,0 +1,14 @@
# Secondary commemoration on 05-03, pulled from Divinum Officium's kalendar
# headline (Monastic Tridentinum 1617) -- loses the day to the Finding of
# the Holy Cross (a fixed-date feast of the Lord, out of scope, see
# sanctoral-calendar.yml), so unlike most other stubs in this set, this
# isn't just an artifact of the specific year checked: their competing
# observance is likewise fixed-date, meaning no year exists where they'd
# win independently. That query doesn't expose a secondary entry's own
# rank, only its name -- simplex here is an unverified placeholder, same
# caveat as every other stub. No text pulled at all yet.
id: ss-alexander-eventius-theodulus-and-juvenal
name: "Ss. Alexander I, Eventius, and Theodulus, Martyrs, and Juvenal, Bishop and Confessor"
rank: simplex
common: common-of-several-martyrs
propers: null
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-12, no Sunday collision) -- winner outright, Semiduplex.
# Own proper collect, no unique antiphon of their own.
id: ss-nereus-achilleus-domitilla-and-pancras
name: "Ss. Nereus, Achilleus, Domitilla, and Pancras, Martyrs"
rank: semiduplex
common: common-of-several-martyrs
propers: "ss-nereus-achilleus-domitilla-and-pancras"
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-01, no Sunday collision) -- winner outright, Duplex II.
# classis. Own proper collect and antiphon.
id: ss-philip-and-james
name: "Ss. Philip and James, Apostles"
rank: duplex-2-classis
common: common-of-an-apostle
propers: "ss-philip-and-james"
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-02, no Sunday collision) -- winner outright, Duplex. Own
# proper collect, no unique antiphon of his own.
id: st-athanasius
name: "St. Athanasius, Bishop, Confessor and Doctor of the Church"
rank: duplex
common: common-of-a-confessor-bishop
propers: "st-athanasius"
+12
View File
@@ -0,0 +1,12 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2031-05-14 -- his usual date is repeatedly overshadowed by the
# movable Ascension octave, or by St. George transferring in from a
# collision elsewhere; 2031 is clear of both, and not a Sunday) -- winner
# outright, Simplex. Own proper collect, no unique antiphon of his own.
# (Not the 8th-century missionary St. Boniface of Mainz -- an earlier,
# less well known martyr of the same name.)
id: st-boniface
name: "St. Boniface, Martyr"
rank: simplex
common: common-of-a-martyr
propers: "st-boniface"
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2038-05-26, clear of the movable Pentecost Ember Saturday that
# usually overshadows this date) -- winner outright, Simplex. Own proper
# collect, no unique antiphon of his own.
id: st-eleutherius
name: "St. Eleutherius, Pope and Martyr"
rank: simplex
common: common-of-a-martyr-bishop
propers: "st-eleutherius"
+8
View File
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-30, no Sunday collision) -- winner outright, Simplex. No
# unique Oratio/Antiphon in the source -- Common of a Martyr Bishop only.
id: st-felix-i
name: "St. Felix I, Pope and Martyr"
rank: simplex
common: common-of-a-martyr-bishop
propers: null
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-09, no Sunday collision) -- winner outright, Duplex. No
# unique Oratio/Antiphon in the source -- Common of a Confessor Bishop
# only.
id: st-gregory-nazianzen
name: "St. Gregory Nazianzen, Bishop, Confessor and Doctor of the Church"
rank: duplex
common: common-of-a-confessor-bishop
propers: null
@@ -0,0 +1,11 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-06, a Sunday that year, but Duplex majus wins outright
# regardless per the ordinary-Sunday rule). About St. John the Apostle's
# own specific commemoration (his legendary trial by boiling oil), kept in
# the sanctoral store like the Chair-of-Peter feasts rather than treated as
# a feast of the Lord. Own proper collect and antiphon.
id: st-john-before-the-latin-gate
name: "St. John Before the Latin Gate"
rank: duplex-majus
common: common-of-an-apostle
propers: "st-john-before-the-latin-gate"
+9
View File
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2038-05-27, clear of the movable Trinity Sunday that usually
# overshadows this date) -- winner outright, Simplex. Own proper collect,
# no unique antiphon of his own.
id: st-john-i
name: "St. John I, Pope and Martyr"
rank: simplex
common: common-of-a-martyr-bishop
propers: "st-john-i"
+8
View File
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-04, no Sunday collision) -- winner outright, Duplex. St.
# Augustine's mother. Own proper collect, no unique antiphon of her own.
id: st-monica
name: "St. Monica, Widow"
rank: duplex
common: common-of-a-widow
propers: "st-monica"
@@ -0,0 +1,15 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2038-05-19, clear of the movable Vigil of Pentecost that usually
# overshadows this date) -- winner outright, Duplex. Marked "O. N."
# (Ordinis Nostri) in the source, like several other saints in this set --
# a Benedictine-affiliated pope. Own proper collect; his own [Ant 1] is
# just a cross-reference to the generic Common of Confessors template, so
# no unique antiphon is recorded (unlike Ss. Philip and James/St. John
# Before the Latin Gate/the Apparition of St. Michael this same month,
# whose [Ant 1] really is unique text). Always beats St. Pudentiana on
# this shared date -- see st-pudentiana.yml.
id: st-peter-celestine
name: "St. Peter Celestine, Pope and Confessor"
rank: duplex
common: common-of-a-confessor-bishop
propers: "st-peter-celestine"
@@ -0,0 +1,14 @@
# Secondary commemoration on 05-19, pulled from Divinum Officium's kalendar
# headline (Monastic Tridentinum 1617) -- loses the day to St. Peter
# Celestine (also a fixed May 19 saint, not movable, see
# st-peter-celestine.yml), so unlike most other stubs in this set, this
# isn't just an artifact of the specific year checked: her competing
# observance is likewise fixed-date, meaning no year exists where she'd
# win independently. That query doesn't expose a secondary entry's own
# rank, only its name -- simplex here is an unverified placeholder, same
# caveat as every other stub. No text pulled at all yet.
id: st-pudentiana
name: "St. Pudentiana, Virgin"
rank: simplex
common: common-of-a-virgin
propers: null
@@ -0,0 +1,10 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2038-05-22, clear of the movable Pentecost Octave that usually
# overshadows this date) -- winner outright, Duplex. No unique
# Oratio/Antiphon in the source (no dedicated Sancti file at all for this
# date, unlike most other saints in this set) -- Common of an Abbot only.
id: st-romanus-abbot
name: "St. Romanus, Abbot"
rank: duplex
common: common-of-an-abbot
propers: null
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-07, no Sunday collision) -- winner outright, Semiduplex.
# Own proper collect, no unique antiphon of his own.
id: st-stanislaus
name: "St. Stanislaus, Bishop and Martyr"
rank: semiduplex
common: common-of-a-martyr-bishop
propers: "st-stanislaus"
+8
View File
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2029-05-16, no Sunday collision) -- winner outright, Semiduplex.
# Own proper collect, no unique antiphon of his own.
id: st-ubald
name: "St. Ubald, Bishop and Confessor"
rank: semiduplex
common: common-of-a-confessor-bishop
propers: "st-ubald"
+14
View File
@@ -0,0 +1,14 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar
# check (2038-05-25, clear of the movable Pentecost Ember Friday that
# usually overshadows this date) -- winner outright, Simplex. Own proper
# collect; his own [Ant 1] is just a cross-reference to the generic Common
# template, so no unique antiphon is recorded. Being Simplex, this date
# doesn't help settle whether Pentecost's own Ember days share Lent's
# lesser privileged-feria tier or the stricter major one (see
# temporal-categories.yml's open caveat) -- a higher-ranked saint would be
# needed to test that, and none turned up this month.
id: st-urban-i
name: "St. Urban I, Pope and Martyr"
rank: simplex
common: common-of-a-martyr-bishop
propers: "st-urban-i"
+24
View File
@@ -83,6 +83,30 @@ days:
"04-28": [st-vitalis] "04-28": [st-vitalis]
"04-29": [st-robert, st-catherine-of-siena] "04-29": [st-robert, st-catherine-of-siena]
"04-30": [st-peter-martyr] "04-30": [st-peter-martyr]
# May — 5/12 of the pre-1955 pull. Same exclusions as before: fixed
# feasts of the Lord (Finding of the Holy Cross May 3), and movable
# ones (Ascension, Trinity Sunday, Corpus Christi — all skipped as
# primary, since they're temporal, not sanctoral). Two stubs this month
# (Ss. Alexander/Eventius/Theodulus/Juvenal, St. Pudentiana) are
# genuinely un-winnable in any year, not just an artifact of which year
# was checked — see their own files.
"05-01": [ss-philip-and-james]
"05-02": [st-athanasius]
"05-03": [ss-alexander-eventius-theodulus-and-juvenal]
"05-04": [st-monica]
"05-06": [st-john-before-the-latin-gate]
"05-07": [st-stanislaus]
"05-08": [apparition-of-st-michael]
"05-09": [st-gregory-nazianzen]
"05-12": [ss-nereus-achilleus-domitilla-and-pancras]
"05-14": [st-boniface]
"05-16": [st-ubald]
"05-19": [st-peter-celestine, st-pudentiana]
"05-22": [st-romanus-abbot]
"05-25": [st-urban-i]
"05-26": [st-eleutherius]
"05-27": [st-john-i]
"05-30": [st-felix-i]
"08-09": [vigil-of-st-lawrence] "08-09": [vigil-of-st-lawrence]
"08-10": [st-lawrence] "08-10": [st-lawrence]
"08-15": [assumption] "08-15": [assumption]
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+5 -1
View File
@@ -11,7 +11,11 @@ describe('getDayLabel — ordinal temporal label', () => {
}); });
it('names the anchor day itself, not "day after itself"', () => { it('names the anchor day itself, not "day after itself"', () => {
expect(getDayLabel(resolveDay('2026-05-31'))).toBe('Trinity Sunday'); // St. Felix I (May 30, Simplex) is impeded by that date's own Pentecost
// Ember Saturday and transfers forward into Trinity Sunday, where he's
// commemorated (not displacing the Sunday) — real sanctoral content
// now populates this date, so the label reflects both, feast name first.
expect(getDayLabel(resolveDay('2026-05-31'))).toBe('St. Felix I, Pope and Martyr — Trinity Sunday');
expect(getDayLabel(resolveDay('2026-04-05'))).toBe('Easter'); expect(getDayLabel(resolveDay('2026-04-05'))).toBe('Easter');
expect(getDayLabel(resolveDay('2026-02-18'))).toBe('Ash Wednesday'); expect(getDayLabel(resolveDay('2026-02-18'))).toBe('Ash Wednesday');
}); });
+56
View File
@@ -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');
});
});
+22
View File
@@ -31,4 +31,26 @@ describe('transfer mechanism (resolveDay integration)', () => {
rank: 'duplex-2-classis', rank: 'duplex-2-classis',
}); });
}); });
// Found via real data (the May sanctoral pull): a transferred-in
// candidate was blindly winning outright whenever the receiving day's
// own native winner was temporal, regardless of that day's own
// precedence category — so a transferred-in Simplex was overwriting
// Trinity Sunday itself instead of going through the same ordinary-
// Sunday rule a native candidate would have.
it('a simplex saint impeded by a privileged feria transfers forward and is merely commemorated, not made to win, on the ordinary Sunday it lands on', () => {
// St. Felix I (May 30, Simplex) is impeded by that date's own
// Pentecost Ember Saturday (privileged-feria-major) and transfers
// forward into Trinity Sunday 2026 (May 31, an ordinary Sunday).
const saturday = resolveDay('2026-05-30');
const sunday = resolveDay('2026-05-31');
expect(saturday.winner).toEqual({ kind: 'temporal', id: 'pentecost-sunday' });
expect(saturday.commemorations).toEqual([]);
expect(sunday.winner).toEqual({ kind: 'temporal', id: 'post-pentecost-01' });
expect(sunday.commemorations).toEqual([
{ kind: 'sanctoral', id: 'st-felix-i', name: 'St. Felix I, Pope and Martyr', rank: 'simplex' },
]);
});
}); });