Build the Vespers ordo: mechanism, weekday content, seasonal content

Wires resolveOrdo('vespers', ...) end to end: opening versicle,
weekday psalmody (4 groups, handling the joined Ps 115+116 and the
split Ps 138/143 via a PsalmRef-like shape), the chapter/responsory/
hymn/versicle office bundle, Magnificat, day-collects — reusing
resolveEveningDay so First/Second Vespers precedence and the cross-day
commemoration (both added in the previous commit) apply automatically
— and a closing that reuses Lauds' own conclusio, since no distinct
"Vespera" version of that exact text turned up in the source.

getMagnificatAntiphon mirrors getBenedictusAntiphon's saint/temporal-id
lookup order, but also falls back to real content Benedictus has no
equivalent of: the classic ferial set that quotes the Magnificat's own
text in sequence across the week, with the correct Monastic-rubric
variant picked for Tue/Thu/Fri/Sat (two of those needed a fresh
translation where the Monastic Latin diverges from the given English
in content, not just wording).

Also includes Vespers' own seasonal content (Advent/Lent/Passiontide/
Paschaltide chapter+responsory+hymn+versicle), transcribed from the
same source blocks as the weekday content, with the Monastic-specific
hymn variants hand-applied from the source's substitution notation
against each base Roman text (one transcription slip caught and fixed
mid-pass: the Passiontide hymn's closing lines had been copied from
the Roman text instead of the Monastic one actually being
transcribed). Passiontide's own responsory/hymn correctly omit the
Gloria Patri, matching real rubric and the source data as given.

All weekday/seasonal content marked `draft`, not `verified` — read
directly from the reference source, not cross-checked against a live
rendering per day the way the psalmody was.

Six other hours' resolvePart switches needed the three new HourPart
kinds ('vespers-psalmody', 'vespers-office', 'magnificat') added to
their exhaustive not-used lists so they still typecheck; three
pre-existing tests assumed Vespers was still "coming soon" and are
updated to exercise Matins (still the genuine stub) instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 20:14:19 -04:00
parent 979bbe6aa4
commit de83786793
45 changed files with 1649 additions and 12 deletions
@@ -0,0 +1,64 @@
# The classic ferial Magnificat-antiphon set: each weekday quotes the
# Magnificat's own text in sequence (Monday = its opening verse, Tuesday =
# the next, and so on through Saturday). Sourced from Divinum Officium's
# Monastic block ("[Feria2 Ant 3]" through "[Feria7 Ant 3]", Psalterium/
# Special/Major Special.txt). Sunday has no entry here on purpose — its own
# source ("[Dominica Ant 3] = @:Dominica Ant 2 = /:ut in Proprio de
# Tempore:/") draws from that specific Sunday's own Proper of the Time, not
# a fixed weekly default; unauthored content for now (see
# hours/resolve-common.ts's getMagnificatAntiphon).
#
# Four of the six weekdays have a real Monastic-specific Latin variant,
# marked in the source "(sed rubrica tridentina aut rubrica monastica)" —
# used here in place of the plain/Roman line above it, per direct
# instruction to read this app's target rubric (pre-1955, Monastic
# Tridentinum 1617) straight from these branch labels rather than treat
# them as optional. The English source only tracks that same variant for
# Saturday; Tuesday's only differs by a verb ending (no translation
# impact), but Thursday's and Friday's Monastic Latin diverge from the
# English enough in *content* (not just wording) that the given English
# would misrepresent them — those two are translated fresh here instead,
# marked `draft` for that reason specifically, not just the general
# not-live-verified caveat the rest of this file carries.
#
# Not live-query-verified (see TODO.md) — read directly from source.
monday:
antiphon:
la: "Magníficat * ánima mea Dóminum, quia respéxit Deus humilitátem meam."
en: "My soul * magnifies the Lord, because God has regarded my lowliness."
tuesday:
antiphon:
la: "Exsúltet * spíritus meus in Deo salutári meo."
en: "My spirit rejoices * in God, in my Saviour."
wednesday:
antiphon:
la: "Respéxit Dóminus * humilitátem meam, et fecit in me magna, qui potens est."
en: "The Lord has regarded * my lowliness, and he who is mighty has done great things through me."
thursday:
# Monastic Latin diverges from the given (Roman-track) English in mood
# and content — translated fresh to match it; see file header. `status`
# marks the translation itself draft, distinct from the rest of this
# file's blanket "not live-verified" caveat.
antiphon:
la: "Fac Deus, * poténtiam in brácchio tuo: dispérde supérbos, et exálta húmiles."
en: "Shew, O God, * power in thy arm: scatter the proud, and exalt the humble."
status: { la: draft, en: draft }
friday:
# Monastic Latin diverges from the given (Roman-track) English in
# content — translated fresh to match it; see file header. `status`
# marks the translation itself draft, distinct from the rest of this
# file's blanket "not live-verified" caveat.
antiphon:
la: "Depósuit poténtes, * Sanctos persequéntes: et exaltávit húmiles, Christum confiténtes."
en: "He hath put down the mighty, * who persecuted the Saints: and exalted the humble, who confessed Christ."
status: { la: draft, en: draft }
saturday:
antiphon:
la: "Suscépit Deus * Israël, púerum suum: sicut locútus est ad Ábraham, et semen ejus: exaltáre húmiles usque in sǽculum."
en: "God hath received * Israel his servant: as he spoke to our fathers, to Abraham and to his seed, and hath exalted the humble forever."
+23
View File
@@ -0,0 +1,23 @@
# Ordo assembled from Divinum Officium's Monastic block (see the
# individual data/propers/common/vespers-*.yml and data/hours/vespers-
# antiphons.yml/vespers-magnificat-antiphons.yml files for sourcing) — not
# live-query-verified end-to-end (see TODO.md).
#
# Resolves off resolveEveningDay, not resolveDay — see hours/vespers.ts —
# so First/Second Vespers precedence and the cross-day commemoration both
# apply before any part below ever runs.
#
# The closing reuses `lauds-conclusio` (Benedicamus Domino / Fidelium
# animae) rather than a Vespers-specific id — no distinct "Vespera"
# version of this exact closing turned up in the source, and it's the
# same fixed formula in real practice after either hour; flagged here in
# case that assumption turns out wrong.
id: vespers
parts:
- kind: opening-versicle
- kind: vespers-psalmody
- kind: vespers-office
- kind: magnificat
- kind: day-collects
- kind: preces
textRef: { source: common, id: lauds-conclusio }