Give Ascension its own hymnody at Matins/Lauds/Vespers, all octave

`ascension` is a temporal-feast id, not a saint record, so
resolveOfficeWinner's octave-synthesis (which already handles
saint-based octaves like Assumption's/St. Lawrence's) never
recognized it -- Ascension Day itself and its whole octave silently
rendered the generic Paschaltide hymn at every hour.

Fixed the mechanism: added `ascension` to ALWAYS_OVERRIDE_TEMPORAL_IDS
(covers the feast day itself), and taught resolveOfficeWinner to also
synthesize a {kind:'temporal'} winner from an active octave with no
saint record but a real temporal-feast record (covers ordinary-feria
octave days; a real winning saint within the octave still correctly
keeps priority).

A third gap surfaced testing this: octaveGoverningPrivilegedDay's
correct-by-design "a privileged Sunday never accepts an octave
override" rule is live-verified wrong specifically for "Dominica
infra Octavam Ascensionis" (keeps the octave's own hymn/responsory,
just with its own distinct proper chapter). Rather than loosen that
shared gate for every octave, gave resolveLaudsHymn/resolveVespersHymn
a narrow, hymn-only intercept guarded to saint-less octaves, checked
before the season/weekday default.

Authored matins-hymn-ascension.yml, lauds-{capitulum,responsory,hymn,
versicle}-ascension.yml, and vespers-{responsory,hymn,versicle}-
ascension.yml (Vespers reuses Lauds' chapter via the existing
cross-hour fallback) -- all live-verified against Divinum Officium
(Monastic Tridentinum 1617), 2026-05-14.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
This commit is contained in:
2026-09-04 11:08:11 -04:00
parent ab8d1d452d
commit 44dd4bb47a
11 changed files with 451 additions and 1 deletions
@@ -0,0 +1,117 @@
# The Ascension's own Matins hymn ("Jesu nostra redémptio"), shared
# identically with its own Lauds and Vespers (see lauds-hymn-ascension.yml/
# vespers-hymn-ascension.yml). Live-verified against Divinum Officium
# (Monastic Tridentinum 1617), Matins/Lauds/Vespers live query, 2026-05-14
# (Ascension Day itself).
#
# Closes a real gap found while fixing the generic Matins seasonal-hymn
# fallback (see matins-hymn-paschaltide.yml's own header): 'ascension' is
# a temporal-feast id (calendar/data/calendar/temporal-feasts/
# ascension.yml), not a saint record, so it was never picked up by
# `resolveOfficeWinner`'s octave-synthesis (which only ever checked
# `getSaintRecord`) — Ascension Day itself and its whole octave were both
# silently rendering the generic Paschaltide hymn instead of their own
# proper one, at every hour. Fixed by (1) adding `ascension` to
# `ALWAYS_OVERRIDE_TEMPORAL_IDS` (covers Ascension Day itself) and (2)
# teaching `resolveOfficeWinner` to also synthesize a `{kind: 'temporal'}`
# winner from a temporal-feast-only active octave when no saint record
# exists (covers the interior octave days, e.g. St. Ubald's or St.
# Bernardine's own days still correctly win outright and keep their own
# hymn — this only ever fires on a day nothing else claims).
#
# Self-contained — this hymn's own natural ending ("Per cuncta semper
# sǽcula. Amen.") has no separate trailing doxology stanza at all in the
# source, unlike most other Matins hymns in this store.
id: matins-hymn-ascension
text:
la: >-
Jesu nostra redémptio,
Amor et desidérium,
Deus Creátor ómnium,
Homo in fine témporum:
Quæ te vicit cleméntia,
Ut ferres nostra crímina,
Crudélem mortem pátiens,
Ut nos a morte tólleres!
Inférni claustra pénetrans,
Tuos captívos rédimens,
Victor triúmpho nóbili
Ad dextram Patris résidens.
Ipsa te cogat píetas,
Ut mala nostra súperes
Parcéndo, et voti cómpotes
Nos tuo vultu sáties.
Tu esto nostrum gáudium,
Qui es futúrus prǽmium,
Sit nostra in te glória,
Per cuncta semper sǽcula. Amen.
en: >-
Hail, thou who man's Redeemer art,
Jesu, the joy of every heart;
Great Maker of the world's wide frame,
And purest love's delight and flame:
What nameless mercy thee o'ercame,
To bear our load of sin and shame?
For guiltless, thou thy life didst give,
That sinful erring man might live.
The realms of woe are forced by thee,
Its captives from their chains set free;
And thou, amid thy ransomed train,
At God's right hand dost victor reign.
Let mercy sweet with thee prevail,
To cure the wounds we now bewail;
Oh, bless us with thy holy sight,
And fill us with eternal light.
Our guide, our way to heavenly rest,
Be thou the aim of every breast;
Be thou the soother of our tears,
Our sweet reward above the spheres. Amen.
status:
la: verified
en: verified