christmas-octave-sunday previously had only its Benedictus antiphon
authored -- no Lauds psalmody override or office bundle, no Prime/Terce/
Sext/None content at all. Adds the full set: Lauds psalmody (3 psalms +
Canticle of the Three Young Men + Laudate, all distinct antiphons),
Lauds capitulum/versicle/hymn ("A solis ortus cardine"), and Prime/Terce/
Sext/None antiphons+chapters (Terce/Sext/None only, matching Gal
4:1-2/4:4-5/4:7 -- the same reading the raw Monastic Tridentinum 1617
source file gives for this Sunday).
Real code gap found and fixed along the way: getMinorHourOverrideId
(hours/resolve-common.ts) only checked the sanctoral branch of
resolveOfficeWinner's result, so a named temporal feast in
ALWAYS_OVERRIDE_TEMPORAL_IDS (marian-saturday, christ-the-king) got a
Lauds psalmody override but silently never a Prime/Terce/Sext/None one,
however much was authored for it. Fixed by mirroring
getPsalmodyOverrideFor's own temporal-id branch (hours/lauds.ts), and
christmas-octave-sunday added to that set.
Content sourced from a "Divino Afflatu 1954" live query rather than
Monastic Tridentinum 1617, since 1617 has no real identity of its own for
this Sunday under its own calendar rules on most Dec 26-29 dates (only
the collect, already authored separately, happened to be pulled from a
date where 1617 did render it) -- consistent with this app's stated
precedent of following D.A. for calendar/precedence even while keeping
1617's shape for the hours themselves elsewhere.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Confirms and formalizes what TODO.md had flagged as an open question:
the reference engine's own source has explicit Paschaltide variants
(Commune/C1p.txt, C2p.txt, C3p.txt -- "tempore Paschali") for exactly 3
of its 12 Common categories -- Apostles, a Martyr-Bishop, Several
Martyrs -- a real liturgical restriction of Alleluia/victory imagery to
apostles and martyrs, not a coincidence.
resolveMinorHourAntiphon/resolveMinorHourChapter now try a
`${minorHoursCommon}-paschaltide` variant first whenever day.season is
eastertide/ascensiontide/pentecost (the same three-season window as
Compline's own Regina Caeli table, since "tempore paschali" runs through
the Pentecost octave in both), falling back to the plain Common when no
variant is authored.
common-of-apostles-paschaltide (7 files) ported directly from the
reference engine's own Commune/C1p.txt source files rather than
live-queried, then cross-checked against st-mark's already-authored,
live-queried content -- identical except one antiphon's asterisk, which
the source places one word earlier; corrected to match. st-mark and
st-john-before-the-latin-gate's duplicate per-saint files removed
entirely; ss-philip-and-james's chapter files removed (its antiphons
stay proper).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
A systematic diff across all 29 duplex-majus+ saints' P/T/S/N files found
real shared-Common groups beyond the pairs noticed in passing while
authoring them. Extracted into shared data/propers/common/{hour}-antiphon-
common-of-*.yml / {hour}-capitulum-common-of-*.yml files and wired via a
new SaintRecord.minorHoursCommon field, with resolveMinorHourAntiphon/
resolveMinorHourChapter falling back to it when a saint has no proper file
of their own. Deliberately a separate field from the existing (previously
unused) `common` field: the minor hours don't always draw from the same
Common category as the saint's overall classification -- both Chair of
St. Peter feasts are `common: common-of-an-apostle` by rank, but their
P/T/S/N content is Common of a Confessor Bishop (Peter considered as
bishop of that see).
Four groups extracted (87 duplicate files collapsed to 21 shared ones),
each confirmed byte-identical via diff first: common-of-apostles (8
saints, all 4 hours), common-of-a-confessor-bishop (Chair of Peter pair
share antiphons+chapters, Martin of Tours shares only chapters), common-
of-the-bvm (Nativity BVM + Immaculate Conception's Sext/None/Terce
chapters -- the Assumption's own stay proper, different reading + proper
versicles), and common-of-st-peter (St. Peter ad Vincula + Ss. Peter and
Paul, not a real Common category, just genuinely identical Petrine
content).
Deliberately left un-extracted: St. Mark, St. John Before the Latin Gate,
and Ss. Philip and James share identical text that live-checking shows is
Paschaltide-seasonal (all three landed within the Easter octave weeks on
their queried dates, despite disagreeing `common` classifications) rather
than a fixed per-saint-category Common -- folding it into the same
mechanism would misrepresent season-contingent content as timeless. Left
as individually-authored files; flagged in TODO.md as needing a real
Paschaltide-awareness mechanism this app doesn't have yet for any hour.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
Every antiphon that goes through the incipit/full split -- which is
every antiphon across every hour -- lost its real status the moment it
passed through here: splitNamedAntiphon hardcoded `verified` on its
output via verifiedText(), regardless of what the source's actual
status was. Concretely, this meant St. Scholastica's antiphon (I
translated it myself, no English existed in the source), Matthias's and
several other apostles' reworded English, and Gregory the Great's
translated antiphon all silently rendered as if fully verified --
losing the "unverified draft text" UI marker (src/ui/styles.css's
.text-draft, a dashed underline + tooltip) that's supposed to
distinguish "copied straight from the source" from "Claude's own
rendering."
Fixed by having splitNamedAntiphon accept a real ResolvedText and carry
its per-language status through unchanged to both outputs, instead of
silently upgrading everything to verified. Callers whose antiphon never
had a status field to begin with (plain weekday-default antiphons and
Lauds psalmody overrides -- neither type tracks status at all, always
implicitly verified by the source file's own live-checked convention)
now wrap with verifiedText() explicitly at the call site, rather than
that assumption being buried inside splitNamedAntiphon itself.
resolveMinorHourAntiphon (Prime/Terce/Sext/None's override lookup) now
returns a full ResolvedText for the same reason.
Verified end-to-end with St. Scholastica's real draft-English antiphon,
both via a direct unit test and visually in the browser (the dashed
underline now shows correctly under her Benedictus antiphon).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Per direct instruction, and explicitly framed as this project's own
departure from Monastic 1617 itself: within Dec 26-30 inclusive (exactly
one real Sunday falls somewhere in that window every year), whichever
date is the actual Sunday always wins as Nat1-0 outright, with no rank
check at all -- even Stephen/John/Holy Innocents (Duplex II. classis)
get fully displaced, not just commemorated. The displaced saint isn't
commemorated in place either; he reappears in full as Dec 30's own
winner instead (the block's one date with no fixed saint of its own).
Rank never matters for this rule -- confirmed with Becket (Semiduplex)
transferring the same way as the Duplex-II-classis saints.
This deliberately diverges both from what Monastic 1617 itself does on
Dec 26-29 (live-verified two commits ago: the saint wins there, Sunday
merely commemorated) and from the general privileged-sunday transfer
rule elsewhere (which only transfers ranks below duplex-majus and
commemorates everything else in place) -- this window transfers every
rank and commemorates nothing in place, a genuinely new, third
behavior specific to this 5-day block.
Implemented as calendar/index.ts's applyChristmasOctaveSunday, a
narrowly-scoped layer in the same spirit as applyMarianSaturday/
applyChristTheKing, rather than by changing the shared
decideOccurrence/transfer machinery every other Sunday relies on. Dec 31
and everything outside Dec 26-30 is untouched -- St. Silvester still
beats the Sunday there via the plain, unchanged ordinary-sunday rule.
Verified against all five possible Sunday positions within the window
(Dec 26/27/28/29/30) plus the "nothing displaces anything" control case,
each with its own dedicated test in the new
tests/calendar/christmas-octave-sunday.test.ts. Updates two existing
tests whose assertions were correct under the old rule and are now
superseded specifically within this window (Stephen/Innocents no longer
win their own Sunday-collision dates there) while confirming the
underlying ordinary-sunday rule is still live and real outside it (Dec
31/St. Silvester).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
When more than one octave is active on a day with no temporal standing of
its own (St. Lawrence's and the Assumption's genuinely overlap every Aug
16-17), which one governs the day's content/label is now decided by rank
comparison instead of "whichever started first" (an accident of
insertion order). Per direct instruction:
- Highest effective rank wins outright; every other active octave still
gets commemorated, same as a single octave already outranking a weak
rival saint.
- A rank tie goes to whichever octave started more recently -- day 1 of
a new octave needs to be fully present, the whole point of it
starting. No real tied-rank case exists yet to verify this
empirically, unlike everything else here -- documented in TODO.md as
a stated decision, not a live finding.
New OctaveConfig.closingDayRank (default duplex): an octave's own final
day ("in Octava") is elevated above its ordinary in-between rank --
live-verified as a real, general pattern (both St. Lawrence's Aug 17 and
the Assumption's Aug 22 show as Duplex, above their otherwise-Semiduplex
ordinary days), not a one-off. This elevation is *why* Lawrence's octave
beats the Assumption's on their one real overlap day despite the
Assumption being the far higher-ranked feast overall. Feeds both the
existing rival-saint threshold and the new octave-vs-octave comparison.
calendar/octaves.ts gains resolveActiveOctave (+ pickWinningOctave, the
comparison itself factored out for direct unit testing against synthetic
data, since no real tied-rank overlap exists to test against yet).
hours/resolve-common.ts's resolveOfficeWinner and calendar/day-label.ts
both now call it instead of each keeping their own "activeOctavesFor(...)
[0]" logic.
That consolidation surfaced a real, independent bug: getDayLabel never
checked temporalCategory at all before choosing an octave name, unlike
resolveOfficeWinner -- found while testing the real Aug 16 overlap (a
Sunday that year, where the temporal Sunday has standing and should win
outright). Live-verified counterexample: the Christmas Octave's own
stack (Dec 30) was wrongly labeled "3rd Day within the Octave of The Holy
Innocents" instead of the correct plain temporal label -- the real title
never names any of the four stacked octaves there. Fixed by sharing the
exact same ordinary-feria gate resolveOfficeWinner already had, so the
two can no longer disagree.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
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>
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>
Checked directly against Monastic Tridentinum 1617 (not just the
Tridentine 1906/1910 track the suffrage content itself comes from) --
this omission isn't a rubric-track-specific quirk, it holds under this
app's own primary source too:
- Advent, Christmastide, and Passiontide ferias: suffrages omitted
entirely. Confirmed ordinary Lent (weeks 1-4, not Passiontide) is NOT
excluded -- only the last two weeks are.
- Any day within an active octave: suffrages omitted entirely, however
low that octave's own rank is -- confirmed against day 2/3 of St.
Lawrence's own Semiduplex octave, well below the existing Duplex+
threshold.
Today (within Lawrence's octave) was showing all five suffrages before
this fix; the real office has none but the Marian antiphon.
Still not modeled, flagged in TODO.md: Paschaltide's own substitution
(a single alleluia-form "Suffragium Paschale" replaces the whole set
during Eastertide, rather than the ordinary set showing or being
omitted) -- a separate, larger feature.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
christmastide's Sunday was coded privileged-sunday (Advent's own tier),
which live-checking against the reference engine shows is wrong: on
every one of the three real collision dates (St. Stephen/John/Holy
Innocents, all Duplex-II-classis, falling on the Sunday within the
Octave) the saint wins outright and the Sunday is merely commemorated --
the reverse of what privileged-sunday would produce (Sunday stays
primary, saint just gets a nod). St. Silvester (plain Duplex, Dec 31)
confirms the same live. Reclassified to ordinary-sunday, which matches
all four checked cases: Duplex+ wins outright (Stephen/John/Innocents/
Silvester), Semiduplex still transfers off the Sunday rather than
winning (St. Thomas Becket, unaffected by the fix either way), and a day
with no saint at all resolves to the Sunday cleanly.
Found while pulling christmas-octave-sunday's own Benedictus antiphon
from the reference engine's dedicated Tempora/Nat1-0 proper and noticing
this app's own occurrence resolution didn't match what the live engine
showed for the Sunday's real collision dates.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Corrects the previous conclusion (that this id had no clean sourceable
date at all). The reference engine has a dedicated proper for this
Sunday, Tempora/Nat1-0, distinct from the individual octave-day saints'
own pages -- most years the Sunday loses outright to a Duplex-II-classis
octave saint (St. Stephen/St. John/Holy Innocents) and only earns a bare
commemoration, which is what the earlier search kept finding, but
2029-12-30 is a year where the Sunday wins outright with no
commemoration at all, so that's the date pulled from.
All 52 temporal ids (54 counting marian-saturday/christ-the-king) now
have an authored Benedictus antiphon, closing out the temporal half of
the "every sanctoral and temporal entry needs its antiphons" task for
real.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pulls the Lauds Benedictus antiphon (Latin + English) for every
temporal-id proper except christmas-octave-sunday, completing the
"every sanctoral and temporal entry needs its antiphons" task
(sanctoral side finished in prior commits this session).
Dates were found programmatically: a Node script iterated resolveDay()
over full years to find, for each temporal id, the first date this
app's own calendar logic resolves to it, then each candidate date was
cross-checked against a live Divinum Officium (Monastic Tridentinum
1617) query to confirm the title has no saint collision before pulling
content. Four ids (easter-5, easter-6, post-pentecost-11,
post-pentecost-14) needed a second, alternate date after the first
candidate turned out to collide with a saint modeled in the live
reference engine but not in this app (St. Mark, St. Athanasius, Our
Lady of the Snows).
christmas-octave-sunday is deliberately left unauthored: every date it
can resolve to collides with a specific named octave-day feast in the
real calendar, so there's no clean generic content to source -- see
TODO.md.
Also updates tests/hours/lauds.test.ts: the old "falls back to missing
on a plain temporal day" test used a date that now has real content
(post-pentecost-11), so it's replaced with a test confirming that
content resolves correctly plus a new test specifically covering the
christmas-octave-sunday exception.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Was scattered across code comments and session summaries with no
single place to check what's actually left open -- consolidated here,
with concrete lists (which duplex-majus+ saints still need a Lauds
psalmody override, which already-authored Benedictus antiphons are
unverified against Monastic 1617 vs. the Roman rite they may have
actually been sourced from) rather than vague pointers.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>