diff --git a/src/data/calendar/saints/assumption.yml b/src/data/calendar/saints/assumption.yml index 3d1ed2d..31cdb6d 100644 --- a/src/data/calendar/saints/assumption.yml +++ b/src/data/calendar/saints/assumption.yml @@ -1,7 +1,11 @@ # Verified against Divinum Officium (web/www/horas/Latin/Sancti/08-15.txt, -# untagged/default [Rank] block). +# untagged/default [Rank] block). Propers backfilled during the August +# pull (live kalendar/prayTertia check, 2025-08-15) now that the +# collect-pulling methodology exists -- own proper collect. Its own +# [Ant 1] is itself a cross-reference (@Sancti/08-15t, a Tridentine- +# specific block) rather than plain text, so left unpulled this pass. id: assumption name: "The Assumption of the Blessed Virgin Mary" rank: duplex-1-classis common: common-of-the-bvm -propers: null +propers: "assumption" diff --git a/src/data/calendar/saints/decollation-of-st-john-baptist.yml b/src/data/calendar/saints/decollation-of-st-john-baptist.yml new file mode 100644 index 0000000..e51523c --- /dev/null +++ b/src/data/calendar/saints/decollation-of-st-john-baptist.yml @@ -0,0 +1,13 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-29) -- winner outright, Duplex, over the stub +# St. Sabina (see st-sabina.yml). About St. John the Baptist's beheading, +# not a feast of the Lord/BVM, so kept in scope like his Nativity in June. +# "common-of-an-apostle" is a loose fit (he isn't one) but the closest +# existing category to "a major male saint honored with his own high +# feast" -- same judgment call as nativity-of-st-john-the-baptist.yml. +# Own proper collect and antiphon. +id: decollation-of-st-john-baptist +name: "The Beheading of St. John the Baptist" +rank: duplex +common: common-of-an-apostle +propers: "decollation-of-st-john-baptist" diff --git a/src/data/calendar/saints/finding-of-st-stephen.yml b/src/data/calendar/saints/finding-of-st-stephen.yml new file mode 100644 index 0000000..1b39e2b --- /dev/null +++ b/src/data/calendar/saints/finding-of-st-stephen.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2026-08-03, a clean weekday). In the real engine, Aug 3 +# falling on a Sunday transfers this forward to Aug 7 (see st-donatus.yml) +# -- this app's transfer machinery doesn't chase that multi-day skip +# search, so in this app that Sunday simply displaces this feast entirely +# for that year (same "not delivered rather than guessed at" stance as +# other unmodeled transfer chains) rather than landing it on Aug 7. About +# St. Stephen the Protomartyr's relics, not a feast of the Lord/BVM, so +# kept in scope like the Conversion of St. Paul. Own collect: a deliberate +# cross-reference to St. Stephen's own Dec 26 feast (@Sancti/12-26) with +# one word substituted ("natalícia" -> "Inventiónem") -- the reference +# engine expands this to full text automatically. Its [Ant 1] is the same +# Dec 26 antiphon reused verbatim, no substitution this time. +id: finding-of-st-stephen +name: "The Finding of St. Stephen, Protomartyr" +rank: semiduplex +common: common-of-a-martyr +propers: "finding-of-st-stephen" diff --git a/src/data/calendar/saints/ss-cyriacus-largus-and-smaragdus.yml b/src/data/calendar/saints/ss-cyriacus-largus-and-smaragdus.yml new file mode 100644 index 0000000..2c64a17 --- /dev/null +++ b/src/data/calendar/saints/ss-cyriacus-largus-and-smaragdus.yml @@ -0,0 +1,8 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-08) -- winner outright, Semiduplex, alone. Own +# proper collect, no unique antiphon of their own. +id: ss-cyriacus-largus-and-smaragdus +name: "Ss. Cyriacus, Largus, and Smaragdus, Martyrs" +rank: semiduplex +common: common-of-several-martyrs +propers: "ss-cyriacus-largus-and-smaragdus" diff --git a/src/data/calendar/saints/ss-felix-and-adauctus.yml b/src/data/calendar/saints/ss-felix-and-adauctus.yml new file mode 100644 index 0000000..7ecf73e --- /dev/null +++ b/src/data/calendar/saints/ss-felix-and-adauctus.yml @@ -0,0 +1,16 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check on a clean weekday (2027-08-30, a Monday) -- wins outright +# at Simplex. On a Saturday this date is instead outranked by the generic +# "Sanctae Mariae Sabbato" votive (confirmed re-checking 2025-08-30, a +# Saturday, where the votive won instead) -- an artifact of the tested +# weekday, same pattern as St. Stephen I (Aug 2) this month and Ss. +# Marcellinus/Peter/Erasmus in June. No unique collect: the raw file at +# this MM-DD slot (Sancti/08-30.txt) is actually St. Rose of Lima's (a +# much later, 17th-century addition to this filename slot) -- a live +# prayTertia query for the Monastic 1617 track returns no Oratio at all, +# confirming propers: null is correct. +id: ss-felix-and-adauctus +name: "Ss. Felix and Adauctus, Martyrs" +rank: simplex +common: common-of-several-martyrs +propers: null diff --git a/src/data/calendar/saints/ss-machabees.yml b/src/data/calendar/saints/ss-machabees.yml new file mode 100644 index 0000000..e78a4d0 --- /dev/null +++ b/src/data/calendar/saints/ss-machabees.yml @@ -0,0 +1,9 @@ +# Genuinely unwinnable stub (verified 2026-08-01, 2029-08-01) -- always +# commemorated under St. Peter's Chains (see st-peter-ad-vincula.yml), +# never wins outright; both are fixed, non-movable dates, so this isn't +# an artifact of the tested year. rank/propers unverified placeholders. +id: ss-machabees +name: "Ss. Machabees, Martyrs" +rank: simplex +common: common-of-several-martyrs +propers: null diff --git a/src/data/calendar/saints/st-augustine.yml b/src/data/calendar/saints/st-augustine.yml index d0752f9..ce5166a 100644 --- a/src/data/calendar/saints/st-augustine.yml +++ b/src/data/calendar/saints/st-augustine.yml @@ -2,8 +2,12 @@ # untagged/default [Rank] block — that file's own "(sed rubrica 1930)" # alternate raises this to Duplex majus, but 1930 postdates the pre-1910 # calendar this app targets, so the plain default is used instead. +# Propers backfilled during the August pull (live kalendar/prayTertia +# check, 2025-08-28) now that the collect-pulling methodology exists -- +# own proper collect, no unique antiphon of his own; wins outright over +# the stub St. Hermes (see st-hermes.yml). id: st-augustine name: "St. Augustine of Hippo, Bishop, Confessor and Doctor of the Church" rank: duplex common: common-of-a-confessor-bishop -propers: null +propers: "st-augustine" diff --git a/src/data/calendar/saints/st-bartholomew.yml b/src/data/calendar/saints/st-bartholomew.yml new file mode 100644 index 0000000..91b037d --- /dev/null +++ b/src/data/calendar/saints/st-bartholomew.yml @@ -0,0 +1,8 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2026-08-24) -- winner outright, Duplex II. classis, +# alone. Own proper collect, no unique antiphon of his own. +id: st-bartholomew +name: "St. Bartholomew, Apostle" +rank: duplex-2-classis +common: common-of-an-apostle +propers: "st-bartholomew" diff --git a/src/data/calendar/saints/st-bernard.yml b/src/data/calendar/saints/st-bernard.yml new file mode 100644 index 0000000..cafb9a6 --- /dev/null +++ b/src/data/calendar/saints/st-bernard.yml @@ -0,0 +1,10 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-20) -- winner outright, Duplex, over the sixth +# day of the Assumption's octave (a fixed BVM feast, out of scope, see +# the sanctoral-calendar.yml comment on this month's octave exclusions). +# Own proper collect, no unique antiphon of his own. +id: st-bernard +name: "St. Bernard, Abbot and Doctor of the Church" +rank: duplex +common: common-of-an-abbot +propers: "st-bernard" diff --git a/src/data/calendar/saints/st-dominic.yml b/src/data/calendar/saints/st-dominic.yml new file mode 100644 index 0000000..0087611 --- /dev/null +++ b/src/data/calendar/saints/st-dominic.yml @@ -0,0 +1,9 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-04) -- winner outright, Duplex, alone (secondary +# block is a plain feria, not another saint). Own proper collect, no +# unique antiphon of his own. +id: st-dominic +name: "St. Dominic, Confessor" +rank: duplex +common: common-of-a-confessor-not-bishop +propers: "st-dominic" diff --git a/src/data/calendar/saints/st-donatus.yml b/src/data/calendar/saints/st-donatus.yml new file mode 100644 index 0000000..b49b58c --- /dev/null +++ b/src/data/calendar/saints/st-donatus.yml @@ -0,0 +1,22 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check on a clean year (2026-08-07, 2029-08-07) -- wins outright +# at Simplex, alone. On a year where Aug 3 (the Finding of St. Stephen, +# see finding-of-st-stephen.yml) falls on a Sunday, the *real* engine +# transfers that Semiduplex feast forward past several higher-rank fixed +# feasts (Dominic, Our Lady of the Snows, the Transfiguration) and lands +# it here instead, reducing this saint to a mere commemoration for that +# one year (confirmed live in both 2025 and 2031, both Aug-3-Sunday +# years). This app's own transfer machinery doesn't chase a multi-day +# skip search like that, so in this app Donatus wins here every year, +# including ones where the real engine would displace him -- a known, +# documented simplification, not a guess; see the regression test in +# tests/calendar/august-sanctoral.test.ts. No unique collect regardless: +# the raw file at this MM-DD slot (Sancti/08-07.txt) is actually St. +# Cajetan's (a later, post-1617 addition to this filename slot, added +# 1671) -- a live prayTertia query for the Monastic 1617 track returns no +# Oratio at all, confirming propers: null is correct. +id: st-donatus +name: "St. Donatus, Bishop and Martyr" +rank: simplex +common: common-of-a-martyr-bishop +propers: null diff --git a/src/data/calendar/saints/st-hermes.yml b/src/data/calendar/saints/st-hermes.yml new file mode 100644 index 0000000..7de0315 --- /dev/null +++ b/src/data/calendar/saints/st-hermes.yml @@ -0,0 +1,9 @@ +# Genuinely unwinnable stub (verified 2025-08-28, 2026-08-28) -- always +# commemorated under St. Augustine (see st-augustine.yml), never wins +# outright; both are fixed, non-movable dates, so this isn't an artifact +# of the tested year. rank/propers unverified placeholders. +id: st-hermes +name: "St. Hermes, Martyr" +rank: simplex +common: common-of-a-martyr +propers: null diff --git a/src/data/calendar/saints/st-lawrence.yml b/src/data/calendar/saints/st-lawrence.yml index a2e96c5..3b6d80c 100644 --- a/src/data/calendar/saints/st-lawrence.yml +++ b/src/data/calendar/saints/st-lawrence.yml @@ -1,8 +1,11 @@ # Verified against Divinum Officium (web/www/horas/Latin/Sancti/08-10.txt, # untagged/default [Rank] block — the pre-1955 value, not the "(sed rubrica -# 196)" alternate given alongside it in that file). +# 196)" alternate given alongside it in that file). Propers backfilled +# during the August pull (live kalendar/prayTertia check, 2026-08-10) now +# that the collect-pulling methodology exists -- own proper collect and +# antiphon. id: st-lawrence name: "St. Lawrence, Martyr" rank: duplex-2-classis common: common-of-a-martyr -propers: null +propers: "st-lawrence" diff --git a/src/data/calendar/saints/st-louis.yml b/src/data/calendar/saints/st-louis.yml new file mode 100644 index 0000000..08df5b3 --- /dev/null +++ b/src/data/calendar/saints/st-louis.yml @@ -0,0 +1,8 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-25) -- winner outright, Simplex, alone. Own +# proper collect, no unique antiphon of his own. +id: st-louis +name: "St. Louis, King of France, Confessor" +rank: simplex +common: common-of-a-confessor-not-bishop +propers: "st-louis" diff --git a/src/data/calendar/saints/st-peter-ad-vincula.yml b/src/data/calendar/saints/st-peter-ad-vincula.yml new file mode 100644 index 0000000..cc42fb0 --- /dev/null +++ b/src/data/calendar/saints/st-peter-ad-vincula.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live kalendar +# check (2026-08-01 and again 2029-08-01) -- winner outright, Duplex majus, +# over Ss. Machabaeorum (see ss-machabees.yml). About St. Peter's own +# deliverance from prison (Acts 12), not a feast of the Lord/BVM, so kept +# in scope like the Conversion of St. Paul/Chair-of-Peter feasts. Own +# proper collect; its [Ant 1] is a deliberate cross-reference to the +# Chair-of-Peter-at-Antioch antiphon (@Sancti/02-22, already its own file +# per the one-file-per-id convention), same reuse pattern as Ss. Peter and +# Paul in June. +id: st-peter-ad-vincula +name: "St. Peter's Chains" +rank: duplex-majus +common: common-of-an-apostle +propers: "st-peter-ad-vincula" diff --git a/src/data/calendar/saints/st-romanus.yml b/src/data/calendar/saints/st-romanus.yml new file mode 100644 index 0000000..148332b --- /dev/null +++ b/src/data/calendar/saints/st-romanus.yml @@ -0,0 +1,17 @@ +# Genuinely unwinnable stub (verified 2025-08-09) -- always commemorated +# under the Vigil of St. Lawrence (see vigil-of-st-lawrence.yml), never +# wins outright, even though the Vigil's own rank (Simplex/vigil) is low -- +# vigils carry special forced-primacy rubrics regardless of ordinary rank +# comparison. Both dates are fixed and non-movable, so this isn't an +# artifact of the tested year. In years where Aug 9 is a Sunday, the vigil +# itself is impeded and transfers backward to Saturday (see +# tests/calendar/transfer.test.ts) -- Romanus still surfaces as a +# commemoration on the Sunday even then (his loss to the vigil is a +# separate local clash, independent of the vigil's own later transfer), +# confirmed identically against the live reference engine (2026-08-09). +# rank/propers unverified placeholders. +id: st-romanus +name: "St. Romanus, Martyr" +rank: simplex +common: common-of-a-martyr +propers: null diff --git a/src/data/calendar/saints/st-sabina.yml b/src/data/calendar/saints/st-sabina.yml new file mode 100644 index 0000000..dd50c7c --- /dev/null +++ b/src/data/calendar/saints/st-sabina.yml @@ -0,0 +1,10 @@ +# Genuinely unwinnable stub (verified 2025-08-29) -- always commemorated +# under the Beheading of St. John the Baptist (see +# decollation-of-st-john-baptist.yml), never wins outright; both are +# fixed, non-movable dates, so this isn't an artifact of the tested year. +# rank/propers unverified placeholders. +id: st-sabina +name: "St. Sabina, Martyr" +rank: simplex +common: common-of-a-martyr +propers: null diff --git a/src/data/calendar/saints/st-stephen-i.yml b/src/data/calendar/saints/st-stephen-i.yml new file mode 100644 index 0000000..ea6e599 --- /dev/null +++ b/src/data/calendar/saints/st-stephen-i.yml @@ -0,0 +1,18 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check on a clean weekday (2027-08-02, a Monday) -- wins +# outright at Simplex. On a Saturday this date is instead outranked by +# the generic "Sanctae Mariae Sabbato" votive (see st-blaise.yml for the +# same pattern first found in February), confirmed by re-checking a +# Saturday year (2025-08-02) where the votive won instead -- an artifact +# of the tested weekday, not a real block, same as June's Ss. Marcellinus/ +# Peter/Erasmus case. No unique collect: the raw file at this MM-DD slot +# (Sancti/08-02.txt) is actually St. Alphonsus Liguori's (a later, +# post-1617 addition to this filename slot, not this saint) -- a live +# prayTertia query for the Monastic 1617 track returns no Oratio at all, +# confirming propers: null is correct rather than a mismatch to chase +# down, per the file-naming caution first documented in April/July. +id: st-stephen-i +name: "St. Stephen I, Pope and Martyr" +rank: simplex +common: common-of-a-martyr-bishop +propers: null diff --git a/src/data/calendar/saints/st-zephyrinus.yml b/src/data/calendar/saints/st-zephyrinus.yml new file mode 100644 index 0000000..b91b1f3 --- /dev/null +++ b/src/data/calendar/saints/st-zephyrinus.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), live +# kalendar check (2025-08-26) -- winner outright, Simplex, alone. Own +# proper collect (source's own English translation drops a mid-word "e" of +# "example" at a line break in both the raw file and the live query -- +# corrected here as a transcription artifact, same judgment call as +# April's st-robert.yml name-form correction). +id: st-zephyrinus +name: "St. Zephyrinus, Pope and Martyr" +rank: simplex +common: common-of-a-martyr-bishop +propers: "st-zephyrinus" diff --git a/src/data/calendar/saints/vigil-of-st-bartholomew.yml b/src/data/calendar/saints/vigil-of-st-bartholomew.yml new file mode 100644 index 0000000..38c8424 --- /dev/null +++ b/src/data/calendar/saints/vigil-of-st-bartholomew.yml @@ -0,0 +1,12 @@ +# A real vigil (2025-08-23, clean year -- St. Bartholomew's own date, Aug +# 24, isn't a Sunday that year either). No unique collect: the raw file at +# this MM-DD slot (Sancti/08-23.txt) is actually St. Philip Benizi's (a +# later, post-1617 addition to this filename slot) -- a live prayTertia +# query for the Monastic 1617 track returns no Oratio at all, confirming +# propers: null is correct, same file-naming caution as St. Donatus and +# the Vigil of St. Lawrence this month. +id: vigil-of-st-bartholomew +name: "Vigil of St. Bartholomew" +rank: vigil +common: common-of-a-vigil +propers: null diff --git a/src/data/calendar/sanctoral-calendar.yml b/src/data/calendar/sanctoral-calendar.yml index 1327245..04a29a0 100644 --- a/src/data/calendar/sanctoral-calendar.yml +++ b/src/data/calendar/sanctoral-calendar.yml @@ -155,10 +155,42 @@ days: "07-28": [ss-nazarius-celsus-victor-and-innocent] "07-29": [st-martha, ss-felix-simplicius-faustinus-and-beatrix] "07-30": [ss-abdon-and-sennen] - "08-09": [vigil-of-st-lawrence] + # August — 8/12 of the pre-1955 pull. Four pre-existing entries from + # before this pull initiative (vigil-of-st-lawrence, st-lawrence, + # assumption, st-augustine) got their propers backfilled this month; see + # their own files. A genuinely new wrinkle this month: several dates + # have a real, named secondary saint permanently subordinate to a + # fixed, non-movable *octave* day (Lawrence's own Aug 10-17 octave, the + # Assumption's Aug 15-22 octave) or to the fixed Transfiguration (Aug + # 6) -- octaves and fixed Lord's feasts aren't modeled by this app (a + # known, explicitly deferred gap), so unlike the "genuinely unwinnable + # stub" pattern used elsewhere (where both competitors ARE modeled and + # the engine can correctly show the subordination), these can't be + # represented without incorrectly letting them win outright. Excluded + # entirely rather than guessed at: Ss. Xystus/Felicissimus/Agapitus + # (Aug 6, under the Transfiguration), Ss. Tiburtius and Susanna (Aug + # 11), St. Clare (Aug 12 -- notable: a genuinely major saint, not an + # obscure one, caught by this same gap), Ss. Hippolytus and Cassian + # (Aug 13), St. Agapitus (Aug 18), Ss. Timothy/Hippolytus/Symphorian + # (Aug 22). Also excluded: Our Lady of the Snows (Aug 5, fixed BVM + # feast, same convention as Purification/Annunciation). + "08-01": [st-peter-ad-vincula, ss-machabees] + "08-02": [st-stephen-i] + "08-03": [finding-of-st-stephen] + "08-04": [st-dominic] + "08-07": [st-donatus] + "08-08": [ss-cyriacus-largus-and-smaragdus] + "08-09": [vigil-of-st-lawrence, st-romanus] "08-10": [st-lawrence] "08-15": [assumption] - "08-28": [st-augustine] + "08-20": [st-bernard] + "08-23": [vigil-of-st-bartholomew] + "08-24": [st-bartholomew] + "08-25": [st-louis] + "08-26": [st-zephyrinus] + "08-28": [st-augustine, st-hermes] + "08-29": [decollation-of-st-john-baptist, st-sabina] + "08-30": [ss-felix-and-adauctus] "09-08": [nativity-bvm] "09-29": [st-michael] "11-01": [all-saints]