From aeda043577a3258c3060f76ce0456eab8dcdc9b4 Mon Sep 17 00:00:00 2001 From: Will Estes Date: Thu, 3 Sep 2026 14:59:49 -0400 Subject: [PATCH] Wire seasonal hymn-doxology into the Matins ferial hymn The plain ferial hymn's Monastic source (Day1-6 Hymnus, Psalterium/Special/Matutinum Special.txt) carries a real "*" seasonal- substitution marker, live-checked against the reference engine. Splits the hymn's own natural doxology ending into a new per-annum companion file and swaps it via getHymnDoxologyId/appendDoxology, same pattern already used by Prime and Compline. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak --- .../common/matins-hymn-doxology-per-annum.yml | 16 +++++++++++++ .../propers/common/matins-hymn-ferial.yml | 23 ++++--------------- src/hours/matins.ts | 11 ++++++++- 3 files changed, 31 insertions(+), 19 deletions(-) create mode 100644 src/data/propers/common/matins-hymn-doxology-per-annum.yml diff --git a/src/data/propers/common/matins-hymn-doxology-per-annum.yml b/src/data/propers/common/matins-hymn-doxology-per-annum.yml new file mode 100644 index 0000000..b6148b8 --- /dev/null +++ b/src/data/propers/common/matins-hymn-doxology-per-annum.yml @@ -0,0 +1,16 @@ +# The ferial Matins hymn's own natural doxology ending, split out of +# matins-hymn-ferial.yml so hours/matins.ts can swap it seasonally via +# hymn-doxology.ts — the reference source's weekday (Day1-6) Matins hymns +# each carry a real "*" substitution marker here, live-checked in +# Psalterium/Special/Matutinum Special.txt, all sharing this same Latin +# ending; the Sunday (Day0) form has no such marker (its own doxology, +# "Præstet hoc nobis Déitas beáta...", is fixed) — not modeled here since +# vu's Matins doesn't distinguish Sunday from ferial (see matins.ts). +# Text/status carried over unchanged from the original file. +id: matins-hymn-doxology-per-annum +text: + la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum. Amen." + en: "Grant this, O Father ever One\nWith Christ, thy sole-begotten Son,\nAnd Holy Ghost, whom all adore,\nReigning and blest forevermore. Amen." +status: + la: verified + en: verified diff --git a/src/data/propers/common/matins-hymn-ferial.yml b/src/data/propers/common/matins-hymn-ferial.yml index fa5f8f1..758913e 100644 --- a/src/data/propers/common/matins-hymn-ferial.yml +++ b/src/data/propers/common/matins-hymn-ferial.yml @@ -4,6 +4,11 @@ # year-round text; only this one (evidently the ordinary-time/per-annum # form) is authored so far. Seasonal variants deferred (see TODO.md), # same incremental-content pattern as everywhere else in this project. +# +# The closing doxology stanza is split out into +# matins-hymn-doxology-per-annum.yml (see hours/matins.ts) — the source +# carries a real "*" seasonal-substitution marker there (live-checked +# 2026-09-03, Psalterium/Special/Matutinum Special.txt). id: matins-hymn-ferial text: la: >- @@ -41,15 +46,6 @@ text: Et ore te canéntium Laudéris in perpétuum. - - - Præsta, Pater piíssime, - - Patríque compar Únice, - - Cum Spíritu Paráclito - - Regnans per omne sǽculum. Amen. en: >- Our limbs refreshed with slumber now, @@ -85,15 +81,6 @@ text: That by their lips who thee adore Thou mayst be praised forevermore. - - - Grant this, O Father ever One - - With Christ, thy sole-begotten Son, - - And Holy Ghost, whom all adore, - - Reigning and blest forevermore. Amen. status: la: verified en: verified diff --git a/src/hours/matins.ts b/src/hours/matins.ts index 4272318..2e70a9c 100644 --- a/src/hours/matins.ts +++ b/src/hours/matins.ts @@ -76,9 +76,11 @@ import { getPsalmVerses } from '../psalter'; import { getPsalmsFor, type PsalmRef } from '../psalter/distribution'; import { getScriptureVerses } from '../scripture'; import { getOpeningVersicleId } from './opening-versicle'; +import { getHymnDoxologyId } from './hymn-doxology'; import { applyFlexaMark } from './antiphon'; import { resolveCommon, + appendDoxology, getDayCollect, getOfficeOverrideId, resolveOfficeWinner, @@ -454,7 +456,14 @@ function resolveMatinsHymn(day: LiturgicalDay): ResolvedText { return seasonal; } } - return resolveCommon('matins-hymn-ferial'); + // The plain ferial hymn's own Monastic source (Day1-6 Hymnus, Psalterium/ + // Special/Matutinum Special.txt) carries a real seasonal-doxology + // substitution marker (live-checked 2026-09-03) — unlike the Advent/ + // Paschaltide seasonal hymns above, whose Monastic forms are each fixed, + // non-swapping text, so only this final fallback needs the swap. + const body = resolveCommon('matins-hymn-ferial'); + const doxology = resolveCommon(getHymnDoxologyId(day, 'matins-hymn-doxology-per-annum')); + return appendDoxology(body, doxology); } /** The plain ferial weekday nocturn's real antiphoned psalmody — a