Add November sanctoral content (5 saints/feasts)
Deploy / deploy (push) Successful in 1m6s

St. Charles Borromeo (11-04), the Octave Day of All Saints (11-08,
own real Cyprian/Augustine Nocturn 2-3 content, collect reused from
All Saints via cross-id propers), St. Albert the Great (11-15),
St. Gertrude (11-16), St. Felix of Valois (11-20). All Souls' Day
(11-02) deliberately skipped -- a Requiem office, not a normal
saint's office, a genuine mechanism gap.

Several new fixed-date Duplex+ saints displaced existing test
fixtures that had assumed particular dates were clean/ferial/
plain-Sunday: prime.test.ts's MONDAY constant, weekday.test.ts's
clean-Sunday case, and day-label.test.ts's post-Epiphany-overflow
and open-octave-day cases. Fixed by finding genuinely clean
alternate dates/years, never by weakening assertions.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 17:49:06 -04:00
parent 0955f7cbd1
commit f7af1e7cbf
18 changed files with 971 additions and 30 deletions
@@ -0,0 +1,18 @@
# Read directly from the reference engine: untagged/default [Rank]
# block of `web/www/horas/Latin/Sancti/11-08.txt` -- "In Octava Omnium
# Sanctorum;;Duplex majus;;4.1;;vide Sancti/11-01" (cross-references
# All Saints' own file for Rank/Rule). No [Oratio] at all in this
# file, unlike octave-of-ss-peter-and-paul.yml -- collect reuses All
# Saints' own real proper collect via the cross-id `propers` pointer
# (same reasoning as the Finding/Exaltation of the Holy Cross and
# Gabriel/Raphael Archangel pattern). But this day does have genuine
# own Nocturn 2-3 content (St. Cyprian's "De mortalitate", St.
# Augustine's homily on the Beatitudes) -- see
# nocturn-readings/octave-of-all-saints.yml, since the Matins
# nocturn-readings mechanism has no cross-id lookup the way
# collect/antiphon do.
id: octave-of-all-saints
name: "The Octave Day of All Saints"
rank: duplex-majus
common: proper-to-all-saints
propers: "all-saints"
@@ -0,0 +1,16 @@
# Read directly from the reference engine: untagged/default [Rank]
# block of `web/www/horas/Latin/Sancti/11-15.txt` -- "Duplex;;3;;vide
# C4a" (Commune Doctoris Pontificis). Own real proper [Oratio] and own
# Nocturn 2 content (Lectio4-6, one continuous vita). No [Lectio7] at
# all in the source -- no own Nocturn 3. No [Ant 1] of his own;
# benedictusCommon/minorHoursCommon fall back to the plain Common of a
# Confessor Bishop, same reasoning as st-robert-bellarmine.yml/
# st-john-damascene.yml/st-peter-canisius.yml (C4a's own [Ant 1] is
# itself a cross-reference to C4).
id: st-albert-the-great
name: "St. Albert the Great, Bishop, Confessor and Doctor of the Church"
rank: duplex
common: common-of-a-confessor-doctor
propers: "st-albert-the-great"
benedictusCommon: common-of-a-confessor-bishop
minorHoursCommon: common-of-a-confessor-bishop
@@ -0,0 +1,14 @@
# Read directly from the reference engine: untagged/default [Rank]
# block of `web/www/horas/Latin/Sancti/11-04.txt` -- "Duplex;;3;;vide
# C4" (Common of a Confessor Bishop). Own real proper [Oratio] and own
# Nocturn 2 content (Lectio4-6, one continuous vita). No [Lectio7] at
# all in the source -- no Nocturn 3 of his own, defers entirely to the
# Common's own. No [Ant 1] of his own either; benedictusCommon/
# minorHoursCommon fall back to the plain Common of a Confessor Bishop.
id: st-charles-borromeo
name: "St. Charles Borromeo, Bishop and Confessor"
rank: duplex
common: common-of-a-confessor-bishop
propers: "st-charles-borromeo"
benedictusCommon: common-of-a-confessor-bishop
minorHoursCommon: common-of-a-confessor-bishop
@@ -0,0 +1,15 @@
# Read directly from the reference engine: untagged/default [Rank]
# block of `web/www/horas/Latin/Sancti/11-20.txt` -- "Duplex;;3;;vide
# C5-1" (an alternate-Oratio variant of the Common of a Confessor Not
# a Bishop, C5 -- not a distinct Common category, same reasoning as
# st-augustine-of-canterbury.yml's C4-1; this saint's own file
# supplies a real proper [Oratio], so C5's template collect is not
# actually used). Own Nocturn 2 content (Lectio4-6, one continuous
# vita). [Lectio7]-[Lectio9] are all bare `@Commune/C5:LectioN in 2
# loco` cross-references -- per the bare-cross-reference convention,
# not transcribed (not this saint's own text).
id: st-felix-of-valois
name: "St. Felix of Valois, Confessor"
rank: duplex
common: common-of-a-confessor
propers: "st-felix-of-valois"
+11
View File
@@ -0,0 +1,11 @@
# Read directly from the reference engine: untagged/default [Rank]
# block of `web/www/horas/Latin/Sancti/11-16.txt` -- "Duplex;;3;;vide
# C6a" (Commune Virginum tantum, i.e. not a martyr -- C6 is Virgin +
# Martyr, C6a is Virgins only). Own real proper [Oratio] and own
# Nocturn 2 content (Lectio4-6, one continuous vita). No [Lectio7] at
# all in the source -- no own Nocturn 3.
id: st-gertrude
name: "St. Gertrude, Virgin"
rank: duplex
common: common-of-a-virgin
propers: "st-gertrude"
+10
View File
@@ -413,15 +413,25 @@ days:
# multi-day skip) -- this app's existing transfer machinery handles it
# correctly; see tests/calendar/november-sanctoral.test.ts.
"11-01": [all-saints]
# Nov 2 (All Souls' Day) deliberately excluded from this full-year
# sanctoral sweep: it's a Requiem office (own psalms, no Te Deum,
# three full nocturns of Job readings), not a normal saint's office
# -- a genuine mechanism gap, not an oversight. See
# vu-sanctoral-sweep-progress memory.
"11-04": [st-charles-borromeo]
"11-08": [octave-of-all-saints]
"11-09": [dedication-of-the-basilica-of-the-most-holy-savior]
"11-10": [ss-tryphon-and-companions]
"11-11": [st-martin-of-tours, st-menna]
"11-12": [st-emilian]
"11-13": [all-saints-of-the-benedictine-order]
"11-14": [st-martin-i]
"11-15": [st-albert-the-great]
"11-16": [st-gertrude]
"11-17": [st-gregory-thaumaturgus]
"11-18": [dedication-of-the-basilicas-of-ss-peter-and-paul]
"11-19": [st-odo, st-pontian]
"11-20": [st-felix-of-valois]
"11-21": [presentation-of-the-bvm]
"11-22": [st-cecilia]
"11-23": [st-clement, st-felicitas]