Add suffrages to Vespers, shared with Lauds' existing mechanism

Vespers had no suffrages (Holy Cross, BVM, Joseph, Apostles, Peace)
at all -- types.ts even documented it as Lauds-only. Live-verified
against the reference engine (Monastic Tridentinum 1617): the
"Suffragium" block after the day's collect(s) renders byte-identical
after both Lauds and Vespers, so this was an honest content gap, not
a deliberate omission.

Extracted the suffrage ids/labels and full omission logic (Double-or-
higher, Christ the King, Advent/Christmastide/Passiontide, active
octaves, Cross/Marian-Saturday special cases) out of lauds.ts into a
shared resolveSuffrages() in resolve-common.ts, and wired it into
vespers.ts/vespers.yml the same way Lauds already uses it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
This commit is contained in:
2026-08-26 06:45:20 -04:00
parent 13ffce00bf
commit 5298cbe4a3
5 changed files with 105 additions and 82 deletions
+9
View File
@@ -18,6 +18,13 @@
# identical at both hours by live query) versus the fuller Tridentine
# 1906/1910 ferial Preces on a ferial or vigil day — see hours/types.ts's
# 'vespers-preces' doc comment.
#
# `suffrages` (Holy Cross, BVM, Joseph, Ss. Peter & Paul, Peace) reuses
# Lauds' own mechanism and content ids wholesale — live-verified
# 2026-08-25 against Monastic Tridentinum 1617 that the "Suffragium"
# block after Vespers' collect is byte-identical to the one after Lauds',
# not a Lauds-specific thing. See hours/resolve-common.ts's
# resolveSuffrages for the full omission logic.
id: vespers
parts:
- kind: opening-versicle
@@ -26,5 +33,7 @@ parts:
- kind: magnificat
- kind: vespers-preces
- kind: day-collects
- kind: suffrages
omitOnDouble: true
- kind: preces
textRef: { source: common, id: lauds-conclusio }