Commit Graph

38 Commits

Author SHA1 Message Date
will 6dad25fef6 Author Prime/Terce/Sext/None antiphons+chapters for all 29 duplex-majus+ saints
Completes the P/T/S/N minor-hour override backlog started with St. Lawrence:
every duplex-majus+ saint not blocked by a missing collect (propers: null)
now has its own antiphon (all four hours) and chapter (Terce/Sext/None) text,
live-verified against Divinum Officium (Monastic Tridentinum 1617).

Two saints needed corrections to the reference engine's own data rather than
straight extraction: St. Scholastica's minor hours have no English rendering
in the source at all (English/SanctiM only covers Matins for her), so the
English is translated here directly and marked draft; the Immaculate
Conception's antiphons render with diacritics stripped relative to the
word-for-word-parallel Nativity BVM antiphon, so accentuation is restored
to match and marked draft. Several saints share identical Common of Apostles
or Common of the BVM content, confirmed via diff before reuse.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 13:19:34 -04:00
will 5f4cf33776 Add per-feast overrides to Prime/Terce/Sext/None; fill Lauds' own Lawrence office bundle
Deploy / deploy (push) Successful in 51s
Prime/Terce/Sext/None had no per-feast override mechanism at all before
this -- their psalm antiphon always fell back to the plain weekday
default and their chapter was always a single fixed per-annum/per-weekday
text, regardless of what was actually being celebrated, even on a
saint's own actual feast day (not just during an octave). Confirmed live
(Monastic Tridentinum 1617) that St. Lawrence has his own real antiphon
and chapter at every one of these hours, both on his own day and
throughout his octave.

New shared mechanism in hours/resolve-common.ts: getMinorHourOverrideId
(duplex-majus+ threshold, kept in sync with Lauds' own so it's one
shared backlog), resolveMinorHourAntiphon, resolveMinorHourChapter --
all resolveOfficeWinner-aware, so an octave day gets the same override
as the feast's own actual day. Prime additionally needed
isSundayOrFeastOffice (its capitulum/Preces Sunday-vs-ferial choice)
made octave-aware -- live-verified Prime's capitulum stays the
Sunday/feast form throughout the octave too, so no new file was needed
there, just reaching the existing one correctly.

Also fills in Lauds' own still-missing Lawrence office bundle
(capitulum/responsory/hymn/versicle) -- flagged in TODO.md as worth
fixing "even before tackling the other 32" and still not done until now.

Authored real content for St. Lawrence across all five hours from live
queries. The same ~31-saint backlog (TODO.md) now applies uniformly
across Lauds and the four hours fixed here.

Also documents a real, found-not-fixed gap: when two octaves overlap
with no temporal standing to yield to (St. Lawrence's and the
Assumption's genuinely overlap every Aug 16-17), this app currently
picks whichever started first, which happens to match the live engine
on Aug 17 (Lawrence's own elevated final "Octave Day" outranks the
Assumption's ordinary octave-day strength) but only by coincidence, not
a real rank comparison -- proposed design written up in TODO.md pending
a decision on scope.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 08:05:08 -04:00
will 143244203d Fix octave-day office content: use the octave's own feast, not the plain ferial
Deploy / deploy (push) Successful in 52s
Real, multi-part bug found by looking closely at today's rendering (day 3
of St. Lawrence's octave, St. Clare commemorated): the psalmody
antiphons, hymn, chapter/responsory/versicle, Benedictus antiphon, and
day collect were all keyed off `day.winner` directly, which stays the
plain temporal identity (post-pentecost-11) throughout an octave --
St. Lawrence's own already-authored psalmody override and collect never
engaged on any day but his actual feast day. Live-verified (Tridentine
1910, 2026-08-12) that the whole office on an ordinary octave day
actually comes from the octave's own feast ("{ex Commune aut Festo}" /
"{ex Proprio Sanctorum}"), with a *weaker* commemorated saint (Clare)
getting a separate Ant+V/R+collect block of her own alongside it.

Fixed with a new resolveOfficeWinner(day) in hours/resolve-common.ts,
used everywhere getDayCollect/getDayCollects/getBenedictusAntiphon/
getPsalmodyOverrideFor used to read day.winner directly. Deliberately
gated on temporalCategory === 'ordinary-feria' (the day has no standing
of its own) rather than "any active octave" -- the Christmas Octave's
own stacked octaves are the live-verified counterexample where the
*temporal* day keeps the office instead, each octave becoming its own
separate commemoration block (not yet modeled, flagged in TODO.md).

Also fixes the ferial Preces gate (added in the previous commit) to
exclude active octaves the same way the suffrages already do --
live-verified "Preces Feriales{omittitur}" on the same date.

getDayCollects now renders a sanctoral commemoration as a real
Ant+V/R+collect bundle when authored (${propers}-commemoration.yml),
not just a bare, unlabeled collect -- the old rendering was indeed the
confusing "PRAYER / (translation pending)" block spotted today, which
was St. Clare's placeholder with no indication whose it was or why.
Authored her real commemoration bundle and standalone collect from the
same live query rather than leaving it pending.

One correction to a guess floated mid-session: the Benedictus antiphon
does NOT go to the commemorated saint (Clare) -- live-verified it stays
with the octave's own feast (Lawrence's "In cratícula"), same as
everything else in the primary office; only the separate commemoration
block is Clare's.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 07:44:39 -04:00
will 9c9811a9ed Add Lauds' ferial Preces (Tridentine 1906/1910), shown on ferial/vigil days
Deploy / deploy (push) Successful in 53s
Monastic 1617 has no Preces feriales at Lauds at all -- content sourced
from Tridentine 1906/1910 per direct instruction, same track as the
Cross suffrage and St. Joseph's suffrage. New lauds-preces-feriales.yml
(Kyrie, Pater noster, the full versicle litany, Psalm 129, closing
versicles) transcribed from a live query against a clean Advent feria,
matching what actually rendered rather than the underlying template's
own conditional markup (the Pope/Bishop and benefactors' versicles are
both dropped live despite being present in the template; the King/nation
versicle pair is kept despite the template's own rubric note suggesting
otherwise).

New `lauds-preces` part kind (hours/types.ts) picks between this and the
existing short Sunday/feast litany (lauds-short-litany.yml, unchanged
content) on a ferial-or-vigil day. Deliberately not the shared
`isSundayOrFeast` predicate, which treats a Vigil as a "feast" -- here a
Vigil needs to land on the ferial side instead, per direct instruction.
Also deliberately wider than the real 1906/1910 rubric itself, which
restricts the fuller form to Advent/Lent/Ember days specifically -- shown
on *every* ferial or vigil day instead, mirroring the identical explicit
choice already made for Prime's own ferial Preces.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 07:12:27 -04:00
will fb66f60770 Add St. Joseph's suffrage; fix Cross/BVM suffrage gating
Deploy / deploy (push) Successful in 51s
Three things prompted by today's date resolving wrong:

1. St. Joseph's own Lauds suffrage was never modeled at all. Added
   lauds-suffrage-joseph.yml, sourced from Tridentine 1906/1910 (the
   reference engine's "Tridentine - 1906" version) per direct
   instruction -- Monastic 1617's own suffrage set has no Joseph
   suffrage at Lauds, so this one genuinely comes from a different track
   than the other four.

2. The Cross suffrage's actual gating rule, live-verified against a
   plain ferial win, a plain Sunday win, a low-rank saint's own win (even
   bare Simplex), and Marian Saturday: it shows only when the bare
   temporal feria itself is what's being prayed -- the opposite of
   "Sunday or a feast of the Lord." Expressed as `!isSundayOrFeast(day)`
   (the same ferial/festive split Prime's capitulum already uses) plus
   one more exclusion for a named temporal identity like Marian Saturday,
   which isn't Sunday or a sanctoral win either but still isn't a bare
   ferial office.

3. The BVM suffrage is correctly dropped on Marian Saturday (unchanged
   behavior, just now understood and commented correctly): it's specific
   to a day whose own office is already Marian, confirmed via the same
   live source, not a guess.

Also models St. Clare (Aug 12, Simplex under Monastic 1617) and surfaces
active octaves in getDayLabel, since today's date was resolving as a
plain ferial day instead of showing St. Lawrence's octave with St. Clare
commemorated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 06:51:22 -04:00
will 346a5c65eb propers: Benedictus antiphons for December's sanctoral entries (9/10)
Deploy / deploy (push) Successful in 53s
4 authored fresh (Nicholas, the Immaculate Conception, Damasus, Thomas
of Canterbury), 1 corrected (Lucy -- confirmed sourced from the Roman
rite's raw [Ant 1] rather than a real Monastic 1617 rendering, same
pattern as every month so far). Thomas Apostle, Stephen Protomartyr,
John Apostle, and Holy Innocents already matched the live query as
found -- December's own late feasts (the Christmas Octave content)
turned out much less prone to the Roman/Monastic divergence than
earlier months, presumably because they're old and universal enough
that the two rites never actually diverged on them.

St. Bibiana left honestly missing: Simplex rank, Dec 2 falls within
Advent every tested year 2026-2029, same structural block as St.
Frances of Rome in March -- she can never win her own day outright
under this app's own calendar rules.

This closes out the full sweep: all 109 sanctoral entries with a
propers id have now been checked against a live Monastic query, twelve
months, one at a time. TODO.md has the final tally.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:39:11 -04:00
will 229250231a propers: Benedictus antiphons for November's sanctoral entries (7/7)
Deploy / deploy (push) Successful in 52s
4 authored fresh (All Saints, Clement I, Catherine of Alexandria,
Silvester Abbot), 2 corrected (Cecilia, Andrew -- each confirmed
sourced from the Roman rite's raw [Ant 1] rather than a real Monastic
1617 rendering, same pattern as every month so far). Martin of Tours
already matched the live query as found, no change needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:35:08 -04:00
will 1ad55d49a4 propers: Benedictus antiphons for October's sanctoral entries (7/7)
Deploy / deploy (push) Successful in 53s
All 7 authored fresh: Francis of Assisi, Callistus I, Luke, Ss.
Chrysanthus and Daria, the Vigil of Ss. Simon and Jude, Ss. Simon and
Jude, the Vigil of All Saints.

Luke and Simon/Jude both needed the same register fix as Matthias/
Barnabas/James the Greater/Bartholomew/Matthew (Matt 19:27ff, same
verse): the source's own English existed but read jarringly modern
next to everything else, reworded to match and marked draft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:32:10 -04:00
will 1a82a67b15 propers: Benedictus antiphons for September's sanctoral entries (5/5)
Deploy / deploy (push) Successful in 54s
4 authored fresh (Matthew, Ss. Cyprian and Justina, Ss. Cosmas and
Damian, Jerome), 1 corrected (the Nativity of the BVM -- confirmed
sourced from the Roman rite's raw [Ant 1] rather than a real Monastic
1617 rendering, same pattern as every month so far).

Matthew needed the same register fix as Matthias/Barnabas/James the
Greater/Bartholomew (Matt 19:27ff, same verse): the source's own
English existed but read jarringly modern next to everything else,
reworded to match and marked draft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:29:12 -04:00
will 7dfc5a81ea propers: Benedictus antiphons for August's sanctoral entries (12/12)
Deploy / deploy (push) Successful in 53s
9 authored fresh (Dominic, Ss. Cyriacus/Largus/Smaragdus, Assumption,
Bernard, Bartholomew, Louis, Zephyrinus, Augustine), 1 corrected
(Peter's Chains -- confirmed sourced from the Roman rite's raw [Ant 1]
rather than a real Monastic 1617 rendering, same pattern as every
month so far). Two already matched the live query as found (Finding
of St. Stephen, the Decollation of St. John the Baptist) and needed no
change.

Bartholomew needed the same register fix as Matthias/Barnabas/James
the Greater (Matt 19:27ff, same verse): the source's own English
existed but read jarringly modern next to everything else, reworded
to match and marked draft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:26:40 -04:00
will 36e1181b85 propers: Benedictus antiphons for July's sanctoral entries (9/9)
Deploy / deploy (push) Successful in 52s
8 authored fresh (the Seven Brothers/Rufina/Secunda, Symphorosa and
Her Seven Sons, Margaret of Antioch, Apollinaris, James the Greater,
Anne, Nazarius/Celsus/Victor I/Innocent I, Abdon and Sennen), 1
corrected (Mary Magdalene -- confirmed sourced from the Roman rite's
raw [Ant 1] rather than a real Monastic 1617 rendering, same pattern
as every month so far).

James the Greater needed the same register fix as Matthias/Barnabas
(Matt 19:27ff, same verse): the source's own English existed but read
jarringly modern next to everything else, reworded to match and
marked draft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:22:06 -04:00
will ab52cfda69 propers: Benedictus antiphons for June's sanctoral entries (16/16)
Deploy / deploy (push) Successful in 53s
11 authored fresh (Ss. Marcellinus/Peter/Erasmus, Ss. Primus and
Felicianus, Barnabas, Anthony of Padua, Basil the Great, Ss. Vitus/
Modestus/Crescentia, Ss. Mark and Marcellian, Ss. Gervase and Protase,
Paulinus of Nola, William Abbot, Leo II), 5 corrected (Ss. Basilides/
Cyrinus/Nabor/Nazarius, the Nativity of St. John the Baptist, Ss. John
and Paul, Ss. Peter and Paul, Commemoration of St. Paul -- each
confirmed sourced from the Roman rite's raw [Ant 1] rather than a real
Monastic 1617 rendering, same pattern as every month so far).

Barnabas needed the same register fix as Matthias (Matt 19:27ff, same
verse): the source's own English existed but read jarringly modern
next to everything else, reworded to match and marked draft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:18:34 -04:00
will af4b703f77 propers: Benedictus antiphons for May's sanctoral entries (13/13)
Deploy / deploy (push) Successful in 54s
10 authored fresh (Athanasius, Monica, Stanislaus, Ss. Nereus/
Achilleus/Domitilla/Pancras, Boniface, Ubald, Peter Celestine, Urban I,
Eleutherius, John I), 3 corrected (Ss. Philip and James, John Before
the Latin Gate, the Apparition of St. Michael -- each confirmed
sourced from the Roman rite's raw [Ant 1] rather than a real Monastic
1617 rendering, same pattern as every month so far).

Urban I, Eleutherius, and John I (all late May) needed 2038 to find a
year not swallowed by Ascensiontide/Pentecost/Trinity/Corpus Christi
in some combination -- the latest year needed yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:12:46 -04:00
will 1b57e4fe9c propers: Benedictus antiphons for April's sanctoral entries (8/8)
Deploy / deploy (push) Successful in 55s
All 8 authored fresh: Francis of Paola, Leo I, Ss. Tiburtius/Valerian/
Maximus, George, Mark, Vitalis, Robert, Peter Martyr. Several share
one Eastertide Common-of-Several-Martyrs antiphon word for word
(Tiburtius/Valerian/Maximus, George, Vitalis, Peter Martyr) -- each
confirmed independently via its own live query rather than assumed
from the others.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:08:19 -04:00
will aa6ca21938 propers: Benedictus antiphons for March's sanctoral entries (5/6)
Deploy / deploy (push) Successful in 52s
4 authored fresh (Lucius I, Thomas Aquinas, the Forty Holy Martyrs,
Gregory the Great), 1 corrected (Joseph -- confirmed sourced from the
Roman rite's raw [Ant 1] rather than a real Monastic 1617 rendering,
same pattern as January/February's corrections).

Gregory the Great's antiphon (the "non Angli sed Angeli" episode) had
no English in the source at all -- translated fresh, marked draft.

St. Frances of Rome left honestly missing: Simplex rank, and her day
(March 9) falls within Lent in every year tested 2026-2035, so she can
never win outright under this app's own privileged-feria-major rule --
there's no live-rendered antiphon to source, ever, not just this year.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:05:02 -04:00
will 93bcee414e propers: Benedictus antiphons for February's sanctoral entries (7/7)
Deploy / deploy (push) Successful in 55s
5 authored fresh (Dorothea, Apollonia, Scholastica, Valentine,
Matthias), 2 corrected (Agatha, Chair of St. Peter at Antioch -- both
confirmed sourced from the Roman rite's raw [Ant 1] rather than a real
Monastic 1617 rendering, same pattern as January's corrections).

Two needed translation/rewording, not just transcription: Scholastica
had no English at all in the source (translated fresh, marked draft);
Matthias's own English existed but was jarringly modern next to every
other antiphon's archaic register, so reworded to match (the
underlying verse's standard Douay-Rheims wording) and marked draft
rather than presented as a straight source transcription.

Also noted in TODO.md, not fixed: splitNamedAntiphon always marks its
output verified regardless of input status, so a draft antiphon
currently renders as if fully verified wherever it's actually
displayed -- a pre-existing issue across every hour, only now surfaced
by content with a real draft status going through it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:02:00 -04:00
will cc0d8cc892 calendar: move St. Hilary of Poitiers to his real date, Jan 14
Deploy / deploy (push) Successful in 53s
Confirmed against the raw [Officium] file directly: Jan 14 is Hilary
(Latin/Sancti/01-14.txt), Jan 23 is St. Raymond of Peñafort
(Latin/Sancti/01-23.txt) -- not Hilary at all. The original Jan-23
placement wasn't fabricated, just misled by its own source: 2029 is a
real year where Jan 14 falls on a Sunday and every day through the
22nd is already occupied by another feast, so Hilary genuinely
transfers all the way to the 23rd that one year -- the app had
mistaken that transfer-year artifact for his real, fixed date.

His collect text is unaffected (a feast's collect doesn't change based
on which day it's said), re-confirmed identical on his real date.
Benedictus antiphon pulled fresh, completing January's antiphon pass
(9/9).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 20:57:43 -04:00
will 0878c3d60c propers: Benedictus antiphons for January's sanctoral entries (9/9)
Deploy / deploy (push) Successful in 50s
All 9 January saints with a propers id: 5 authored fresh (Marcellus I,
Paul the Hermit, Fabian & Sebastian, Vincent & Anastasius, John
Chrysostom), 3 corrected (Chair of St. Peter at Rome, Agnes,
Conversion of St. Paul -- each confirmed sourced from the Roman rite's
raw [Ant 1] rather than a real Monastic 1617 rendering, same mistake
as St. Lawrence's earlier fix), 1 left honestly missing (Hilary of
Poitiers -- this app's calendar has him Jan 23, but Divinum Officium's
own calendar has him Jan 14; flagged in TODO.md rather than guessed
at). See TODO.md for the full remaining scope and the method this
settled on after automated matching proved unreliable on real edge
cases (shared dates, saints the reference engine doesn't carry at
all).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 16:58:18 -04:00
will 0404642614 calendar: add Christ the King, last Sunday of October
Deploy / deploy (push) Successful in 51s
A 1925 addition, so nowhere in the Monastic Tridentinum 1617 base this
project otherwise targets -- content sourced from "Monastic Divino
1930" instead, the Monastic-lineage version of the era that actually
carries it. Always wins outright (Duplex I. classis, confirmed live),
commemorating whichever Sunday after Pentecost it displaces -- same
additive-layering shape as applyOctaves/applyMarianSaturday, run last
so nested commemorations (e.g. a Simplex saint already commemorated
under that Sunday) survive underneath it.

Extended the Lauds psalmody-override mechanism (both the psalm groups
and, newly, the chapter/responsory/hymn/versicle bundle) to recognize
named temporal winners as unconditionally override-eligible, not just
duplex-majus+ sanctoral ones -- generalizing what had been a Marian-
Saturday-only special case. Suffrages needed their own explicit check
too: isDoubleOrHigher only ever looks at a sanctoral rank, and a named
temporal winner has no FeastClass to check at all.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:13:22 -04:00
will 747a078580 calendar: model Our Lady's Saturday as a real occurrence outcome
Deploy / deploy (push) Successful in 49s
On a free Saturday (nothing privileged already claims it, no active
octave), the day's own identity is now "Our Lady's Saturday" rather
than an anonymous ordinary-feria -- mirrors privileged-feria-minor
exactly, per direct instruction: Semiduplex-or-higher still wins
outright (Marian Saturday doesn't apply at all); below that (Simplex,
and Vigil, both under semiduplex on the FeastClass scale) loses and is
commemorated instead. Layered additively after decideOccurrence, same
shape as applyOctaves -- never touches decideOccurrence's own rules.

Needed a real winner identity (not just the plain temporal feria id)
so day-label/antiphon/collect sourcing can recognize it -- added a
temporal-feasts record purely for that, and taught getDayLabel to
check it for any named temporal winner (a small, free improvement for
Christmas/Pentecost's own labels too, previously unhandled).

hours: build the duplex-majus+ Lauds psalmody override (per-feast)

lauds-psalmody no longer unconditionally uses the plain weekday
default: a duplex-majus-or-higher sanctoral winner, or Our Lady's
Saturday (unconditional, no rank threshold -- it isn't competing with
the weekday default the way a saint is), now substitutes its own
proper psalm groups/antiphons/canticle. Per-feast, not per-Common, per
direct instruction, even though most duplex-majus+ saints across the
year don't have one authored yet and fall back to the plain weekday
default until they do.

Content for the worked example (St. Lawrence's own day) surfaced a
real bug while sourcing it: st-lawrence-antiphon.yml had been read
from the Roman/secular rite's own [Ant 1], not Monastic 1617's actual
Benedictus antiphon for that day -- corrected from a fresh live query.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:02:55 -04:00
will 73f9c1aebe hours: use the Marian Sabbato hymn as Saturday's own Lauds default
Deploy / deploy (push) Successful in 47s
By explicit choice, not the honest-missing placeholder from before: a
genuinely per-annum, unprivileged Saturday isn't achievable (every one
is either Marian-Sabbato-overridden or in a privileged season with its
own swapped hymn), so Sanctae Mariae Sabbato's own hymn ("O gloriosa
Domina") becomes Saturday's default rather than leaving a gap.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:57:57 -04:00
will 70fbdd12d0 propers: transcribe Lauds' fixed and weekday content
Every fixed and weekday-variable text Lauds needs beyond the psalms/
canticles themselves: per-weekday antiphons (data/hours/lauds-
antiphons.yml, reconstructed with an embedded '*' from the engine's
separately-rendered incipit/full lines), the weekday capitulum/
responsory/hymn/versicle bundle (shared verbatim Mon-Fri for the
capitulum, confirmed against the live engine), the fixed Benedictus
text, the Kyrie/Pater-noster short litany, the four Tridentine
suffrages, the conclusio, and the closing versicle.

Saturday's hymn is left honestly `missing`: every ordinary-time
Saturday is either Marian-Sabbato-overridden or falls in a privileged
season whose hymn is itself swapped for the season's own, so there's
no achievable date showing a genuinely per-annum, unprivileged
Saturday Lauds hymn to source it from.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:45:08 -04:00
will c0413a44dc propers: add December's collect and antiphon text
Deploy / deploy (push) Successful in 45s
10 collects, 5 antiphons -- including backfilling the pre-existing
Immaculate Conception entry. St. Damasus's collect is Latin-only (no
English translation exists in the reference source at all); a few
others (All Saints, Bibiana, Immaculate Conception) needed their English
read directly from the raw source file after the live query's English
side either omitted the Oratio translation or rendered the wrong Marian
feast's text -- caught by cross-checking, not assumed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:34:45 -04:00
will 7cc6adfb55 propers: add November's collect and antiphon text
Deploy / deploy (push) Successful in 44s
9 collects, 3 antiphons -- including backfilling the pre-existing All
Saints entry. Also updates two pre-existing tests whose shared date
(2025-11-30, Advent I Sunday) now correctly shows St. Andrew commemorated
alongside it, confirmed against the live reference engine.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:18:12 -04:00
will 14227c7afe propers: add October's collect text
Deploy / deploy (push) Successful in 46s
7 collects. Also moves two pre-existing tests' dates off Oct 4-5, which
now carry real sanctoral content (St. Francis, Ss. Placid and
Companions) that changes their governing behavior -- same class of
collision as previous months.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:07:51 -04:00
will 3376036779 propers: add September's collect and antiphon text
Deploy / deploy (push) Successful in 43s
6 collects, 1 antiphon -- including backfilling the pre-existing Nativity
of the BVM entry now that the pulling methodology exists.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 21:20:44 -04:00
will a492be961b propers: add August's collect and antiphon text
Deploy / deploy (push) Successful in 44s
11 collects, 4 antiphons -- including backfilling the three pre-existing
August entries (Lawrence, Assumption, Augustine) now that the pulling
methodology exists. Also updates three pre-existing tests whose dates
collided with this month's new real content: the vigil-of-St.-Lawrence
backward-transfer case now runs into a real feast at its landing day
instead of an empty one (confirmed correct against the live reference
engine, including the surviving commemoration on the impeded Sunday
itself), and two other tests moved off Aug 9/10 to dates unaffected by
the new data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 21:11:56 -04:00
will c03d6a227d propers: add July's collect and antiphon text
Deploy / deploy (push) Successful in 42s
Real collect text for all 9 July saints that have one, plus St. Mary
Magdalene's own antiphon — same extraction method as prior months.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 18:38:50 -04:00
will 9b8dc200a1 propers: add June's collect and antiphon text
Deploy / deploy (push) Successful in 42s
Real collect text for all 16 June saints that have one, plus a real
antiphon for 4 of them and a fifth (Ss. Peter and Paul) that deliberately
reuses the Chair-of-Peter-at-Antioch antiphon text, matching the source's
own cross-reference — same extraction method as prior months.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:37:27 -04:00
will a6a72f277d propers: add May's collect and antiphon text
Deploy / deploy (push) Successful in 42s
Real collect text for all 13 May saints that have one, plus a real
antiphon for the 3 that have one of their own (Ss. Philip and James, St.
John Before the Latin Gate, the Apparition of St. Michael) — same
extraction method as prior months. Two saints (St. Peter Celestine, St.
Urban I) have an [Ant 1] in the source that turned out to just be a
cross-reference to the generic Common template, not real unique text, so
no antiphon file was authored for them.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:25:56 -04:00
will 88074cdfe6 propers: add April's collect text
Deploy / deploy (push) Successful in 41s
Real collect text for all 8 April saints that have one — same extraction
method as prior months. One correction to St. Robert's own English
translation in the source, which left his name in Latin genitive form
("blessed Robérti") rather than translating it — fixed, flagged in the
file as a transcription artifact, not a deliberate style choice.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:14:12 -04:00
will a2d86a4879 propers: add March's collect and antiphon text
Deploy / deploy (push) Successful in 40s
Real collect text for all 6 March saints that have one, plus St. Joseph's
own antiphon — same extraction method as January/February.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 15:38:11 -04:00
will 8cb10e57de propers: add February's collect and antiphon text
Deploy / deploy (push) Successful in 38s
Real collect text for the 6 February saints that have one, plus a real
antiphon for the 2 that have one of their own — same extraction method
as January (fully-rendered live-engine output, not the raw source files'
own shorthand endings).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 15:33:29 -04:00
will c1d99ea70b propers: add January's collect and antiphon text
Deploy / deploy (push) Successful in 41s
Real collect text for the 9 January saints that have one, plus a real
antiphon for the 3 that have one of their own (as opposed to falling back
to a generic Common-of-Saints text) — read directly from the reference
engine's fully-rendered output, not reconstructed from the raw source
files' own shorthand endings ($Per Dominum, $Qui vivis, etc.).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 15:26:16 -04:00
will 813d173f5c hours: build Terce, Sext, and None
Deploy / deploy (push) Successful in 39s
Three separate resolver files (terce.ts/sext.ts/none.ts), not a shared
little-hour module — they're structurally identical but kept independent
by choice. Ordo verified against Divinum Officium (Monastic Tridentinum
1617): opening versicle, self-contained hymn, one antiphon framing three
psalms (no closing repeat, unlike Prime), a capitulum with its own
embedded short versicle/response, the day's own collect, and a closing
identical across all three hours.

Also fills in psalter-distribution.yml's previously-missing Sunday/
Monday/Tuesday psalm entries (Ps 118 sections for Sunday/Monday; Tuesday
turns out to share Wednesday/Thursday's native gradual-psalm set, not a
distinct one). Friday/Saturday's antiphons are derived from each day's
first psalm rather than reusing the native gradual antiphons, since
those two days already use a redistributed, non-native psalm set.

hours/types.ts gains a 'day-collect' part kind — the first ordo to use
the day's own Proper collect rather than a fixed text.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 13:51:08 -04:00
will 7a932b40be propers: add the Terce/Sext/None hymns
Fixed, self-contained text (including each hymn's own final doxology
stanza) — unlike Prime's/Compline's hymns, these don't change by season,
so there's no appendDoxology split. Verified against Divinum Officium
(Monastic Tridentinum 1617).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 13:50:49 -04:00
will ec448bc35b compline: build the full hour, sharing Prime's resolver helpers
Deploy / deploy (push) Successful in 38s
Ordo is Monastic 1617 as a base, with deliberate Tridentine 1906
additions: the "In manus tuas" short responsory, the Nunc Dimittis
with its "Salva nos" antiphon, the fuller Preces (Monastic's own is
shorter), and Lent's "Christe, qui lux es et dies" hymn replacement
(English translation marked draft, pending a real historical one).
Psalms 4, 90, 133 are fixed daily with real verified text, unlike
Prime's weekday-rotated psalms.

The closing Marian antiphon now picks Alma Redemptoris Mater / Ave
Regina Caelorum / Regina Caeli / Salve Regina by real season, using
the calendar work from the previous commit — except Ave Regina
Caelorum's own window (Candlemas through the day before Maundy
Thursday) doesn't align to any single season value, so that one case
checks the real date directly instead of going through the by-season
table.

resolve-common.ts extracts the resolve/status/doxology/antiphon
helpers Prime already had into something Compline can share; a few
propers files lose their "prime-" prefix now that both hours use them.
2026-08-10 05:27:40 -04:00
will 58958aa847 Prime: real content (psalms, Martyrology, Regula) and ordo corrections
Deploy / deploy (push) Failing after 21s
Pulls in verified content from Divinum Officium rather than placeholders:
17 psalms (2, 6, 7-19, 118, 129), 365 days of the Martyrology, and the full
121-reading Regula cycle, plus the Athanasian Creed.

Ordo corrections driven by review against the real engine output:
- Capitulum and Preces now pick a Sunday/feast vs. ferial form
  (calendar/isSundayOrFeast); ferial Preces said every ferial day by choice.
- Chapter responsory, hymn doxology, and the opening versicle's
  Alleluia/Laus tibi all vary by season via a shared resolver
  (hours/seasonal-propers.ts).
- Real Roman Kalends/Nones/Ides Latin dating (calendar/roman-date.ts,
  verified against 363/365 real Martyrology headings) plus the historical
  "bis sextus" Feb 29 handling, and the Martyrology's Luna (moon-day)
  heading (a ported Golden-Number calculation).
- Fixed responsory structure (was missing its initial full repeat),
  weekday psalm antiphons (opening as incipit-or-full by rank, full
  repeat after the psalms/Creed as its own part, "*" chant mark kept),
  scripture citations on the capitulum/lectio brevis, and V./R. markers
  switched from Unicode symbols to plain text for reliable font rendering.
- Dropped Pretiosa and the dead-commemoration psalm (129) for time;
  trimmed section headings down to the ones that are actually named
  things (Preces, Chapter Office, etc. no longer relabel connective text).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-09 20:03:53 -04:00