Fix Beheading of St. John the Baptist's wrong Common category
decollation-of-st-john-baptist.yml's `common` field was set to common-of-an-apostle -- a mistaken placeholder (he isn't an apostle) that leaked into the Aug 29 Matins invitatory and the Lauds/Vespers office bundle. Corrected to common-of-a-martyr, matching the file's own already- correct `minorHoursCommon` field. Also corrected a stale comment in the feast's own nocturn-readings file claiming neither Nocturn 2 nor 3 has a proper responsory: Nocturn 2's own closing responsory is genuine proper text (not a Commune reference like Nocturn 3's), and is now authored. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WvnBMq7HGfXRyMsVLu2v4D
This commit is contained in:
@@ -2,14 +2,11 @@
|
|||||||
# kalendar check (2025-08-29) -- winner outright, Duplex, over the stub
|
# kalendar check (2025-08-29) -- winner outright, Duplex, over the stub
|
||||||
# St. Sabina (see st-sabina.yml). About St. John the Baptist's beheading,
|
# St. Sabina (see st-sabina.yml). About St. John the Baptist's beheading,
|
||||||
# not a feast of the Lord/BVM, so kept in scope like his Nativity in June.
|
# not a feast of the Lord/BVM, so kept in scope like his Nativity in June.
|
||||||
# "common-of-an-apostle" is a loose fit (he isn't one) but the closest
|
|
||||||
# existing category to "a major male saint honored with his own high
|
|
||||||
# feast" -- same judgment call as nativity-of-st-john-the-baptist.yml.
|
|
||||||
# Own proper collect and antiphon.
|
# Own proper collect and antiphon.
|
||||||
id: decollation-of-st-john-baptist
|
id: decollation-of-st-john-baptist
|
||||||
name: "The Beheading of St. John the Baptist"
|
name: "The Beheading of St. John the Baptist"
|
||||||
rank: duplex
|
rank: duplex
|
||||||
common: common-of-an-apostle
|
common: common-of-a-martyr
|
||||||
propers: "decollation-of-st-john-baptist"
|
propers: "decollation-of-st-john-baptist"
|
||||||
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-29.txt) --
|
# P/T/S/N: no [Ant Prima]/etc of its own in the source (08-29.txt) --
|
||||||
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
|
# [Rule]/[Rank] point to Commune/C2a instead, the same C-number family
|
||||||
|
|||||||
@@ -7,13 +7,18 @@
|
|||||||
# web/www/horas/Latin/Sancti/08-29.txt, English/Sancti/08-29.txt.
|
# web/www/horas/Latin/Sancti/08-29.txt, English/Sancti/08-29.txt.
|
||||||
#
|
#
|
||||||
# Nocturn 2: Lectio4-6 (St. Ambrose's treatise On Virgins) combined
|
# Nocturn 2: Lectio4-6 (St. Ambrose's treatise On Virgins) combined
|
||||||
# into one reading, one continuous excerpt.
|
# into one reading, one continuous excerpt. Its closing responsory
|
||||||
|
# ([Responsory6], marked &Gloria) is genuine proper text, not a
|
||||||
|
# Commune reference, so it's authored below.
|
||||||
# Nocturn 3: Lectio7's Gospel citation (Mark 6:17-29) is a bare
|
# Nocturn 3: Lectio7's Gospel citation (Mark 6:17-29) is a bare
|
||||||
# incipit ("Et réliqua") with no full pericope text given, so — per
|
# incipit ("Et réliqua") with no full pericope text given, so — per
|
||||||
# the pre-1955 pass's convention of not transcribing bare incipits —
|
# the pre-1955 pass's convention of not transcribing bare incipits —
|
||||||
# only the homily portion is authored (not marked isGospel), combined
|
# only the homily portion is authored (not marked isGospel), combined
|
||||||
# with Lectio8 as one continuous excerpt of St. Augustine's sermon.
|
# with Lectio8 as one continuous excerpt of St. Augustine's sermon.
|
||||||
# No responsory given for either reading.
|
# [Responsory4], [Responsory7], [Responsory8] are all genuine Commune
|
||||||
|
# references (@Commune/C2a:Responsory2/5/6 -- Common of a Martyr, per
|
||||||
|
# decollation-of-st-john-baptist.yml's own `common` field), so Nocturn
|
||||||
|
# 3 correctly has no proper responsory of its own.
|
||||||
id: decollation-of-st-john-baptist
|
id: decollation-of-st-john-baptist
|
||||||
readings:
|
readings:
|
||||||
- nocturn: 2
|
- nocturn: 2
|
||||||
@@ -82,6 +87,9 @@ readings:
|
|||||||
silent now, can repeat no more the denunciation which thou couldest not bear to hear, and
|
silent now, can repeat no more the denunciation which thou couldest not bear to hear, and
|
||||||
still thou art afraid of it.
|
still thou art afraid of it.
|
||||||
status: { la: verified, en: verified }
|
status: { la: verified, en: verified }
|
||||||
|
responsory:
|
||||||
|
la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum: * Et dedit illi claritátem ætérnam.\nV. Descendítque cum illo in fóveam, et in vínculis non derelíquit eum.\nR. Et dedit illi claritátem ætérnam."
|
||||||
|
en: "R. The Lord made him honourable, and kept him from his enemies, and defended him from seducers: * and gave him everlasting glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him everlasting glory."
|
||||||
|
|
||||||
- nocturn: 3
|
- nocturn: 3
|
||||||
isGospel: false
|
isGospel: false
|
||||||
|
|||||||
@@ -596,6 +596,16 @@ describe('resolveOrdo("matins", ...) invitatory antiphon doubling by rank', () =
|
|||||||
expect(openingAntiphonLatin('2026-08-24')).toContain('Regem Apostolórum Dóminum, * Veníte');
|
expect(openingAntiphonLatin('2026-08-24')).toContain('Regem Apostolórum Dóminum, * Veníte');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("the Beheading of St. John the Baptist (2026-08-29, common corrected from apostle to martyr) opens with the martyr Common's invitatory antiphon, not the apostle one", () => {
|
||||||
|
// Regression test: decollation-of-st-john-baptist.yml's `common` field
|
||||||
|
// used to be common-of-an-apostle (a mistaken placeholder -- he isn't
|
||||||
|
// an apostle), which leaked into the Matins invitatory. Corrected to
|
||||||
|
// common-of-a-martyr, matching the file's own already-correct
|
||||||
|
// `minorHoursCommon`.
|
||||||
|
expect(openingAntiphonLatin('2026-08-29')).toContain('Regem Mártyrum Dóminum, * Veníte');
|
||||||
|
expect(openingAntiphonLatin('2026-08-29')).not.toContain('Regem Apostolórum');
|
||||||
|
});
|
||||||
|
|
||||||
it('a plain ferial day opens with the incipit only', () => {
|
it('a plain ferial day opens with the incipit only', () => {
|
||||||
expect(openingAntiphonLatin(FERIAL_DATE)).not.toContain('Exsultémus');
|
expect(openingAntiphonLatin(FERIAL_DATE)).not.toContain('Exsultémus');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -456,14 +456,17 @@ describe('resolveOrdo("vespers", ...)', () => {
|
|||||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Iste Conféssor Dómini sacrátus');
|
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Iste Conféssor Dómini sacrátus');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("uses common-of-an-apostle's real office bundle for the Beheading of St. John the Baptist's First Vespers", () => {
|
it("uses common-of-a-martyr's real office bundle for the Beheading of St. John the Baptist's First Vespers", () => {
|
||||||
// Live-verified against Divinum Officium (Monastic Tridentinum 1617)
|
// Live-verified against Divinum Officium (Monastic Tridentinum 1617)
|
||||||
// votive=C1 -- see vespers-hymn-common-of-an-apostle.yml's header.
|
// votive=C2 -- see vespers-hymn-common-of-a-martyr.yml's header.
|
||||||
|
// decollation-of-st-john-baptist.yml's own `common` field was
|
||||||
|
// corrected from common-of-an-apostle to common-of-a-martyr (he
|
||||||
|
// isn't an apostle; his own `minorHoursCommon` already agreed).
|
||||||
const ordo = resolveOrdo('vespers', '2026-08-28');
|
const ordo = resolveOrdo('vespers', '2026-08-28');
|
||||||
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
|
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
|
||||||
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Eph 2:19-20');
|
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Jas 1:12');
|
||||||
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
|
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
|
||||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Exsúltet cælum láudibus');
|
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Deus tuórum mílitum');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("no longer gives St. Margaret of Scotland First Vespers now that Corpus Christi's own octave is modeled", () => {
|
it("no longer gives St. Margaret of Scotland First Vespers now that Corpus Christi's own octave is modeled", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user