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>
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>
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>
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>
New data/propers/temporal/*.yml and propers/index.ts's getTemporalProper,
mirroring the existing common-propers store. Populated with all 52
distinct Sunday collects for the full liturgical year (Advent 1-4, the
Christmas-octave Sunday, Epiphany 1-6, Septuagesima-tide, Lent 1-4 +
Passion + Palm Sunday, the 8 Paschal-time Sundays through Pentecost, and
post-Pentecost 1-24), each verified against the real Monastic Tridentinum
1617 engine.
Keyed Pentecost/offset-based ("post-pentecost-N-collect"), not
Trinity-counted — that's a display choice for calendar/day-label.ts, kept
independent of this content's storage identity. 8 of the 52 needed to be
read directly from the reference engine's source files plus its standard
closing-formula macros, since a real saint outranks those particular
Sundays on every candidate year checked and a live date query would only
ever return the saint's own collect.