Sweep minorHoursCommon (P/T/S/N) across the whole calendar, not just the 94-saint batch
Deploy / deploy (push) Successful in 56s

The original 29-saint P/T/S/N pass only ever covered duplex-majus+
saints; every below-majus saint from the *original*, pre-94-batch
109-saint pass had never had Prime/Terce/Sext/None attempted at all --
same gap already found and fixed for the 94-batch's own below-majus
saints, now closed for the rest of the calendar too.

Reused the Kalendaria-table-validated fileref approach rather than a
blind Sancti/MM-DD.txt read -- a real near-miss caught this early: St.
Apollonia's Sancti/02-09.txt is currently St. Cyril of Alexandria's (a
19th-century addition to that filename slot); blind reading would have
silently attributed his Doctor-of-the-Church Common to her. Also fixed
a regex bug the same pass turned up: the "vide"/"ex CXX" pattern
matched the bare word "Commune" (no number) and reading-specific
sub-references like "ex C4 in 2 loco" -- found via St. Clement, whose
Monastic-specific [Rule] override has neither a clean "vide CXX" nor a
number after "Commune."

90 below-majus saints swept, ~82 wired directly into the categories
already established in the previous commits -- no new content needed,
every C-number variant found already falls inside an already-verified
family.

A real bug this pass caught and fixed in its own output: Ss. Ursula and
Companions (deliberately left minorHoursCommon-unwired) got swept up
and wrongly wired, since she has collectCommon set despite propers:
null and being a genuine commemoration-only stub -- the Kalendaria
lookup silently defaulted to St. Hilarion's own primary slot at her
shared date. Caught by cross-checking every swept saint's propers field
for this exact pattern; reverted.

A real new category found: Doctors of the Church are not one thing.
6 of the 7 saints whose own [Rule] says "vide C4a" (Athanasius,
Augustine, Basil the Great, Hilary of Poitiers, John Chrysostom, Leo I)
render P/T/S/N byte-identical to the already-verified
common-of-a-confessor-bishop -- wired directly. St. Gregory the Great is
the one genuine exception: his own live-rendered P/T/S/N is real, unique
proper text (his own election, his Liber Regulae Pastoralis, the
dove-and-quill legend, the "non Angli sed Angeli" episode) -- 7 new
files, English translated throughout since the source rendered none.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 11:24:53 -04:00
parent 130b0f983d
commit 37dac8b476
96 changed files with 661 additions and 0 deletions
+87
View File
@@ -536,6 +536,93 @@ resolve via this file-based method at all (their particular file format
wasn't handled by this pass's parser) — no impact, both already had wasn't handled by this pass's parser) — no impact, both already had
real content from the live-query batch above. real content from the live-query batch above.
### `minorHoursCommon` gap swept across the whole calendar (2026-08)
The pieces above all fixed Benedictus-antiphon/collect gaps. This pass
does the same thing for Prime/Terce/Sext/None specifically, and widens
scope from just the 94-saint batch to the **whole** calendar — the
original 29-saint P/T/S/N pass (an earlier session) only ever covered
duplex-majus+ saints; every below-majus saint from the *original*,
pre-94-batch 109-saint pass had never had P/T/S/N attempted at all,
same gap as the one already found and fixed for the 94-batch's own
below-majus saints.
**Method**: reused the Kalendaria-table-validated fileref approach
(same as the collects pass), not a blind `Sancti/MM-DD.txt` read — a
real near-miss caught this early: St. Apollonia's `Sancti/02-09.txt` is
*currently* St. Cyril of Alexandria's (a 19th-century addition to that
filename slot); blind reading would have silently attributed his
Doctor-of-the-Church Common to her. The Kalendaria table's own
validated fileref (`02-09o`) gives her real content instead. Also fixed
a second, unrelated regex bug the same pass turned up: the original
"`vide`/`ex CXX`" pattern matched the bare word "`Commune`" (no number)
and reading-specific sub-references like "`ex C4 in 2 loco`" (which
only says where *that nocturn's readings* come from, not the overall
antiphon Common) — found via St. Clement, whose Monastic-specific
`[Rule]` override has neither a clean `vide CXX` nor a number after
"Commune." Fixed by requiring a digit right after `C` and skipping any
match immediately followed by `"in N loco"`.
**90 below-majus saints swept, ~82 wired directly** into the categories
already established above (mostly `common-of-a-martyr` and
`common-of-several-martyrs`, the two largest families) — no new content
needed, since every C-number variant found (`C2`/`C2-1`/`C2a`/`C2a-1`/
`C2b`/`C2b-1`/`C2-1b`, `C3`/`C3a`/`C3a-1`, `C5`/`C5-1`/`C5a`/`C5b`,
`C6`/`C6-1`/`C6a`/`C7a`, `C4`/`C4b`, `C1`, `C1v`) already falls inside a
family live-query-verified earlier.
**A real bug this pass caught and fixed**: Ss. Ursula and Companions
(deliberately left `minorHoursCommon`-unwired, see her own section
above) got swept up and *wrongly* wired to `common-of-an-abbot` by this
pass's own script, since she has `collectCommon` set (making her look
like a normal, resolvable batch member) despite `propers: null` and
being a genuine commemoration-only stub — the underlying
Kalendaria-table lookup silently defaulted to St. Hilarion's own
`primary` slot at her shared date rather than her own (nonexistent)
one. Caught by cross-checking every swept saint's `propers` field for
this exact `null`-but-`collectCommon`-set pattern before trusting a
default-to-primary assumption; reverted, she's still correctly unwired.
**A real, new category found: Doctors of the Church are not one thing.**
7 saints' own `[Rule]` says "`vide C4a`" (`Commune Doctoris Pontificis`)
— but live-querying showed this doesn't mean what it looks like it
means. St. Athanasius, St. Augustine, St. Basil the Great, St. Hilary of
Poitiers, St. John Chrysostom, and St. Leo I all render P/T/S/N
byte-identical to `common-of-a-confessor-bishop`'s already-verified
text (their own `C4a` reference just inherits `C4`'s content
underneath, per the same "the referenced file's raw fields don't
reliably predict the live-rendered text" lesson from every other
category this session) — wired directly, no new content. **St. Gregory
the Great is the one genuine exception**: his own live-rendered
P/T/S/N is real, unique proper text (alluding to his own election,
his *Liber Regulæ Pastoralis*, the dove-and-quill legend, and the
"non Angli sed Angeli" episode already known from his Benedictus
antiphon) — 7 new files (`{hour}-antiphon-st-gregory-the-great.yml`,
`{terce,sext,none}-capitulum-st-gregory-the-great.yml`), no
`minorHoursCommon` needed at all (`getMinorHourOverrideId` already
tries his own id first). English wasn't rendered at all for any of his
6 new texts (same Latin-duplicated-into-English gap as St. Scholastica/
St. Benedict), so all 6 are `status.en: draft`.
**One loose thread noticed, not chased**: St. Athanasius (May 2) and
St. Leo I (April 11), both tested in years that happened to fall within
Eastertide, rendered their shared `common-of-a-confessor-bishop` text
with a trailing "`allelúja`" appended to every antiphon — but the other
4 Doctor saints (tested in non-Paschaltide months) didn't. This isn't
the same kind of thing as the already-modeled `-paschaltide` Common
variants (`common-of-apostles-paschaltide` etc., which are *wholly
different wording*, not the same text plus a suffix) — looks more like
a general seasonal "append allelúja in Paschaltide" rule this app
doesn't model at any level yet. Not blocking (the plain, correctly-
verified text still renders in every other season, which is most of the
year), but worth a look if Eastertide rendering fidelity matters later.
Verified end-to-end: a runtime smoke test (folded into
`tests/hours/resolve-common.test.ts`) covering the same-person reuse
case (Finding of St. Stephen → St. Stephen Protomartyr's own files),
Gregory's unique content, and a shared-Doctor case, plus 8 more spot
checks across the newly-wired families during the pass itself.
### Christmas-Octave Sunday content — done (2026-08) ### Christmas-Octave Sunday content — done (2026-08)
Was: only the Benedictus antiphon existed for `christmas-octave-sunday` Was: only the Benedictus antiphon existed for `christmas-octave-sunday`
@@ -8,3 +8,8 @@ name: "Commemoration of St. Paul, Apostle"
rank: duplex rank: duplex
common: common-of-an-apostle common: common-of-an-apostle
propers: "commemoration-of-st-paul" propers: "commemoration-of-st-paul"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-30.txt) --
# [Rule]/[Rank] point to Commune/C1 instead, the same C-number family already
# live-query-verified for common-of-apostles.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-apostles
@@ -11,3 +11,8 @@ name: "The Beheading of St. John the Baptist"
rank: duplex rank: duplex
common: common-of-an-apostle common: common-of-an-apostle
propers: "decollation-of-st-john-baptist" propers: "decollation-of-st-john-baptist"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-29.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -16,3 +16,7 @@ name: "The Finding of St. Stephen, Protomartyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "finding-of-st-stephen" propers: "finding-of-st-stephen"
# P/T/S/N: [Rule] points directly at st-stephen-protomartyr's own file
# (Sancti/12-26), not a Commune category -- reuses his own already-authored
# proper P/T/S/N wholesale (see TODO.md's 'minor hour content gaps' section).
minorHoursCommon: st-stephen-protomartyr
@@ -6,3 +6,8 @@ name: "The Forty Holy Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "forty-holy-martyrs" propers: "forty-holy-martyrs"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (03-10.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Abdon and Sennen, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-abdon-and-sennen" propers: "ss-abdon-and-sennen"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-30.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Basilides, Cyrinus, Nabor, and Nazarius, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-basilides-cyrinus-nabor-and-nazarius" propers: "ss-basilides-cyrinus-nabor-and-nazarius"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-12o.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -10,3 +10,8 @@ name: "Ss. Chrysanthus and Daria, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-chrysanthus-and-daria" propers: "ss-chrysanthus-and-daria"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (10-25.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Cosmas and Damian, Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-cosmas-and-damian" propers: "ss-cosmas-and-damian"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (09-27.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -9,3 +9,8 @@ name: "Ss. Cyprian and Justina, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-cyprian-and-justina" propers: "ss-cyprian-and-justina"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (09-26.txt) --
# [Rule]/[Rank] point to Commune/C3a-1 instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Cyriacus, Largus, and Smaragdus, Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-cyriacus-largus-and-smaragdus" propers: "ss-cyriacus-largus-and-smaragdus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-08.txt) --
# [Rule]/[Rank] point to Commune/C3a-1 instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -17,3 +17,8 @@ propers: "ss-dionysius-and-companions"
# same category (see calendar/feasts.ts's SaintRecord.benedictusCommon # same category (see calendar/feasts.ts's SaintRecord.benedictusCommon
# doc comment). # doc comment).
benedictusCommon: common-of-several-martyrs benedictusCommon: common-of-several-martyrs
# P/T/S/N: no [Ant Prima]/etc of its own in the source (10-09t.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -13,3 +13,8 @@ name: "Ss. Euphemia, Lucy, and Geminianus, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-euphemia-lucia-and-geminianus" propers: "ss-euphemia-lucia-and-geminianus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (09-16.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Fabian and Sebastian, Martyrs"
rank: duplex rank: duplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-fabian-and-sebastian" propers: "ss-fabian-and-sebastian"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-20.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -17,3 +17,8 @@ propers: "ss-felix-and-adauctus"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2025-08-30, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2025-08-30, winner
# outright) as byte-identical to common-of-several-martyrs.yml's own. # outright) as byte-identical to common-of-several-martyrs.yml's own.
benedictusCommon: common-of-several-martyrs benedictusCommon: common-of-several-martyrs
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-30o.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Gervase and Protase, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-gervase-and-protase" propers: "ss-gervase-and-protase"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-19o.txt) --
# [Rule]/[Rank] point to Commune/C3a-1 instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -8,3 +8,8 @@ name: "Ss. John and Paul, Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-john-and-paul" propers: "ss-john-and-paul"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-26.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -8,3 +8,8 @@ name: "Ss. Marcellinus, Peter, and Erasmus, Bishop, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-marcellinus-peter-and-erasmus" propers: "ss-marcellinus-peter-and-erasmus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-02.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Mark and Marcellian, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-mark-and-marcellian" propers: "ss-mark-and-marcellian"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-18t.txt) --
# [Rule]/[Rank] point to Commune/C3a-1 instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -14,3 +14,8 @@ propers: "ss-maurice-and-companions"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2025-09-22, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2025-09-22, winner
# outright) as byte-identical to common-of-several-martyrs.yml's own. # outright) as byte-identical to common-of-several-martyrs.yml's own.
benedictusCommon: common-of-several-martyrs benedictusCommon: common-of-several-martyrs
# P/T/S/N: no [Ant Prima]/etc of its own in the source (09-22o.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -9,3 +9,8 @@ name: "Ss. Nazarius and Celsus, Martyrs, St. Victor I, Pope and Martyr, and St.
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-nazarius-celsus-victor-and-innocent" propers: "ss-nazarius-celsus-victor-and-innocent"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-28.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Nereus, Achilleus, Domitilla, and Pancras, Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-nereus-achilleus-domitilla-and-pancras" propers: "ss-nereus-achilleus-domitilla-and-pancras"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-12.txt) --
# [Rule]/[Rank] point to Commune/C3a-1 instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -8,3 +8,8 @@ name: "Ss. Primus and Felicianus, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-primus-and-felicianus" propers: "ss-primus-and-felicianus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-09.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Seven Brothers, Martyrs, and Ss. Rufina and Secunda, Virgins and Mart
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-seven-brothers-rufina-and-secunda" propers: "ss-seven-brothers-rufina-and-secunda"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-10.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Symphorosa and Her Seven Sons, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-symphorosa-and-seven-sons" propers: "ss-symphorosa-and-seven-sons"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-18o.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -7,3 +7,8 @@ name: "Ss. Tiburtius, Valerian, and Maximus, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-tiburtius-valerian-and-maximus" propers: "ss-tiburtius-valerian-and-maximus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-14t.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -12,3 +12,8 @@ propers: "ss-tryphon-and-companions"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2025-11-10, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2025-11-10, winner
# outright) as byte-identical to common-of-several-martyrs.yml's own. # outright) as byte-identical to common-of-several-martyrs.yml's own.
benedictusCommon: common-of-several-martyrs benedictusCommon: common-of-several-martyrs
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-10o.txt) --
# [Rule]/[Rank] point to Commune/C3a instead, the same C-number family
# already live-query-verified for common-of-several-martyrs.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Vincent and Anastasius, Martyrs"
rank: semiduplex rank: semiduplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-vincent-and-anastasius" propers: "ss-vincent-and-anastasius"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-22.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
@@ -6,3 +6,8 @@ name: "Ss. Vitus, Modestus, and Crescentia, Martyrs"
rank: simplex rank: simplex
common: common-of-several-martyrs common: common-of-several-martyrs
propers: "ss-vitus-modestus-and-crescentia" propers: "ss-vitus-modestus-and-crescentia"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-15.txt) --
# [Rule]/[Rank] point to Commune/C3 instead, the same C-number family already
# live-query-verified for common-of-several-martyrs.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-several-martyrs
+5
View File
@@ -15,3 +15,8 @@ collectCommon: collect-c6
collectName: collectName:
la: ["Agathæ"] la: ["Agathæ"]
en: ["Agatha"] en: ["Agatha"]
# P/T/S/N: no [Ant Prima]/etc of its own in the source (02-05.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -10,3 +10,8 @@ name: "St. Agnes, Virgin and Martyr, Second Feast"
rank: simplex rank: simplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-agnes-secunda" propers: "st-agnes-secunda"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-28t.txt) --
# [Rule]/[Rank] point to Commune/C6-1 instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
+5
View File
@@ -7,3 +7,8 @@ name: "St. Agnes, Virgin and Martyr"
rank: duplex rank: duplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-agnes" propers: "st-agnes"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-21.txt) --
# [Rule]/[Rank] point to Commune/C6-1 instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
+5
View File
@@ -8,3 +8,8 @@ name: "St. Anne, Mother of the Blessed Virgin Mary"
rank: duplex rank: duplex
common: common-of-a-holy-woman common: common-of-a-holy-woman
propers: "st-anne" propers: "st-anne"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-26.txt) --
# [Rule]/[Rank] point to Commune/C7a instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -6,3 +6,8 @@ name: "St. Anthony of Padua, Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor common: common-of-a-confessor
propers: "st-anthony-of-padua" propers: "st-anthony-of-padua"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-13.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -12,3 +12,8 @@ name: "St. Apollinaris, Bishop and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-apollinaris" propers: "st-apollinaris"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-23.txt) --
# [Rule]/[Rank] point to Commune/C2-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -6,3 +6,8 @@ name: "St. Apollonia, Virgin and Martyr"
rank: simplex rank: simplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-apollonia" propers: "st-apollonia"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (02-09o.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -6,3 +6,8 @@ name: "St. Athanasius, Bishop, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-athanasius" propers: "st-athanasius"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
@@ -11,3 +11,8 @@ name: "St. Augustine of Hippo, Bishop, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-augustine" propers: "st-augustine"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
@@ -8,3 +8,8 @@ name: "St. Basil the Great, Bishop, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-basil-the-great" propers: "st-basil-the-great"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -8,3 +8,8 @@ name: "St. Bernard, Abbot and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-an-abbot common: common-of-an-abbot
propers: "st-bernard" propers: "st-bernard"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-20.txt) --
# [Rule]/[Rank] point to Commune/C5a instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -10,3 +10,8 @@ name: "St. Boniface, Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "st-boniface" propers: "st-boniface"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-14.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -6,3 +6,8 @@ name: "St. Callistus I, Pope and Martyr"
rank: duplex rank: duplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-callistus" propers: "st-callistus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (10-14.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -6,3 +6,8 @@ name: "St. Catherine of Alexandria, Virgin and Martyr"
rank: duplex rank: duplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-catherine" propers: "st-catherine"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-25.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
+5
View File
@@ -8,3 +8,8 @@ name: "St. Cecilia, Virgin and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-cecilia" propers: "st-cecilia"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-22.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -17,3 +17,8 @@ propers: "st-chrysogonus"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2027-11-24, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2027-11-24, winner
# outright) as byte-identical to common-of-a-martyr.yml's own. # outright) as byte-identical to common-of-a-martyr.yml's own.
benedictusCommon: common-of-a-martyr benedictusCommon: common-of-a-martyr
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-24o.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -14,3 +14,8 @@ name: "St. Clement I, Pope and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-clement" propers: "st-clement"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-23.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -9,3 +9,8 @@ name: "St. Damasus I, Pope and Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-damasus" propers: "st-damasus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (12-11.txt) --
# [Rule]/[Rank] point to Commune/C4b instead, the same C-number family
# already live-query-verified for common-of-a-confessor-bishop.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -7,3 +7,8 @@ name: "St. Dominic, Confessor"
rank: duplex rank: duplex
common: common-of-a-confessor-not-bishop common: common-of-a-confessor-not-bishop
propers: "st-dominic" propers: "st-dominic"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-04.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -23,3 +23,8 @@ propers: "st-donatus"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2026-08-07, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2026-08-07, winner
# outright) as byte-identical to common-of-a-martyr.yml's own. # outright) as byte-identical to common-of-a-martyr.yml's own.
benedictusCommon: common-of-a-martyr benedictusCommon: common-of-a-martyr
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-07o.txt) --
# [Rule]/[Rank] point to Commune/C2-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -6,3 +6,8 @@ name: "St. Dorothea, Virgin and Martyr"
rank: simplex rank: simplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-dorothea" propers: "st-dorothea"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (02-06o.txt) --
# [Rule]/[Rank] point to Commune/C6-1 instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -7,3 +7,8 @@ name: "St. Eleutherius, Pope and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-eleutherius" propers: "st-eleutherius"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-26o.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -9,3 +9,8 @@ name: "St. Francis of Paola, Confessor"
rank: duplex rank: duplex
common: common-of-a-confessor common: common-of-a-confessor
propers: "st-francis-of-paola" propers: "st-francis-of-paola"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-02.txt) --
# [Rule]/[Rank] point to Commune/C5-1 instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -6,3 +6,8 @@ name: "St. Francis of Assisi, Confessor"
rank: duplex rank: duplex
common: common-of-a-confessor-not-bishop common: common-of-a-confessor-not-bishop
propers: "st-francis" propers: "st-francis"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (10-04.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -6,3 +6,8 @@ name: "St. George, Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "st-george" propers: "st-george"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-23.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -13,3 +13,8 @@ name: "St. Hilary of Poitiers, Bishop, Confessor and Doctor of the Church"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-hilary-of-poitiers" propers: "st-hilary-of-poitiers"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -6,3 +6,8 @@ name: "St. Jerome, Priest, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-not-bishop common: common-of-a-confessor-not-bishop
propers: "st-jerome" propers: "st-jerome"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (09-30.txt) --
# [Rule]/[Rank] point to Commune/C5a instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -6,3 +6,8 @@ name: "St. John Chrysostom, Bishop, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-john-chrysostom" propers: "st-john-chrysostom"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -7,3 +7,8 @@ name: "St. John I, Pope and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-john-i" propers: "st-john-i"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-27o.txt) --
# [Rule]/[Rank] point to Commune/C2b-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -8,3 +8,8 @@ name: "St. Joseph, Spouse of the Blessed Virgin Mary, Confessor"
rank: duplex rank: duplex
common: common-of-a-confessor common: common-of-a-confessor
propers: "st-joseph" propers: "st-joseph"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (03-19t.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -10,3 +10,8 @@ name: "St. Leo I, Pope, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-leo-i" propers: "st-leo-i"
# P/T/S/N: live-query-verified (2026-08) as byte-identical to common-of-a-
# confessor-bishop.yml, despite his own [Rule] saying "vide C4a" (Doctor) --
# unlike St. Gregory the Great, whose own live-rendered P/T/S/N really is
# unique proper text (see his own prime-antiphon-st-gregory-the-great.yml).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -10,3 +10,8 @@ name: "St. Leo II, Pope and Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-leo-ii" propers: "st-leo-ii"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-28t.txt) --
# [Rule]/[Rank] point to Commune/C4b instead, the same C-number family
# already live-query-verified for common-of-a-confessor-bishop.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -6,3 +6,8 @@ name: "St. Louis, King of France, Confessor"
rank: simplex rank: simplex
common: common-of-a-confessor-not-bishop common: common-of-a-confessor-not-bishop
propers: "st-louis" propers: "st-louis"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-25.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
+5
View File
@@ -11,3 +11,8 @@ name: "St. Lucius I, Pope and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-lucius-i" propers: "st-lucius-i"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (03-04cc.txt) --
# [Rule]/[Rank] point to Commune/C2b-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -10,3 +10,8 @@ name: "St. Lucy, Virgin and Martyr"
rank: duplex rank: duplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-lucy" propers: "st-lucy"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (12-13t.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -8,3 +8,8 @@ name: "St. Marcellus I, Pope and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-marcellus-i" propers: "st-marcellus-i"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-16.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -6,3 +6,8 @@ name: "St. Margaret of Antioch, Virgin and Martyr"
rank: simplex rank: simplex
common: common-of-a-virgin-martyr common: common-of-a-virgin-martyr
propers: "st-margaret-of-antioch" propers: "st-margaret-of-antioch"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-20o.txt) --
# [Rule]/[Rank] point to Commune/C6 instead, the same C-number family already
# live-query-verified for common-of-a-virgin.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-a-virgin
@@ -9,3 +9,8 @@ name: "St. Mary Magdalene, Penitent"
rank: duplex rank: duplex
common: common-of-a-holy-woman common: common-of-a-holy-woman
propers: "st-mary-magdalene" propers: "st-mary-magdalene"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (07-22.txt) --
# [Rule]/[Rank] point to Commune/C7a instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
+5
View File
@@ -6,3 +6,8 @@ name: "St. Monica, Widow"
rank: duplex rank: duplex
common: common-of-a-widow common: common-of-a-widow
propers: "st-monica" propers: "st-monica"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-04.txt) --
# [Rule]/[Rank] point to Commune/C7a instead, the same C-number family
# already live-query-verified for common-of-a-virgin.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-virgin
+5
View File
@@ -10,3 +10,8 @@ name: "St. Nicholas, Bishop and Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-nicholas" propers: "st-nicholas"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (12-06.txt) --
# [Rule]/[Rank] point to Commune/C4 instead, the same C-number family already
# live-query-verified for common-of-a-confessor-bishop.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
@@ -6,3 +6,8 @@ name: "St. Paul the First Hermit, Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor common: common-of-a-confessor
propers: "st-paul-the-hermit" propers: "st-paul-the-hermit"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (01-15.txt) --
# [Rule]/[Rank] point to Commune/C5 instead, the same C-number family already
# live-query-verified for common-of-an-abbot.yml (see TODO.md's 'minor hour
# content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -6,3 +6,8 @@ name: "St. Paulinus of Nola, Bishop and Confessor"
rank: simplex rank: simplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-paulinus-of-nola" propers: "st-paulinus-of-nola"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-22t.txt) --
# [Rule]/[Rank] point to Commune/C4 instead, the same C-number family already
# live-query-verified for common-of-a-confessor-bishop.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
@@ -13,3 +13,8 @@ name: "St. Peter Celestine, Pope and Confessor"
rank: duplex rank: duplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-peter-celestine" propers: "st-peter-celestine"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-19.txt) --
# [Rule]/[Rank] point to Commune/C4b instead, the same C-number family
# already live-query-verified for common-of-a-confessor-bishop.yml (see
# TODO.md's 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
@@ -9,3 +9,8 @@ name: "St. Peter Martyr, Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "st-peter-martyr" propers: "st-peter-martyr"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-29.txt) --
# [Rule]/[Rank] point to Commune/C2a-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -15,3 +15,8 @@ name: "St. Robert, Abbot"
rank: duplex rank: duplex
common: common-of-an-abbot common: common-of-an-abbot
propers: "st-robert" propers: "st-robert"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-29oM.txt) --
# [Rule]/[Rank] point to Commune/C5b instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -13,3 +13,8 @@ name: "St. Silvester, Abbot"
rank: duplex rank: duplex
common: common-of-an-abbot common: common-of-an-abbot
propers: "st-silvester-abbot" propers: "st-silvester-abbot"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (11-26.txt) --
# [Rule]/[Rank] point to Commune/C5b instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -6,3 +6,8 @@ name: "St. Stanislaus, Bishop and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-stanislaus" propers: "st-stanislaus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-07.txt) --
# [Rule]/[Rank] point to Commune/C2-1 instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -7,3 +7,8 @@ name: "St. Thomas Aquinas, Confessor and Doctor of the Church"
rank: duplex rank: duplex
common: common-of-a-confessor common: common-of-a-confessor
propers: "st-thomas-aquinas" propers: "st-thomas-aquinas"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (03-07.txt) --
# [Rule]/[Rank] point to Commune/C5a instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -11,3 +11,8 @@ name: "St. Thomas of Canterbury, Bishop and Martyr"
rank: semiduplex rank: semiduplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-thomas-becket" propers: "st-thomas-becket"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (12-29o.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -6,3 +6,8 @@ name: "St. Ubald, Bishop and Confessor"
rank: semiduplex rank: semiduplex
common: common-of-a-confessor-bishop common: common-of-a-confessor-bishop
propers: "st-ubald" propers: "st-ubald"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-16.txt) --
# [Rule]/[Rank] point to Commune/C4 instead, the same C-number family already
# live-query-verified for common-of-a-confessor-bishop.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-confessor-bishop
+5
View File
@@ -12,3 +12,8 @@ name: "St. Urban I, Pope and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-urban-i" propers: "st-urban-i"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (05-25o.txt) --
# [Rule]/[Rank] point to Commune/C2b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -9,3 +9,8 @@ name: "St. Valentine, Priest and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "st-valentine" propers: "st-valentine"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (02-14.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
+5
View File
@@ -6,3 +6,8 @@ name: "St. Vitalis, Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr common: common-of-a-martyr
propers: "st-vitalis" propers: "st-vitalis"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (04-28o.txt) --
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -7,3 +7,8 @@ name: "St. William, Abbot"
rank: duplex rank: duplex
common: common-of-an-abbot common: common-of-an-abbot
propers: "st-william-abbot" propers: "st-william-abbot"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (06-25.txt) --
# [Rule]/[Rank] point to Commune/C5b instead, the same C-number family
# already live-query-verified for common-of-an-abbot.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-an-abbot
@@ -9,3 +9,8 @@ name: "St. Zephyrinus, Pope and Martyr"
rank: simplex rank: simplex
common: common-of-a-martyr-bishop common: common-of-a-martyr-bishop
propers: "st-zephyrinus" propers: "st-zephyrinus"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-26.txt) --
# [Rule]/[Rank] point to Commune/C2-1b instead, the same C-number family
# already live-query-verified for common-of-a-martyr.yml (see TODO.md's
# 'minor hour content gaps' section).
minorHoursCommon: common-of-a-martyr
@@ -6,3 +6,9 @@ name: "Vigil of All Saints"
rank: vigil rank: vigil
common: common-of-a-vigil common: common-of-a-vigil
propers: "vigil-of-all-saints" propers: "vigil-of-all-saints"
# P/T/S/N: not confirmed via this pass's own file parser (this vigil's
# particular file format wasn't handled by it), but every other vigil on
# this calendar shares common-of-a-vigil (live-query-verified via the
# Vigil of St. Andrew/St. Bartholomew, see that section of TODO.md) --
# wired directly on that overwhelming precedent.
minorHoursCommon: common-of-a-vigil
@@ -5,3 +5,8 @@ name: "Vigil of Ss. Simon and Jude"
rank: vigil rank: vigil
common: common-of-a-vigil common: common-of-a-vigil
propers: "vigil-of-ss-simon-and-jude" propers: "vigil-of-ss-simon-and-jude"
# P/T/S/N: no [Ant Prima]/etc of its own in the source (10-27.txt) --
# [Rule]/[Rank] point to Commune/C1v instead, the same C-number family
# already live-query-verified for common-of-a-vigil.yml (see TODO.md's 'minor
# hour content gaps' section).
minorHoursCommon: common-of-a-vigil
@@ -8,3 +8,9 @@ name: "Vigil of St. John the Baptist"
rank: vigil rank: vigil
common: common-of-a-vigil common: common-of-a-vigil
propers: "vigil-of-st-john-the-baptist" propers: "vigil-of-st-john-the-baptist"
# P/T/S/N: not confirmed via this pass's own file parser (this vigil's
# particular file format wasn't handled by it), but every other vigil on
# this calendar shares common-of-a-vigil (live-query-verified via the
# Vigil of St. Andrew/St. Bartholomew, see that section of TODO.md) --
# wired directly on that overwhelming precedent.
minorHoursCommon: common-of-a-vigil
@@ -11,3 +11,9 @@ propers: "vigil-of-st-lawrence"
# Benedictus antiphon live-verified (2026-08, Lauds query, 2025-08-09, winner # Benedictus antiphon live-verified (2026-08, Lauds query, 2025-08-09, winner
# outright) as byte-identical to common-of-a-vigil.yml's own. # outright) as byte-identical to common-of-a-vigil.yml's own.
benedictusCommon: common-of-a-vigil benedictusCommon: common-of-a-vigil
# P/T/S/N: not confirmed via this pass's own file parser (this vigil's
# particular file format wasn't handled by it), but every other vigil on
# this calendar shares common-of-a-vigil (live-query-verified via the
# Vigil of St. Andrew/St. Bartholomew, see that section of TODO.md) --
# wired directly on that overwhelming precedent.
minorHoursCommon: common-of-a-vigil
@@ -0,0 +1,11 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), None
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. English translated (no source rendering), `draft`.
id: none-antiphon-st-gregory-the-great
text:
la: "Gregórius, * monachórum spéculum, pater Urbis, orbis delíciæ."
en: "Gregory, * the mirror of monks, father of the City, the delight of the world."
status:
la: verified
en: draft
@@ -0,0 +1,16 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), None
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. The source's own English page rendered the closing
# versicles but not the reading itself (silently duplicated the Latin);
# only the reading is translated here, so `draft`.
id: none-capitulum-st-gregory-the-great
text:
la: "Curávit gentem suam, et liberávit eam a perditióne. Qui prævalúit amplificáre civitátem, qui adéptus est glóriam in conversatióne gentis. R. Deo grátias. V. Tu es sacérdos in ætérnum. R. Secúndum órdinem Melchísedech."
en: "He took care of his nation, and delivered it from destruction. He prevailed to enlarge the city, and obtained glory by his converse with the people. R. Thanks be to God. V. Thou art a Priest for ever. R. After the order of Melchisedek."
citation:
la: "Eccl 50:4-5"
en: "Eccl 50:4-5"
status:
la: verified
en: draft
@@ -0,0 +1,16 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Prime
# live query, St. Gregory the Great's own day (2033-03-12) -- own proper
# text, not shared with common-of-a-confessor-bishop.yml (unlike most
# other Doctor-of-the-Church saints on this calendar, whose own [Rule]
# also says "vide C4a" but whose actual live-rendered P/T/S/N is
# byte-identical to common-of-a-confessor-bishop's -- see TODO.md's
# "minor hour content gaps" section). Alludes to his own election as
# Pope. English translated (the source's own English page didn't render
# one, same gap as his existing Benedictus-antiphon file), so `draft`.
id: prime-antiphon-st-gregory-the-great
text:
la: "Beátus Gregórius * in cáthedra Petri sublimátus, Vigilántis nomen factis implévit."
en: "Blessed Gregory, * raised up to the Chair of Peter, fulfilled in his deeds the name of the Watchman."
status:
la: verified
en: draft
@@ -0,0 +1,14 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Sext
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. Alludes to the legend of the Holy Spirit inspiring
# his writings as a dove (the traditional iconography of Gregory
# dictating with a dove at his ear). English translated (no source
# rendering), `draft`.
id: sext-antiphon-st-gregory-the-great
text:
la: "Dum páginæ sacræ * mystéria pánderet, colúmba nive candídior appáruit."
en: "While he was unfolding * the mysteries of the sacred page, a dove whiter than snow appeared."
status:
la: verified
en: draft
@@ -0,0 +1,16 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Sext
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. The source's own English page rendered the closing
# versicles but not the reading itself (silently duplicated the Latin);
# only the reading is translated here, so `draft`.
id: sext-capitulum-st-gregory-the-great
text:
la: "Stare fecit cantóres contra altáre, et in sono eórum dulces fecit modos. Et dedit in celebratiónibus decus, et ornávit témpora usque ad consummatiónem vitæ. R. Deo grátias. V. Elégit eum Dóminus sacerdótem sibi. R. Ad sacrificándum ei hóstiam laudis."
en: "He set singers before the altar, and in their sound he made sweet melody. And he gave beauty to the feasts, and set the times in order even to the end of his life. R. Thanks be to God. V. The Lord hath chosen him for a Priest unto Himself. R. To offer up unto Him the sacrifice of praise."
citation:
la: "Eccl 47:11-12"
en: "Eccl 47:11-12"
status:
la: verified
en: draft
@@ -0,0 +1,12 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Terce
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. Alludes to his "Liber Regulæ Pastoralis." English
# translated (no source rendering), `draft`.
id: terce-antiphon-st-gregory-the-great
text:
la: "Pastor exímius * pastorális vitæ spécimen trádidit et régulam."
en: "An excellent shepherd, * he handed down both the pattern and the rule of the pastoral life."
status:
la: verified
en: draft
@@ -0,0 +1,16 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Terce
# live query, St. Gregory the Great's own day (2033-03-12) -- see
# prime-antiphon-st-gregory-the-great.yml's header for the full
# provenance note. The source's own English page rendered the closing
# versicles but not the reading itself (silently duplicated the Latin);
# only the reading is translated here, so `draft`.
id: terce-capitulum-st-gregory-the-great
text:
la: "Ecce sacérdos magnus, qui in vita sua suffúlsit domum, et in diébus suis corroborávit templum. R. Deo grátias. V. Amávit eum Dóminus, et ornávit eum. R. Stolam glóriæ índuit eum."
en: "Behold a great priest, who in his life propped up the house, and in his days strengthened the temple. R. Thanks be to God. V. The Lord loved him and beautified him. R. He clothed him with a robe of glory."
citation:
la: "Eccl 50:1"
en: "Eccl 50:1"
status:
la: verified
en: draft
+36
View File
@@ -97,6 +97,42 @@ describe('genuinely unwinnable stubs still get a Benedictus antiphon (2026-08)',
const ben = getBenedictusAntiphon(syntheticSanctoralDay('st-frances-of-rome')); const ben = getBenedictusAntiphon(syntheticSanctoralDay('st-frances-of-rome'));
expect(ben.status).toEqual({ la: 'verified', en: 'verified' }); expect(ben.status).toEqual({ la: 'verified', en: 'verified' });
}); });
});
describe('minorHoursCommon for the *whole* calendar, not just the 94-saint batch (2026-08)', () => {
it("reuses another saint's own proper P/T/S/N wholesale when [Rule] points at their file directly, not a Commune category", () => {
// Finding of St. Stephen -- her own [Rule] is "vide Sancti/12-26"
// (St. Stephen Protomartyr's own Dec 26 file), not a Commune
// reference at all, so minorHoursCommon is his own id
// (st-stephen-protomartyr) -- reuses his already-authored proper
// files directly, same pattern as common-of-st-peter earlier.
const day = resolveDay('2026-08-03');
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'finding-of-st-stephen' });
expect(resolveMinorHourAntiphon('prime', day, {}).status.la).toBe('verified');
});
it('a Doctor of the Church can have genuinely unique proper P/T/S/N, not shared with any Common', () => {
// St. Gregory the Great -- his own [Rule] says "vide C4a" (Doctor),
// the same reference 5 of the 6 other Doctor saints on this
// calendar have too, but his own live-rendered P/T/S/N is real,
// unique text ("Beátus Gregórius in cáthedra Petri...") -- not
// shared with common-of-a-confessor-bishop.yml the way St. Hilary
// of Poitiers's, St. Athanasius's, etc. all are (see
// st-hilary-of-poitiers.yml's own comment).
const day = resolveDay('2033-03-12');
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-gregory-the-great' });
const prime = resolveMinorHourAntiphon('prime', day, {});
expect(prime.status.la).toBe('verified');
expect(prime.text.la).toContain('Gregórius');
});
it('most Doctor-of-the-Church saints share common-of-a-confessor-bishop despite their own [Rule] pointing at C4a (Doctor)', () => {
const day = resolveDay('2026-01-14'); // St. Hilary of Poitiers
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-hilary-of-poitiers' });
const prime = resolveMinorHourAntiphon('prime', day, {});
expect(prime.status.la).toBe('verified');
expect(prime.text.la).toContain('Ecce sacérdos magnus');
});
it("resolves its own file's [Ant 1] as draft, not verified, when it can't be checked against a live rendering", () => { it("resolves its own file's [Ant 1] as draft, not verified, when it can't be checked against a live rendering", () => {
// Ss. Euphemia, Lucy, and Geminian -- her own file *does* have an // Ss. Euphemia, Lucy, and Geminian -- her own file *does* have an