diff --git a/src/calendar/day-label.ts b/src/calendar/day-label.ts index 70a4ee9..8067f70 100644 --- a/src/calendar/day-label.ts +++ b/src/calendar/day-label.ts @@ -25,7 +25,7 @@ import type { FeastClass, LiturgicalDay, TemporalCategory, Weekday } from './typ import { easterSunday } from './easter'; import { adventStart, firstSundayStrictlyAfter, sundayOnOrBefore } from './temporal'; import { addDays, daysBetween, toIsoDate } from './date-math'; -import { getTemporalFeastRecord } from './temporal-feasts'; +import { getTemporalFeastRecord, movableTemporalFeasts } from './temporal-feasts'; import { activeOctavesFor, octaveGoverningPrivilegedDay, resolveActiveOctave, type ActiveOctave } from './octaves'; import { resolveTemporalId } from './temporal-id'; @@ -334,6 +334,29 @@ function trinitytideOverrideLabel(day: LiturgicalDay): Bi | undefined { return undefined; } +/** + * Which Easter-anchored movable-feast record's own `anchor` date exactly + * matches `isoDate`, independent of who actually won that day — + * `calendar/movable-feasts.ts`'s `applyMovableFeasts` runs this same + * match to decide `day.winner`, but `temporalLabel` deliberately doesn't + * consult `day.winner` at all (see its own doc comment), so a caller that + * only has a plain temporal identity in mind (a saint's own commemoration + * line naming what they displaced, `hours/matins.ts`'s `occasionName`) + * needs this same lookup done independently. Scoped to `{kind: 'easter'}` + * anchors only — the other anchor kinds (`nth-sunday-of-month`, etc.) + * have no caller here yet; extend if one needs it. + */ +function easterAnchoredFeastFor(isoDate: string): ReturnType { + const year = Number(isoDate.slice(0, 4)); + const easter = toIsoDate(easterSunday(year)); + for (const feast of movableTemporalFeasts()) { + if (feast.anchor?.kind === 'easter' && addDays(easter, feast.anchor.offset) === isoDate) { + return feast; + } + } + return undefined; +} + /** The plain temporal/Sunday-or-feria name only (ordinal week/season * phrasing, e.g. "The Twenty-fourth Sunday after Pentecost"), independent of * who actually won the day — i.e. what the day would be called if the @@ -367,12 +390,27 @@ export function temporalLabel(day: LiturgicalDay): Bi { : bi(`${weekdayName.en} in ${name.en} week`, `${weekdayName.la} in ${name.la}`); } } - // No ordinal convention modeled for this season (Passiontide, - // Ascensiontide, Pentecost, Christmastide, the Corpus-Christi/Sacred- - // Heart single-day seasons) — their few days mostly have their own - // proper names rather than ordinal counting, so this fallback is - // expected to be seen, not a gap to fill later. No authored Latin - // season name exists for these yet, so `la` falls back to the same + // Passiontide: every one of the 14 days from Passion Sunday through + // Holy Saturday now has its own real temporal-feasts record (fixed + // 2026-09-06 — see calendar/movable-feasts.ts's Passiontide override + // doc comment), found here independent of `day.winner` via + // `easterAnchoredFeastFor`, the same way `resolveTemporalId` above is + // used independent of the winner for Septuagesima-tide. This must run + // before the generic seasonName fallback below, which is what used to + // render every single one of these 14 days as an undifferentiated + // "Weekday in Passiontide". + if (day.season === 'passiontide') { + const feast = easterAnchoredFeastFor(day.date); + if (feast) { + return biName(feast.name, feast.nameLa); + } + } + // No ordinal convention modeled for this season (Ascensiontide, + // Pentecost, Christmastide, the Corpus-Christi/Sacred-Heart single-day + // seasons) — their few days mostly have their own proper names rather + // than ordinal counting, so this fallback is expected to be seen, not + // a gap to fill later. No authored Latin season name exists for these + // yet, so `la` falls back to the same // English season word. const seasonName = capitalize(day.season.replace(/-/g, ' ')); return bi(`${weekdayName.en} in ${seasonName}`, `${weekdayName.la} in ${seasonName}`); @@ -551,9 +589,21 @@ function collectCommemorations( // at it. Shown via the same plain, rank-free `temporalLabel` a // winning Sunday would use for itself. if (c.id !== temporalId) { + // Ember days first (their own separate small lookup, pre-dating + // this one), then any other named temporal identity with a real + // `temporal-feasts` record (a Passiontide day, a Vigil, ...) — + // added 2026-09-06: found via live-checking St. Gabriel/the + // Annunciation winning outright on a Passiontide feria that a + // commemoration should still surface a real name for the + // commemorated feria couldn't correctly appear at all (this + // branch previously only recognized Ember days, silently + // dropping every other named temporal commemoration). const emberName = emberDayLabel(c.id); + const feast = emberName ? undefined : getTemporalFeastRecord(c.id); if (emberName) { temporal.push(emberName); + } else if (feast) { + temporal.push(biName(feast.name, feast.nameLa)); } } else if (day.weekday === 'sunday') { temporal.push(temporalLabel(day)); diff --git a/src/data/calendar/temporal-feasts/friday-passion-week.yml b/src/data/calendar/temporal-feasts/friday-passion-week.yml new file mode 100644 index 0000000..96aa27e --- /dev/null +++ b/src/data/calendar/temporal-feasts/friday-passion-week.yml @@ -0,0 +1,29 @@ +# See monday-passion-week.yml for the full rationale (same batch of six +# files closing the same gap: every feria of Passion week previously fell +# back wholesale to `passion-sunday`'s own collect/antiphons). Read from +# web/www/horas/Latin/Tempora/Quad5-5.txt's [Officium]/[Rank] header -- +# `rank` omitted for the same reason as its siblings. +# +# NOTE on a name collision in the *reference engine's own raw file*, not +# in this app: Quad5-5.txt's own [Officium]/[Rank]/[Oratio] there are +# actually "Septem Dolorum Beatæ Mariæ Virginis" (Duplex majus) -- the +# Seven Sorrows devotion historically sits on this exact date in several +# post-1913 calendars. But live-querying this app's own structural source, +# Monastic Tridentinum 1617 (see CLAUDE.md's "Not a reconstruction" +# section), for a real Friday-of-Passion-week date shows a plain +# unadorned "Feria Sexta infra Hebdomadam Passionis ~ Feria major" with no +# Seven Sorrows commemoration at all -- Monastic 1617 predates that +# addition. This app also has no Seven Sorrows content authored anywhere +# else yet (`src/data/calendar/temporal-feasts/`, +# `src/data/propers/temporal/` -- checked, and TODO.md has no note of it), +# so there is no live collision to resolve right now, only a +# reference-file-level naming coincidence worth flagging for whoever +# eventually authors that devotion: it would need its own occurrence rule +# (an alternate track's Duplex-majus override on this same date) layered +# on top of, not merged into, this plain ferial identity. +id: friday-passion-week +name: "Friday of Passion Week" +nameLa: "Feria Sexta infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -9 diff --git a/src/data/calendar/temporal-feasts/good-friday.yml b/src/data/calendar/temporal-feasts/good-friday.yml new file mode 100644 index 0000000..7d788fd --- /dev/null +++ b/src/data/calendar/temporal-feasts/good-friday.yml @@ -0,0 +1,18 @@ +# See monday-holy-week.yml / maundy-thursday.yml for the full rationale. +# Read from web/www/horas/Latin/Tempora/Quad6-5.txt's untagged/default +# [Officium]/[Rank] blocks -- "Feria Sexta in Parasceve" / "Feria +# privilegiata Duplex I classis;;7" (the "(rubrica 1955 aut rubrica 196)" +# variant renames it "Feria Sexta in Passione et Morte Domini" -- +# 1955/1960-reform text this project deliberately doesn't follow, see +# CLAUDE.md's pre-1955 calendar/rubrics note). "Parasceve" (Greek for +# "preparation [day]") is the source's own pre-1955 title; "Good Friday" +# is the standard traditional English name, not a literal translation of +# it. `rank: duplex-1-classis` per the same real FeastClass-shaped source +# tag as Maundy Thursday. +id: good-friday +name: "Good Friday" +nameLa: "Feria Sexta in Parasceve" +rank: duplex-1-classis +anchor: + kind: easter + offset: -2 diff --git a/src/data/calendar/temporal-feasts/holy-saturday.yml b/src/data/calendar/temporal-feasts/holy-saturday.yml new file mode 100644 index 0000000..dc1c92d --- /dev/null +++ b/src/data/calendar/temporal-feasts/holy-saturday.yml @@ -0,0 +1,21 @@ +# See monday-holy-week.yml / maundy-thursday.yml for the full rationale. +# Read from web/www/horas/Latin/Tempora/Quad6-6.txt's [Officium]/[Rank] -- +# "Sabbato Sancto" / "Feria privilegiata Duplex I classis;;7". "Sabbato +# Sancto" (ablative, "on Holy Saturday") is the source's own title; +# `nameLa` here is given as the nominative noun phrase "Sabbatum Sanctum" +# per this project's own naming convention (see ascension.yml's note on +# preferring nominative over the source's prepositional/case-inflected +# style). `rank: duplex-1-classis` per the same real FeastClass-shaped +# source tag as Maundy Thursday/Good Friday. Unlike its five siblings +# here, this record's own evening has no ordinary Vespers of its own at +# all to worry about overriding -- see holy-saturday-collect.yml's note +# (live-confirmed "Vespera de sequenti": Easter Sunday's own First +# Vespers governs this evening outright, same shape as +# saturday-passion-week.yml's own precedent one week earlier). +id: holy-saturday +name: "Holy Saturday" +nameLa: "Sabbatum Sanctum" +rank: duplex-1-classis +anchor: + kind: easter + offset: -1 diff --git a/src/data/calendar/temporal-feasts/maundy-thursday.yml b/src/data/calendar/temporal-feasts/maundy-thursday.yml new file mode 100644 index 0000000..c8f528e --- /dev/null +++ b/src/data/calendar/temporal-feasts/maundy-thursday.yml @@ -0,0 +1,19 @@ +# See monday-holy-week.yml for the full rationale (same batch of six +# files closing the same "Holy Week ferias fall back to Palm Sunday's +# collect" gap). Read from web/www/horas/Latin/Tempora/Quad6-4.txt's +# [Officium]/[Rank] header -- "Feria Quinta in Cena Domini" / "Feria +# privilegiata Duplex I classis;;7" -- an explicit, real FeastClass-shaped +# rank unlike Monday/Tuesday/Wednesday's plain "Feria privilegiata;;6.9", +# so `rank: duplex-1-classis` is set here (matching ascension.yml's own +# Duplex I classis precedent), even though `privileged-feria-major` +# already makes this day unlosable regardless. English name "Maundy +# Thursday" is the standard traditional English title (from "mandatum", +# the day's own Gospel/Mandatum ceremony, John 13:34) rather than a +# literal translation of the Latin. +id: maundy-thursday +name: "Maundy Thursday" +nameLa: "Feria Quinta in Cena Domini" +rank: duplex-1-classis +anchor: + kind: easter + offset: -3 diff --git a/src/data/calendar/temporal-feasts/monday-holy-week.yml b/src/data/calendar/temporal-feasts/monday-holy-week.yml new file mode 100644 index 0000000..5405667 --- /dev/null +++ b/src/data/calendar/temporal-feasts/monday-holy-week.yml @@ -0,0 +1,37 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-1.txt, +# untagged/default [Officium]/[Rank] blocks -- "Feria Secunda Majoris +# Hebdomadæ" / "Feria privilegiata;;6.9" (the "(rubrica 1955 aut rubrica +# 196)" variant renames it "Feria Secunda Hebdomadæ Sanctæ" and reranks it +# ";;7" -- 1955/1960-reform text this project deliberately doesn't follow, +# see CLAUDE.md's pre-1955 calendar/rubrics note). Previously not modeled +# as its own record: `resolveTemporalId` (temporal-id.ts) has no explicit +# entry for any offset between Palm Sunday (-7) and Easter (0), so every +# feria of Holy Week fell back wholesale to Palm Sunday's own +# collect/antiphons -- exactly the same gap the existing +# monday-passion-week.yml (and its 5 siblings) already closed for Passion +# week, one week earlier; this file (and its 5 siblings here) closes the +# same gap for Holy Week, via the same mechanism +# (`calendar/movable-feasts.ts`'s anchor-based override, +# `resolve-common.ts`'s `ALWAYS_OVERRIDE_TEMPORAL_IDS`/ +# `getTemporalProperWithFallback`). Live-verified (`resolveDay`, +# 2026-03-23, the Passion-week analogue) that this pattern correctly +# produces a `winner.id` of this file's own id plus one `commemorations` +# entry for the day it displaces (Palm Sunday here, Passion Sunday there) +# -- not a bug, the same accepted shape Passion week's own six records +# already ship. +# +# `rank` omitted on purpose, same reasoning as monday-passion-week.yml's +# own "Feria major": this source's own "Feria privilegiata" tag isn't a +# FeastClass-shaped rank either, so `calendar/movable-feasts.ts`'s +# `applyMovableFeasts` defaults it to `simplex` for the rank-contest +# branch (a real Duplex+ saint would still be structurally *possible* to +# win here on that default) -- but `calendar/types.ts`'s own +# `privileged-feria-major` category (already covering Palm Sunday through +# Low Sunday, confirmed 2026-09-01) makes that contest moot in practice: +# nothing is ever commemorated against Holy Week regardless. +id: monday-holy-week +name: "Monday of Holy Week" +nameLa: "Feria Secunda Majoris Hebdomadæ" +anchor: + kind: easter + offset: -6 diff --git a/src/data/calendar/temporal-feasts/monday-passion-week.yml b/src/data/calendar/temporal-feasts/monday-passion-week.yml new file mode 100644 index 0000000..0db3e98 --- /dev/null +++ b/src/data/calendar/temporal-feasts/monday-passion-week.yml @@ -0,0 +1,32 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad5-1.txt +# ([Officium]/[Rank] header: "Feria Secunda infra Hebdomadam Passionis" / +# "Feria major" -- not a FeastClass-shaped rank at all, just a plain +# privileged feria, so `rank` is deliberately omitted below, same +# reasoning as every other day in this six-file batch). Previously not +# modeled as its own record: `resolveTemporalId` already carves out +# Passiontide as its own season, but every feria from Monday through +# Saturday of Passion week fell back to reusing `passion-sunday`'s own +# collect/antiphons wholesale (see `resolve-common.ts`'s +# `ALWAYS_OVERRIDE_TEMPORAL_IDS` and ``getTemporalProperWithFallback`` for +# the mechanism this record now plugs into) -- this file (and its five +# siblings) gives the day a real identity of its own instead. +# +# `rank` omitted on purpose (see calendar/types.ts's `FeastClass` -- +# "Feria major" has no equivalent tier): `calendar/movable-feasts.ts`'s +# `applyMovableFeasts` defaults an anchor record with no `rank` to +# `simplex`, which is exactly the right behavior here -- on the ordinary +# case (no real sanctoral winner yet, i.e. `resolvedWinner.kind === +# 'temporal'`), this record unconditionally takes over as the day's +# identity; on the rare case a real Duplex+ saint already outranks a +# privileged Lenten feria (the separate, pre-existing threshold in +# `calendar/commemorations.ts`), that saint still wins the rank contest +# here too and this record is demoted to a mere commemoration, leaving +# existing precedence behavior for Passion week completely unchanged. +id: monday-passion-week +name: "Monday of Passion Week" +# Nominative form of the reference engine's own title, matching this +# app's naming convention (see ascension.yml's own note on this). +nameLa: "Feria Secunda infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -13 diff --git a/src/data/calendar/temporal-feasts/palm-sunday.yml b/src/data/calendar/temporal-feasts/palm-sunday.yml new file mode 100644 index 0000000..eb08053 --- /dev/null +++ b/src/data/calendar/temporal-feasts/palm-sunday.yml @@ -0,0 +1,16 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-0.txt, +# untagged/default [Officium]/[Rank] blocks -- "Dominica in Palmis" / +# "I classis Semiduplex". `resolveTemporalId` (temporal-id.ts) already +# produces this exact id for this Sunday on its own -- `anchor` here +# changes nothing `applyMovableFeasts` does (the id it'd assign is already +# this same string), but lets `calendar/day-label.ts`'s +# `easterAnchoredFeastFor` find this record too, the same plain-temporal- +# identity lookup used for the other 13 Passiontide days (independent of +# `day.winner`) — added 2026-09-06. +id: palm-sunday +name: "Palm Sunday" +nameLa: "Dominica in Palmis" +rank: semiduplex +anchor: + kind: easter + offset: -7 diff --git a/src/data/calendar/temporal-feasts/passion-sunday.yml b/src/data/calendar/temporal-feasts/passion-sunday.yml new file mode 100644 index 0000000..f0ddc25 --- /dev/null +++ b/src/data/calendar/temporal-feasts/passion-sunday.yml @@ -0,0 +1,22 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad5-0.txt, +# untagged/default [Officium]/[Rank] blocks -- "Dominica de Passione" / +# "I classis Semiduplex" (the "(rubrica 1955 aut rubrica 1960)" variant +# renames it "Dominica I Passionis" -- 1955/1960-reform text this project +# deliberately doesn't follow, see CLAUDE.md's pre-1955 calendar/rubrics +# note). `resolveTemporalId` (temporal-id.ts) already produces this exact +# id for this Sunday on its own -- `anchor` here changes nothing +# `applyMovableFeasts` does (the id it'd assign is already this same +# string), but lets `calendar/day-label.ts`'s `easterAnchoredFeastFor` +# find this record too, the same plain-temporal-identity lookup used for +# the other 13 Passiontide days (independent of `day.winner`) — added +# 2026-09-06. +id: passion-sunday +name: "Passion Sunday" +# Ablative-of-respect construction, "the Sunday of/about the Passion" -- +# the reference engine's own nominative title, already a complete noun +# phrase. +nameLa: "Dominica de Passione" +rank: semiduplex +anchor: + kind: easter + offset: -14 diff --git a/src/data/calendar/temporal-feasts/saturday-passion-week.yml b/src/data/calendar/temporal-feasts/saturday-passion-week.yml new file mode 100644 index 0000000..f2b00a0 --- /dev/null +++ b/src/data/calendar/temporal-feasts/saturday-passion-week.yml @@ -0,0 +1,24 @@ +# See monday-passion-week.yml for the full rationale (same batch of six +# files closing the same gap: every feria of Passion week previously fell +# back wholesale to `passion-sunday`'s own collect/antiphons). Read from +# web/www/horas/Latin/Tempora/Quad5-6.txt's [Officium]/[Rank] header +# ("Sabbato infra Hebdomadam Passionis" / "Feria major" -- `rank` omitted +# for the same reason as its siblings). +# +# NOTE: this record still gives the day its own Lauds identity (collect, +# Benedictus antiphon), but deliberately has no +# `saturday-passion-week-magnificat-antiphon.yml` sibling -- live-querying +# Vespers on a real Saturday-of-Passion-week date (Monastic Tridentinum +# 1617) shows "Vespera de sequenti" with no commemoration of the feria at +# all: Palm Sunday (Semiduplex I classis) always outranks this plain feria +# and anticipates Second Vespers outright, exactly like every other +# Saturday-into-Sunday transition. There is no historically real, separate +# "Second Vespers of this Saturday" text to author -- the existing +# `palm-sunday-magnificat-antiphon.yml` is already the correct, and only, +# answer for this evening. +id: saturday-passion-week +name: "Saturday of Passion Week" +nameLa: "Sabbato infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -8 diff --git a/src/data/calendar/temporal-feasts/spy-wednesday.yml b/src/data/calendar/temporal-feasts/spy-wednesday.yml new file mode 100644 index 0000000..1ff689f --- /dev/null +++ b/src/data/calendar/temporal-feasts/spy-wednesday.yml @@ -0,0 +1,18 @@ +# See monday-holy-week.yml for the full rationale (same batch of six +# files closing the same "Holy Week ferias fall back to Palm Sunday's +# collect" gap). Read from +# web/www/horas/Latin/Tempora/Quad6-3.txt's [Officium]/[Rank] header +# ("Feria Quarta Majoris Hebdomadæ" / "Feria privilegiata;;6.9" -- `rank` +# omitted for the same reason as its siblings). English name "Spy +# Wednesday" is the traditional English title for this day (commemorating +# Judas's bargain to betray Christ, Matt 26:14-16, read as this day's own +# Gospel) rather than a literal translation of the Latin -- kept per +# direct instruction over a plain "Wednesday of Holy Week" for its +# historical resonance; `nameLa` keeps the source's own literal Latin +# title. +id: spy-wednesday +name: "Spy Wednesday" +nameLa: "Feria Quarta Majoris Hebdomadæ" +anchor: + kind: easter + offset: -4 diff --git a/src/data/calendar/temporal-feasts/thursday-passion-week.yml b/src/data/calendar/temporal-feasts/thursday-passion-week.yml new file mode 100644 index 0000000..0a8253d --- /dev/null +++ b/src/data/calendar/temporal-feasts/thursday-passion-week.yml @@ -0,0 +1,12 @@ +# See monday-passion-week.yml for the full rationale (same batch of six +# files closing the same gap: every feria of Passion week previously fell +# back wholesale to `passion-sunday`'s own collect/antiphons). Read from +# web/www/horas/Latin/Tempora/Quad5-4.txt's [Officium]/[Rank] header +# ("Feria Quinta infra Hebdomadam Passionis" / "Feria major" -- `rank` +# omitted for the same reason as its sibling). +id: thursday-passion-week +name: "Thursday of Passion Week" +nameLa: "Feria Quinta infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -10 diff --git a/src/data/calendar/temporal-feasts/tuesday-holy-week.yml b/src/data/calendar/temporal-feasts/tuesday-holy-week.yml new file mode 100644 index 0000000..9181b89 --- /dev/null +++ b/src/data/calendar/temporal-feasts/tuesday-holy-week.yml @@ -0,0 +1,13 @@ +# See monday-holy-week.yml for the full rationale (same batch of six +# files closing the same "Holy Week ferias fall back to Palm Sunday's +# collect" gap Passion week's own six records already closed for the week +# before). Read from web/www/horas/Latin/Tempora/Quad6-2.txt's +# [Officium]/[Rank] header ("Feria Tertia Majoris Hebdomadæ" / "Feria +# privilegiata;;6.9" -- `rank` omitted for the same reason as its +# sibling). +id: tuesday-holy-week +name: "Tuesday of Holy Week" +nameLa: "Feria Tertia Majoris Hebdomadæ" +anchor: + kind: easter + offset: -5 diff --git a/src/data/calendar/temporal-feasts/tuesday-passion-week.yml b/src/data/calendar/temporal-feasts/tuesday-passion-week.yml new file mode 100644 index 0000000..da905a6 --- /dev/null +++ b/src/data/calendar/temporal-feasts/tuesday-passion-week.yml @@ -0,0 +1,12 @@ +# See monday-passion-week.yml for the full rationale (same batch of six +# files closing the same gap: every feria of Passion week previously fell +# back wholesale to `passion-sunday`'s own collect/antiphons). Read from +# web/www/horas/Latin/Tempora/Quad5-2.txt's [Officium]/[Rank] header +# ("Feria Tertia infra Hebdomadam Passionis" / "Feria major" -- `rank` +# omitted for the same reason as its sibling). +id: tuesday-passion-week +name: "Tuesday of Passion Week" +nameLa: "Feria Tertia infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -12 diff --git a/src/data/calendar/temporal-feasts/vigil-of-christmas.yml b/src/data/calendar/temporal-feasts/vigil-of-christmas.yml new file mode 100644 index 0000000..6cfcb5d --- /dev/null +++ b/src/data/calendar/temporal-feasts/vigil-of-christmas.yml @@ -0,0 +1,13 @@ +# Read from the reference engine: Sancti/12-24.txt's own [Officium]/[Rank] +# -- "In Vigilia Nativitatis Domini" / "Duplex I classis". This id already +# wins Dec 24 unconditionally (calendar/temporal-id.ts's own fixed-date +# carve-out, see that file's header), so this record isn't what makes it +# win -- found missing during a broader audit of every +# ALWAYS_OVERRIDE_TEMPORAL_IDS entry's display coverage: without it, +# calendar/day-label.ts's `namedFeast` branch has nothing to look up and +# Dec 24 falls through to the same generic "Weekday in Christmastide/ +# Advent" phrasing Passiontide's own days did before this pass. +id: vigil-of-christmas +name: "Vigil of Christmas" +nameLa: "Vigilia Nativitatis Domini" +rank: duplex-1-classis diff --git a/src/data/calendar/temporal-feasts/wednesday-passion-week.yml b/src/data/calendar/temporal-feasts/wednesday-passion-week.yml new file mode 100644 index 0000000..93528d8 --- /dev/null +++ b/src/data/calendar/temporal-feasts/wednesday-passion-week.yml @@ -0,0 +1,12 @@ +# See monday-passion-week.yml for the full rationale (same batch of six +# files closing the same gap: every feria of Passion week previously fell +# back wholesale to `passion-sunday`'s own collect/antiphons). Read from +# web/www/horas/Latin/Tempora/Quad5-3.txt's [Officium]/[Rank] header +# ("Feria Quarta infra Hebdomadam Passionis" / "Feria major" -- `rank` +# omitted for the same reason as its sibling). +id: wednesday-passion-week +name: "Wednesday of Passion Week" +nameLa: "Feria Quarta infra Hebdomadam Passionis" +anchor: + kind: easter + offset: -11 diff --git a/src/data/propers/nocturn-readings/ascension.yml b/src/data/propers/nocturn-readings/ascension.yml new file mode 100644 index 0000000..a555040 --- /dev/null +++ b/src/data/propers/nocturn-readings/ascension.yml @@ -0,0 +1,205 @@ +# Matins nocturn content for Ascension Thursday (temporalId ascension, +# Duplex I classis cum Octava). Sourced from Tempora/Pasc5-4.txt (Latin) +# / English/Tempora/Pasc5-4.txt, and the Gospel pericope's full text from +# missa/Latin+English/Tempora/Pasc5-4.txt's own [Evangelium] (the Matins +# file itself only gives the incipit + "Et réliqua" for Lectio7, per this +# project's Gospel/homily-split convention). +# +# The audit found this id registered in ALWAYS_OVERRIDE_TEMPORAL_IDS, +# with a real collect already authored (ascension-collect.yml), but no +# antiphons or Matins reading. Ascension is a real 9-lesson, 3-nocturn +# day in the source (not one of the "1 nocturn" compressed solemnities +# like Easter/Pentecost). Nocturn 1 (Lectio1-3, Acts 1:1-14) left +# unauthored here per this project's convention of leaving Nocturn 1 +# scripture to the bible-plan store. +# +# Nocturn 2: Lectio4-6 (St. Leo the Great's own first sermon on the +# Ascension) combined into one continuous excerpt. +# Nocturn 3: the Gospel pericope (Mark 16:14-20) authored in full +# (isGospel: true), followed by Lectio7's homily portion (incipit +# dropped) combined with Lectio8-9 as one continuous excerpt of St. +# Gregory the Great's own Homily 29 on the Gospels. +id: ascension +readings: + - nocturn: 2 + isGospel: false + source: "St. Leo the Great, Pope, Sermon 1 on the Ascension of the Lord" + text: + la: >- + Post beátam et gloriósam resurrectiónem Dómini nostri Jesu Christi, qua verum Dei + templum, Judáica impietáte resolútum, divína in tríduo poténtia suscitávit, + quadragenárius hódie, dilectíssimi, sanctórum diérum explétus est númerus, + sacratíssima ordinatióne dispósitus, et ad utilitátem nostræ eruditiónis + impénsus: ut, dum a Dómino in hoc spátio mora præséntiæ corporális exténditur, + fides resurrectiónis documéntis necessáriis munirétur. Mors enim Christi multum + discipulórum corda turbáverat: et de supplício crucis, de emissióne spíritus, de + exanimáti córporis sepultúra gravátis mœstitúdine méntibus, quidam diffidéntiæ + torpor obrépserat. + + + Unde beatíssimi Apóstoli, omnésque discípuli, qui et de éxitu crucis fúerant + trépidi, et de fide resurrectiónis ambígui, ita sunt veritáte perspícua + roboráti, ut, Dómino in cælórum eúnte sublímia, non solum nulla afficeréntur + tristítia, sed étiam magno gáudio repleréntur. Et revéra magna et ineffábilis + erat causa gaudéndi, cum in conspéctu sanctæ multitúdinis super ómnium + creaturárum cæléstium dignitátem humáni géneris natúra conscénderet, + supergressúra Angélicos órdines, et ultra Archangelórum altitúdines elevánda: + nec ullis sublimitátibus modum suæ provectiónis habitúra, nisi ætérni Patris + recépta conséssu, illíus glóriæ sociarétur in throno, cujus natúræ copulabátur + in Fílio. + + + Quia ígitur Christi ascénsio, nostra provéctio est; et quo præcéssit glória + cápitis, eo spes vocátur et córporis: dignis, dilectíssimi, exsultémus gáudiis, + et pia gratiárum actióne lætémur. Hódie enim non solum paradísi possessóres + firmáti sumus, sed étiam cælórum in Christo supérna penetrávimus: amplióra + adépti per ineffábilem Christi grátiam, quam per diáboli amiserámus invídiam. + Nam quos viruléntus inimícus primi habitáculi felicitáte dejécit, eos sibi + concorporátos Dei Fílius ad déxteram Patris collocávit: cum quo vivit et regnat + in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. Amen. + en: >- + After the blessed and glorious Resurrection of our Lord Jesus Christ, whereby + the true temple of God, cast down through Jewish impiety, was raised up again by + the divine power in three days, there is fulfilled this day, beloved, the number + of forty holy days, appointed by a most sacred ordinance, and devoted to our + profitable instruction; so that, while the Lord's bodily presence was thus + prolonged, our faith in the Resurrection might be fortified by all necessary + proofs. For the death of Christ had greatly troubled the hearts of the + disciples, and a certain sluggishness of distrust had crept over minds weighed + down with sorrow at the punishment of the cross, the giving up of the spirit, + and the burial of the lifeless body. + + + Wherefore the most blessed Apostles, and all the disciples, who had been fearful + at the outcome of the cross, and doubtful of the truth of the Resurrection, were + so strengthened by the clear evidence of the truth that, when the Lord went up + into the height of the heavens, they were affected not by sadness but rather + filled with great joy. And truly great and unspeakable was their cause for + rejoicing, when, in the sight of that holy multitude, the nature of mankind rose + up above the dignity of all heavenly creatures, destined to pass beyond the + ranks of the Angels and to be raised higher than the Archangels themselves: nor + would it find any limit to its ascent, save by being received into the + fellowship of the eternal Father, sharing His throne in that same glory to which + it was joined by nature in the Person of the Son. + + + Since, then, the Ascension of Christ is our own advancement, and where the glory + of the Head has gone before, there the hope of the Body is called also: let us, + beloved, exult with fitting joy, and be glad with devout thanksgiving. For this + day we are established not only as possessors of paradise, but we have also in + Christ penetrated the very heights of the heavens, gaining more abundant gifts + through the ineffable grace of Christ than we had lost through the envy of the + devil. For those whom the venomous enemy cast down from the happiness of their + first home, these the Son of God, having made them members of His own Body, has + set at the right hand of the Father: with Whom He liveth and reigneth in the + unity of the Holy Ghost, God, world without end. Amen. + responsory: + la: "R. Non turbétur cor vestrum: ego vado ad Patrem; et cum assúmptus fúero a vobis, mittam vobis, allelúja, * Spíritum veritátis, et gaudébit cor vestrum, allelúja.\nV. Ego rogábo Patrem, et álium Paráclitum dabit vobis.\nR. Spíritum veritátis, et gaudébit cor vestrum, allelúja." + en: "R. Let not your heart be troubled: I go to the Father; and when I have been taken up from you, I will send unto you, alleluia, * the Spirit of truth, and your heart shall rejoice, alleluia.\nV. I will ask the Father, and He shall give you another Comforter.\nR. The Spirit of truth, and your heart shall rejoice, alleluia." + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: true + citation: { la: "Marc 16:14-20", en: "Mark 16:14-20" } + text: + la: >- + In illo témpore: Recumbéntibus úndecim discípulis, appáruit illis Jesus: et + exprobrávit incredulitátem eórum et durítiam cordis: quia iis, qui víderant eum + resurrexísse, non credidérunt. Et dixit eis: Eúntes in mundum univérsum, + prædicáte Evangélium omni creatúræ. Qui credíderit et baptizátus fúerit, salvus + erit: qui vero non credíderit, condemnábitur. Signa autem eos, qui credíderint, + hæc sequéntur: In nómine meo dæmónia ejícient: linguis loquentur novis: + serpentes tollent: et si mortíferum quid bíberint, non eis nocébit: super ægros + manus impónent, et bene habébunt. Et Dóminus quidem Jesus, postquam locútus est + eis, assúmptus est in cœlum, et sedet a dextris Dei. Illi autem profécti, + prædicavérunt ubíque, Dómino cooperánte et sermónem confirmánte, sequéntibus + signis. + en: >- + At that time, Jesus appeared unto the eleven disciples as they sat at table: and + he upbraided them with their incredulity and hardness of heart, because they did + not believe them who had seen him after he was risen again. And he said to them: + Go ye into the whole world, and preach the gospel to every creature. He that + believeth and is baptized, shall be saved: but he that believeth not shall be + condemned. And these signs shall follow them that believe: In my name they shall + cast out devils; they shall speak with new tongues; they shall take up + serpents; and if they shall drink any deadly thing, it shall not hurt them; they + shall lay their hands upon the sick, and they shall recover. And the Lord Jesus, + after he had spoken to them, was taken up into heaven and sitteth on the right + hand of God. But they going forth preached everywhere, the Lord working withal, + and confirming the word with signs that followed. + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: false + source: "Pope St. Gregory the Great, Homily 29 on the Gospels" + text: + la: >- + Quod resurrectiónem Domínicam discípuli tarde credidérunt, non tam illórum + infírmitas, quam nostra, ut ita dicam, futúra fírmitas fuit. Ipsa namque + resurréctio illis dubitántibus per multa arguménta monstráta est: quæ dum nos + legéntes agnóscimus, quid áliud quam de illórum dubitatióne solidámur? Minus + enim mihi María Magdaléne prǽstitit, quæ cítius crédidit, quam Thomas, qui diu + dubitávit. Ille étenim dubitándo, vúlnerum cicatríces tétigit, et de nostro + péctore dubitatiónis vulnus amputávit. + + + Ad insinuándam quoque veritátem Domínicæ resurrectiónis, notándum nobis est quid + Lucas réferat, dicens: Convéscens, præcépit eis ab Jerosólymis ne discéderent. + Et post pauca: Vidéntibus illis, elevátus est, et nubes suscépit eum ab óculis + eórum. Notáte verba, signáte mystéria. Convéscens elevátus est. Comédit, et + ascéndit: ut vidélicet per efféctum comestiónis, véritas patésceret carnis. + Marcus vero, priúsquam cælum Dóminus ascéndat, eum de cordis atque infidelitátis + durítia increpásse discípulos mémorat. Qua in re quid considerándum est, nisi + quod idcírco Dóminus tunc discípulos increpávit, cum eos corporáliter relíquit, + ut verba, quæ recédens díceret, in corde audiéntium árctius impréssa remanérent? + + + Increpáta ígitur eórum durítia, quid admonéndo dicat, audiámus: Eúntes in mundum + univérsum, prædicáte Evangélium omni creatúræ. Numquid, fratres mei, sanctum + Evangélium vel insensátis rebus, vel brutis animálibus fúerat prædicándum, ut de + eo discípulis dicátur: Prædicáte omni creatúræ? Sed omnis creatúræ nómine + signátur homo. Omnis autem creatúræ áliquid habet homo. Habet namque commúne + esse cum lapídibus, vívere cum arbóribus, sentíre cum animálibus, intellégere + cum Angelis. Si ergo commúne habet áliquid cum omni creatúra homo, juxta áliquid + omnis creatúra est homo. Omni ergo creatúræ prædicátur Evangélium, cum soli + hómini prædicátur. + en: >- + I may be allowed to say that the disciples' slowness to believe that the Lord + had indeed risen from the dead, was not so much their weakness as our strength. + In consequence of their doubts, the fact of the Resurrection was demonstrated by + many infallible proofs. These proofs we read and acknowledge. What then + assureth our faith, if not their doubt? For my part, I put my trust in Thomas, + who doubted long, much more than in Mary Magdalene, who believed at once. + Through his doubting, he came actually to handle the holes of the Wounds, and + thereby closed up any wound of doubt in our hearts. + + + To confirm to our minds the trustworthiness of the fact that our Lord did indeed + rise again from the dead, it is well for us to remark one of the statements of + Luke: "Eating together with them, He commanded them that they should not depart + from Jerusalem"; and a little afterward: "While they beheld, He was taken up, + and a cloud received Him out of their sight." Consider these words, note well + these mysteries. After "eating together with them He was taken up." He ate and + ascended: that the fact of His eating might show the reality of the Body in + Which He went up. But Mark telleth us that before the Lord ascended into + heaven, He upbraided His disciples with their unbelief and hardness of heart. + From this I know not why we should gather, but that the Lord then upbraided His + disciples, for whom He was about to be parted in the body, to the end that the + words which He spoke unto them as He left them might be the deeper imprinted on + their hearts. + + + When then He had rebuked the hardness of their heart, what command did He give + them? Let us hear. "Go ye into all the world and preach the Gospel to every + creature." Was the Holy Gospel, then, my brethren, to be preached to things + insensate, or to brute beasts, that the Lord said to His disciples, "Preach the + Gospel to every creature"? Nay, but by the words "every creature" we must + understand man, in whom are combined qualities of all creatures. Being he hath + in common with stones, life in common with trees, feeling in common with + beasts, understanding in common with angels. If, then, man hath something in + common with every creature, man is to a certain extent every creature. The + Gospel, then, if it be preached to man only, is preached to every creature. + responsory: + la: "R. Ego rogábo Patrem, et álium Paráclitum dabit vobis, * Ut máneat vobíscum in ætérnum, Spíritum veritátis, allelúja.\nV. Si enim non abíero, Paráclitus non véniet ad vos: si autem abíero, mittam eum ad vos.\nR. Ut máneat vobíscum in ætérnum, Spíritum veritátis, allelúja." + en: "R. I will pray the Father, and He shall give you another Comforter, * that He may abide with you for ever, even the Spirit of truth, alleluia.\nV. For if I go not away, the Comforter will not come unto you; but if I depart, I will send Him unto you.\nR. That He may abide with you for ever, even the Spirit of truth, alleluia." + status: { la: verified, en: verified } diff --git a/src/data/propers/nocturn-readings/christ-the-king.yml b/src/data/propers/nocturn-readings/christ-the-king.yml new file mode 100644 index 0000000..0d15f57 --- /dev/null +++ b/src/data/propers/nocturn-readings/christ-the-king.yml @@ -0,0 +1,129 @@ +# Matins nocturn content for Christ the King (temporalId christ-the-king, +# Duplex I classis, a 1925 addition -- Pius XI's "Quas Primas"). Sourced +# from Sancti/10-DU.txt (Latin) / English/Sancti/10-DU.txt (this feast's +# own real, dedicated reference-engine file, found and confirmed present +# despite being a later addition), and the Gospel pericope's full text +# from missa/Latin+English/Sancti/10-DU.txt's own [Evangelium] (the +# Matins file itself only gives the incipit + "Et réliqua" for Lectio7, +# per this project's Gospel/homily-split convention). +# +# The audit found this id registered in ALWAYS_OVERRIDE_TEMPORAL_IDS, +# with a real collect/antiphons already authored, but no Matins reading. +# Real source content for this feast's Matins was in fact found in the +# reference tree (contrary to the audit's own expectation that it might +# not exist in a pre-1955-focused reference tree) -- no draft/invented +# content was needed. Nocturn 1-2 (Lectio1-6: Col 1:3-23, then Pius XI's +# encyclical "Quas Primas" itself) left unauthored here per this +# project's convention of leaving Nocturn 1 scripture to the bible-plan +# store; Nocturn 2's own content (the encyclical excerpt) is left for a +# later pass rather than folded in here, to keep this file's Gospel+ +# homily structure consistent with the other temporal solemnities closed +# in this same sweep. +# +# Nocturn 3: the Gospel pericope (John 18:33-37) authored in full +# (isGospel: true), followed by Lectio7's homily portion (incipit +# dropped) combined with Lectio8 as one continuous excerpt of St. +# Augustine's own Tractates 51 and 115 on John. +id: christ-the-king +readings: + - nocturn: 3 + isGospel: true + citation: { la: "Joann 18:33-37", en: "John 18:33-37" } + text: + la: >- + In illo témpore: Dixit Pilátus ad Jesum: Tu es Rex Judæórum? Respóndit Jesus: A + temetípso hoc dicis, an álii dixérunt tibi de me? Respóndit Pilátus: Numquid ego + Judǽus sum? Gens tua et pontífices tradidérunt te mihi: quid fecísti? Respóndit + Jesus: Regnum meum non est de hoc mundo. Si ex hoc mundo esset regnum meum, + minístri mei útique decertárent, ut non tráderer Judǽis: nunc autem regnum meum + non est hinc. Dixit ítaque ei Pilátus: Ergo Rex es tu? Respóndit Jesus: Tu dicis, + quia Rex sum ego. Ego in hoc natus sum et ad hoc veni in mundum, ut testimónium + perhíbeam veritáti: omnis, qui est ex veritáte, audit vocem meam. + en: >- + At that time, Pilate said to Jesus: Art thou the King of the Jews? Jesus + answered: Sayest thou this thing of thyself, or have others told it thee of me? + Pilate answered: Am I a Jew? Thine own nation and the chief priests have + delivered thee to me: what hast thou done? Jesus answered: My kingdom is not of + this world. If my kingdom were of this world, my servants would certainly fight, + that I should not be delivered to the Jews: but now my kingdom is not from + hence. Pilate therefore said to him: Art thou a king, then? Jesus answered: Thou + sayest that I am a king. For this was I born, and for this came I into the + world, that I should give testimony to the truth. Every one that is of the + truth heareth my voice. + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: false + source: "St. Augustine, Bishop of Hippo, Tractates 51 and 115 on John" + text: + la: >- + Quid magnum fuit Regi sæculórum Regem fíeri hóminum? Non enim Rex Israël + Christus ad exigéndum tribútum vel exércitum ferro armándum hostésque + visibíliter debellándos; sed Rex Israël, quod mentes regat, quod in ætérnum + cónsulat, quod in regnum cælórum credéntes, sperántes amantésque perdúcat. Dei + ergo Fílius æquális Patri, Verbum per quod facta sunt ómnia, quod Rex esse + vóluit Israël, dignátio est, non promótio; miseratiónis indícium est, non + potestátis augméntum. Qui enim appellátus est in terra Rex Judæórum, in cælis + est Dóminus Angelórum. Sed Judæórum tantum Rex est Christus, an et géntium? + Immo et géntium. Cum enim dixísset in prophetía: Ego autem sum constitútus Rex + ab eo super Sion montem sanctum ejus, prǽdicans præcéptum Dómini: ne propter + montem Sion solis Judǽis eum regem quisquam díceret constitútum, contínuo + subjécit: Dóminus dixit ad me: Fílius meus es tu, ego hódie génui te; póstula a + me et dabo tibi gentes hereditátem tuam et possessiónem tuam términos terræ. + + + Respóndit Jesus: Regnum meum non est de hoc mundo. Si ex hoc mundo esset regnum + meum, minístri mei útique decertárent, ut non tráderer Judǽis; nunc autem + regnum meum non est hinc. Hoc est quod bonus Magíster scire nos vóluit; sed + prius nobis demonstránda fúerat vana hóminum de regno ejus opínio, sive géntium, + sive Judæórum a quibus id Pilátus audíerat: quasi proptérea morte fuísset + plecténdus, quod illícitum affectáverit regnum, vel quóniam solent regnatúris + invidére regnántes, et vidélicet cavéndum erat ne ejus regnum sive Románis, sive + Judǽis esset advérsum. Póterat autem Dóminus quod ait, Regnum meum non est de + hoc mundo, ad primam interrogatiónem prǽsidis respondére, ubi ei dixit, Tu es + rex Judæórum? sed eum vicíssim intérrogans, utrum hoc a semetípso díceret, an + audísset ab áliis, illo respondénte osténdere vóluit hoc sibi apud illum fuísse + a Judǽis velut crimen objéctum: patefáciens nobis cogitatiónes hóminum, quas + ipse nóverat, quóniam vanæ sunt; eísque post responsiónem Piláti, jam Judǽis et + géntibus opportúnius aptiúsque respóndens, Regnum meum non est de hoc mundo. + en: >- + What great matter was it for the King of all worlds to become King of men? For + Christ was not King of Israel for exacting of tribute, or arming a host with the + sword, and visibly subduing enemies: but King of Israel that he should rule + minds, that he should counsel for eternity, that he should bring unto the + kingdom of heaven them that believe, hope, and love. Being then, Son of God, the + Word by whom all things were made, that it should be his will to be King of + Israel is condescension, not preferment, a betokening of mercy, not an + increasing of power. For he who was called on earth King of the Jews is in + heaven Lord of the Angels. But is Christ King of the Jews only, or also King of + the Gentiles? Yea, of the Gentiles also. For when he said in the prophecy: But I + am set by him as King upon Sion his holy mountain, preaching the precepts of the + Lord, lest on account of the Mount Sion, any should say that he was set as King + only of the Jews, he hath straightway subjoined: The Lord hath said unto me, + Thou art my Son: this day I have begotten thee. Ask of me, and I shall give thee + the heathen for thy inheritance, and the uttermost parts of the earth for thy + possession. + + + Jesus answered: My kingdom is not of this world: if my kingdom were of this + world, then would my servants fight, that I should not be delivered to the + Jews; but now is my kingdom not from hence. This it is which was the will of our + Good Master that we should know: but first we were to be shown the vanity of + the opinion concerning his kingdom, entertained by men, whether Gentiles or + Jews, from whom Pilate had heard that: as if the reason why he must be punished + by death, were that he had affected a kingdom to which he had no right; or + because the reigning are wont to look with an evil eye upon those destined to + reign; and there were indeed need to beware lest his kingdom should be adverse + either to the Romans or the Jews. Now the Lord might have answered at once, My + kingdom is not from hence, to the first question put by the Governor, Art thou + the King of the Jews? But in putting a question in return, namely, whether he + spake this of himself, or had been told it by others, it was his will to show by + Pilate's reply that this had been laid up to him as a crime by the Jews in their + conference with the Governor: thus laying open to us the thoughts of men, which + he knew, that they are vain; and to them, after Pilate's answer, making a reply + which was more reasonable and suitable both to Jews and to Gentiles: My kingdom + is not of this world. + responsory: + la: "R. Factum est regnum hujus mundi Dómini nostri et Christi ejus: * Et regnábit in sǽcula sæculórum.\nV. Adorábunt in conspéctu ejus univérsæ famíliæ géntium; quóniam Dómini est regnum.\nR. Et regnábit in sǽcula sæculórum." + en: "R. The kingdom of this world has become the kingdom of our Lord, and of his Christ: * and he shall reign for ever and ever.\nV. All the families of the nations shall bow down before him; for dominion is the Lord's.\nR. And he shall reign for ever and ever." + status: { la: verified, en: verified } diff --git a/src/data/propers/nocturn-readings/corpus-christi.yml b/src/data/propers/nocturn-readings/corpus-christi.yml new file mode 100644 index 0000000..1131640 --- /dev/null +++ b/src/data/propers/nocturn-readings/corpus-christi.yml @@ -0,0 +1,208 @@ +# Matins nocturn content for Corpus Christi (temporalId corpus-christi, +# Duplex I classis cum Octava). Sourced from Tempora/Pent01-4.txt (Latin) +# / English/Tempora/Pent01-4.txt, and the Gospel pericope's full text from +# missa/Latin/Tempora/Pent01-4.txt's own [Evangelium] / missa/English's +# same (the Matins file itself only gives the incipit + "Et réliqua" for +# Lectio7, per this project's Gospel/homily-split convention of sourcing +# the full pericope from the Mass propers rather than leaving it bare). +# +# The audit found this id registered in ALWAYS_OVERRIDE_TEMPORAL_IDS but +# never authored at all -- Corpus Christi is a real 9-lesson, 3-nocturn +# day in the source (not one of the "1 nocturn" compressed solemnities +# like Easter/Pentecost), so all three nocturns carry real, distinct +# content there; Nocturn 1 (Lectio1-3, 1 Cor 11:20-32) is left +# unauthored here per this project's convention of leaving Nocturn 1 +# scripture to the bible-plan store rather than this file. +# +# Nocturn 2: Lectio4-6 (St. Thomas Aquinas's own sermon for this feast, +# Opusculum 57) combined into one continuous excerpt. +# Nocturn 3: the Gospel pericope (John 6:56-59) authored in full +# (isGospel: true), followed by Lectio7's homily portion (incipit +# dropped) combined with Lectio8-9 as one continuous excerpt of St. +# Augustine's Tractate 26 on John. +id: corpus-christi +readings: + - nocturn: 2 + isGospel: false + source: "St. Thomas Aquinas, Sermon for Corpus Christi (Opusculum 57)" + text: + la: >- + Imménsa divínæ largitátis benefícia, exhíbita pópulo christiáno, inæstimábilem ei + cónferunt dignitátem. Neque enim est, aut fuit aliquándo tam grandis nátio, quæ + hábeat deos appropinquántes sibi, sicut adest nobis Deus noster. Unigénitus + síquidem Dei Fílius, suæ divinitátis volens nos esse partícipes, natúram nostram + assúmpsit, ut hómines deos fáceret factus homo. Et hoc ínsuper, quod de nostro + assúmpsit, totum nobis cóntulit ad salútem. Corpus namque suum pro nostra + reconcilatióne in ara crucis hóstiam óbtulit Deo Patri, sánguinem suum fudit in + prétium simul et lavácrum; ut redémpti a miserábili servitúte, a peccátis ómnibus + mundarémur. Ut autem tanti benefícii jugis in nobis manéret memória, corpus suum + in cibum, et sánguinem suum in potum, sub spécie panis et vini suméndum + fidélibus derelíquit. + + + O pretiósum et admirándum convívium, salutíferum et omni suavitáte replétum! + Quid enim hoc convívio pretiósius esse potest? in quo non carnes vitulórum et + hircórum, ut olim in lege, sed nobis Christus suméndus propónitur verus Deus. + Quid hoc Sacraménto mirabílius? In ipso namque panis et vinum in Christi corpus + et sánguinem substantiáliter convertúntur; ideóque Christus, Deus et homo + perféctus, sub módici panis et vini spécie continétur. Manducátur ítaque a + fidélibus, sed mínime lacerátur; quinímmo, divíso Sacraménto, sub quálibet + divisiónis partícula ínteger persevérat. Accidéntia autem sine subjécto in eódem + subsístunt, ut fides locum hábeat, dum visíbile invisibíliter súmitur aliéna spécie + occultátum; et sensus a deceptióne reddántur immúnes, qui de accidéntibus + júdicant sibi notis. + + + Nullum étiam sacraméntum est isto salúbrius, quo purgántur peccáta, virtútes + augéntur, et mens ómnium spirituálium charísmatum abundántia impinguátur. + Offértur in Ecclésia pro vivis et mórtuis, ut ómnibus prosit, quod est pro salúte + ómnium institútum. Suavitátem dénique hujus Sacraménti nullus exprímere súfficit, + per quod spirituális dulcédo in suo fonte gustátur; et recólitur memória illíus, + quam in sua passióne Christus monstrávit, excellentíssimæ caritátis. Unde, ut + árctius hujus caritátis imménsitas fidélium córdibus infigerétur, in última cena, + quando Pascha cum discípulis celebráto, transitúrus erat de hoc mundo ad Patrem, + hoc Sacraméntum instítuit, tamquam passiónis suæ memoriále perénne, figurárum + véterum impletívum, miraculórum ab ipso factórum máximum; et de sua contristátis + abséntia solátium singuláre relíquit. + en: >- + The immeasurable benefits, which the goodness of God hath bestowed on Christian + people, have conferred on them also a dignity beyond all price. For what nation + is there so great, who hath gods so nigh unto them, as the Lord, our God, is unto + us? The Only-begotten Son of God, being pleased to make us partakers of the + Divine nature, took our nature upon Him, being Himself made Man that He might + make men gods. And all, as much of ours as He took, He applied to our salvation. + On the Altar of the Cross He offered up His Body to God the Father as a sacrifice + for our reconciliation; He shed His Blood as the price whereby He redeemeth us + from wretchedness and bondage, and the washing whereby He cleanseth us from all + sin. And for a noble and abiding memorial of that so great work of His goodness, + He hath left unto His faithful ones the Same His very Body for Meat, and the Same + His very Blood for Drink, to be fed upon under the appearance of bread and wine. + + + How precious a thing then, how marvelous, how health-giving, how furnished with + all dainties, is the Supper of the Lord! Than His Supper can anything be more + precious? Therein there is put before us for meat, not, as of old time, the flesh + of bulls and of goats, but Christ Himself, our very God. Than this Sacrament can + anything be more marvelous? Therein it cometh to pass that bread and wine are + bread and wine no more, but in the stead thereof there is the Body and there is + the Blood of Christ; that is to say, Christ Himself, Perfect God and Perfect Man, + is there, under the appearance of a little bread and wine. His faithful ones eat + Him, but He is not mangled; nay, when this Sacrament is broken, in each broken + piece thereof remaineth whole Christ Himself, Perfect God and Perfect Man. All + that the senses can reach in this Sacrament abide of bread and wine, but the + Thing is not bread and wine. And thus room is left for faith; Christ is here + taken and received not only unseen, but seeming to be bread and wine, and the + senses, which judge by the wonted look, are warranted against error. + + + Than this Sacrament can anything be more health-giving? Thereby are sins purged + away, strength renewed, and the soul fed upon the fatness of spiritual gifts. + This Supper is offered up in the Church both for the quick and the dead; it was + ordained to the health of all, and all get the good of it. Than this Sacrament + can anything be more furnished with dainties? The glorious sweetness thereof is + of a truth such that no man can fully tell it. Therein ghostly comfort is sucked + from its very well-head. Therein a memorial is made of that exceeding great love + which Christ showed in the time of His sufferings. It was in order that the + boundless goodness of that His great love might be driven home into the hearts of + His faithful ones, that when He had celebrated the Passover with His disciples, + and was about to pass out of this world to the Father, He instituted this + Sacrament, this everlasting memorial of His Passion, the fulfilment of all the + ancient figures, and the greatest of the miracles He ever wrought; and to them + that were sorrowful at His going He left it as a singular comfort at His absence. + responsory: + la: "R. Cenántibus illis, accépit Jesus panem, et benedíxit, ac fregit, dedítque discípulis suis, et ait: * Accípite et comédite: hoc est corpus meum.\nV. Dixérunt viri tabernáculi mei: Quis det de cárnibus ejus, ut saturémur?\nR. Accípite et comédite: hoc est corpus meum." + en: "R. As they were eating, Jesus took bread, and blest it, and brake it, and gave it to the disciples, and said: * Take, eat; this is My Body.\nV. The men of my tabernacle said: O that we had of his flesh, we cannot be satisfied.\nR. Take, eat; this is My Body." + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: true + citation: { la: "Joann 6:56-59", en: "John 6:56-59" } + text: + la: >- + In illo témpore: Dixit Jesus turbis Judæórum: Caro mea vere est cibus, et sanguis + meus vere est potus. Qui mandúcat meam carnem et bibit meum sánguinem, in me + manet, et ego in illo. Sicut misit me vivens Pater, et ego vivo propter Patrem: et + qui mandúcat me, et ipse vivet propter me. Hic est panis, qui de cœlo descéndit. + Non sicut manducavérunt patres vestri manna, et mórtui sunt. Qui mandúcat hunc + panem, vivet in ætérnum. + en: >- + At that time, Jesus said to the crowds of the Jews: My Flesh is food indeed, and + My Blood is drink indeed. He who eats My Flesh, and drinks My Blood, abides in Me + and I in him. As the living Father has sent Me, and as I live because of the + Father, so he who eats Me, he also shall live because of Me. This is the Bread + that has come down from heaven; not as your fathers ate the manna, and died. He + who eats this Bread shall live forever. + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: false + source: "St. Augustine, Bishop of Hippo, Tractate 26 on John" + text: + la: >- + Cum cibo et potu id áppetant hómines, ut neque esúriant, neque sítiant: hoc + veráciter non præstat, nisi iste cibus et potus, qui eos, a quibus súmitur, + immortáles et incorruptíbiles facit; id est, socíetas ipsa Sanctórum, ubi pax erit + et únitas plena atque perfécta. Proptérea quippe, sicut étiam ante nos hoc + intellexérunt hómines Dei, Dóminus noster Jesus Christus corpus et sánguinem suum + in eis rebus commendávit, quæ ad unum áliquid redigúntur ex multis. Namque áliud + in unum ex multis granis confícitur: áliud in unum ex multis ácinis cónfluit. + Dénique jam expónit, quómodo id fiat, quod lóquitur; et quid sit manducáre corpus + ejus, et sánguinem bíbere. Qui mandúcat carnem meam et bibit meum sánguinem, in + me manet, et ego in illo. Hoc est ergo manducáre illam escam, et illum bíbere + potum, in Christo manére, et illum manéntem in se habére. Ac per hoc, qui non + manet in Christo, et in quo non manet Christus, proculdúbio nec mandúcat + spiritáliter carnem ejus, nec bibit ejus sánguinem, licet carnáliter et + visibíliter premat déntibus Sacraméntum córporis et sánguinis Christi: sed magis + tantæ rei sacraméntum ad judícium sibi mandúcat et bibit, quia immúndus + præsúmpsit ad Christi accédere Sacraménta, quæ áliquis non digne sumit, nisi qui + mundus est; de quibus dícitur: Beáti mundo corde, quóniam ipsi Deum vidébunt. + + + Sicut, inquit, misit me vivens Pater, et ego vivo propter Patrem: et qui mandúcat + me, et ipse vivet propter me. Ac si díceret: Ut ego vivam propter Patrem, id est, + ad illum tamquam ad majórem réferam vitam meam, exinanítio mea fecit, in qua me + misit: ut autem quisquam vivat propter me, participátio facit, qua mandúcat me. + Ego ítaque humiliátus vivo propter Patrem: ille eréctus vivit propter me. Si autem + ita dictus est, Vivo propter Patrem, quia ipse de illo, non ille de ipso est; sine + detriménto æqualitátis dictum est. Nec tamen dicéndo, Et qui mandúcat me, et ipse + vivet propter me; eándem suam et nostram æqualitátem significávit, sed grátiam + mediatóris osténdit. + en: >- + By use of meat and drink men would fain that they shall hunger no more, neither + thirst any more, and yet there is but one Meat and one Drink, Which doth work in + them that feed thereon that this corruptible must put on incorruption, and this + mortal put on immortality, namely communion with that general assembly and + Church of God's holy children, who are kept in perfect peace, and are all one, + fully and utterly. And therefore it is, as men of God before our time have taken + it, that our Lord Jesus Christ hath set before us His Body and His Blood in the + likeness of things which, from being many, are reduced into one. In one loaf are + many grains of corn, and in one cup of wine the juice of many grapes. And now He + giveth us to know how that which He spake cometh to pass, and how indeed this Man + can give us His Flesh to eat, and His Blood to drink. He that eateth My Flesh, and + drinketh My Blood, dwelleth in Me, and I in him. To dwell in Christ, therefore, + and to have Him dwelling in us, is to eat of that Bread and drink of that Cup, and + he which dwelleth not in Christ, and in whom Christ dwelleth not, without all + doubt doth not spiritually eat His Flesh nor drink His Blood, although he do + carnally and visibly press the Sacrament with his teeth; but, contrariwise, he + eateth and drinketh damnation to himself, because he dareth to draw nigh filthy + to that secret and holy thing of Christ, whereunto none draweth nigh worthily, + save he which is pure, even he which is of them concerning whom it is said: + Blessed are the pure in heart, for they shall see God. + + + As the living Father hath sent Me, and I live by the Father, so he that eateth + Me, even he shall live by Me. This is as though He said: The Father hath sent Me + into the world, and I have emptied Myself and taken upon Me the form of a + servant. I have My life from the Father, as One That is greater than I. He that + eateth Me, even he, by thereby taking part in Me, shall live by Me. It is as + having humbled Myself that I live by the Father, but he that eateth Me, him will + I raise up, and so he shall live by Me. It is said "I live by the Father," that is + to say, He is of the Father, not the Father of Him, and yet not so, but that the + Father and the Son are co-equal together. Also it is said "So he that eateth Me, + even he shall live by Me," whereby He showeth the gracious work towards His + people of Him Who is the one Mediator between God and man, and not that He Which + is eaten and he which eateth Him are co-equal together. + responsory: + la: "R. Qui mandúcat meam carnem et bibit meum sánguinem, * In me manet, et ego in eo.\nV. Non est ália nátio tam grandis, quæ hábeat deos appropinquántes sibi, sicut Deus noster adest nobis.\nR. In me manet, et ego in eo." + en: "R. He that eateth My Flesh and drinketh My Blood, * dwelleth in Me, and I in him.\nV. What nation is there so great, who hath gods so nigh unto them, as the Lord our God is to us?\nR. Dwelleth in Me, and I in him." + status: { la: verified, en: verified } diff --git a/src/data/propers/nocturn-readings/sacred-heart.yml b/src/data/propers/nocturn-readings/sacred-heart.yml new file mode 100644 index 0000000..4d51d2b --- /dev/null +++ b/src/data/propers/nocturn-readings/sacred-heart.yml @@ -0,0 +1,258 @@ +# Matins nocturn content for the Most Sacred Heart of Jesus (temporalId +# sacred-heart, Duplex I classis cum Octava). Sourced from +# Tempora/Pent02-5.txt (Latin) / English/Tempora/Pent02-5.txt, and the +# Gospel pericope's full text from missa/Latin+English/Tempora/Pent02-5.txt's +# own [Evangelium] (the Matins file itself only gives the incipit + "Et +# réliqua" for Lectio7, per this project's Gospel/homily-split convention). +# +# No separate Divino Afflatu-era text was found in the reference tree for +# this feast's Matins content -- only this one secular/Tridentine +# Tempora/Pent02-5.txt (9-lesson, matching the "(rubrica 196)" 1955/1960 +# reduction already noted in sacred-heart.yml's own header) and a +# Monastic TemporaM/Pent02-5.txt, which is a 12-lesson remix of this same +# secular file's own lessons (via @-references and regex substitutions), +# not independently-sourced content. Used the secular file directly, +# consistent with the collect/antiphons already authored from it. +# +# The audit found this id registered in ALWAYS_OVERRIDE_TEMPORAL_IDS but +# never authored at all. Nocturn 1 (Lectio1-3, Jeremiah) left unauthored +# here per this project's convention of leaving Nocturn 1 scripture to +# the bible-plan store. +# +# Nocturn 2: Lectio4-6 (the feast's own historical lections, on the +# devotion's growth through St. John Eudes, St. Margaret Mary Alacoque, +# and its papal approval/extension) combined into one continuous excerpt. +# Nocturn 3: the Gospel pericope (John 19:31-37, the piercing of Christ's +# side) authored in full (isGospel: true), followed by Lectio7's homily +# portion (incipit dropped) combined with Lectio8-9 as one continuous +# excerpt of St. Bonaventure's own writing on the pierced Heart. +id: sacred-heart +readings: + - nocturn: 2 + isGospel: false + source: "Matins Lesson (historical), Feast of the Most Sacred Heart" + text: + la: >- + Inter mira sacræ doctrínæ pietatísque increménta, quibus divínæ Sapiéntiæ + consília clárius in dies Ecclésiæ manifestántur, vix áliud magis conspícuum est + quam triumphális progréssio cultus sacratíssimi Cordis Jesu. Sǽpius quidem, + priórum decúrsu témporum, Patres, Doctóres, Sancti, Redemptóris nostri amórem + celebrárunt: vulnus in látere Christi apértum ómnium gratiárum arcánum dixérunt + fontem. At inde a médio ævo, cum tenerióre quadam erga sanctíssimam Salvatóris + Humanitátem religióne fidéles áffici cœpti sunt, ánimæ contemplatívæ per plagam + illam ad ipsum Cor, amóre hóminum vulnerátum, penetráre fere solébant. Atque ex + eo témpore hæc contemplátio sanctíssimis quibúsque ita familiáris evásit, ut + neque régio neque ordo religiósus sit, in quibus non insígnia, hac ætáte, ejus + reperiántur testimónia. Próximis demum sǽculis, eóque potíssimum témpore quo + hærétici, sub falsæ pietátis título, a sanctíssima Eucharístia Christiános + detérrere conabántur, cultus sacratíssimo Cordi públice exhibéri cœptus est, + ópera imprímis sancti Joánnis Eudes, qui auctor litúrgici cultus sacrórum + Córdium Jesu et Maríæ haud immérito nuncupátur. + + + Verum, ad cultum sacratíssimi Cordis Jesu plene perfectéque constituéndum, + eundémque per totum orbem propagándum, Deus ipse sibi instruméntum elégit + humíllimam ex órdine Visitatiónis vírginem, sanctam Margarítam Maríam Alacóque, + cui, a prima quidem ætáte jam in Eucharístiæ Sacraméntum amóre flagránti, + Christus Dóminus sæpenúmero appárens, divíni Cordis sui et divítias et optáta + significáre dignátus est. Quarum apparitiónum celebérrima illa est, qua ei ante + Eucharístiam oránti Jesus conspiciéndum se dedit, sacratíssimum Cor osténdit et + conquéstus quod, pro imménsa sua caritáte, nihil nisi ingratórum hóminum + contumélias recíperet, ipsi præcépit ut novum festum, féria sexta post Octávam + Córporis Christi, instituéndum curáret, quo Cor suum honóre débito colerétur, + atque injúriæ sibi in Sacraménto amóris a peccatóribus illátæ dignis + expiaréntur obséquiis. Quot autem quantásque Dei fámula in Christi mandátis + exsequéndis expérta sit difficultátes, nemo est qui ignóret; sed ab ipso Dómino + confirmáta, atque a religiósis ánimæ suæ moderatóribus, qui incredíbili quodam + ardóre ad hunc cultum promovéndum laborárunt, strénue adjúta, múnere sibi + cǽlitus commísso fidéliter fungi ad mortem usque non déstitit. + + + Anno tandem millésimo septingentésimo sexagésimo quinto, Clemens décimus + tértius Póntifex Máximus offícium et missam in honórem sacratíssimi Cordis Jesu + approbávit; Pius vero nonus festum ad univérsam Ecclésiam exténdit. Exínde, + cultus sacratíssimi Cordis, quasi flumen exúndans, prolútis impediméntis + ómnibus, per totum se orbem effúdit, et, novo illucescénte sǽculo, jubilǽo + indícto, Leo décimus tértius humánum genus univérsum sacratíssimo Cordi devótum + vóluit. Quæ consecrátio, in ómnibus quidem cathólici orbis ecclésiis, solémni + ritu perácta, ingens áttulit devotiónis hujus increméntum, et ad eam non solum + pópulos, verum étiam singuláres famílias addúxit, quæ Divíno Cordi + innumerábiles se dévovent, regióque ejus império subíciunt. Dénique, Pius + undécimus Póntifex Máximus, quo plénius festi solémnitas pópuli christiáni + devotióni tam late paténti respondéret, sacratíssimi Cordis Jesu festum ad + ritum dúplicem primæ classis cum octáva evéxit; ac prætérea, ut violáta jura + Christi summi Regis ac Dómini amantíssimi resarciréntur, populorúmque peccáta + defleréntur, eódem festo die piaculárem precatiónem in ómnibus christiáni orbis + templis quotánnis recitándam mandávit. + en: >- + Among the wonderful advances of sacred doctrine and devotion, whereby the + counsels of the divine Wisdom are made ever clearer to the Church day by day, + scarcely anything is more conspicuous than the triumphant progress of the + devotion to the Most Sacred Heart of Jesus. Often indeed, in earlier times, the + Fathers, Doctors, and Saints celebrated the love of our Redeemer, and called the + wound opened in Christ's side the hidden fountain of all graces. But from the + Middle Ages onward, as the faithful began to be moved by a more tender devotion + toward the most holy Manhood of the Saviour, contemplative souls were wont to + penetrate, through that wound, to the very Heart itself, wounded by love of men. + And from that time this contemplation became so familiar to holy souls that + there is neither region nor religious order in which notable witnesses of it are + not found in that age. In more recent centuries, and especially in the time when + heretics, under the pretext of a false piety, were striving to deter Christians + from the most holy Eucharist, public devotion to the Most Sacred Heart began to + be shown, chiefly through the work of St. John Eudes, who is not unworthily + called the author of the liturgical cult of the Sacred Hearts of Jesus and Mary. + + + But to establish the devotion to the Most Sacred Heart of Jesus fully and + perfectly, and to spread it throughout the whole world, God Himself chose as His + instrument a most humble virgin of the Order of the Visitation, St. Margaret + Mary Alacoque, to whom, from her earliest years already burning with love for + the Sacrament of the Eucharist, the Lord Christ, appearing to her many times, + deigned to show forth both the riches and the desires of His divine Heart. The + most famous of these apparitions is that in which, as she prayed before the + Blessed Sacrament, Jesus showed Himself to her, revealed His Most Sacred Heart, + and, lamenting that in return for His boundless love He received nothing but + the contempt of ungrateful men, commanded her to see to it that a new feast be + instituted, on the Friday after the Octave of Corpus Christi, whereby His Heart + might be honored with due reverence, and the injuries inflicted on Him in the + Sacrament of love by sinners might be worthily atoned for. No one is ignorant of + how many and how great difficulties this handmaid of God endured in carrying + out Christ's commands; but, confirmed by the Lord Himself, and vigorously + assisted by the spiritual directors of her soul, who labored with incredible + zeal to promote this devotion, she did not cease faithfully to fulfil the office + entrusted to her from heaven, even unto death. + + + At length, in the year one thousand seven hundred and sixty-five, Pope Clement + the Thirteenth approved the office and Mass in honor of the Most Sacred Heart of + Jesus; and Pope Pius the Ninth extended the feast to the universal Church. + Thenceforth the devotion to the Most Sacred Heart, like an overflowing river, + having burst through every obstacle, spread itself throughout the whole world, + and, as the new century dawned, Pope Leo the Thirteenth, proclaiming a jubilee, + willed that the whole human race be consecrated to the Most Sacred Heart. This + consecration, solemnly carried out in all the churches of the Catholic world, + brought a great increase of this devotion, and drew to it not only peoples but + also individual families, who devote themselves in countless numbers to the + Divine Heart and submit themselves to His royal rule. Finally, Pope Pius the + Eleventh, that the solemnity of the feast might more fully answer to the + widespread devotion of the Christian people, raised the feast of the Most + Sacred Heart of Jesus to the rite of a Double of the First Class with an Octave; + and moreover, that the violated rights of Christ the supreme King and most + loving Lord might be repaired, and the sins of peoples bewailed, he commanded + that on that same feast day an expiatory prayer be recited every year in all + the churches of the Christian world. + responsory: + la: "R. Omnes gentes quascúmque fecísti, vénient * Et adorábunt coram te, Dómine.\nV. Et glorificábunt nomen tuum, quóniam magnus es tu, et fáciens mirabília.\nR. Et adorábunt coram te, Dómine." + en: "R. All nations whom thou hast made shall come * and worship before thee, O Lord.\nV. And they shall glorify thy name, for thou art great and doest wondrous things.\nR. And worship before thee, O Lord." + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: true + citation: { la: "Joann 19:31-37", en: "John 19:31-37" } + text: + la: >- + In illo témpore: Judǽi, quóniam Parascéve erat, ut non remanérent in cruce + córpora sábbato (erat enim magnus dies ille sábbati), rogavérunt Pilátum, ut + frangeréntur eórum crura, et tolleréntur. Venérunt ergo mílites: et primi quidem + fregérunt crura et alteríus, qui crucifíxus est cum eo. Ad Jesum autem cum + veníssent, ut vidérunt eum jam mórtuum, non fregérunt ejus crura, sed unus + mílitum láncea latus ejus apéruit, et contínuo exívit sanguis et aqua. Et qui + vidit, testimónium perhíbuit: et verum est testimónium ejus. Et ille scit quia + vera dicit, ut et vos credátis. Facta sunt enim hæc ut Scriptúra implerétur: Os + non comminuétis ex eo. Et íterum alia Scriptúra dicit: Vidébunt in quem + transfixérunt. + en: >- + At that time, the Jews, since it was the Preparation Day, in order that the + bodies might not remain upon the cross on the Sabbath — for that Sabbath was a + solemn day — besought Pilate that their legs might be broken, and that they + might be taken away. The soldiers therefore came and broke the legs of the + first, and of the other, who had been crucified with Him. But when they came to + Jesus, and saw that He was already dead, they did not break His legs; but one of + the soldiers opened His side with a lance, and immediately there came out blood + and water. And he who saw it has borne witness, and his witness is true; and he + knows that he tells the truth, that you also may believe. For these things came + to pass that the Scripture might be fulfilled, Not a bone of Him shall you + break. And again another Scripture says, They shall look upon Him Whom they + have pierced. + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: false + source: "St. Bonaventure, Bishop, The Tree of Life, n. 30, and On the Mystical Vine, ch. 3" + text: + la: >- + Ut de látere Christi dormiéntis in cruce formarétur Ecclésia, et Scriptúra + implerétur quæ dicit: Vidébunt in quem transfixérunt: divína est ordinatióne + indúltum ut unus mílitum láncea latus illud sacrum aperiéndo perfóderet, + quátenus sánguine cum aqua manánte, prétium effunderétur nostræ salútis quod a + fonte scílicet Cordis arcáno profúsum, vim daret sacraméntis Ecclésiæ ad vitam + grátiæ conferéndam, essétque jam in Christo vivéntibus póculum fontis vivi, + saliéntis in vitam ætérnam. Surge ígitur, ánima amíca Christi, vigiláre non + cesses, ibi os appóne, ut háurias aquas de fóntibus salvatóris. + + + Quia semel vénimus ad Cor Dómini Jesu dulcíssimi, et bonum est nos hic esse, non + fácile evellámur ab eo. O quam bonum et jucúndum habitáre in Corde hoc. Bonus + thesáurus, pretiósa margaríta Cor tuum, óptime Jesu, quam, fosso agro córporis + tui, invenímus. Quis hanc margarítam abíciat? Quin pótius, dabo omnes + margarítas, cogitatiónes et affectiónes meas commutábo et comparábo illam mihi, + jactans omnem cogitátum meum in Cor boni Jesu, et sine fallácia illud me + enútriet. Hoc ígitur tuo et meo Corde, dulcíssime Jesu, invénto, orábo te Deum + meum: admítte in sacrárium exauditiónis preces meas: immo me totum trahe in Cor + tuum. + + + Ad hoc enim perforátum est latus tuum, ut nobis páteat intróitus. Ad hoc + vulnerátum est Cor tuum, ut in illo ab exterióribus turbatiónibus absolúti + habitáre possímus. Nihilóminus et proptérea vulnerátum est, ut per vulnus + visíbile, vulnus amóris invisíbile videámus. Quómodo hic ardor mélius posset + osténdi, nisi quod non solum corpus, verum étiam ipsum Cor láncea vulnerári + permísit? Carnále ergo vulnus, vulnus spirituále osténdit. Quis illud Cor tam + vulnerátum non díligat? quis tam amántem non rédamet? quis tam castum non + amplectátur? Nos ígitur adhuc in carne manéntes, quantum póssumus, amántem + redamémus, amplectámur vulnerátum nostrum, cujus ímpii agrícolæ fodérunt manus + et pedes, latus et Cor; oremúsque ut cor nostrum, adhuc durum et impœ́nitens, + amóris sui vínculo constríngere et jáculo vulneráre dignétur. + en: >- + In order that the Church might be taken out of the side of Christ, in his deep + sleep on the Cross, and that the Scripture might be fulfilled which saith: They + shall look on him whom they pierced: it was divinely ordained that one of the + soldiers should pierce his sacred side with a spear, and open it. Then forthwith + there came flowing out blood and water, which was the price of our salvation, + pouring forth from its mountain-source, in sooth, from the secret places of his + Heart, to give power to the Sacraments of the Church, to bestow the life of + grace, and to be as a saving drink of living waters, flowing up to life eternal + for those who were already quickened in Christ. Arise, then, O soul beloved of + Christ. Cease not thy vigilance, place there thy lips, and drink the waters from + the fount of salvation. + + + Because we are now come to the sweet Heart of Jesus, and because it is good for + us to be here, let us not too soon turn away therefrom. O how good and joyful a + thing it is to dwell in this Heart. What a good treasure, what a precious pearl, + is thy Heart, O most excellent Jesu, which we have found hidden in the field of + thy body. Who would cast away such a pearl? Nay, rather, for this same I would + give all my pearls. I will sell all my thoughts and affections, and buy the same + for myself, turning all my thoughts to the Heart of the good Jesus, and without + fail it will support me. Therefore, O most sweet Jesu, having found this Heart + that is thine and mine, I will pray to thee, my God: admit my prayers into the + shrine of hearkening; and draw me even more altogether into thy Heart. + + + For to this end was thy side pierced, that an entry might be open unto us. To + this end was thy Heart wounded, that in it we might be able to dwell secure from + alarms from without. And it was wounded none the less on this account that, + because of the visible wound, we may perceive the wound of love which is + invisible. How could this fire of love better shine forth than for him to permit + that not only his body, but that even his Heart, should be wounded with the + spear? Who would not love that Heart so wounded? Who would not, in return, love + one who is so loving? Who would not embrace one so chaste? Wherefore let us who + are in the flesh love in return, as much as we can, him who so loveth, embrace + our wounded one, whose hands and feet, side and Heart, have been pierced by + wicked husbandmen; and let us pray that he may deign to bind our hearts, still + hard and impenitent, with the chain of his love, and wound them with the dart + thereof. + responsory: + la: "R. Ego si exaltátus fúero a terra * Omnia traham ad meípsum.\nV. Hoc autem dicébat signíficans qua morte esset moritúrus.\nR. Omnia traham ad meípsum." + en: "R. If I be lifted up from the earth, * I will draw all things unto myself.\nV. This he said, signifying what death he should die.\nR. I will draw all things unto myself." + status: { la: verified, en: verified } diff --git a/src/data/propers/nocturn-readings/trinity-sunday.yml b/src/data/propers/nocturn-readings/trinity-sunday.yml new file mode 100644 index 0000000..816d6ec --- /dev/null +++ b/src/data/propers/nocturn-readings/trinity-sunday.yml @@ -0,0 +1,98 @@ +# Matins nocturn content for Trinity Sunday (temporalId trinity-sunday, +# Duplex II classis). Sourced from Tempora/Pent01-0.txt (Latin) / +# English/Tempora/Pent01-0.txt, and the Gospel pericope's full text from +# missa/Latin+English/Tempora/Pent01-0.txt's own [Evangelium] (the +# Matins file itself only gives the incipit + "Et réliqua" for Lectio7, +# per this project's Gospel/homily-split convention). +# +# The audit found this id registered in ALWAYS_OVERRIDE_TEMPORAL_IDS, +# with a real collect/antiphons already authored, but no Matins reading. +# Nocturn 1-2 (Lectio1-6, Romans 11) left unauthored here per this +# project's convention of leaving Nocturn 1/2 scripture to the bible-plan +# store when the source itself draws Nocturn 2 from ordinary Scripture +# rather than a patristic sermon (Trinity Sunday's own [Lectio4-6] are a +# continuation of Romans, not a proper sermon on the feast). +# +# Nocturn 3: the Gospel pericope (Matt 28:18-20) authored in full +# (isGospel: true), followed by Lectio7's homily portion (incipit +# dropped) combined with Lectio8/8a as one continuous excerpt of St. +# Gregory of Nazianzus's own Treatise on the Faith. The source's own +# [Lectio9] is a distinct "Commemoratio Dominicæ" (a Gospel+homily pair +# for whichever ordinary Sunday after Pentecost Trinity Sunday displaces, +# not Trinity's own proper content) and is deliberately not carried over +# here — see ferial-commemoration-temporal-leak memory for the general +# principle this follows. +id: trinity-sunday +readings: + - nocturn: 3 + isGospel: true + citation: { la: "Matt 28:18-20", en: "Matthew 28:18-20" } + text: + la: >- + In illo témpore: Dixit Jesus discípulis suis: Data est mihi omnis potéstas in + cælo et in terra. Eúntes ergo docéte omnes gentes, baptizántes eos in nómine + Patris, et Fílii, et Spíritus Sancti: docéntes eos serváre ómnia, quæcúmque + mandávi vobis. Et ecce, ego vobíscum sum ómnibus diébus usque ad consummatiónem + sǽculi. + en: >- + At that time, Jesus said to His disciples: All power in heaven and on earth has + been given to Me. Go, therefore, and make disciples of all nations, baptizing + them in the Name of the Father, and of the Son, and of the Holy Spirit, teaching + them to observe all that I have commanded you; and behold, I am with you all + days, even unto the consummation of the world. + status: { la: verified, en: verified } + + - nocturn: 3 + isGospel: false + source: "St. Gregory of Nazianzus, Bishop, Treatise on the Faith" + text: + la: >- + Quis catholicórum ignórat Patrem vere esse Patrem, Fílium vere esse Fílium, et + Spíritum Sanctum vere esse Spíritum Sanctum? sicut ipse Dóminus ad Apóstolos + suos dicit: Eúntes baptizáte omnes gentes in nómine Patris, et Fílii, et + Spíritus Sancti. Hæc est perfécta Trínitas in unitáte consístens, quam scílicet + uníus substántiæ profitémur. Non enim nos secúndum córporum conditiónem, + divisiónem in Deo fácimus; sed secúndum divínæ natúræ poténtiam, quæ in matéria + non est, et nóminum persónas vere constáre crédimus, et unitátem divinitátis + esse testámur. + + + Nec extensiónem partis alicújus ex parte, ut quidam putavérunt, Dei Fílium + dícimus: nec verbum sine re, velut sonum vocis, accípimus: sed tria nómina et + tres persónas uníus esse esséntiæ, uníus majestátis atque poténtiæ crédimus. Et + ídeo unum Deum confitémur: quia únitas majestátis, plúrium vocábulo deos + próhibet appellári. Dénique Patrem et Fílium cathólice nominámus; duos autem + Deos dícere, nec póssumus, nec debémus. Non quod Fílius Dei Deus non sit, immo + verus Deus de Deo vero; sed quia non aliúnde, quam de ipso uno Patre, Dei Fílium + nóvimus, perínde unum Deum dícimus. Hoc enim Prophétæ, hoc Apóstoli tradidérunt: + hoc ipse Dóminus dócuit, cum dicit: Ego et Pater unum sumus. Unum ad unitátem + divinitátis, ut dixi, refert; Sumus autem, persónis assígnat. + en: >- + There is no Catholic but knoweth that the Father is a Very Father, the Son a + Very Son, and the Holy Ghost a Very Holy Ghost, even as the Lord Himself saith + unto His Apostles: "Go ye and baptize all nations in the Name of the Father, and + of the Son, and of the Holy Ghost." This is that Perfect Trinity Who is but One + Being, and of Whom therefore we testify that His Substance is one. For we make + no division in God, as divisions are made in bodies, but we testify that, + according to the power of the Divine Nature, Which standeth not in matter, the + Persons named have a real existence, and that God is One. + + + We do not say, as some have dreamt, that the Begetting of the Son of God is an + outgrowing from one part to another part; neither do we say that He is the Word + in the sense of a mere sound uttered by a voice, but we do believe that these + three Names and the Persons meant by them are all of only One Being, One + Majesty, and One Power. And therefore we testify that God is One, because this + Oneness of His Majesty forbiddeth that we should use the plural form of speech + and say "Gods." It is Catholic language to say "Father and Son," but we cannot + and must not say that the Father and the Son are two gods. And that, not because + the Son of God is not by Himself God — yea, He is Very God of Very God — but + because we know that the Son of God is not from elsewhere, but from the One + Father Himself, and therefore we say that God is One. This is the doctrine + which Prophets and Apostles have delivered; this is the doctrine which the Lord + Himself taught when He said, "I and the Father are One" — that is, He meant, as + touching the one Divine Being; but as touching Persons, We are distinct. + responsory: + la: "R. Benedicámus Patrem et Fílium cum Sancto Spíritu: * Laudémus et superexaltémus eum in sǽcula.\nV. Benedíctus es, Dómine, in firmaménto cæli: et laudábilis et gloriósus in sǽcula.\nR. Laudémus et superexaltémus eum in sǽcula." + en: "R. Let us bless the Father, and the Son, and the Holy Ghost: * let us praise and exalt Him above all for ever.\nV. Blessed art thou, O Lord, in the firmament of heaven: and above all to be praised and glorified for ever.\nR. Let us praise and exalt Him above all for ever." + status: { la: verified, en: verified } diff --git a/src/data/propers/temporal/ascension-benedictus-antiphon.yml b/src/data/propers/temporal/ascension-benedictus-antiphon.yml new file mode 100644 index 0000000..c961529 --- /dev/null +++ b/src/data/propers/temporal/ascension-benedictus-antiphon.yml @@ -0,0 +1,13 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pasc5-4.txt's [Ant 2] (the Lauds/Benedictus +# antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/Ant3=Vespers2 +# convention) / English/Tempora/Pasc5-4.txt's own [Ant 2]. The audit +# found this id (registered in ALWAYS_OVERRIDE_TEMPORAL_IDS) had its own +# collect authored but no antiphons or Matins reading. +id: ascension-benedictus-antiphon +text: + la: "Ascéndo ad Patrem meum, * et Patrem vestrum: Deum meum, et Deum vestrum, allelúja." + en: "I ascend to my Father, * and to your Father: to my God and your God, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/ascension-magnificat-antiphon.yml b/src/data/propers/temporal/ascension-magnificat-antiphon.yml new file mode 100644 index 0000000..949b9f1 --- /dev/null +++ b/src/data/propers/temporal/ascension-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pasc5-4.txt's [Ant 3] (the Second Vespers/ +# Magnificat antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/ +# Ant3=Vespers2 convention) / English/Tempora/Pasc5-4.txt's own [Ant 3]. +id: ascension-magnificat-antiphon +text: + la: "O Rex glóriæ, * Dómine virtútum, qui triumphátor hódie super omnes cælos ascendísti, ne derelínquas nos órphanos; sed mitte promíssum Patris in nos, Spíritum veritátis, allelúja." + en: "O King of glory, * Lord of hosts, who hast this day exalted thine own self, with great triumph, above all the heavens, leave us not orphans, but send unto us the Promise of the Father, even the Spirit of truth, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/corpus-christi-benedictus-antiphon.yml b/src/data/propers/temporal/corpus-christi-benedictus-antiphon.yml new file mode 100644 index 0000000..9e030f8 --- /dev/null +++ b/src/data/propers/temporal/corpus-christi-benedictus-antiphon.yml @@ -0,0 +1,12 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent01-4.txt's [Ant 2] (the Lauds/Benedictus +# antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/Ant3=Vespers2 +# convention -- see vu-magnificat-common-category-fallback memory) / +# English/Tempora/Pent01-4.txt's own [Ant 2]. +id: corpus-christi-benedictus-antiphon +text: + la: "Ego sum * panis vivus, qui de cælo descéndi: si quis manducáverit ex hoc pane, vivet in ætérnum, allelúja." + en: "I am the living Bread * which came down from heaven; if any man eat of this Bread, he shall live for ever, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/corpus-christi-collect.yml b/src/data/propers/temporal/corpus-christi-collect.yml new file mode 100644 index 0000000..7fed45a --- /dev/null +++ b/src/data/propers/temporal/corpus-christi-collect.yml @@ -0,0 +1,21 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent01-4.txt's [Oratio] / English/Tempora/Pent01-4.txt's +# [Oratio] (Corpus Christi's real, own collect -- the audit found this id +# registered in ALWAYS_OVERRIDE_TEMPORAL_IDS but never actually authored, +# so the day was silently falling back to Trinity-week feria content +# despite corpus-christi.yml's own record already existing). +id: corpus-christi-collect +text: + la: | + Orémus. + Deus, qui nobis sub Sacraménto mirábili passiónis tuæ memóriam reliquísti: tríbue, quǽsumus, ita nos Córporis, et Sánguinis tui sacra mystéria venerári; ut redemptiónis tuæ fructum in nobis júgiter sentiámus. + Qui vivis et regnas cum Deo Patre in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + O God, who under a wonderful Sacrament hast left us a memorial of thy Passion: grant us, we beseech thee, so to venerate the sacred mysteries of thy Body and Blood, that we may ever feel within us the fruit of thy redemption. + Who livest and reignest with God the Father in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/corpus-christi-magnificat-antiphon.yml b/src/data/propers/temporal/corpus-christi-magnificat-antiphon.yml new file mode 100644 index 0000000..9aa1214 --- /dev/null +++ b/src/data/propers/temporal/corpus-christi-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent01-4.txt's [Ant 3] (the Second Vespers/ +# Magnificat antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/ +# Ant3=Vespers2 convention) / English/Tempora/Pent01-4.txt's own [Ant 3]. +id: corpus-christi-magnificat-antiphon +text: + la: "O sacrum convívium, * in quo Christus súmitur: recólitur memória passiónis ejus: mens implétur grátia: et futúræ glóriæ nobis pignus datur, allelúja." + en: "Holy exceedingly is the Supper of the Lord, * wherein we do feed on Christ, do show his death till he come, do get grace abundantly to our souls, and do take pledge of the glory which shall hereafter be revealed in us, alleluia." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/friday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/friday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..f568918 --- /dev/null +++ b/src/data/propers/temporal/friday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2028-04-07 (a real Friday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Feria Sexta +# infra Hebdomadam Passionis ~ Feria major", no commemoration, and +# critically, no Seven Sorrows text either -- see friday-passion-week.yml +# for the reference-file-level naming overlap this confirms Monastic 1617 +# doesn't carry). +id: friday-passion-week-benedictus-antiphon +text: + la: "Appropinquábat autem * dies festus Judæórum: et quærébant príncipes sacerdótum quómodo Jesum interfícerent, sed timébant plebem." + en: "Now the Jews' Feastday * was at hand, and the chief Priests sought how they might kill Jesus; but they feared the people." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/friday-passion-week-collect.yml b/src/data/propers/temporal/friday-passion-week-collect.yml new file mode 100644 index 0000000..0fedae7 --- /dev/null +++ b/src/data/propers/temporal/friday-passion-week-collect.yml @@ -0,0 +1,27 @@ +# Transcribed from the reference engine's Mass propers -- specifically the +# plain-ferial Mass, web/www/missa/Latin/Tempora/Quad5-5Feria.txt's +# [Oratio] (English: web/www/missa/English/Tempora/Quad5-5Feria.txt), NOT +# web/www/missa/Latin/Tempora/Quad5-5.txt (the alternate, Seven-Sorrows- +# commemorating Mass formulary for this same date -- see +# friday-passion-week.yml's own note on that naming overlap). This app's +# structural source, Monastic Tridentinum 1617, shows this day as a plain +# ferial with no Seven Sorrows commemoration when live-queried, so the +# plain-ferial Mass text is the correct match here. Marked `draft`, not +# `verified` -- see monday-passion-week-collect.yml's own note for why +# (direct Missal transcription, standard closing formula expanded, no +# live Office cross-check). +id: friday-passion-week-collect +text: + la: | + Orémus. + Córdibus nostris, quǽsumus, Dómine, grátiam tuam benígnus infúnde: ut peccáta nostra castigatióne voluntária cohibéntes, temporáliter pótius macerémur, quam supplíciis deputémur ætérnis. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + Graciously pour forth Your grace into our hearts, we beseech You, O Lord, that, keeping our sinful inclinations under control by self-denial, we may suffer for a brief while rather than be condemned to everlasting punishment. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/friday-passion-week-magnificat-antiphon.yml b/src/data/propers/temporal/friday-passion-week-magnificat-antiphon.yml new file mode 100644 index 0000000..da16eed --- /dev/null +++ b/src/data/propers/temporal/friday-passion-week-magnificat-antiphon.yml @@ -0,0 +1,12 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2028-04-07 (same clean date as the sibling +# -benedictus-antiphon.yml; title tag confirmed "Vespera de Tempore +# occurente" -- this day's own, non-anticipated Second Vespers, and +# again no Seven Sorrows text -- see friday-passion-week.yml). +id: friday-passion-week-magnificat-antiphon +text: + la: "Príncipes sacerdótum * consílium fecérunt ut Jesum occíderent: dicébant autem: Non in die festo, ne forte tumúltus fíeret in pópulo." + en: "The chief Priests * consulted that they might kill Jesus, but they said: Not on the Feast-day, lest there be an uproar among the people." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/good-friday-benedictus-antiphon.yml b/src/data/propers/temporal/good-friday-benedictus-antiphon.yml new file mode 100644 index 0000000..b9eaf41 --- /dev/null +++ b/src/data/propers/temporal/good-friday-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-04-03 (Good Friday that year). Matches +# Tempora/Quad6-5.txt's own [Ant 2]. John 19:19, the titulus Pilate had +# affixed to the Cross. +id: good-friday-benedictus-antiphon +text: + la: "Posuérunt * super caput ejus causam ipsíus scriptam: Jesus Nazarénus, Rex Judæórum." + en: "They set up over His head * His accusation written: Jesus of Nazareth, King of the Jews." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/good-friday-collect.yml b/src/data/propers/temporal/good-friday-collect.yml new file mode 100644 index 0000000..e736a1c --- /dev/null +++ b/src/data/propers/temporal/good-friday-collect.yml @@ -0,0 +1,34 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-5.txt. +# Like Maundy Thursday (see maundy-thursday-collect.yml's note), this day +# has no ordinary spoken collect -- its [Oratio] is +# `@Tempora/Quad6-4::s/usque ad mortem/usque ad mortem, mortem autem +# crucis/`, i.e. Thursday's own Tenebrae-form Oratio with the "Christus +# factus est" versicle lengthened one clause further, continuing Phil +# 2:8's own text ("...unto death, even the death of the Cross"). This is +# the well-known gradual "Christus factus est" that grows a clause longer +# each day of the Triduum, cadencing at its fullest on Holy Saturday (see +# holy-saturday-collect.yml). Historically Good Friday has no Mass and no +# ordinary blessing in the usual form at all (the Missa Præsanctificatorum +# is a distinct liturgical action, not modeled here as an "hour"); this +# lengthened Tenebrae Oratio is the real proper text the Office itself +# gives this day in place of an ordinary collect. Not live-cross-checked +# (same reason as Thursday's) -- transcribed directly from the raw file. +id: good-friday-collect +text: + la: | + V. Christus factus est pro nobis obédiens usque ad mortem, mortem autem crucis. + Pater noster (secreto). + Psalmus 50 (Miserere). + Réspice, quǽsumus, Dómine, super hanc famíliam tuam, pro qua Dóminus noster Jesus Christus non dubitávit mánibus tradi nocéntium, et crucis subíre torméntum: + Qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + (Et sub silentio concluditur.) + en: | + V. Christ became obedient for us unto death, even the death of the Cross. + Our Father (said silently). + Psalm 50 (Have mercy on me, O God). + Look down, we beseech Thee, O Lord, upon this Thy family, for which our Lord Jesus Christ did not hesitate to be delivered into the hands of wicked men, and to undergo the torment of the Cross: + Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + (And it is concluded in silence.) +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/good-friday-magnificat-antiphon.yml b/src/data/propers/temporal/good-friday-magnificat-antiphon.yml new file mode 100644 index 0000000..8e0faf5 --- /dev/null +++ b/src/data/propers/temporal/good-friday-magnificat-antiphon.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-04-03. Matches Tempora/Quad6-5.txt's own [Ant 3]. John +# 19:30, Christ's last words and death on the Cross -- the file's own note +# that "Vesperæ ab iis qui solemni Actioni liturgicæ postmeridianæ +# intersunt, hodie non dicuntur" (Vespers is not said today by those +# attending the solemn afternoon liturgical Action) is the same kind of +# rubric as Thursday's, not a suppression of the text itself. +id: good-friday-magnificat-antiphon +text: + la: "Cum accepísset acétum, * dixit: Consummátum est: et inclináto cápite, emísit spíritum." + en: "When He had received the vinegar, * He said: It is consummated; and bowing His head, He gave up the ghost." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/holy-saturday-benedictus-antiphon.yml b/src/data/propers/temporal/holy-saturday-benedictus-antiphon.yml new file mode 100644 index 0000000..961ef82 --- /dev/null +++ b/src/data/propers/temporal/holy-saturday-benedictus-antiphon.yml @@ -0,0 +1,13 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-04-04 (Holy Saturday that year). Matches +# Tempora/Quad6-6.txt's own [Ant 2]. Matthew 27:61 / 28:1, the women +# keeping watch at the sepulchre. No corresponding Magnificat/Vespers +# antiphon exists for this day -- see holy-saturday-collect.yml's note on +# why no holy-saturday-magnificat-antiphon.yml was authored. +id: holy-saturday-benedictus-antiphon +text: + la: "Mulíeres * sedéntes ad monuméntum lamentabántur, flentes Dóminum." + en: "The women sitting * at the sepulchre made lamentation, weeping for the Lord." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/holy-saturday-collect.yml b/src/data/propers/temporal/holy-saturday-collect.yml new file mode 100644 index 0000000..f3eb64b --- /dev/null +++ b/src/data/propers/temporal/holy-saturday-collect.yml @@ -0,0 +1,45 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-6.txt. +# Matins' own [Oratio Matutinum] on this day is again just +# `@Tempora/Quad6-4` (the plain Thursday form), but Lauds' own [Oratio 2] +# --confirmed by cross-referencing the file's structure against Monday/ +# Tuesday/Wednesday's own live-verified pattern, where [Oratio 2] is +# always the Lauds-and-ordinary-hours collect (see e.g. +# monday-holy-week-collect.yml's note) -- lengthens the "Christus factus +# est" versicle to its fullest and final form for the Triduum: +# `@Tempora/Quad6-4:Oratio:s/usque ad mortem/usque ad mortem, mortem +# autem crucis: propter quod et Deus exaltávit illum, et dedit illi nomen +# quod est super omne nomen/`, completing Phil 2:8-9 in full ("...even +# the death of the Cross: for which cause God also hath exalted Him, and +# given Him a Name which is above every name"). This is the last and +# longest stage of the gradual that grew one clause per day through the +# Triduum (see maundy-thursday-collect.yml / good-friday-collect.yml). +# Holy Saturday's Office otherwise has no ordinary Vespers of its own at +# all -- confirmed live (Monastic Tridentinum 1617, 2026-04-04): the +# engine reports "Vespera de sequenti" (Vespers of the following day), +# i.e. this evening's Vespers belongs entirely to Easter Sunday's own +# First Vespers, already modeled at easter-sunday-magnificat-antiphon.yml +# and reachable via calendar/vespers.ts's own evening-governance +# mechanism (Easter's Duplex I classis outranks Holy Saturday outright) -- +# so no separate holy-saturday-magnificat-antiphon.yml was authored; that +# would misrepresent a real historical absence as ordinary content. Not +# live-cross-checked for this exact silent-conclusion wording (same +# reason as Thursday/Friday) -- transcribed directly from the raw file. +id: holy-saturday-collect +text: + la: | + V. Christus factus est pro nobis obédiens usque ad mortem, mortem autem crucis: propter quod et Deus exaltávit illum, et dedit illi nomen quod est super omne nomen. + Pater noster (secreto). + Psalmus 50 (Miserere). + Réspice, quǽsumus, Dómine, super hanc famíliam tuam, pro qua Dóminus noster Jesus Christus non dubitávit mánibus tradi nocéntium, et crucis subíre torméntum: + Qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + (Et sub silentio concluditur.) + en: | + V. Christ became obedient for us unto death, even the death of the Cross: for which cause God also hath exalted Him, and given Him a Name which is above every name. + Our Father (said silently). + Psalm 50 (Have mercy on me, O God). + Look down, we beseech Thee, O Lord, upon this Thy family, for which our Lord Jesus Christ did not hesitate to be delivered into the hands of wicked men, and to undergo the torment of the Cross: + Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + (And it is concluded in silence.) +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/maundy-thursday-benedictus-antiphon.yml b/src/data/propers/temporal/maundy-thursday-benedictus-antiphon.yml new file mode 100644 index 0000000..8a7682a --- /dev/null +++ b/src/data/propers/temporal/maundy-thursday-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-04-02 (Maundy Thursday that year). Matches +# Tempora/Quad6-4.txt's own [Ant 2]. Matthew 26:48, Judas's sign to the +# arresting party in Gethsemane. +id: maundy-thursday-benedictus-antiphon +text: + la: "Tráditor autem * dedit eis signum, dicens: Quem osculátus fúero, ipse est, tenéte eum." + en: "Now he that betrayed Him * gave them a sign, saying: Whomsoever I shall kiss, that same is He: hold Him fast." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/maundy-thursday-collect.yml b/src/data/propers/temporal/maundy-thursday-collect.yml new file mode 100644 index 0000000..4b9ee79 --- /dev/null +++ b/src/data/propers/temporal/maundy-thursday-collect.yml @@ -0,0 +1,37 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-4.txt. +# This day's Office has no ordinary "Oremus...Per Dominum" collect at all +# -- its [Rule] explicitly omits the usual "Oratio" conclusion formula +# ("Omit ... Conclusion ..."), and its real [Oratio] section is instead +# the distinctive Holy Week Tenebrae form: the versicle "Christus factus +# est pro nobis obédiens usque ad mortem" (Phil 2:8), said aloud, followed +# by the Pater Noster recited silently, Psalm 50, and then this same +# day's own "Oratio Matutinum" prayer -- concluded "sub silentio" (in +# silence), not with the ordinary spoken "Amen." This whole sequence is +# reused verbatim (via the file's own `@:Oratio Matutinum` reference) at +# both Vespers and Matins for this one day, so it stands as the day's +# single real collect here. The closing prayer itself +# ("Réspice, quǽsumus...") is the same text Spy Wednesday's own Vespers +# uses (see spy-wednesday-collect.yml's note) -- not independently +# authored for Thursday, but genuinely this day's own text per the source. +# Not live-cross-checked (the live engine's HTML doesn't surface this +# unusual silent-conclusion form cleanly for a scripted query) -- +# transcribed directly from the raw file instead, hence `draft`. +id: maundy-thursday-collect +text: + la: | + V. Christus factus est pro nobis obédiens usque ad mortem. + Pater noster (secreto). + Psalmus 50 (Miserere). + Réspice, quǽsumus, Dómine, super hanc famíliam tuam, pro qua Dóminus noster Jesus Christus non dubitávit mánibus tradi nocéntium, et crucis subíre torméntum: + Qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + (Et sub silentio concluditur.) + en: | + V. Christ became obedient for us unto death. + Our Father (said silently). + Psalm 50 (Have mercy on me, O God). + Look down, we beseech Thee, O Lord, upon this Thy family, for which our Lord Jesus Christ did not hesitate to be delivered into the hands of wicked men, and to undergo the torment of the Cross: + Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + (And it is concluded in silence.) +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/maundy-thursday-magnificat-antiphon.yml b/src/data/propers/temporal/maundy-thursday-magnificat-antiphon.yml new file mode 100644 index 0000000..ce5f45f --- /dev/null +++ b/src/data/propers/temporal/maundy-thursday-magnificat-antiphon.yml @@ -0,0 +1,16 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-04-02. Matches Tempora/Quad6-4.txt's own [Ant 3]. +# Matthew 26:26, the institution of the Eucharist at the Last Supper -- +# fittingly this day's own Vespers antiphon, since Maundy Thursday's +# Vespers historically commemorates the institution most directly (the +# source's own rubric note that ordinary Vespers is "not said today" by +# those attending the evening Mass of the Lord's Supper, since that Mass +# itself liturgically incorporates Vespers, doesn't remove this text from +# the Office for anyone praying the Hours on their own). +id: maundy-thursday-magnificat-antiphon +text: + la: "Cenántibus autem illis * accépit Jesus panem, et benedíxit, ac fregit, dedítque discípulis suis." + en: "And as they were eating, * Jesus took bread, and blessed it, and broke it, and gave it to His disciples." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/monday-holy-week-benedictus-antiphon.yml b/src/data/propers/temporal/monday-holy-week-benedictus-antiphon.yml new file mode 100644 index 0000000..d48db13 --- /dev/null +++ b/src/data/propers/temporal/monday-holy-week-benedictus-antiphon.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-30 (Monday of Holy Week that year, no saint +# collision). Also matches Tempora/Quad6-1.txt's own [Ant 2] (Monastic +# form; the file's separate "(rubrica praedicatorum)" variant, "Non +# habéres...", is a Dominican-use alternative not followed here). John +# 13:31-32, Christ's own words at the Last Supper as read forward into +# Monday's Gospel pericope (John 12). +id: monday-holy-week-benedictus-antiphon +text: + la: "Clarífica me, Pater, * apud temetípsum claritáte, quam hábui priúsquam mundus fíeret." + en: "Father, glorify Thou Me * with Thine own self, with the glory which I had with Thee before the world was." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/monday-holy-week-collect.yml b/src/data/propers/temporal/monday-holy-week-collect.yml new file mode 100644 index 0000000..2b28c44 --- /dev/null +++ b/src/data/propers/temporal/monday-holy-week-collect.yml @@ -0,0 +1,27 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-1.txt, +# [Oratio 2] (its [Rule]'s "Antiphonas horas"/Feria pattern gives each hour +# its own antiphon but this app only models one collect per day via +# getDayCollect -- see resolve-common.ts's own doc comment). Cross-checked +# live against Divinum Officium (Monastic Tridentinum 1617), Lauds, real +# date 2026-03-30 (Monday of Holy Week that year) -- confirmed this is the +# actual Lauds/ordinary-hours collect text and wording. Note: this day's +# real Vespers uses a *different* forward-looking collect of its own +# ([Oratio 3] in the source, "Adjuva nos, Deus, salutáris noster...", +# live-confirmed too) -- not modeled separately here since this app has no +# per-hour collect variation; the Lauds/ordinary-hours text was chosen as +# the day's single representative collect. +id: monday-holy-week-collect +text: + la: | + Orémus. + Da, quǽsumus, omnípotens Deus: ut, qui in tot advérsis ex nostra infirmitáte defícimus; intercedénte unigéniti Fílii tui passióne respirémus: + Qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + Grant, we beseech Thee, almighty God, that we, who through our own weakness are overcome by so many adversities, may find relief through the intercession of the Passion of Thine Only-begotten Son: + Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/monday-holy-week-magnificat-antiphon.yml b/src/data/propers/temporal/monday-holy-week-magnificat-antiphon.yml new file mode 100644 index 0000000..41231d1 --- /dev/null +++ b/src/data/propers/temporal/monday-holy-week-magnificat-antiphon.yml @@ -0,0 +1,12 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-03-30. Matches Tempora/Quad6-1.txt's own [Ant 3]. John +# 19:11, Christ's answer to Pilate -- read here proleptically, as Holy +# Week's Vespers antiphons throughout look forward to the Passion +# narrative regardless of the day's own Gospel reading. +id: monday-holy-week-magnificat-antiphon +text: + la: "Non habéres * in me potestátem, nisi désuper tibi datum fuísset." + en: "Thou couldest have no power at all against Me, * except it were given thee from above." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/monday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/monday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..c91316d --- /dev/null +++ b/src/data/propers/temporal/monday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-23 (a real Monday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Feria +# Secunda infra Hebdomadam Passionis ~ Feria major", no commemoration). +id: monday-passion-week-benedictus-antiphon +text: + la: "In die magno * festivitátis stabat Jesus, et clamábat dicens: Si quis sitit, véniat ad me, et bibat." + en: "In the last day, that great day of the Feast, * Jesus stood and cried, saying: If any man thirst, let Him come unto Me, and drink." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/monday-passion-week-collect.yml b/src/data/propers/temporal/monday-passion-week-collect.yml new file mode 100644 index 0000000..692c15c --- /dev/null +++ b/src/data/propers/temporal/monday-passion-week-collect.yml @@ -0,0 +1,25 @@ +# Transcribed from the reference engine's Mass propers (not the Office +# file, which carries no [Oratio] of its own for this day at all -- see +# web/www/horas/Latin/Tempora/Quad5-1.txt): the actual proper collect for +# this day lives at web/www/missa/Latin/Tempora/Quad5-1.txt's [Oratio], +# with the parallel English at web/www/missa/English/Tempora/Quad5-1.txt. +# Marked `draft`, not `verified`, per this repo's convention: this is a +# direct Missal-text transcription (with the standard "$Per Dominum" +# closing-formula macro expanded from +# web/www/missa/Latin/Ordo/Prayers.txt's own [Per Dominum]/English +# equivalent), not a live Divine-Office-engine cross-check. +id: monday-passion-week-collect +text: + la: | + Orémus. + Sanctífica, quǽsumus, Dómine, nostra jejúnia: et cunctárum nobis indulgéntiam propítius largíre culpárum. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + O Lord, we beseech You, make holy our fasting, and graciously lavish upon us forgiveness for all our sins. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/monday-passion-week-magnificat-antiphon.yml b/src/data/propers/temporal/monday-passion-week-magnificat-antiphon.yml new file mode 100644 index 0000000..8210351 --- /dev/null +++ b/src/data/propers/temporal/monday-passion-week-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-03-23 (same clean date as the sibling +# -benedictus-antiphon.yml; title tag confirmed "Vespera de Tempore +# occurente" -- this day's own, non-anticipated Second Vespers). +id: monday-passion-week-magnificat-antiphon +text: + la: "Si quis sitit, * véniat ad me, et bibat: et de ventre ejus fluent aquæ vivæ, dicit Dóminus." + en: "If any man thirst, * let him come unto Me, and drink, and out of his belly shall flow living water, saith the Lord." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/sacred-heart-benedictus-antiphon.yml b/src/data/propers/temporal/sacred-heart-benedictus-antiphon.yml new file mode 100644 index 0000000..f88bc90 --- /dev/null +++ b/src/data/propers/temporal/sacred-heart-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent02-5.txt's [Ant 2] (the Lauds/Benedictus +# antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/Ant3=Vespers2 +# convention) / English/Tempora/Pent02-5.txt's own [Ant 2]. +id: sacred-heart-benedictus-antiphon +text: + la: "Facta sunt * enim hæc ut Scriptúra implerétur quæ dicit: Vidébunt in quem transfixérunt." + en: "For these things were done * that the Scripture should be fulfilled which saith: They shall look on him whom they pierced." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/sacred-heart-collect.yml b/src/data/propers/temporal/sacred-heart-collect.yml new file mode 100644 index 0000000..6bf9883 --- /dev/null +++ b/src/data/propers/temporal/sacred-heart-collect.yml @@ -0,0 +1,33 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent02-5.txt's [Oratio] / English/Tempora/Pent02-5.txt's +# [Oratio] -- Sacred Heart's real, own collect (the feast's [Officium] proper +# collect, embedded again verbatim inside that same file's own [Octava 2] +# commemoration block, confirming it as the feast's real one). That same +# file also carries a second, distinct [Oratio3]/"Protéctor in te +# sperántium" text at Second Vespers -- this is the standard post-Pentecost +# Sunday collect (a concurring Sunday's own commemoration merged into the +# CGI's rendered page, not a second real Sacred-Heart collect), so it is +# deliberately not used here; per this project's own precedent +# (vu-assumption-collect-do-inconsistency: "vu correctly uses the old +# collect uniformly throughout" when a source file carries two candidate +# collects for one feast), this file uses [Oratio] alone, consistently. +# +# Audit note: this id is registered in ALWAYS_OVERRIDE_TEMPORAL_IDS but +# had never actually been authored, so the day was silently falling back +# to Trinity-week feria content despite sacred-heart.yml's own record +# already existing. +id: sacred-heart-collect +text: + la: | + Orémus. + Deus, qui nobis in Corde Fílii tui, nostris vulneráto peccátis, infinítos dilectiónis thesáuros misericórditer largíri dignáris: concéde, quǽsumus, ut illi devótum pietátis nostræ præstántes obséquium, dignæ quoque satisfactiónis exhibeámus offícium. + Per eúmdem Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + O God, who hast suffered the Heart of thy Son to be wounded by our sins, and in that very Heart hast mercifully bestowed on us the abundant riches of thy love: grant, we beseech thee, that offering him the devout homage of our piety, we may also render him a worthy tribute of satisfaction. + Through the same Jesus Christ, thy Son, Our Lord, Who liveth and reigneth with thee in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/sacred-heart-magnificat-antiphon.yml b/src/data/propers/temporal/sacred-heart-magnificat-antiphon.yml new file mode 100644 index 0000000..f7cc7ff --- /dev/null +++ b/src/data/propers/temporal/sacred-heart-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Read directly from the reference engine's own static file: +# web/www/horas/Latin/Tempora/Pent02-5.txt's [Ant 3] (the Second Vespers/ +# Magnificat antiphon, per this project's Ant1=Vespers1/Ant2=Lauds/ +# Ant3=Vespers2 convention) / English/Tempora/Pent02-5.txt's own [Ant 3]. +id: sacred-heart-magnificat-antiphon +text: + la: "Ad Jesum autem * cum veníssent, ut vidérunt eum jam mórtuum, non fregérunt ejus crura, sed unus mílitum láncea latus ejus apéruit et contínuo exívit sanguis et aqua." + en: "But when they came to Jesus * and saw that he was dead already, they broke not his legs, but one of the soldiers with a spear pierced his side, and forthwith came there out Blood and Water." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/saturday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/saturday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..0ca6bbe --- /dev/null +++ b/src/data/propers/temporal/saturday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2028-04-08 (a real Saturday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Sabbato +# infra Hebdomadam Passionis ~ Feria major", no commemoration). Lauds +# itself is unaffected by the Vespers-anticipation wrinkle documented in +# saturday-passion-week.yml (that only touches the evening's Magnificat +# antiphon, which this batch deliberately doesn't author a file for). +id: saturday-passion-week-benedictus-antiphon +text: + la: "Clarífica me, Pater, * apud temetípsum claritáte, quam hábui priúsquam mundus fíeret." + en: "Father, glorify Thou Me * with thine Own Self, with the glory which I had with thee before the world was." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/saturday-passion-week-collect.yml b/src/data/propers/temporal/saturday-passion-week-collect.yml new file mode 100644 index 0000000..fa0e71c --- /dev/null +++ b/src/data/propers/temporal/saturday-passion-week-collect.yml @@ -0,0 +1,25 @@ +# Transcribed from the reference engine's Mass propers (not the Office +# file, which carries no [Oratio] of its own for this day -- see +# web/www/horas/Latin/Tempora/Quad5-6.txt): the actual proper collect +# lives at web/www/missa/Latin/Tempora/Quad5-6.txt's [Oratio], with the +# parallel English at web/www/missa/English/Tempora/Quad5-6.txt. Marked +# `draft`, not `verified` -- see monday-passion-week-collect.yml's own +# note for why (direct Missal transcription, standard closing formula +# expanded, no live Office cross-check). (This day's own Lauds collect is +# unaffected by the Vespers-anticipation wrinkle documented in +# saturday-passion-week.yml -- only the evening's Magnificat antiphon is.) +id: saturday-passion-week-collect +text: + la: | + Orémus. + Profíciat, quǽsumus, Dómine, plebs tibi dicáta piæ devotiónis afféctu: ut sacris actiónibus erudíta, quanto majestáti tuæ fit grátior, tanto donis potióribus augeátur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + O Lord, may the people dedicated to You desire to serve You more and more, that, taught by these sacred rites, they may be enriched by more precious gifts as they grow in favor with Your majesty. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/spy-wednesday-benedictus-antiphon.yml b/src/data/propers/temporal/spy-wednesday-benedictus-antiphon.yml new file mode 100644 index 0000000..326c26e --- /dev/null +++ b/src/data/propers/temporal/spy-wednesday-benedictus-antiphon.yml @@ -0,0 +1,13 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-04-01. Matches Tempora/Quad6-3.txt's own [Ant 2_] +# (the Monastic/plain form the live engine actually renders; the file's +# separate [Ant 2C] "Tanto témpore vobíscum eram..." is the alternative +# used "sed rubrica cisterciensis", not this app's own track). Mark +# 14:37, Christ waking Peter in Gethsemane. +id: spy-wednesday-benedictus-antiphon +text: + la: "Simon, dormis? * non potuísti una hora vigiláre mecum?" + en: "Simon, sleepest thou? * Couldest thou not watch one hour with Me?" +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/spy-wednesday-collect.yml b/src/data/propers/temporal/spy-wednesday-collect.yml new file mode 100644 index 0000000..17ff77e --- /dev/null +++ b/src/data/propers/temporal/spy-wednesday-collect.yml @@ -0,0 +1,25 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-3.txt, +# [Oratio 2]. Cross-checked live against Divinum Officium (Monastic +# Tridentinum 1617), Lauds, real date 2026-04-01 (Wednesday of Holy Week +# that year) -- confirmed as the actual Lauds/ordinary-hours collect. This +# day's own Vespers collect ([Oratio 3], "Réspice, quǽsumus, Dómine, +# super hanc famíliam tuam...") is the very prayer the Triduum's Matins +# for Maundy Thursday/Good Friday/Holy Saturday all reuse as their own +# closing "Oratio Matutinum" -- see maundy-thursday-collect.yml -- but per +# this app's single-collect-per-day design, Wednesday itself keeps its own +# Lauds/ordinary-hours text here rather than that shared Vespers one. +id: spy-wednesday-collect +text: + la: | + Orémus. + Præsta, quǽsumus, omnípotens Deus: ut, qui nostris excéssibus incessánter afflígimur, per unigéniti Fílii tui passiónem liberémur: + Qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + Grant, we beseech Thee, almighty God, that we, who are unceasingly afflicted by reason of our own transgressions, may be set free through the Passion of Thine Only-begotten Son: + Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/spy-wednesday-magnificat-antiphon.yml b/src/data/propers/temporal/spy-wednesday-magnificat-antiphon.yml new file mode 100644 index 0000000..0080e6e --- /dev/null +++ b/src/data/propers/temporal/spy-wednesday-magnificat-antiphon.yml @@ -0,0 +1,13 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-04-01. Matches Tempora/Quad6-3.txt's own [Ant 3]. +# Matthew 26:73, the servant-maid's accusation of Peter in the high +# priest's courtyard -- the Gospel episode that gives this day its +# traditional English name "Spy Wednesday" (the day Judas the "spy" +# bargained to betray Christ). +id: spy-wednesday-magnificat-antiphon +text: + la: "Ancílla dixit * Petro: Vere tu ex illis es: nam et loquéla tua maniféstum te facit." + en: "The maid said * unto Peter: Surely thou also art one of them, for thy speech betrayeth thee." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/thursday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/thursday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..0a1c966 --- /dev/null +++ b/src/data/propers/temporal/thursday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2028-04-06 (a real Thursday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Feria +# Quinta infra Hebdomadam Passionis ~ Feria major", no commemoration). +id: thursday-passion-week-benedictus-antiphon +text: + la: "Magíster dicit: * Tempus meum prope est, apud te fácio Pascha cum discípulis meis." + en: "The Master saith: * My time is at hand; I will keep the Passover at thy house with My disciples." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/thursday-passion-week-collect.yml b/src/data/propers/temporal/thursday-passion-week-collect.yml new file mode 100644 index 0000000..b64735c --- /dev/null +++ b/src/data/propers/temporal/thursday-passion-week-collect.yml @@ -0,0 +1,23 @@ +# Transcribed from the reference engine's Mass propers (not the Office +# file, which carries no [Oratio] of its own for this day -- see +# web/www/horas/Latin/Tempora/Quad5-4.txt): the actual proper collect +# lives at web/www/missa/Latin/Tempora/Quad5-4.txt's [Oratio], with the +# parallel English at web/www/missa/English/Tempora/Quad5-4.txt. Marked +# `draft`, not `verified` -- see monday-passion-week-collect.yml's own +# note for why (direct Missal transcription, standard closing formula +# expanded, no live Office cross-check). +id: thursday-passion-week-collect +text: + la: | + Orémus. + Præsta, quǽsumus, omnípotens Deus: ut dígnitas condiciónis humánæ, per immoderántiam sauciáta, medicinális parsimóniæ stúdio reformétur. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + Grant, we beseech You, almighty God, that the dignity of human nature, weakened by excessive self-indulgence, may be restored by the earnest practice of healing self-denial. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/thursday-passion-week-magnificat-antiphon.yml b/src/data/propers/temporal/thursday-passion-week-magnificat-antiphon.yml new file mode 100644 index 0000000..c7693ab --- /dev/null +++ b/src/data/propers/temporal/thursday-passion-week-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2028-04-06 (same clean date as the sibling +# -benedictus-antiphon.yml; title tag confirmed "Vespera de Tempore +# occurente" -- this day's own, non-anticipated Second Vespers). +id: thursday-passion-week-magnificat-antiphon +text: + la: "Desidério desiderávi * hoc Pascha manducáre vobíscum, ántequam pátiar." + en: "With desire I have desired * to eat this Passover with you before I suffer." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/tuesday-holy-week-benedictus-antiphon.yml b/src/data/propers/temporal/tuesday-holy-week-benedictus-antiphon.yml new file mode 100644 index 0000000..c6c1db5 --- /dev/null +++ b/src/data/propers/temporal/tuesday-holy-week-benedictus-antiphon.yml @@ -0,0 +1,13 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2026-03-31. Matches Tempora/Quad6-2.txt's own [Ant 2] +# (Monastic form -- the file's "(rubrica praedicatorum)" variant, "Nemo +# tollit a me ánimam meam...", is a Dominican-use alternative not followed +# here). John 13:1, opening words of the Johannine Passion narrative, +# the famous Mandatum antiphon. +id: tuesday-holy-week-benedictus-antiphon +text: + la: "Ante diem festum * Paschæ, sciens Jesus quia venit hora ejus, cum dilexísset suos, in finem diléxit eos." + en: "Before the feast of the Passover, * Jesus, knowing that His hour was come, having loved His own, loved them unto the end." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/tuesday-holy-week-collect.yml b/src/data/propers/temporal/tuesday-holy-week-collect.yml new file mode 100644 index 0000000..6e08af8 --- /dev/null +++ b/src/data/propers/temporal/tuesday-holy-week-collect.yml @@ -0,0 +1,23 @@ +# Read from the reference engine: web/www/horas/Latin/Tempora/Quad6-2.txt, +# [Oratio 2]. Cross-checked live against Divinum Officium (Monastic +# Tridentinum 1617), Lauds, real date 2026-03-31 (Tuesday of Holy Week +# that year) -- confirmed as the actual Lauds/ordinary-hours collect. As +# with Monday, this day's own Vespers uses a different, distinct collect +# ([Oratio 3], "Tua nos misericórdia, Deus...", also live-confirmed) not +# modeled separately -- see monday-holy-week-collect.yml's note on this +# app's single-collect-per-day design. +id: tuesday-holy-week-collect +text: + la: | + Orémus. + Omnípotens sempitérne Deus: da nobis ita Domínicæ passiónis sacraménta perágere; ut indulgéntiam percípere mereámur. + Per eúmdem Dóminum nostrum Jesum Christum Fílium tuum, qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + Almighty and everlasting God, grant us so to keep the mysteries of the Lord's Passion, that we may deserve to obtain Thy pardon. + Through the same Jesus Christ, Thy Son, Our Lord, Who liveth and reigneth with Thee in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/tuesday-holy-week-magnificat-antiphon.yml b/src/data/propers/temporal/tuesday-holy-week-magnificat-antiphon.yml new file mode 100644 index 0000000..a9f019c --- /dev/null +++ b/src/data/propers/temporal/tuesday-holy-week-magnificat-antiphon.yml @@ -0,0 +1,10 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2026-03-31. Matches Tempora/Quad6-2.txt's own [Ant 3]. John +# 10:18, Christ's own words on laying down His life freely. +id: tuesday-holy-week-magnificat-antiphon +text: + la: "Potestátem hábeo * ponéndi ánimam meam, et íterum suméndi eam." + en: "I have power * to lay down My life, and I have power to take it up again." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/tuesday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/tuesday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..590944b --- /dev/null +++ b/src/data/propers/temporal/tuesday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2028-04-04 (a real Tuesday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Feria +# Tertia infra Hebdomadam Passionis ~ Feria major", no commemoration). +id: tuesday-passion-week-benedictus-antiphon +text: + la: "Tempus meum * nondum advénit, tempus autem vestrum semper est parátum." + en: "My time is not yet come, * but your time is always ready." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/tuesday-passion-week-collect.yml b/src/data/propers/temporal/tuesday-passion-week-collect.yml new file mode 100644 index 0000000..ad8f32c --- /dev/null +++ b/src/data/propers/temporal/tuesday-passion-week-collect.yml @@ -0,0 +1,23 @@ +# Transcribed from the reference engine's Mass propers (not the Office +# file, which carries no [Oratio] of its own for this day -- see +# web/www/horas/Latin/Tempora/Quad5-2.txt): the actual proper collect +# lives at web/www/missa/Latin/Tempora/Quad5-2.txt's [Oratio], with the +# parallel English at web/www/missa/English/Tempora/Quad5-2.txt. Marked +# `draft`, not `verified` -- see monday-passion-week-collect.yml's own +# note for why (direct Missal transcription, standard closing formula +# expanded, no live Office cross-check). +id: tuesday-passion-week-collect +text: + la: | + Orémus. + Nostra tibi, Dómine, quǽsumus, sint accépta jejúnia: quæ nos et expiándo grátia tua dignos effíciant; et ad remédia perdúcant ætérna. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + May our fasting be acceptable to You, we beseech You, O Lord; may it be atonement for our sins, make us worthy of Your grace, and lead us to the everlasting remedy of the life to come. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/tuesday-passion-week-magnificat-antiphon.yml b/src/data/propers/temporal/tuesday-passion-week-magnificat-antiphon.yml new file mode 100644 index 0000000..1b4476f --- /dev/null +++ b/src/data/propers/temporal/tuesday-passion-week-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2028-04-04 (same clean date as the sibling +# -benedictus-antiphon.yml; title tag confirmed "Vespera de Tempore +# occurente" -- this day's own, non-anticipated Second Vespers). +id: tuesday-passion-week-magnificat-antiphon +text: + la: "Vos ascéndite * ad diem festum hunc: ego autem non ascéndam, quia tempus meum nondum advénit." + en: "Go ye up unto this Feast; * I go not up (yet) unto this Feast, for My time is not yet full come." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/wednesday-passion-week-benedictus-antiphon.yml b/src/data/propers/temporal/wednesday-passion-week-benedictus-antiphon.yml new file mode 100644 index 0000000..b7ec128 --- /dev/null +++ b/src/data/propers/temporal/wednesday-passion-week-benedictus-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# live query, 2028-04-05 (a real Wednesday-of-Passion-week date confirmed +# clean of any sanctoral collision -- title rendered exactly "Feria +# Quarta infra Hebdomadam Passionis ~ Feria major", no commemoration). +id: wednesday-passion-week-benedictus-antiphon +text: + la: "Oves meæ * vocem meam áudiunt: et ego Dóminus agnósco eas." + en: "My sheep hear My voice, * and I, the Lord, know them." +status: + la: verified + en: verified diff --git a/src/data/propers/temporal/wednesday-passion-week-collect.yml b/src/data/propers/temporal/wednesday-passion-week-collect.yml new file mode 100644 index 0000000..bc2583f --- /dev/null +++ b/src/data/propers/temporal/wednesday-passion-week-collect.yml @@ -0,0 +1,23 @@ +# Transcribed from the reference engine's Mass propers (not the Office +# file, which carries no [Oratio] of its own for this day -- see +# web/www/horas/Latin/Tempora/Quad5-3.txt): the actual proper collect +# lives at web/www/missa/Latin/Tempora/Quad5-3.txt's [Oratio], with the +# parallel English at web/www/missa/English/Tempora/Quad5-3.txt. Marked +# `draft`, not `verified` -- see monday-passion-week-collect.yml's own +# note for why (direct Missal transcription, standard closing formula +# expanded, no live Office cross-check). +id: wednesday-passion-week-collect +text: + la: | + Orémus. + Sanctificáto hoc jejúnio, Deus, tuórum corda fidélium miserátor illústra: et quibus devotiónis præstas afféctum, præbe supplicántibus pium benígnus audítum. + Per Dóminum nostrum Jesum Christum, Fílium tuum: qui tecum vivit et regnat in unitáte Spíritus Sancti Deus, per ómnia sǽcula sæculórum. + R. Amen. + en: | + Let us pray. + In Your mercy, O Lord, may this hallowing fast enlighten the hearts of Your faithful people, and since You have given them the desire to serve You, lend a gracious ear to their prayers. + Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end. + R. Amen. +status: + la: draft + en: draft diff --git a/src/data/propers/temporal/wednesday-passion-week-magnificat-antiphon.yml b/src/data/propers/temporal/wednesday-passion-week-magnificat-antiphon.yml new file mode 100644 index 0000000..4da2b3e --- /dev/null +++ b/src/data/propers/temporal/wednesday-passion-week-magnificat-antiphon.yml @@ -0,0 +1,11 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# live query, 2028-04-05 (same clean date as the sibling +# -benedictus-antiphon.yml; title tag confirmed "Vespera de Tempore +# occurente" -- this day's own, non-anticipated Second Vespers). +id: wednesday-passion-week-magnificat-antiphon +text: + la: "Multa bona ópera * operátus sum vobis: propter quod opus vultis me occídere?" + en: "Many good works * have I wrought among you, and for them ye go about to kill Me?" +status: + la: verified + en: verified diff --git a/src/hours/resolve-common.ts b/src/hours/resolve-common.ts index 8be80ca..1c5cf14 100644 --- a/src/hours/resolve-common.ts +++ b/src/hours/resolve-common.ts @@ -5,6 +5,7 @@ import { getCommonProper, getTemporalProper } from '../propers'; import { getSaintRecord } from '../calendar/feasts'; import { resolveActiveOctave, activeOctavesFor, octaveGoverningPrivilegedDay, isAtLeast, isSundayOrFeast } from '../calendar'; import { getTemporalFeastRecord } from '../calendar/temporal-feasts'; +import { resolveTemporalId } from '../calendar/temporal-id'; import { isInTriduum } from '../calendar/temporal'; import { isAllSouls, REQUIEM_GLORIA_PATRI } from './all-souls'; import { temporalLabel } from '../calendar/day-label'; @@ -44,6 +45,29 @@ export function resolveCommon(id: string): ResolvedText { return toResolvedText(getCommonProper(id)); } +/** + * A named temporal winner's own `${winner.id}-` proper, falling back + * to the coarse governing-Sunday/weekday id (`resolveTemporalId(day.date)` + * — what the id would have been without any override) when the winner's + * own file hasn't been authored yet. Exists because a movable/override + * temporal id (Corpus Christi, Maundy Thursday, ...) getting its own real + * winner identity via `resolveOfficeWinner` doesn't guarantee every one of + * its proper texts has actually been authored — without this, an + * unauthored kind renders as bare `missing` instead of degrading to + * whatever content the day would otherwise have shown (e.g. Corpus + * Christi's own missing collect falling back to `post-pentecost-01`'s, + * Maundy Thursday's falling back to `palm-sunday`'s). Only used for + * `winner.kind === 'temporal'` lookups — a sanctoral winner's own + * Common-category fallback chain is unrelated and untouched. + */ +function getTemporalProperWithFallback(winnerId: string, kind: string, day: LiturgicalDay): ProperText { + const named = getTemporalProper(`${winnerId}-${kind}`); + if (named.status.la !== 'missing' || named.status.en !== 'missing') { + return named; + } + return getTemporalProper(`${resolveTemporalId(day.date)}-${kind}`); +} + /** Terce/Sext/None's own Matins-less hymn 'hymn' case — a plain, fixed, * self-contained text with no doxology mechanism at all (the closing * doxology is baked directly into each hour's own hymn text file; see @@ -70,6 +94,25 @@ export const ALWAYS_OVERRIDE_TEMPORAL_IDS = new Set([ 'circumcision', 'holy-name-of-jesus', 'vigil-of-christmas', + // Passiontide: every one of the 14 days from Passion Sunday through Holy + // Saturday has its own real identity now (see + // calendar/movable-feasts.ts's anchor-based override for the 12 days in + // between the two Sundays) — same "does this id carry its own real + // office" reasoning as every other entry above. + 'passion-sunday', + 'monday-passion-week', + 'tuesday-passion-week', + 'wednesday-passion-week', + 'thursday-passion-week', + 'friday-passion-week', + 'saturday-passion-week', + 'palm-sunday', + 'monday-holy-week', + 'tuesday-holy-week', + 'spy-wednesday', + 'maundy-thursday', + 'good-friday', + 'holy-saturday', ]); /** @@ -610,7 +653,7 @@ export function substituteName(text: ResolvedText, name: { la: string[]; en: str export function getDayCollect(day: LiturgicalDay): ResolvedText { const winner = resolveOfficeWinner(day); if (winner.kind === 'temporal') { - return toResolvedText(getTemporalProper(`${winner.id}-collect`)); + return toResolvedText(getTemporalProperWithFallback(winner.id, 'collect', day)); } const saint = getSaintRecord(winner.id); if (saint?.propers) { @@ -941,7 +984,7 @@ export function resolveSuffrages( export function getBenedictusAntiphon(day: LiturgicalDay): ResolvedText { const winner = resolveOfficeWinner(day); if (winner.kind === 'temporal') { - return toResolvedText(getTemporalProper(`${winner.id}-benedictus-antiphon`)); + return toResolvedText(getTemporalProperWithFallback(winner.id, 'benedictus-antiphon', day)); } const saint = getSaintRecord(winner.id); if (saint?.propers) { @@ -1000,7 +1043,7 @@ export function getMagnificatAntiphon(day: LiturgicalDay): ResolvedText { } const winner = resolveOfficeWinner(day); if (winner.kind === 'temporal') { - const named = toResolvedText(getTemporalProper(`${winner.id}-magnificat-antiphon`)); + const named = toResolvedText(getTemporalProperWithFallback(winner.id, 'magnificat-antiphon', day)); if (named.status.la !== 'missing' || named.status.en !== 'missing') { return named; } diff --git a/tests/calendar/day-label.test.ts b/tests/calendar/day-label.test.ts index c28188f..e592d70 100644 --- a/tests/calendar/day-label.test.ts +++ b/tests/calendar/day-label.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { resolveDay } from '../../src/calendar'; import { resolveEveningDay } from '../../src/calendar/vespers'; -import { getDayLabel, getVespersStatusLabel } from '../../src/calendar/day-label'; +import { getDayLabel, getVespersStatusLabel, temporalLabel } from '../../src/calendar/day-label'; import type { LiturgicalDay } from '../../src/calendar/types'; describe('getDayLabel — ordinal temporal label', () => { @@ -452,3 +452,54 @@ describe('getDayLabel/getVespersStatusLabel — Vespers evening with a temporal expect(getVespersStatusLabel(day, '2026-08-17').en).toBe('Second Vespers (of today)'); }); }); + +// Every day from Passion Sunday through Holy Saturday used to render the +// same generic "Weekday in Passiontide" label (no `passiontide` entry in +// ORDINAL_SEASONS) -- fixed 2026-09-06 by giving each of the 14 days its +// own real winner id (calendar/movable-feasts.ts's anchor-based override, +// same mechanism Corpus Christi/Ascension already use) plus a +// temporal-feasts display record. Checked via `getDayLabel` (the actual +// on-screen header), not `temporalLabel` (which recomputes the plain +// temporal identity straight from `resolveTemporalId`, ignoring any +// winner-id override, so it still shows the old generic phrase here on +// purpose -- a different, narrower function, not itself part of this +// fix). A `startsWith` check (not exact equality) tolerates a real +// same-day sanctoral winner/commemoration riding along -- some of these +// 2026 dates are won outright by a real Duplex+ saint (St. Gabriel the +// Archangel, the Annunciation) or carry a transferred-away saint, which +// is expected/correct (see calendar/movable-feasts.ts's Passiontide +// override doc comment), not a bug in this labeling fix. +describe('getDayLabel — Passiontide (Passion Sunday through Holy Saturday)', () => { + it.each([ + ['2026-03-22', 'Passion Sunday'], + ['2026-03-23', 'Monday of Passion Week'], + ['2026-03-24', 'Tuesday of Passion Week'], + ['2026-03-25', 'Wednesday of Passion Week'], + ['2026-03-26', 'Thursday of Passion Week'], + ['2026-03-27', 'Friday of Passion Week'], + ['2026-03-28', 'Saturday of Passion Week'], + ['2026-03-29', 'Palm Sunday'], + ['2026-03-30', 'Monday of Holy Week'], + ['2026-03-31', 'Tuesday of Holy Week'], + ['2026-04-01', 'Spy Wednesday'], + ['2026-04-02', 'Maundy Thursday'], + ['2026-04-03', 'Good Friday'], + ['2026-04-04', 'Holy Saturday'], + ])('%s has its own distinct name starting with "%s", not a generic weekday-in-Passiontide phrase', (date, expectedName) => { + const day = resolveDay(date); + const label = getDayLabel(day); + if (day.winner.kind === 'temporal') { + expect(label.en?.startsWith(expectedName)).toBe(true); + } + expect(label.en).not.toMatch(/in Passiontide/); + expect(label.la?.length).toBeGreaterThan(0); + // The plain temporal identity (independent of who wins) is also + // always this day's own real name now, via `temporalLabel` directly. + expect(temporalLabel(day).en).toBe(expectedName); + }); + + it('Passion Sunday and Palm Sunday show their real name via getDayLabel on a real date', () => { + expect(getDayLabel(resolveDay('2026-03-22')).en).toBe('Passion Sunday (Semiduplex)'); + expect(getDayLabel(resolveDay('2026-03-29')).en).toBe('Palm Sunday (Semiduplex)'); + }); +}); diff --git a/tests/calendar/transfer.test.ts b/tests/calendar/transfer.test.ts index 81a7568..d606a52 100644 --- a/tests/calendar/transfer.test.ts +++ b/tests/calendar/transfer.test.ts @@ -128,8 +128,16 @@ describe('the Easter-octave backlog (Palm Sunday through Low Sunday)', () => { // St. George, Semiduplex; St. Fidelis of Sigmaringen, Duplex) is // below duplex-majus. const holyMonday = resolveDay('2033-04-11'); - expect(holyMonday.winner).toEqual({ kind: 'temporal', id: 'palm-sunday' }); - expect(holyMonday.commemorations).toEqual([]); + // Monday of Holy Week now has its own real winner id (see + // calendar/movable-feasts.ts's Passiontide-day override, 2026-09-06) + // rather than inheriting Palm Sunday's own coarse id — the override + // mechanism pushes a `{kind:'temporal', id:'palm-sunday'}` + // commemoration for the coarse id it replaces, same shape every other + // movable feast (Ascension, Corpus Christi) already does; harmless, + // since day-label.ts's collectCommemorations deliberately drops any + // commemoration whose id equals the plain governing weekday. + expect(holyMonday.winner).toEqual({ kind: 'temporal', id: 'monday-holy-week' }); + expect(holyMonday.commemorations).toEqual([{ kind: 'temporal', id: 'palm-sunday' }]); expect(holyMonday.transferredAway?.candidate.id).toBe('st-leo-i'); for (const afterLowSunday of ['2033-04-25', '2033-04-26', '2033-04-27', '2033-04-28', '2033-04-29']) { diff --git a/tests/hours/resolve-common.test.ts b/tests/hours/resolve-common.test.ts index 77d8947..6df80c2 100644 --- a/tests/hours/resolve-common.test.ts +++ b/tests/hours/resolve-common.test.ts @@ -319,8 +319,20 @@ describe('getMagnificatAntiphon — classic weekday-default fallback', () => { // tests/hours/vespers.test.ts's own note where this test used to // live. Tests the mechanism directly instead, the same way this // file's other synthetic-day cases do. + // + // `date` deliberately isn't Jan 1 any more (2026-09-06): getMagnificatAntiphon + // now also falls back to `resolveTemporalId(day.date)`'s own antiphon + // (see resolve-common.ts's getTemporalProperWithFallback, added for + // the Passiontide/movable-feast content-completeness pass) before the + // classic weekday default -- Jan 1 resolves to `christmas-octave- + // sunday`, which now has real content, so that fallback tier fired + // first and hid the one this test means to exercise. `vigil-of- + // christmas` (Dec 24) is one of the few remaining coarse ids with no + // magnificat-antiphon file of its own (see saturday-passion-week.yml/ + // holy-saturday.yml for why: an anticipated First Vespers, not an + // oversight), so it still reaches the true weekday-default tier. const day: LiturgicalDay = { - date: '2026-01-01', + date: '2026-12-24', weekday: 'tuesday', season: 'trinitytide', temporalCategory: 'ordinary-feria',