Both feasts' source keeps the ancient single-nocturn, 3-lesson Matins
form (unlike every other Sunday in the surrounding sweep), which was
initially mistaken for "no content exists" and left unauthored. Their
Lectio1-3 actually carry a real Gospel incipit plus a full Pope St.
Gregory the Great homily each (Homily 21 on Mark 16:1-7 for Easter,
Homily 30 on John 14:23-31 for Pentecost) — a nocturn-count difference,
not a content gap. Authored as nocturn:1 content, same as this app's
existing Ember-day single-nocturn files; this app's own threeNocturns
rule still renders 3 nocturns for these Sundays regardless.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ME8QNPdEmHSbSx1r6VmDRG
Extends the post-Pentecost nocturn-readings sweep to the other 26 temporal
ids spanning the rest of the liturgical year — Advent, Christmastide,
post-Epiphany, Septuagesima through Lent, Passiontide/Holy Week, and
Eastertide — transcribed directly from the reference engine's own
per-season Tempora source files.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ME8QNPdEmHSbSx1r6VmDRG
Non-Sunday Dec 24 previously just inherited Advent 4's ferial collect and
antiphons with nothing of its own. Import the Vigil's real proper content
from the reference engine (Duplex I classis): its own collect, all 5 Lauds
antiphons, the Benedictus antiphon, and Matins' Gospel (Matt 1:18-21) +
St. Jerome homily, wired via a new `vigil-of-christmas` temporal id scoped
to non-Sunday Dec 24 only. Advent IV landing on Dec 24 itself is untouched,
left as its own separate design question.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ME8QNPdEmHSbSx1r6VmDRG
nativity-of-st-john-the-baptist.yml's `common` field (common-of-an-apostle)
was the same mistaken placeholder as the Beheading's, but this feast
needed a different fix: the reference engine assigns it no Commune at
all -- every [Rule] line in Sancti/06-24.txt and SanctiM/06-24.txt points
to proper text, never a Commune category -- so there's no better-fitting
id to swap in either.
Authored the real proper content that was still falling through to the
apostle Common, live-verified against the local Divinum Officium CGI
instance (Monastic Tridentinum 1617):
- Matins invitatory antiphon ("Regem Præcursóris Dóminum")
- Matins hymn ("Antra desérti téneris," with the Monastic doxology
substitution already used by this feast's own Lauds/Vespers hymns)
- Full Matins Nocturn 1-3 psalmody + nocturn versicles (Nocturn 1/2 reuse
St. Lawrence's own shared psalm-number pool per "Psalmi Dominica";
Nocturn 3 reuses St. Lawrence's own canticle scripture files verbatim,
since the citations are identical)
- Vespers psalmody (only 4 psalm slots at this Monastic rank, not 5 as a
naive reading of the raw Ant Vespera list would suggest)
- Nocturn 2/3 responsories on the existing nocturn-readings file
`common: common-of-an-apostle` is left in place as a fully inert
placeholder (a non-optional field with no better id available) with an
updated comment explaining why.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvnBMq7HGfXRyMsVLu2v4D
decollation-of-st-john-baptist.yml's `common` field was set to
common-of-an-apostle -- a mistaken placeholder (he isn't an apostle) that
leaked into the Aug 29 Matins invitatory and the Lauds/Vespers office
bundle. Corrected to common-of-a-martyr, matching the file's own already-
correct `minorHoursCommon` field.
Also corrected a stale comment in the feast's own nocturn-readings file
claiming neither Nocturn 2 nor 3 has a proper responsory: Nocturn 2's own
closing responsory is genuine proper text (not a Commune reference like
Nocturn 3's), and is now authored.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvnBMq7HGfXRyMsVLu2v4D
This Duplex I classis feast (instituted by Pius IX, 1847) didn't exist
anywhere in vu's calendar. Dated per the older, pre-1955 reckoning --
Wednesday after the 2nd Sunday after Easter (Easter+17) -- rather than the
1913 Pius X reform's later placement on the 3rd Sunday after Easter
itself, per direct instruction. Mechanism: one new temporal-feast record
plus a new EASTER_OFFSET_STARTS table entry (the only code change --
everything else is the existing generic anchor-driven resolution).
Authored the feast day's own Matins reading and its full 7-day octave
(days 2/3/4/6/7/8; day 5, the Sunday, has no override in the source at
all, correctly left unauthored).
Fixed one real collateral effect: an existing fixed-year calendar test
(St. Pudentiana vs. St. Peter Celestine, 2038-05-19) broke because that
date now falls on this octave's own closing day, tying Celestine's rank
against the octave's threshold -- the app's own documented tie-break
correctly favors the octave that year. Moved the proof date to 2033.
Also bumped the PWA precache file-size cap (6 MiB -> 8 MiB) since this
content pull pushed the main bundle past the previous limit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
Re-auditing the two prior sanctoral bulk passes (pre-1955 Tridentine track
and SanctiM Monastic-1617 track) turned up one saint missed by both:
St. Felix I (May 30), authored the same single-lesson shape as
st-pontian.yml. This closes the saint-level side of the Matins
patristic/hagiographic reading backlog.
Separately, auditing octave-day content by calendar date (the reference
engine keys it that way, not by octave-day-number) found two real gaps in
already-partially-authored fixed-date octaves: Immaculate Conception's own
closing day (Dec 15, Pius IX bull + St. Epiphanius homily) and Nativity of
the BVM's day 3 (Sep 10, St. Jerome on Matthew's genealogy -- no usable
reference English, own translation used, draft). Every other apparent gap
in these octaves was confirmed a correctly-empty vide-only day, not a
further gap.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
Historically a floating Sunday (Jan 2-5, fixed to Jan 2 when no Sunday
falls there); per direct instruction this is instead fixed to Jan 2
every year for simplicity. Adds the feast's collect, Magnificat/
Benedictus antiphons, full Lauds psalmody, capitulum, the three-part
"Jesu dulcis memoria" hymn cycle (Vespers/Matins/Lauds), the Invitatory
antiphon, versicles, and two Matins nocturn readings (both St. Bernard
of Clairvaux), sourced from Tempora/Nat2-0.txt. Reuses the `fixed-date`
anchor kind added in the prior commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
Jan 1 previously fell through to generic Christmastide-feria content with
no identity of its own, despite being Christmas's own Octave Day. Adds a
`fixed-date` anchor kind to calendar/movable-feasts.ts's MovableAnchor
(the existing easter/nth-sunday kinds can't express "always Jan 1"),
plus the feast's collect, Magnificat/Benedictus antiphons, full Lauds
psalmody, capitulum, versicle, and two Matins nocturn readings (Leo the
Great, Ambrose), sourced from Sancti/01-01.txt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
All 53 nocturn-readings files with a responsory field started straight
into the text with no leading R., unlike octave-readings' own R./V.
convention. Fixed in content per direct instruction (not injected at
render time), matching each file's own existing plain V./R. style rather
than switching to octave-readings' R./V. glyphs.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWzE3kaSZCs79fPBrrE1aF
The later post-Pentecost Sundays' real Nocturn 2 patristic content isn't
keyed by Pentecost offset in the reference engine — it's keyed by civil
calendar month/week (the old "Scriptura occurrens" cycle), which shifts
relative to post-pentecost-NN every year depending on Easter's date. Port
Date.pm's monthday() algorithm (pre-1955/Tridentine rubrics) as a new,
date-driven id, author all 20 August-November month-week files from the
reference engine's Tempora/0MN-0.txt sources, and pool them in
hours/matins.ts as a third, independent reading source alongside the
existing temporalId lookup.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWzE3kaSZCs79fPBrrE1aF
Closes the gap the user found on 2026-08-23 (post-pentecost-13's Matins had
no patristic reading): nocturn-readings/ had content for only one temporal
id (post-pentecost-15, the original mechanism proof date). Since
resolveTemporalId maps every day in a liturgical week to the same id, one
file per id covers the whole week — authored all 23 remaining
post-pentecost-NN ids (01-14, 16-24) from the reference engine's own
Tempora/PentNN-0.txt files. Trinity Sunday (01) keeps its own full proper
office including a displaced-Sunday commemoration; 02-11 have real Nocturn
2+3 content; 12 onward are Nocturn-3-only (homily, Gospel incipit skipped
per convention), reusing the same two responsories the source itself
cross-references week to week.
Rest of the temporal cycle (Advent/Christmas/Epiphany/Septuagesima/Lent/
Easter) is a separate follow-up pass, tracked in TODO.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWzE3kaSZCs79fPBrrE1aF
Researched whether September/Advent Ember days belong in the
movable-feasts.ts table alongside Christ the King/Immaculate Heart of
Mary. Live-verified against the reference engine they don't: Ember days
are privileged ferias (a saint can still win outright against them), not
named feasts contesting the day by rank.
Two smaller pieces instead: calendar/temporal.ts's septemberEmberDayOffset
(Sunday nearest Sept 14, same "nearest" arithmetic adventStart already
used, factored into a shared nearestSunday helper) feeds a new
resolveTemporalCategory check giving those 3 dates privileged-feria-minor
(live-verified correct); calendar/ember-days.ts's applyEmberDay relabels
the day's own temporal id to the Ember day's own (so its real content is
found) when the feria itself wins, or adds a commemoration when a saint
does. Advent Ember days needed no precedence change -- Advent's own
season default already covers them.
Found and fixed a real bug along the way: matins.ts's nocturnReadingIds
only ever pulled a commemorated *sanctoral* id's own readings, never a
commemorated *temporal* one's -- so a commemorated Ember day (the common
case) would never have surfaced its own content. Same root cause as the
day.winner.id gap the IHM relocation fixed earlier, just hiding in the
commemorations loop instead.
Authored all 6 days' real collect + 3 Matins readings each, transcribed
directly from the reference engine (September: Tempora/093-{3,5,6}.txt;
Advent: Tempora/Adv3-{3,5,6}.txt, whose lessons are themselves a
cross-reference to the Annunciation's own Common, followed and
transcribed from there). Kept as 3 separate readings per day rather than
the usual combine-into-one default, since each carries its own
genuinely distinct proper responsory.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZSAgRi4QE4XRTqVto93zA
Own real Oratio and Nocturn 2-3 content (Duplex majus). This was the
only real gap left in December -- the rest of the month was already
complete from the earlier pre-1955 sanctoral pull. No test collisions:
Dec 3 was genuinely open.
This closes out the full-year sanctoral sweep (January-December).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
Continues the full-year sanctoral import: the Guardian Angels (Duplex
majus, full proper content), St. Thérèse of Lisieux, St. Bruno, St.
Bridget of Sweden, St. Francis Borgia, the Maternity of the BVM (Duplex
II Classis, instituted 1931 for the 1500th anniversary of the Council
of Ephesus, full proper content), St. Edward the Confessor, St. Teresa
of Avila (distinct from St. Thérèse of Lisieux -- two different
Carmelite saints sharing a name), St. Margaret Mary Alacoque, St. Peter
of Alcantara, St. John Cantius, and St. Raphael the Archangel (own
full proper content, matching st-gabriel-archangel.yml's established
pattern for a Sancti file that redirects wholesale to another date's
file but still carries its own real content).
St. Raphael's new fixed day (Oct 24, Duplex majus) collided with the
"clean, empty Saturday" fixture used by three tests for Marian
Saturday/Lauds-psalmody-override behavior; moved all three to 2026-07-04,
verified genuinely free of any sanctoral entry (not even a commemorated
Simplex).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Continues the full-year sanctoral import: St. Stephen of Hungary, St.
Pius X, St. Lawrence Justinian, Ss. Protus and Hyacinth, the Holy Name
of Mary, the Seven Sorrows of the BVM (Duplex II Classis, own full
proper content except Nocturn 2, a real cross-reference to Passion
Friday's own temporal content), the Impression of the Stigmata of St.
Francis, St. Joseph of Cupertino, Our Lady of Ransom, and St.
Wenceslaus.
Ss. Protus and Hyacinth (Sep 11) were previously excluded under a
stale "real secondary saint blocked by the Nativity's own octave, same
as St. Clare in August" note -- wrong, same class of error already
corrected for St. Tiburtius/Susanna in August: the octave-window
exclusion was never a real rule. Sep 15 (day 8 of the Nativity's own
octave) is now also the Seven Sorrows' own fixed day (Duplex II
Classis), which wins outright with the octave still commemorated
alongside her -- updated september-sanctoral.test.ts's own "excluded
secondary saints" case accordingly, splitting it into the still-valid
Sep 9 (Gorgonius) half and a new Sep 15 case reflecting the real
winner.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Continues the full-year sanctoral import: Ss. Tiburtius and Susanna, Ss.
Hippolytus and Cassian, the Vigil of the Assumption, St. Joachim (Duplex
II Classis, own full proper content), St. Hyacinth, St. John Eudes, St.
Jane Frances de Chantal, the Immaculate Heart of the BVM (Duplex II
Classis, instituted 1942, full proper content), St. Joseph Calasanctius,
and St. Raymond Nonnatus.
Several of the new fixed dates (Aug 16, 17, 21, 22) fall within or
adjacent to St. Lawrence's and the Assumption's overlapping octave
windows and now win outright there under the ordinary-feria/ordinary-
sunday precedence rules, displacing what several existing tests
expected to be bare octave commemorations or ferial fallbacks. Updated:
- august-sanctoral.test.ts: Aug 22 now correctly shows the Immaculate
Heart of Mary as the winner, with the Assumption's octave still
commemorated alongside her.
- day-label.test.ts: the two octave-priority tests pinned to Aug 17
(now St. Hyacinth's own day) moved their "day 8 alone" case to All
Saints' own octave (Nov 8, still open); the two-octaves-overlap
comparison can no longer be demonstrated via any real date in this
app since every day where St. Lawrence's and the Assumption's octaves
genuinely overlap is now real sanctoral content -- the underlying
`pickWinningOctave` mechanism itself stays covered by
tests/calendar/octaves.test.ts's own synthetic-data unit test.
- vespers.test.ts: the Thursday Ps 138 split test moved off Aug 20,
whose own first Vespers is now claimed by St. Jane Frances de
Chantal's fixed day (Aug 21).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Continues the full-year sanctoral import: the Most Precious Blood of Our
Lord (Duplex I Classis, full proper office, elevated by Pius XI for the
1933 Redemption jubilee), the Visitation of the BVM (Duplex II Classis,
full proper office), St. Leo II, St. Anthony Mary Zaccaria, the Octave
Day of Ss. Peter and Paul (own real content, not a bare continuation),
Ss. Cyril and Methodius, St. Elizabeth of Portugal, St. Henry, Our Lady
of Mount Carmel, St. Vincent de Paul, and St. Ignatius of Loyola.
Also fixes a real pre-existing bug surfaced while authoring St. Leo II:
an earlier June sanctoral pull had mapped him to "06-28" (his own vita
text mentions his burial "upon the 28th day of June," but his actual
liturgical feast, per the reference engine's Sancti/07-03.txt, is July
3) with no saints/st-leo-ii.yml ever authored for it -- a wrong-date
stub, same class of artifact as the pre-existing St. Apollinaris
wrong-date bug already documented in july-sanctoral.test.ts. Removed
the stale June 28 entry now that he's correctly authored on July 3.
Two day-label tests pinned to Trinity-Sunday-relative dates that now
collide with new fixed feasts (Jul 6: Octave Day of Ss. Peter and Paul)
were moved to collision-free years/dates, and the July stub test
covering "pure octave-continuation days" was updated to a date (July 4)
that's still genuinely unmapped, since most of that range turned out to
have real content after all.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Continues the full-year sanctoral import: St. Angela Merici, St. Francis
Caracciolo, St. Boniface of Mainz (Bishop and Martyr, Apostle of Germany --
distinct from the earlier, unrelated St. Boniface Martyr already on May 14),
St. Norbert, St. Margaret of Scotland, and St. Aloysius Gonzaga.
Two of the new fixed dates (June 1, June 4) fall on dates used by two
day-label tests pinned to specific Trinity Sunday years; moved those to
years/dates free of the new entries, with explanatory comments.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Continues the full-year sanctoral import (see TODO.md/memory for Jan-Apr):
St. Pius V, St. Antoninus, St. Robert Bellarmine, St. John Baptist de la
Salle, St. Paschal Baylon, St. Venantius, St. Bernardine of Siena, St. John
Baptist de Rossi, St. Augustine of Canterbury, St. Mary Magdalene de Pazzi,
and the Queenship of the BVM (May 31, Duplex II Classis, instituted by Pius
XII's 1954 "Ad cæli Reginam" — full proper content, not a Common fallback).
Adding the Queenship to May 31 surfaces a real collision with Trinity
Sunday in years where Trinity falls on May 31 (2026): since this app
models Trinitytide Sundays as plain ordinary-sunday with no special
first-class standing, a Duplex+ sanctoral feast wins outright there per
the existing precedence rule. Updated the two tests pinned to that date
accordingly, with a third moved to a Trinity Sunday date (2023-06-04)
free of any sanctoral entry to keep testing the octave-vs-anchor-day
interaction in isolation.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
St. Isidore of Seville, St. Vincent Ferrer, St. Hermenegild, St. Anselm,
St. Fidelis of Sigmaringen, St. Peter Canisius -- April complete.
St. Peter Canisius is the second common-of-a-confessor-doctor saint
(after St. John Damascene in March), same benedictusCommon reuse
pattern. St. Hugh, Abbot (Apr 1) checked and correctly skipped: his own
file is Commemoratio-rank with only a collect, no Lectio content at
all to source.
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
St. John Capistrano -- March complete
Finishes March's sweep of previously-never-added sanctoral content.
The Annunciation (Mar 25) was one of the two feasts literally named in
this app's original stale "fixed BVM feast, excluded per the usual
convention" note (alongside Purification, already fixed).
St. John Damascene is the first common-of-a-confessor-doctor saint;
his own Commune/C5a points its own Benedictus antiphon back at C4a's,
so he reuses the already-authored
benedictus-antiphon-common-of-a-confessor-bishop.yml directly rather
than duplicating it.
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
of Jerusalem (March)
Continuing the sweep of previously-never-added sanctoral content. New
shared Common templates: collect-c7b.yml and
benedictus-antiphon-common-of-several-women-martyrs.yml (Commune/C7b,
"several women Martyrs, not Virgins" -- Perpetua and Felicity's own
Common category, not authored before now).
St. Gabriel Archangel (Mar 24), the Annunciation (Mar 25), St. John
Damascene (Mar 27), and St. John Capistrano (Mar 28) are still open --
substantial feasts left for a follow-up pass.
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Purification of the BVM (Feb 2), St. Andrew Corsini (Feb 4), St. John
of Matha (Feb 8), Apparition of the Immaculate BVM at Lourdes (Feb 11),
Ss. Seven Founders of the Servite Order (Feb 12), St. Gabriel of Our
Lady of Sorrows (Feb 27) -- all had real, complete Matins content in
the reference engine and no exclusion comment; simply never reached
during the earlier month-by-month sanctoral pulls. Continuing the same
sweep as January's St. Francis de Sales/St. Martina/St. John Bosco.
Test update (not a regression): St. Andrew Corsini transfers onto Feb 5
in years where Sexagesima falls on his own Feb 4, outranking St. Agatha
when it does -- february-sanctoral.test.ts's proof year for Agatha
moved from 2029 (now a collision year) to 2025 (clean).
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Per direct instruction to import all available sanctoral content
regardless of rubric-era markers: these three had real, complete Matins
content in the reference engine and were simply never added during the
earlier month-by-month sanctoral pulls (no exclusion comment, no
placeholder -- just never reached). First of a broader sweep across the
whole calendar.
New shared Common template: benedictus-antiphon-common-of-a-confessor.yml
(Commune/C5's own Ant 1) -- the first common-of-a-confessor saint that
needed one; st-alexius.yml (the only prior user of this category) had
used a Cistercian-specific alternate instead.
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Finding of the Holy Cross (May 3), the Transfiguration (Aug 6), the
Exaltation of the Holy Cross (Sep 14), and Dedication of the Basilica of
the Most Holy Savior (Nov 9, the Lateran) were all excluded under the
same stale "fixed feast of the Lord, not modeled" note that turned out
wrong for Our Lady of the Snows. All four have real, complete content in
the reference engine. Presentation of the BVM (Nov 21) was excluded
under the equivalent "fixed BVM feast" note and is added the same way.
- finding-of-the-holy-cross: fully proprium, own collect/antiphon/Matins
throughout; now correctly outranks
ss-alexander-eventius-theodulus-and-juvenal, matching what that
saint's own file already documented as the live reality.
- transfiguration: same proprium shape. Its subordinate saints (Ss.
Xystus/Felicissimus/Agapitus) stay excluded -- blocked by the real,
separate octave/subordination-rendering gap, not by an unmodeled
Transfiguration.
- exaltation-of-the-holy-cross: reuses the Finding of the Holy Cross's
content wholesale (ex Sancti/05-03) -- collect/antiphon via a cross-id
`propers` pointer, Matins nocturn-readings duplicated (no cross-id
lookup exists for that mechanism).
- dedication-of-the-basilica-of-the-most-holy-savior: reuses the
existing Common-of-a-Dedication (collect-c8, benedictus-antiphon-
common-of-a-dedication), real unique Nocturn 2 vita of her own. Her
secondary, St. Theodore, stays excluded for the same
octave/subordination reason as above.
- presentation-of-the-bvm: real unique collect of her own; her
Benedictus antiphon is a substituted Common reference
(truncate-and-add-alleluia edit specific to this feast), authored as
her own file.
Also: our-lady-of-the-snows.yml was missing its own Nocturn 3 (she
defers to Commune/C11's own Gospel-incipit-plus-Bede-homily, same as
Presentation of the BVM) -- added.
Test updates (not regressions): three tests had fixed proof dates
colliding with the newly-added feasts, updated to reflect the new,
correct behavior. npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Previously excluded entirely under a stale "fixed BVM feasts aren't
modeled" note -- wrong: this app already models three other fixed BVM
feasts (assumption, immaculate-conception, nativity-bvm), and this one
has real, complete content too. Sancti/08-05.txt's untagged rank block
gives her Duplex Majus with real Nocturn 2/3 content (the
miraculous-snowfall founding legend of St. Mary Major); SanctiM/08-05.txt
confirms she's on the Monastic 1617 track too, reslicing the same
Lectio4-6.
Unlike the other three BVM feasts, she has no proper collect or
Benedictus antiphon of her own (her Rule says "ex C11" -- Common of
Feasts of the BVM) -- collect-c11.yml and
benedictus-antiphon-common-of-the-bvm.yml are real, reusable Common
templates, wired via collectCommon/benedictusCommon like any other
Common-only saint, not a private per-saint duplicate.
Live-checked via direct resolution: she wins outright on 2026-08-05 and
2027-08-05, with antiphon, collect, and Matins reading all resolving
verified. npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
st-telesphorus, st-hyginus (Jan 5/11, octave-absorbed — their day's Nocturn
2/3 is given over to a Nativity/Epiphany homily rather than their own vita)
and vigil-of-st-john-the-baptist, vigil-of-st-lawrence (Vigils whose single
3-lesson nocturn was misread as "no content") were left unauthored earlier
in the SanctiM pass on the theory that non-proper-to-the-saint text
shouldn't be sourced. Per direct correction: this app pools every available
reading first and figures out display later, so real sourceable text
belongs in the pool even when it isn't proper to that particular saint —
flagged as such in each file's own header, not disguised as the saint's
own vita. vigil-of-all-saints was re-checked under the same policy and
confirmed still genuinely contentless (a bare @Commune rubric).
npm test (365 tests) and tsc --noEmit both pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
13 of December's 15 SanctiM-track saints authored (st-bibiana, st-nicholas,
st-ambrose, immaculate-conception, st-damasus, st-lucy, st-thomas-apostle,
st-stephen-protomartyr, st-john-apostle, holy-innocents, st-thomas-becket,
st-silvester-i, st-eusebius-of-vercelli); st-barbara and st-melchiades left
unauthored as Common-only. This is the twelfth and final month of the
SanctiM (Monastic 1617)-track saints' Matins readings pass — 129 saints
authored across the whole year.
Adding St. Eusebius of Vercelli's content surfaces a 3rd Matins lesson on
the existing Advent III Tuesday proof date (Dec 15 falls under his
commemoration); updated matins.test.ts accordingly — the "commemorations
get their own reading" design working as intended, not a regression.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
14 of November's 16 SanctiM-track saints authored, including All
Saints of the Benedictine Order -- a genuinely Monastic-only feast
with both rich content and (unusually for this pass) an available
English translation. St. Martin I is another off-date case like St.
Paul the Hermit, and two more saints (St. Emilian, St. Odo) turn out
Monastic-only-but-Common-only, extending October's wrinkle.
9 of October's 13 SanctiM-track saints authored. Found a new wrinkle:
St. Justina and St. Gall are genuinely Monastic-only (no Tridentine
file at all) but their own SanctiM files turn out to be Common-only
with no proper Lectio content -- being Monastic-only doesn't guarantee
real text to transcribe.
All 9 of September's SanctiM-track saints authored -- the first full
month in this pass with nothing left unsourced. Includes the
Dedication of St. Michael the Archangel, whose SanctiM file borrows
structure from his separate May 8 Apparition file but still resolves
its actual readings back to this day's own Tridentine content.
13 of August's 16 SanctiM-track saints authored, including the Duplex
I class feasts of St. Lawrence and the Assumption of the B.V.M. The
Assumption's presence confirms this app's calendar already maps fixed
BVM feasts, despite an older note in the parent workspace CLAUDE.md
suggesting otherwise -- flagged in memory as stale documentation to
verify against, not trust blindly. 3 saints left unsourced (Common-only
or Nocturn-1-only vigil content).
13 of July's 18 SanctiM-track saints authored (5 left unsourced,
Common-only). Discovered the Monastic calendar keeps a full Octave of
St. Benedict (Jul 11-18), which explains several dates' SanctiM files
not matching their expected saint. Also hit a translation-misalignment
bug on St. Bonaventure's English source (paragraph boundaries don't
line up with the Latin), worked around with an original translation.
12 of June's 13 SanctiM-track saints authored, including the major
Duplex I class feast of Ss. Peter and Paul. One left unsourced (the
Vigil of St. John the Baptist has only a Nocturn 1 scripture reading
in the source, nothing proper to author for Nocturn 2/3). Found a new
wrinkle: St. William Abbot has real vita content in both tracks,
essentially the same story independently transcribed — sourced from
the Tridentine file since only it has an English translation.
12 of May's 13 SanctiM-track saints authored (1 left unsourced,
Common-only). Resolves an old loose end from the pre-1955 pass: St.
Romanus Abbot does have a real SanctiM file after all, it's just
Common-only with no proper Lectio content, which looked like a missing
file until actually opened. Also the first isGospel:true case since
January (Ss. Philip and James's Nocturn 3 has a full Gospel pericope,
not a bare incipit).
All 9 of April's SanctiM-track saints authored. Found a new wrinkle:
St. Catherine of Siena and St. Peter Martyr sit on swapped dates
between this app's calendar and the general Tridentine one (Apr 29/30
each way), not just an off-by-a-few-days shift like earlier cases.
Also hit a reference-engine data bug on St. George (English prose
filed under a Latin heading) and another genuinely Monastic-only saint
(St. Robert of Molesme) needing an original translation.
All 6 of March's SanctiM-track saints authored. St. Benedict's own
patronal feast turns out to be the richest case in this pass so far:
its Nocturn 3 is genuinely Monastic-only content (a St. Peter Damian
sermon) absent from the Tridentine track entirely, unlike every other
saint done so far where the SanctiM file just reslices the same
Tridentine text. Also caught a case (St. Gregory the Great) where a
saint's SanctiM file carries content copied verbatim from an unrelated
feast rather than anything proper to the saint himself.
8 of February's 10 SanctiM-track saints authored (2 left unsourced —
Common-only, no proper text in the source). Two more turned out to be
missed pre-1955-pool candidates rather than genuine SanctiM cases
(their date's SanctiM file belongs to a different saint sharing the
date). Also settles a convention for bare Gospel incipits followed by
a real homily: author the homily alone as isGospel:false rather than
including the incipit line under isGospel:true.
Starts the bulk-content pass complementary to the pre-1955 saints pass:
11 of January's 13 SanctiM-track saints authored (2 left unsourced —
their Nocturn 2/3 content is entirely octave homiletic material, no
proper vita text in either track). Most SanctiM files turn out to be
thin rule overrides pointing back at the same Sancti/ text; only
St. Maurus (Monastic-only, no Sancti file) needed direct SanctiM
sourcing, with an original translation for its missing English source.
Ss. Tryphon and Companions, St. Gregory Thaumaturgus, St. Catherine of
Alexandria, and the Vigil of St. Andrew. This completes the
pre-1955-but-post-1617 sanctoral pass: 43 saints authored across the
year, 9 confirmed Common-only with nothing to source (see TODO.md).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
St. Giles, St. Nicholas of Tolentino, Ss. Cornelius and Cyprian, Ss.
Euphemia/Lucy/Geminian, St. Januarius, the Vigil of St. Matthew, and
Ss. Cyprian and Justina.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Finding of St. Stephen, St. Donatus, St. Louis, St. Zephyrinus, and
Ss. Felix and Adauctus.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ss. Basilides/Cyrinus/Nabor/Nazarius, St. Anthony of Padua, Ss. Gervase
and Protase, St. Silverius, and St. Paulinus of Nola.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
St. Monica, St. Stanislaus, the Apparition of St. Michael, and St.
Eleutherius. St. Monica's Nocturn 3 Gospel+homily reuses the
already-verified Luke 7:11-16 text from post-pentecost-15.yml, the same
pericope her own day's lessons cross-reference.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>