Author Sunday's own Matins hymn and every season's (Advent-Paschaltide)

The "genuinely more complex, not-yet-understood two-hymn mechanism"
flagged for Sunday turned out simple: Day0 Hymnus ("Nocte surgéntes")
is just Sunday's plain per-annum hymn, and Day0 Hymnus1 ("Primo
diérum ómnium") is Septuagesima-tide's own separate seasonal hymn --
the same shape Advent/Lent/Passiontide/Paschaltide each already have.
Live-verified these 4 don't vary by weekday within their season (a
Lenten Sunday and a Lenten feria render identically). None of the 6
were authored at all before this -- every Sunday and every season day
not otherwise overridden by a winning saint/octave silently fell
through to Monday's own ferial placeholder text.

Authored matins-hymn-{sunday,septuagesima,advent,lent,passiontide,
paschaltide}.yml, all live-verified, self-contained with their own
real closing doxology baked in. Septuagesima is checked directly by
day.season in resolveMatinsHymn itself, deliberately not folded into
the shared seasonalOfficeSuffix (Lauds/Vespers have no matching
content yet -- resolveOfficeBundle there is all-or-nothing per feast,
so adding it would silently blank their chapter/hymn instead of
falling through to their current weekday default).

Known, flagged simplification: the generic Paschaltide hymn wrongly
applies during the Ascension octave, whose own real hymn isn't
authored anywhere yet -- a same-shape gap Lauds already has, not a
new regression. Updated 2 FERIAL_DATE (a Tuesday in Advent) hymn
assertions that had been asserting Tuesday's own ferial text --
Advent's own seasonal hymn correctly outranks the weekday cycle now.

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 10:38:05 -04:00
parent 8307526f69
commit e7e19c530a
9 changed files with 926 additions and 19 deletions
+9 -8
View File
@@ -774,9 +774,9 @@ describe('resolveOrdo("matins", ...) Assumption-octave hymn fallback (2026-08-22
});
it("a plain ferial day outside the octave still gets the plain ferial hymn, unaffected", () => {
// FERIAL_DATE (2026-12-01) is a Tuesday -- see the identical note on
// the other FERIAL_DATE hymn assertion below.
expect(hymnLatin(FERIAL_DATE)).toContain('Consors patérni lúminis');
// FERIAL_DATE (2026-12-01) is a Tuesday in Advent -- see the identical
// note on the other FERIAL_DATE hymn assertion below.
expect(hymnLatin(FERIAL_DATE)).toContain('Verbum supérnum, pródiens');
});
});
@@ -1074,11 +1074,12 @@ describe('resolveOrdo("matins", ...) Common-of-an-Apostle hymn + invitatory (202
});
it('a plain ferial day is unaffected -- still falls through to the plain ferial hymn and invitatory antiphon', () => {
// FERIAL_DATE (2026-12-01) is a Tuesday, so this is Tuesday's own
// ferial hymn ("Consors patérni lúminis") since 2026-09-04's weekday-
// specific hymn fix -- previously every weekday fell through to the
// same (mislabeled) Monday text ("Somno reféctis ártubus").
expect(hymnLatin(FERIAL_DATE)).toContain('Consors patérni lúminis');
// FERIAL_DATE (2026-12-01) is a Tuesday in Advent, so since Advent's
// own Matins hymn was authored (2026-09-04), this is Advent's own
// seasonal hymn ("Verbum supérnum, pródiens"), not Tuesday's own
// ferial one -- season outranks weekday in resolveMatinsHymn's own
// precedence, same as everywhere else.
expect(hymnLatin(FERIAL_DATE)).toContain('Verbum supérnum, pródiens');
expect(invitatoryFullLatin(FERIAL_DATE)).toContain('Veníte');
expect(invitatoryFullLatin(FERIAL_DATE)).not.toContain('Regem Apostolórum');
});