diff --git a/src/data/hours/none.yml b/src/data/hours/none.yml index c7c5336..e86e24a 100644 --- a/src/data/hours/none.yml +++ b/src/data/hours/none.yml @@ -10,6 +10,9 @@ parts: resolve: by-weekday - kind: chapter textRef: { source: common, id: none-capitulum-per-annum } + - kind: preces + textRef: { source: common, id: minor-hour-preces-feriales } + label: Preces - kind: day-collect - kind: preces textRef: { source: common, id: little-hour-conclusio } diff --git a/src/data/hours/sext.yml b/src/data/hours/sext.yml index 8dbaef8..bb28e24 100644 --- a/src/data/hours/sext.yml +++ b/src/data/hours/sext.yml @@ -10,6 +10,9 @@ parts: resolve: by-weekday - kind: chapter textRef: { source: common, id: sext-capitulum-per-annum } + - kind: preces + textRef: { source: common, id: minor-hour-preces-feriales } + label: Preces - kind: day-collect - kind: preces textRef: { source: common, id: little-hour-conclusio } diff --git a/src/data/hours/terce.yml b/src/data/hours/terce.yml index a51cb01..9ff1d37 100644 --- a/src/data/hours/terce.yml +++ b/src/data/hours/terce.yml @@ -12,8 +12,14 @@ # short versicle/response (*not* a separate elaborate responsory the way # Prime's chapter-responsory.ts adds one — Monastic Terce doesn't have # one), the day's own collect, and a closing that's identical across all -# three Little Hours (see little-hour-conclusio.yml). No Preces, no Creed — -# real Monastic Terce/Sext/None have neither. +# three Little Hours (see little-hour-conclusio.yml). No Creed — real +# Monastic Terce/Sext/None doesn't have one. +# +# Preces (Kyrie/Pater Noster + a short V/R litany) were added after the +# chapter/collect, by deliberate choice, even though real Monastic +# Terce/Sext/None has none — see minor-hour-preces-feriales.yml's header +# for the reference-engine source and the "every day" simplification, +# mirroring the same deviation already made for Prime. id: terce parts: - kind: opening-versicle @@ -23,6 +29,9 @@ parts: resolve: by-weekday - kind: chapter textRef: { source: common, id: terce-capitulum-per-annum } + - kind: preces + textRef: { source: common, id: minor-hour-preces-feriales } + label: Preces - kind: day-collect - kind: preces textRef: { source: common, id: little-hour-conclusio } diff --git a/src/data/propers/common/minor-hour-preces-feriales.yml b/src/data/propers/common/minor-hour-preces-feriales.yml new file mode 100644 index 0000000..de4acfb --- /dev/null +++ b/src/data/propers/common/minor-hour-preces-feriales.yml @@ -0,0 +1,49 @@ +# Verified against Divinum Officium ("Psalterium/Special/Minor Special.txt" +# [Preces Feriales] macro = $Kyrie, $rubrica Pater secreto, $Pater noster Et, +# $Preces feriales minora; text pulled from "Psalterium/Common/Prayers.txt" +# [Kyrie]/[Pater noster Et] and "Psalterium/Special/Preces.txt" +# [Preces feriales minora]). Shared by Terce, Sext, and None — the Latin is +# identical across all three per the reference engine. +# +# Deliberate deviation from real Monastic 1617 (which has no Preces at the +# Little Hours at all) and from the reference engine's own rubric (which +# says the Pater Noster here is "secreto," silent): by explicit choice this +# project shows the Kyrie and Pater Noster as spoken text rather than +# dropping them the way Prime drops its silently-said opening Pater/Ave — +# see prime.yml's header for that contrasting precedent. +# +# Also by explicit choice, said on *every* day regardless of rank, not just +# ferias — mirroring the same "every day" simplification already made for +# Prime's ferial Preces (see prime-preces-feriales.yml). The reference +# engine's Sunday/feast form for the Little Hours (Kyrie + Pater Noster + +# a silently-said Creed, then a V/R block that's actually reused from +# Compline's own dominical Preces) looks like a data-reuse quirk rather +# than genuinely-authored minor-hour content, so it was deliberately not +# imported. +id: minor-hour-preces-feriales +text: + la: | + Kýrie, eléison. Christe, eléison. Kýrie, eléison. + Pater noster, qui es in cælis, sanctificétur nomen tuum: advéniat regnum tuum: fiat volúntas tua, sicut in cælo et in terra. Panem nostrum cotidiánum da nobis hódie: et dimítte nobis débita nostra, sicut et nos dimíttimus debitóribus nostris: + V. Et ne nos indúcas in tentatiónem: + R. Sed líbera nos a malo. + V. Dómine, Deus virtútum, convérte nos. + R. Et osténde fáciem tuam, et salvi érimus. + V. Exsúrge, Christe, ádjuva nos. + R. Et líbera nos propter nomen tuum. + V. Dómine, exáudi oratiónem meam. + R. Et clamor meus ad te véniat. + en: | + Lord, have mercy. Christ, have mercy. Lord, have mercy. + Our Father, who art in heaven, hallowed be thy name; thy kingdom come; thy will be done on earth as it is in heaven. Give us this day our daily bread; and forgive us our trespasses, as we forgive those who trespass against us: + V. And lead us not into temptation: + R. But deliver us from evil. + V. O Lord, God of hosts, convert us. + R. And show us thy face, and we shall be saved. + V. Arise, O Christ, and help us. + R. And deliver us for thy name's sake. + V. O Lord, hear my prayer. + R. And let my cry come unto thee. +status: + la: verified + en: verified diff --git a/tests/hours/little-hours.test.ts b/tests/hours/little-hours.test.ts index 7b7d522..c6e334d 100644 --- a/tests/hours/little-hours.test.ts +++ b/tests/hours/little-hours.test.ts @@ -72,6 +72,14 @@ describe.each(LITTLE_HOURS)('resolveOrdo(%s, ...)', (hourId) => { expect(prayer && prayer.kind === 'prayer' ? prayer.text.text.en : undefined).toContain('Let us pray.'); }); + it('resolves a shared Preces (Kyrie/Pater Noster + short litany) after the chapter, identical across all three hours', () => { + const ordo = resolveOrdo(hourId, TUESDAY); + const preces = ordo.parts.find((p) => p.kind === 'preces' && p.label === 'Preces'); + expect(preces && preces.kind === 'preces' ? preces.text.status.en : undefined).toBe('verified'); + expect(preces && preces.kind === 'preces' ? preces.text.text.en : undefined).toContain('Lord, have mercy.'); + expect(preces && preces.kind === 'preces' ? preces.text.text.en : undefined).toContain('Our Father'); + }); + it('ends with the shared Little Hour conclusion, identical across all three hours', () => { const ordo = resolveOrdo(hourId, TUESDAY); const conclusion = ordo.parts.find((p) => p.kind === 'preces' && p.label === 'Conclusion');