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 -6
View File
@@ -140,12 +140,15 @@ export type HourPart =
// full-after-Creed... no Creed at Lauds, just before+after framing shape
// as nunc-dimittis, gated the same way by isDoubleOrHigher.
| { kind: 'benedictus' }
// Lauds only. The four fixed Tridentine suffrages (Holy Cross, BVM,
// Ss. Peter & Paul, Peace) said after the day's collect(s) — see
// data/propers/common/lauds-suffrage-*.yml. `omitOnDouble` gates the
// whole set at once (real practice: suffrages drop on a Double-or-higher
// feast) — an honest simplification, see hours/lauds.ts for the caveat
// on what real practice also suppresses them for that isn't modeled.
// Lauds and Vespers. The four fixed Tridentine suffrages (Holy Cross,
// BVM, Ss. Peter & Paul, Peace) said after the day's collect(s) — see
// data/propers/common/lauds-suffrage-*.yml (reused byte-identical at
// Vespers, same fixed formula after either hour, live-verified
// 2026-08-25 — see hours/resolve-common.ts's resolveSuffrages).
// `omitOnDouble` gates the whole set at once (real practice: suffrages
// drop on a Double-or-higher feast) — an honest simplification, see
// resolveSuffrages for the caveat on what real practice also
// suppresses them for that isn't modeled.
| { kind: 'suffrages'; omitOnDouble?: true }
// Lauds only. The Tridentine 1906/1910 "Preces feriales" litany (Kyrie,
// Pater noster, a long chain of versicles, Psalm 129, closing versicles)