Author Benedictus antiphon + P/T/S/N Commons for 66 propers:null saints
Deploy / deploy (push) Successful in 56s

Continues the 94-saint batch this collects pass unblocked. Raw
Commune/*.txt fields don't reliably match what the engine actually
renders per hour -- same lesson as the collects pass, confirmed again:
no CommuneM/*.txt file defines explicit per-hour antiphon fields for any
category this batch needed, and the already-authored
common-of-a-confessor-bishop content (from the original 29-saint pass)
doesn't match Commune/C4.txt's own raw [Ant 1] either, since it was
live-query-sourced rather than read from the file directly. Fixed by
querying web/cgi-bin/horas/officium.pl directly (local Perl, not a
network fetch) for one representative saint per Common category, with
every representative's title verified against an accent-insensitive
name-stem match before its content is trusted -- caught a stale-date bug
this way: St. Emerentiana's stored clean-year comment actually rendered
St. Hilary of Poitiers's office that year.

Cross-querying multiple saints per nominal SaintRecord.common category
found the real liturgical groupings are coarser (Martyr-Bishop and
Martyr; Abbot, Confessor-not-Bishop, and Confessor; Virgin-Martyr,
Virgin, and Holy Woman all render identical minor-hour text) but not
uniformly so (Pope-Martyrs render distinct allelúja-toned text from
plain Several-Martyrs; the Dedication of the Basilicas of Ss. Peter and
Paul draws from the Dedication Common, not its nominal
common-of-an-apostle at all). Net: 7 new shared Common categories plus
the pre-existing common-of-a-confessor-bishop (which also needed a new
Benedictus-antiphon file of its own) cover 66 of the 94 saints.

New mechanism: SaintRecord.benedictusCommon, with getBenedictusAntiphon
falling back to it the same way getDayCollect already falls back to
collectCommon -- no name-substitution needed here, since every Common
category in current use renders name-free Benedictus-antiphon text.

Also fixes a real bug this surfaced: getMinorHourOverrideId gated all
Prime/Terce/Sext/None lookup behind the same duplex-majus+ threshold
Lauds' own psalmody override uses, on the assumption that only a strong
feast carries its own minor-hour content -- live-querying proved that
wrong (a winning Semiduplex saint still renders its own antiphons, not
the ferial default). Lauds' psalmody override itself stays majus+-gated
correctly, since it's a much bigger per-saint commitment this batch
doesn't add a Common fallback for.

Ss. Ursula and Companions deliberately left without a minor-hour Common:
her collect template has no other calendar member to verify a shared
text against, and she can never be queried directly (a genuinely
unwinnable stub) -- left honestly unauthored rather than guessed.

The other 26 of the 94 (own proper collect, from the collects batch)
still need their own individually-authored Benedictus antiphon, same
shape as the original 109-saint pass -- not done in this pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 08:58:13 -04:00
parent 6bb4c6a80f
commit ffaa797940
128 changed files with 1224 additions and 21 deletions
@@ -15,3 +15,5 @@ collectCommon: collect-c8
collectName:
la: []
en: []
minorHoursCommon: common-of-a-dedication
benedictusCommon: common-of-a-dedication
@@ -10,3 +10,5 @@ collectCommon: collect-c3b
collectName:
la: ["Cletum", "Marcellínum"]
en: ["Cletus", "Marcellinus"]
minorHoursCommon: common-of-pope-martyrs
benedictusCommon: common-of-pope-martyrs
@@ -15,3 +15,5 @@ collectCommon: collect-c3
collectName:
la: ["Cornélii", "Cypriáni"]
en: ["Cornelius", "Cyprian"]
minorHoursCommon: common-of-several-martyrs
benedictusCommon: common-of-several-martyrs
@@ -11,3 +11,5 @@ collectCommon: collect-c3a-1
collectName:
la: ["Faustíni", "Jovítæ"]
en: ["Faustinus", "Jovita"]
minorHoursCommon: common-of-several-martyrs
benedictusCommon: common-of-several-martyrs
@@ -17,3 +17,5 @@ collectCommon: collect-c3a
collectName:
la: ["Plácidi", "Sociórum ejus"]
en: ["Placidus", "his companions"]
minorHoursCommon: common-of-several-martyrs
benedictusCommon: common-of-several-martyrs
@@ -13,3 +13,5 @@ collectCommon: collect-c3b
collectName:
la: ["Sotérem", "Cajum"]
en: ["Soter", "Caius"]
minorHoursCommon: common-of-pope-martyrs
benedictusCommon: common-of-pope-martyrs
@@ -2,6 +2,17 @@
# commemorated under St. Hilarion (see st-hilarion.yml), never wins
# outright; both are fixed, non-movable dates, so this isn't an artifact
# of the tested year. rank/propers unverified placeholders.
#
# No minorHoursCommon/benedictusCommon: her collect template (collect-c6b,
# plural Virgins and Martyrs) has no other member on this app's calendar
# to cross-verify a shared P/T/S/N/Benedictus text against, and she can
# never be queried directly herself (never the day's own winner) -- rather
# than guess she shares common-of-a-virgin's singular text (2026-08's
# live-verified category, built from St. Justina/St. Emerentiana/
# St. Praxedes/St. Martha, all singular), left unset, same "honestly
# missing" convention as every other unauthored fallback in this codebase.
# Moot in practice: a commemoration's minor hours are never rendered
# anyway (resolveOfficeWinner only ever returns the day's actual winner).
id: ss-ursula-and-companions
name: "Ss. Ursula and Companions, Virgins and Martyrs"
rank: simplex
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c5
collectName:
la: ["Aléxii"]
en: ["Alexis"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -14,3 +14,5 @@ collectCommon: collect-c4a
collectName:
la: ["Ambrósium"]
en: ["Ambrose"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
@@ -11,3 +11,5 @@ collectCommon: collect-c2b
collectName:
la: ["Anaclétum"]
en: ["Anacletus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -10,3 +10,5 @@ collectCommon: collect-c2b
collectName:
la: ["Anicétum"]
en: ["Anciet"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -14,3 +14,5 @@ collectCommon: collect-c5b
collectName:
la: ["Antónii"]
en: ["Anthony"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -15,3 +15,5 @@ collectCommon: collect-c6
collectName:
la: ["Bárbaræ"]
en: ["Barbara"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
+2
View File
@@ -14,3 +14,5 @@ collectCommon: collect-c2-1
collectName:
la: [Blásii]
en: [Blaise]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -11,3 +11,5 @@ collectCommon: collect-c4a
collectName:
la: ["Bonaventúram"]
en: ["Bonaventure"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
@@ -16,3 +16,5 @@ collectCommon: collect-c6-1
collectName:
la: ["Christína"]
en: ["Christina"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
@@ -16,3 +16,5 @@ collectCommon: collect-c2a
collectName:
la: ["Christóphori"]
en: ["Christopher"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -14,3 +14,5 @@ collectCommon: collect-c6-1
collectName:
la: ["Emerentiána"]
en: ["Emerentiana"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
+2
View File
@@ -16,3 +16,5 @@ collectCommon: collect-c5b
collectName:
la: ["Æmiliani"]
en: ["Emilian"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
@@ -18,3 +18,5 @@ collectCommon: collect-c2-1
collectName:
la: ["Eusébii"]
en: ["Eusebius"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -11,3 +11,5 @@ collectCommon: collect-c2b
collectName:
la: ["Evarístum"]
en: ["Evaristus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -10,3 +10,5 @@ collectCommon: collect-c2b
collectName:
la: ["Felícem"]
en: ["Felix"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -16,3 +16,5 @@ collectCommon: collect-c5b
collectName:
la: ["Galli"]
en: ["Gall"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c5b
collectName:
la: ["Ægídii"]
en: ["Giles"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
@@ -11,3 +11,5 @@ collectCommon: collect-c4a
collectName:
la: ["Gregorii Nazianzéni"]
en: ["Gregory Nazianzen"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
@@ -11,3 +11,5 @@ collectCommon: collect-c4
collectName:
la: ["Gregórii"]
en: ["Gregory"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
+2
View File
@@ -16,3 +16,5 @@ collectCommon: collect-c2a
collectName:
la: ["Hadriáni"]
en: ["Adrian"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c5b
collectName:
la: ["Hilariónis"]
en: ["Hilarion"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -14,3 +14,5 @@ collectCommon: collect-c2b
collectName:
la: ["Hygínum"]
en: ["Hyginus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -13,3 +13,5 @@ collectCommon: collect-c2
collectName:
la: ["Ignátii"]
en: ["Ignatius"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -13,3 +13,5 @@ collectCommon: collect-c3a-1
collectName:
la: ["Januárii", "Sociórum ejus"]
en: ["Januarius", "companions"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -12,3 +12,5 @@ collectCommon: collect-c5b
collectName:
la: ["Joánnis"]
en: ["John"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -18,3 +18,5 @@ collectCommon: collect-c6
collectName:
la: ["Justinæ"]
en: ["Justina"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
+2
View File
@@ -16,3 +16,5 @@ collectCommon: collect-c4
collectName:
la: ["Libórii"]
en: ["Liborius"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
+2
View File
@@ -11,3 +11,5 @@ collectCommon: collect-c2b
collectName:
la: ["Linum"]
en: ["Linus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -19,3 +19,5 @@ collectCommon: collect-c6a
collectName:
la: ["Marthæ"]
en: ["Martha"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
+2
View File
@@ -17,3 +17,5 @@ collectCommon: collect-c2b
collectName:
la: ["Martínum"]
en: ["Martin"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -13,3 +13,5 @@ collectCommon: collect-c5b
collectName:
la: ["Mauri"]
en: ["Maurus"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
@@ -12,3 +12,5 @@ collectCommon: collect-c2b
collectName:
la: ["Melchíadem"]
en: ["Melchiades"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -11,3 +11,5 @@ collectCommon: collect-c2a
collectName:
la: ["Mennæ"]
en: ["Menna"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -17,3 +17,5 @@ collectCommon: collect-c5-1
collectName:
la: ["Nicolái"]
en: ["Nicolaus"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -16,3 +16,5 @@ collectCommon: collect-c5b
collectName:
la: ["Odónis"]
en: ["Odo"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
@@ -10,3 +10,5 @@ collectCommon: collect-c2a-1
collectName:
la: ["Pantaleóne"]
en: ["Pantaleon"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -13,3 +13,5 @@ collectCommon: collect-c2
collectName:
la: ["Petri"]
en: ["Peter"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -10,3 +10,5 @@ collectCommon: collect-c2b
collectName:
la: ["Pii"]
en: ["Pius"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -11,3 +11,5 @@ collectCommon: collect-c2-1
collectName:
la: ["Polycárpi"]
en: ["Polycarp"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c2b
collectName:
la: ["Pontiánum"]
en: ["Pontianus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c6a
collectName:
la: ["Praxédis"]
en: ["Praxedes"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
@@ -16,3 +16,5 @@ collectCommon: collect-c6a
collectName:
la: ["Pudentiánæ"]
en: ["Pudentiana"]
minorHoursCommon: common-of-a-virgin
benedictusCommon: common-of-a-virgin
+2
View File
@@ -11,3 +11,5 @@ collectCommon: collect-c4
collectName:
la: ["Remígii"]
en: ["Remigius"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
@@ -12,3 +12,5 @@ collectCommon: collect-c5b
collectName:
la: ["Románi"]
en: ["Romanus"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -19,3 +19,5 @@ collectCommon: collect-c2a-1
collectName:
la: ["Románo"]
en: ["Romanus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -10,3 +10,5 @@ collectCommon: collect-c5
collectName:
la: ["Romuáldi"]
en: ["Romuald"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c5b
collectName:
la: ["Sabbæ"]
en: ["Sabbas"]
minorHoursCommon: common-of-an-abbot
benedictusCommon: common-of-an-abbot
+2
View File
@@ -12,3 +12,5 @@ collectCommon: collect-c6
collectName:
la: ["Sabínæ"]
en: ["Sabina"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -10,3 +10,5 @@ collectCommon: collect-c2b
collectName:
la: ["Silvérii"]
en: ["Silverius"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -14,3 +14,5 @@ collectCommon: collect-c4
collectName:
la: ["Silvéstri"]
en: ["Sylvester"]
minorHoursCommon: common-of-a-confessor-bishop
benedictusCommon: common-of-a-confessor-bishop
+2
View File
@@ -10,3 +10,5 @@ collectCommon: collect-c2
collectName:
la: ["Simeónis"]
en: ["Simeon"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -20,3 +20,5 @@ collectCommon: collect-c2b
collectName:
la: ["Stéphanum"]
en: ["Stephen"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -14,3 +14,5 @@ collectCommon: collect-c2b
collectName:
la: ["Telésphorum"]
en: ["Telesphorus"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
+2
View File
@@ -11,3 +11,5 @@ collectCommon: collect-c2
collectName:
la: ["Timóthei"]
en: ["Timothy"]
minorHoursCommon: common-of-a-martyr
benedictusCommon: common-of-a-martyr
@@ -12,3 +12,5 @@ collectCommon: collect-c1v
collectName:
la: ["Andreas"]
en: ["Andrew"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil
@@ -14,3 +14,5 @@ collectCommon: collect-c1v
collectName:
la: ["Bartholomǽi"]
en: ["Bartholomeus"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil
@@ -12,3 +12,5 @@ collectCommon: collect-c1v
collectName:
la: ["Jacóbi"]
en: ["James"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil
@@ -19,3 +19,5 @@ collectCommon: collect-c1v
collectName:
la: ["Matthǽi"]
en: ["Matthew"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil
@@ -13,3 +13,5 @@ collectCommon: collect-c1v
collectName:
la: ["Matthíæ"]
en: ["Matthias"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil
@@ -17,3 +17,5 @@ collectCommon: collect-c1v
collectName:
la: ["Thomæ"]
en: ["Thomas"]
minorHoursCommon: common-of-a-vigil
benedictusCommon: common-of-a-vigil