Keep a short litany + Our Father at Compline on a Double, don't omit
Deploy / deploy (push) Successful in 1m28s

compline-preces.yml was already the secular Tridentine 1906/1910 text
word-for-word (verified live against both tracks), so no text change
was needed there. The actual gap: both Monastic and secular tracks drop
Compline's Preces to nothing on a Double-or-higher, unlike Vespers/Lauds
which fall back to a short form. Per explicit request, this is now a
deliberate vu-specific deviation from both tracks: on a Double, Compline
substitutes the same short Kyrie/Pater-Noster litany Vespers already
falls back to on Sundays/feasts, instead of showing nothing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHXJAWVAabCKX1JgmDh4Rn
This commit is contained in:
2026-08-29 05:29:56 -04:00
parent 943aead9ae
commit a2d082e608
5 changed files with 71 additions and 12 deletions
+12 -5
View File
@@ -41,11 +41,18 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
return [{ kind: part.kind, text: resolveCommon(part.textRef.id) }];
case 'responsory':
return [{ kind: 'responsory', text: resolveResponsory(resolveCommon(part.textRef.id), day) }];
case 'preces':
if (part.omitOnDouble && isDoubleOrHigher(day.winner)) {
return [];
}
return [{ kind: 'preces', text: resolveCommon(part.textRef.id), label: part.label }];
case 'preces': {
// On a Double-or-higher, the full secular Preces (compline-preces —
// already the fuller Tridentine 1906/1910 text, see compline.yml's
// own header) steps aside for the plain Kyrie/Pater-Noster short
// litany (lauds-short-litany, already reused by Vespers' own
// 'vespers-preces' case the same way) rather than vanishing
// entirely — a deliberate choice to always keep a short litany +
// Our Father, even though real practice (both Monastic and
// secular) drops Compline's Preces to nothing on a Double.
const id = part.omitOnDouble && isDoubleOrHigher(day.winner) ? 'lauds-short-litany' : part.textRef.id;
return [{ kind: 'preces', text: resolveCommon(id), label: part.label }];
}
case 'lesson':
return [{ kind: 'lesson', text: resolveCommon(part.textRef.id), label: part.label }];
case 'opening-versicle':