Split Terce/Sext/None Preces into always-shown Kyrie/Pater + ferial-only versicles

Kyrie eleison and Pater Noster now render every day regardless of rank
(minor-hour-kyrie-pater); the further Preces V/R versicle pairs are
ferial-only, dropped on Sunday and any sanctoral winner.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XMSokiTD2Qc5vPP2YQu3Q
This commit is contained in:
2026-09-01 06:39:10 -04:00
parent 45c1f4e958
commit b050e523ec
9 changed files with 67 additions and 25 deletions
+3
View File
@@ -10,9 +10,12 @@ parts:
resolve: by-weekday
- kind: chapter
textRef: { source: common, id: none-capitulum-per-annum }
- kind: preces
textRef: { source: common, id: minor-hour-kyrie-pater }
- kind: preces
textRef: { source: common, id: minor-hour-preces-feriales }
label: Preces
ferialOnly: true
- kind: day-collect
- kind: preces
textRef: { source: common, id: little-hour-conclusio }
+3
View File
@@ -10,9 +10,12 @@ parts:
resolve: by-weekday
- kind: chapter
textRef: { source: common, id: sext-capitulum-per-annum }
- kind: preces
textRef: { source: common, id: minor-hour-kyrie-pater }
- kind: preces
textRef: { source: common, id: minor-hour-preces-feriales }
label: Preces
ferialOnly: true
- kind: day-collect
- kind: preces
textRef: { source: common, id: little-hour-conclusio }
+10 -2
View File
@@ -18,8 +18,13 @@
# 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.
# for the reference-engine source, mirroring the same deviation already
# made for Prime. Split 2026-09-01, by explicit choice: the Kyrie/Pater
# Noster piece (minor-hour-kyrie-pater) always shows regardless of rank,
# while the further Preces versicles proper (minor-hour-preces-feriales,
# now trimmed to just those) are ferial-only (`ferialOnly: true`) —
# see hours/resolve-common.ts's isFerialOrVigil, the same predicate
# Lauds'/Vespers' own ferial Preces use.
id: terce
parts:
- kind: opening-versicle
@@ -29,9 +34,12 @@ parts:
resolve: by-weekday
- kind: chapter
textRef: { source: common, id: terce-capitulum-per-annum }
- kind: preces
textRef: { source: common, id: minor-hour-kyrie-pater }
- kind: preces
textRef: { source: common, id: minor-hour-preces-feriales }
label: Preces
ferialOnly: true
- kind: day-collect
- kind: preces
textRef: { source: common, id: little-hour-conclusio }
@@ -0,0 +1,23 @@
# Split out of minor-hour-preces-feriales.yml on 2026-09-01, by explicit
# choice: Terce/Sext/None should always show the Kyrie and Pater Noster
# (with its own "Et ne nos indúcas/Sed líbera nos a malo" completion),
# even on a Sunday or feast, while the further Preces versicles that used
# to follow in the same block (now trimmed down to just those, still under
# minor-hour-preces-feriales's own id) become ferial-only — see that
# file's header and data/hours/terce.yml's for the reasoning. Text
# otherwise unchanged from what was verified there.
id: minor-hour-kyrie-pater
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.
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.
status:
la: verified
en: verified
@@ -5,28 +5,24 @@
# [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.
# Trimmed 2026-09-01, by explicit choice: this file used to hold the whole
# block (Kyrie + Pater Noster + all four V/R pairs) and was shown every
# day. The Kyrie/Pater Noster piece was split out into its own always-
# shown `minor-hour-kyrie-pater` part (see that file) so it keeps
# appearing regardless of rank; what's left here — the three further V/R
# pairs, the actual "Preces" versicles proper — is now ferial-only
# (`ferialOnly: true` in data/hours/terce.yml etc.), matching real
# historical practice (Preces are dropped on Sundays/feasts) more closely
# than the old "every day" simplification did.
#
# 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.
# Deliberate deviation from real Monastic 1617 (which has no Preces at the
# Little Hours at all): by explicit choice this project still adds them on
# ferial days, mirroring the same "every day" simplification originally
# made for Prime's ferial Preces (see prime-preces-feriales.yml) but now
# scoped to ferias only, per direct instruction.
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.
@@ -34,10 +30,6 @@ text:
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.
+2
View File
@@ -14,6 +14,7 @@ import {
resolveMinorHourAntiphon,
resolveMinorHourChapter,
resolveSelfContainedHymn,
isFerialOrVigil,
} from './resolve-common';
import noneDefinitionData from '../data/hours/none.yml';
import antiphonsData from '../data/hours/none-antiphons.yml';
@@ -32,6 +33,7 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
case 'day-collect':
return [{ kind: 'prayer', text: getDayCollect(day) }];
case 'preces':
if (part.ferialOnly && !isFerialOrVigil(day)) return [];
return [{ kind: 'preces', text: resolveCommon(part.textRef.id), label: part.label }];
case 'variable': {
// Only 'by-weekday' applies here — one antiphon framing all three
+2
View File
@@ -14,6 +14,7 @@ import {
resolveMinorHourAntiphon,
resolveMinorHourChapter,
resolveSelfContainedHymn,
isFerialOrVigil,
} from './resolve-common';
import sextDefinitionData from '../data/hours/sext.yml';
import antiphonsData from '../data/hours/sext-antiphons.yml';
@@ -32,6 +33,7 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
case 'day-collect':
return [{ kind: 'prayer', text: getDayCollect(day) }];
case 'preces':
if (part.ferialOnly && !isFerialOrVigil(day)) return [];
return [{ kind: 'preces', text: resolveCommon(part.textRef.id), label: part.label }];
case 'variable': {
// Only 'by-weekday' applies here — one antiphon framing all three
+2
View File
@@ -14,6 +14,7 @@ import {
resolveMinorHourAntiphon,
resolveMinorHourChapter,
resolveSelfContainedHymn,
isFerialOrVigil,
} from './resolve-common';
import terceDefinitionData from '../data/hours/terce.yml';
import antiphonsData from '../data/hours/terce-antiphons.yml';
@@ -32,6 +33,7 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
case 'day-collect':
return [{ kind: 'prayer', text: getDayCollect(day) }];
case 'preces':
if (part.ferialOnly && !isFerialOrVigil(day)) return [];
return [{ kind: 'preces', text: resolveCommon(part.textRef.id), label: part.label }];
case 'variable': {
// Only 'by-weekday' applies here — one antiphon framing all three
+8 -1
View File
@@ -43,7 +43,14 @@ export type HourPart =
// both Monastic and secular tracks, drops Compline's Preces to nothing
// on a Double, with no substitute) — the flag still means "not the full
// text here," just not "nothing here."
| { kind: 'preces'; textRef: PropersRef; label?: string; omitOnDouble?: true }
// `ferialOnly` marks a part that's dropped outright (not substituted)
// on a Sunday/feast day — Terce/Sext/None's own trailing Preces
// versicles (minor-hour-preces-feriales, trimmed 2026-09-01 to just
// those versicles) are the only current user: the Kyrie/Pater Noster
// that used to precede them in the same block was split out into its
// own always-shown `minor-hour-kyrie-pater` part instead of following
// suit, by explicit choice — see data/hours/terce.yml's header.
| { kind: 'preces'; textRef: PropersRef; label?: string; omitOnDouble?: true; ferialOnly?: true }
| { kind: 'psalm'; psalmNumber: number; verses?: string; antiphonRef?: PropersRef }
| { kind: 'canticle'; canticleId: string; textRef: PropersRef; antiphonRef?: PropersRef }
| {