Authors a real Latin nameLa for every saint in src/data/calendar/saints/
except the deliberate example-confessor placeholder (standard
ecclesiastical Latin forms, a lighter sourcing bar than this app's usual
reference-engine verification -- flagged for future spot-check). Fixes a
real mechanism bug found in the process: calendar/index.ts's sanctoral
collision-resolution branch was dropping nameLa for any saint that won
after beating another same-day candidate. Updates ~180 pre-existing test
fixtures across the calendar suite for the new field.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwsZQMjALCvy7u9tFDWmuQ
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>
Completes the 94-saint batch's Benedictus-antiphon coverage. A saint
with a genuine proper collect doesn't imply a genuine proper antiphon,
same finding as St. Martin of Tours's mixed proper/shared split from
the original 29-saint pass: of the 26, 15 are genuinely unwinnable
stubs (already documented from the collects pass -- always
commemorated, never the day's own title, so nothing to live-query) and
left honestly missing, matching St. Frances of Rome/St. Bibiana's
precedent from the original 109-saint pass; 7 of the remaining 11
turned out to render byte-identical to an already-authored Common
category (benedictusCommon wired directly, no new content) -- including
Ss. Dionysius and Companions, whose own `common` field says
common-of-a-martyr-bishop but whose live-verified minor-hour text
actually matches common-of-several-martyrs, another case (like Chair of
St. Peter earlier) where the two fields genuinely diverge. The other 4
have real unique text of their own: All Saints of the Benedictine
Order, St. Agnes (secunda), St. Benedict (no English in the source,
translated and marked draft, same gap as St. Scholastica's), and the
Vigil of St. John the Baptist (deliberately echoing the Benedictus
canticle's own opening words).
P/T/S/N for these 26 not attempted here -- a further layer on top, same
as how the original 109 got Benedictus antiphons long before their own
later, separate P/T/S/N pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Blind per-date source-file reading (Sancti/SanctiM MM-DD.txt) turned out
unreliable for collect authorship: those files are era-merged, carrying
centuries of accumulated saints behind rubric-conditional gating, so a
naive read often returned a saint canonized long after 1617 instead of
the Monastic-Tridentine-era one actually on this calendar (St. Didacus
instead of All Saints of the Benedictine Order, St. Rose of Lima instead
of Ss. Felix and Adauctus, etc).
Fixed by pulling from web/www/Tabulae/Kalendaria/'s own era-specific
calendar tables (1570.txt Tridentine base + M1617.txt's Monastic diffs)
instead, cross-validated against the pre-1955/Divino Afflatu chain
(1888->1906->1939->1954) as a corroborating signal. Cross-referencing all
205 existing saint records against this table confirmed 204/205 were
already correctly placed -- the earlier live-query verification work was
sound, only blind file-reading was flawed -- so no sanctoral-calendar.yml
corrections were needed, just the collect content itself.
Two collect shapes came out of the 94: 34 proper collects (own YAML file,
Latin verified against source, English translated+draft where the source
lacked it) and 60 resolved via a new Common-collect templating mechanism
-- SaintRecord.collectCommon/collectName plus substituteName() in
resolve-common.ts, filling a template's {N} placeholders positionally
from the saint's own declined name, across 21 new common/collect-c*.yml
templates named after the source's own C-numbering.
St. Michael's Sep 29 propers resolved via its whole-file @Sancti/05-08
inheritance (Apparition of St. Michael, May 8). St. Martha's plural-
template default was overridden to the singular collect-c6a since she's
one person, not a pair.
Also fixes a latent bug this surfaced: getDayCollect looked up
`${collectCommon}-collect`, but collect-c*.yml files are id'd as
`collect-c2` etc with no such suffix -- caught by a smoke test where
every one of the 93 non-Michael saints resolved as missing.
4 pre-existing tests updated: they asserted specific saints (St.
Benedict, St. Romanus Abbot, St. Anthony Abbot) had no authored collect,
which is no longer true; resolve-common.test.ts's generic "missing" case
now uses a synthetic day/winner since no real unauthored saint remains
as an example.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
19 saints (14 real winners + 5 stubs), plus a propers-slug update for the
pre-existing All Saints entry. Three monastic-calendar-specific
reassignments this month, the most of any month so far (St. Emilian
displacing St. Martin I Pope, who moves to a different date; St. Odo
demoting St. Pontian; St. Silvester Abbot displacing St. Peter of
Alexandria), plus All Saints of the Benedictine Order, a monastic-only
addition at Duplex II. classis. New exclusion category: All Souls' Day
(Nov 2) is a fundamentally different liturgical genre -- the Office of
the Dead -- out of scope the same way the Requiem rite isn't modeled
anywhere else in this app.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>