From 716937b8f967547746e171c42e10b6415e23b486 Mon Sep 17 00:00:00 2001 From: Will Estes Date: Wed, 26 Aug 2026 07:50:38 -0400 Subject: [PATCH] Author Common-of-a-Confessor-Bishop Lauds/Vespers chapter/responsory/hymn/versicle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Third Common category (17 real users) with no Lauds/Vespers bundle authored. Live-verified against Divinum Officium (Monastic Tridentinum 1617) votive=C4: chapter Sir 44:16-17 "Ecce sacérdos magnus," Lauds hymn "Jesu Redémptor ómnium," shared versicle "Justum dedúxit Dóminus per vias rectas." Found the Vespers hymn is byte-identical to Common-of-a- Confessor-Not-Bishop's own ("Iste Conféssor Dómini sacrátus") even though the chapter, both responsories, and the Lauds hymn all genuinely differ between the two categories -- reused that already-authored text verbatim rather than re-deriving it. No real Duplex-II-classis+ saint exists in this category, so the Vespers proof uses St. Ubald's real First-Vespers anticipation instead of a votive-only proof. Updates one existing test (2026-04-20, Paschaltide seasonal office) whose date turned out to also anticipate St. Anselm's First Vespers, previously masked by this same gap. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc --- TODO.md | 22 ++++ ...capitulum-common-of-a-confessor-bishop.yml | 15 +++ ...auds-hymn-common-of-a-confessor-bishop.yml | 101 +++++++++++++++++ ...esponsory-common-of-a-confessor-bishop.yml | 22 ++++ ...-versicle-common-of-a-confessor-bishop.yml | 14 +++ ...pers-hymn-common-of-a-confessor-bishop.yml | 107 ++++++++++++++++++ ...esponsory-common-of-a-confessor-bishop.yml | 22 ++++ ...-versicle-common-of-a-confessor-bishop.yml | 14 +++ tests/hours/lauds.test.ts | 11 ++ tests/hours/vespers.test.ts | 22 +++- 10 files changed, 348 insertions(+), 2 deletions(-) create mode 100644 src/data/propers/common/lauds-capitulum-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/lauds-hymn-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/lauds-responsory-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/lauds-versicle-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/vespers-hymn-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/vespers-responsory-common-of-a-confessor-bishop.yml create mode 100644 src/data/propers/common/vespers-versicle-common-of-a-confessor-bishop.yml diff --git a/TODO.md b/TODO.md index 45592c4..4160807 100644 --- a/TODO.md +++ b/TODO.md @@ -2880,6 +2880,28 @@ Woman/Widow), plus the ~31 individual saints found to have their own real `ex Pr Sanctorum` content in the reference source rather than a shared Common (need per-saint import, not a category-level fix). +### Common-of-a-Confessor-Bishop Lauds/Vespers bundle authored (2026-08-26) + +Same fix pattern, third category (17 real users). Live-verified against Divinum Officium +(Monastic Tridentinum 1617) `votive=C4`: chapter Sir 44:16-17 ("Ecce sacérdos magnus"), Lauds +hymn "Jesu Redémptor ómnium," shared versicle "Justum dedúxit Dóminus per vias rectas." One real +finding: this category's **Vespers hymn is byte-identical to Common-of-a-Confessor-Not-Bishop's +own** ("Iste Conféssor Dómini sacrátus") even though the chapter, both responsories, and the +Lauds hymn all genuinely differ between the two categories (confirmed via `votive=C4` vs `C5` — +not a copy-paste mistake). Reused the already-authored Latin/English verbatim from `vespers- +hymn-common-of-a-confessor-not-bishop.yml` rather than re-deriving it. No real Duplex-II-classis+ +saint exists in this category (all Simplex/Semiduplex/plain-Duplex, same structural pattern as +the other categories so far), so the Vespers proof uses St. Ubald's real First-Vespers +anticipation (May 15 evening → May 16) instead of a votive-only proof. + +Updates one existing test whose date turned out to also anticipate St. Anselm's First Vespers +(04-20 → 04-21), previously masked by this same gap — the Paschaltide-seasonal-office proof, +moved to the clean 04-18, same "collision unmasked by the fix" pattern as the Several-Martyrs +entry above. + +`npm test` (482 tests), `tsc --noEmit` both pass. **Still open**: 7 Common categories remain +(Confessor, Virgin, Virgin-Martyr, Doctor, Apostle, Several-Confessors, Holy Woman/Widow). + ## Known, deliberate simplifications (not bugs — working as designed) - `getDayCollects`: each collect in a multi-collect day renders as its own diff --git a/src/data/propers/common/lauds-capitulum-common-of-a-confessor-bishop.yml b/src/data/propers/common/lauds-capitulum-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..de7fb16 --- /dev/null +++ b/src/data/propers/common/lauds-capitulum-common-of-a-confessor-bishop.yml @@ -0,0 +1,15 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# `votive=C4` live query, 2026-08 -- same votive-office-view reasoning as +# vespers-hymn-common-of-a-martyr-bishop.yml's header. Same chapter reused +# for Vespers -- no separate vespers-capitulum- file authored, per +# vespers.ts's vespersCapitulumForOverride fallback. +id: lauds-capitulum-common-of-a-confessor-bishop +text: + la: "Ecce sacérdos magnus, qui in diébus suis plácuit Deo, et invéntus est justus: et in témpore iracúndiæ factus est reconciliátio." + en: "Behold an high priest, who in his days pleased God, and was found righteous, and in the time of wrath he was made a propitiation." +citation: + la: "Sir 44:16-17" + en: "Sir 44:16-17" +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-hymn-common-of-a-confessor-bishop.yml b/src/data/propers/common/lauds-hymn-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..46d49d6 --- /dev/null +++ b/src/data/propers/common/lauds-hymn-common-of-a-confessor-bishop.yml @@ -0,0 +1,101 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# `votive=C4` live query, 2026-08 -- see lauds-capitulum-common-of-a- +# confessor-bishop.yml's header for why the votive-office view was used. +# "Jesu Redémptor ómnium" -- a genuinely distinct Lauds hymn from Common- +# of-a-Confessor-Not-Bishop's own "Jesu coróna célsior" (TODO.md's own +# earlier finding, from the votive-office naming: C4 = "Confessoris +# Pontificis," C5 = "Confessoris non Pontificis," two real separate +# categories, not a naming coincidence). +id: lauds-hymn-common-of-a-confessor-bishop +text: + la: >- + Jesu Redémptor ómnium, + + Perpes coróna Prǽsulum, + + In hac die cleméntius + + Nostris favéto précibus. + + + Tui sacri qua nóminis + + Conféssor almus cláruit: + + Hujus celébrat ánnua + + Devóta plebs solémnia. + + + Qui rite mundi gáudia + + Hujus cadúca réspuens, + + Cum Ángelis cæléstibus + + Lætus potítur prǽmiis. + + + Hujus benígnus ánnue + + Nobis sequi vestígia: + + Hujus precátu, sérvulis + + Dimítte noxam críminis. + + + Sit Christe, Rex piíssime, + + Tibi, Patríque glória, + + Cum Spíritu Paráclito, + + Et nunc, et in perpétuum. Amen. + en: >- + Jesu, the world's Redeemer, O hear; + + thy bishops' fadeless crown, draw near: + + Accept with gentlest love today + + The prayers and praises that we pay. + + + The meek confessor of thy name + + Today attained a glorious fame; + + Whose yearly feast, in solemn state, + + Thy faithful people celebrate. + + + The world and all its boasted good, + + As vain and passing, he eschewed; + + And therefore with angelic bands, + + In endless joy forever stands. + + + Grant then that we, most gracious God, + + May follow in the steps he trod: + + And, at his prayer, thy servants free + + From stain of all iniquity. + + + To thee, O Christ, our loving King, + + All glory, praise, and thanks we bring: + + All glory, as is ever meet, + + To Father and to Paraclete. Amen. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-responsory-common-of-a-confessor-bishop.yml b/src/data/propers/common/lauds-responsory-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..22b5589 --- /dev/null +++ b/src/data/propers/common/lauds-responsory-common-of-a-confessor-bishop.yml @@ -0,0 +1,22 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# `votive=C4` live query, 2026-08 -- see lauds-capitulum-common-of-a- +# confessor-bishop.yml's header for why the votive-office view was used. +id: lauds-responsory-common-of-a-confessor-bishop +text: + la: | + R.br. Amávit eum Dóminus, * Et ornávit eum. + ℟. Amávit eum Dóminus, * Et ornávit eum. + ℣. Stolam glóriæ índuit eum. + ℟. Et ornávit eum. + ℣. Glória Patri, et Fílio, * et Spirítui Sancto. + ℟. Amávit eum Dóminus, * Et ornávit eum. + en: | + R.br. The Lord loved him, * and beautified him. + ℟. The Lord loved him, * and beautified him. + ℣. He clothed him with a robe of glory. + ℟. And beautified him. + ℣. Glory be to the Father, and to the Son, * and to the Holy Ghost. + ℟. The Lord loved him, * and beautified him. +status: + la: verified + en: verified diff --git a/src/data/propers/common/lauds-versicle-common-of-a-confessor-bishop.yml b/src/data/propers/common/lauds-versicle-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..1d1fc04 --- /dev/null +++ b/src/data/propers/common/lauds-versicle-common-of-a-confessor-bishop.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds +# `votive=C4` live query, 2026-08 -- same versicle as Vespers (see +# vespers-versicle-common-of-a-confessor-bishop.yml). +id: lauds-versicle-common-of-a-confessor-bishop +text: + la: | + ℣. Justum dedúxit Dóminus per vias rectas. + ℟. Et osténdit illi regnum Dei. + en: | + ℣. The Lord guided the just in right paths. + ℟. And showed him the kingdom of God. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-hymn-common-of-a-confessor-bishop.yml b/src/data/propers/common/vespers-hymn-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..9460252 --- /dev/null +++ b/src/data/propers/common/vespers-hymn-common-of-a-confessor-bishop.yml @@ -0,0 +1,107 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# `votive=C4` live query, 2026-08 -- byte-identical Latin to Common-of-a- +# Confessor-Not-Bishop's own Vespers hymn ("Iste Conféssor Dómini +# sacrátus," the Monastic-track pre-Urban VIII recension -- see that +# file's own header for the textual-variant note). A real, confirmed +# overlap, not a copy-paste mistake: the reference engine's C4 (Confessor +# Bishop) and C5 (Confessor Not Bishop) votive views render the identical +# Vespers hymn text, even though their Lauds hymns, chapters, and +# responsories all genuinely differ (see lauds-hymn-common-of-a- +# confessor-bishop.yml's header). Latin and English (an original +# translation, not the reference engine's own, for the same reason +# recorded in the Confessor-Not-Bishop file) reused verbatim from +# vespers-hymn-common-of-a-confessor-not-bishop.yml rather than +# re-translated, for consistency across the two categories that share it. +id: vespers-hymn-common-of-a-confessor-bishop +text: + la: >- + Iste Conféssor Dómini sacrátus, + + Festa plebs cujus celébrat per orbem, + + Hódie lætus méruit secréta + + Scándere cæli. + + + Qui pius, prudens, húmilis, pudícus, + + Sóbrius, castus fuit et quiétus, + + Vita dum præsens vegetávit ejus + + Córporis artus. + + + Ob sacrum cujus túmulum frequénter + + Membra languéntum modo sanitáti, + + Quólibet morbo fúerint graváta, + + Restituúntur. + + + Unde nunc noster chorus in honórem + + Ipsius, hymnum canit hunc libénter: + + Ut piis ejus méritis juvémur + + Omne per ævum. + + + Sit salus illi, decus atque virtus, + + Qui supra cæli résidens cacúmen, + + Tótius mundi máchinam gubérnat + + Trinus et unus. Amen. + en: >- + This is the Lord's own hallowed confessor, + + Whose feast today the nations round are keeping; + + Joyful, he merited this day to enter + + Heaven's hid glory. + + + Dutiful, prudent, humble, chaste, he flourished, + + Sober and quiet, pure in all his living, + + While in his body yet the breath of this life + + Quickened his members. + + + Often at his consecrated tomb, the + + Limbs of those worn by long and grievous sickness, + + Whatsoever ill had laid them low, are + + Wholly restored. + + + Therefore our choir today, in glad thanksgiving, + + Sings in his honor this our joyful anthem: + + That by his merits, freely won through goodness, + + We may be aided. + + + Praise be to Him, all honor, might, dominion, + + Who from the height of heaven's throne is reigning, + + Governing all the fabric of creation, + + Three and yet One. Amen. +status: + la: verified + en: draft diff --git a/src/data/propers/common/vespers-responsory-common-of-a-confessor-bishop.yml b/src/data/propers/common/vespers-responsory-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..581b47b --- /dev/null +++ b/src/data/propers/common/vespers-responsory-common-of-a-confessor-bishop.yml @@ -0,0 +1,22 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# `votive=C4` live query, 2026-08 -- see lauds-capitulum-common-of-a- +# confessor-bishop.yml's header for why the votive-office view was used. +id: vespers-responsory-common-of-a-confessor-bishop +text: + la: | + R.br. Elégit eum Dóminus * Sacerdótem sibi. + ℟. Elégit eum Dóminus * Sacerdótem sibi. + ℣. Ad sacrificándum ei hóstiam laudis. + ℟. Sacerdótem sibi. + ℣. Glória Patri, et Fílio, * et Spirítui Sancto. + ℟. Elégit eum Dóminus * Sacerdótem sibi. + en: | + R.br. The Lord hath chosen him * for a Priest unto Himself. + ℟. The Lord hath chosen him * for a Priest unto Himself. + ℣. To offer up unto Him the sacrifice of praise. + ℟. For a Priest unto Himself. + ℣. Glory be to the Father, and to the Son, * and to the Holy Ghost. + ℟. The Lord hath chosen him * for a Priest unto Himself. +status: + la: verified + en: verified diff --git a/src/data/propers/common/vespers-versicle-common-of-a-confessor-bishop.yml b/src/data/propers/common/vespers-versicle-common-of-a-confessor-bishop.yml new file mode 100644 index 0000000..7413ef5 --- /dev/null +++ b/src/data/propers/common/vespers-versicle-common-of-a-confessor-bishop.yml @@ -0,0 +1,14 @@ +# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers +# `votive=C4` live query, 2026-08 -- same versicle as Lauds (see lauds- +# versicle-common-of-a-confessor-bishop.yml). +id: vespers-versicle-common-of-a-confessor-bishop +text: + la: | + ℣. Justum dedúxit Dóminus per vias rectas. + ℟. Et osténdit illi regnum Dei. + en: | + ℣. The Lord guided the just in right paths. + ℟. And showed him the kingdom of God. +status: + la: verified + en: verified diff --git a/tests/hours/lauds.test.ts b/tests/hours/lauds.test.ts index 7abeaa4..e2c79a8 100644 --- a/tests/hours/lauds.test.ts +++ b/tests/hours/lauds.test.ts @@ -170,6 +170,17 @@ describe('resolveOrdo("lauds", ...)', () => { expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Martyr Dei, qui únicum'); }); + it("uses Common-of-a-Confessor-Bishop's real office bundle on St. Ubald's own day, not the ferial default", () => { + // St. Ubald (May 16, Semiduplex, common-of-a-confessor-bishop) has no + // proper Lauds content of his own -- see vespers-hymn-common-of-a- + // confessor-bishop.yml's header. + const ordo = resolveOrdo('lauds', '2026-05-16'); + const chapter = ordo.parts.find((p) => p.kind === 'chapter'); + expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Sir 44:16-17'); + const hymn = ordo.parts.find((p) => p.kind === 'hymn'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Jesu Redémptor ómnium'); + }); + it('includes the Kyrie + Our Father lead-in right after the Benedictus, before the day collect (either form)', () => { const ordo = resolveOrdo('lauds', FERIAL_TUESDAY); const litanyIndex = ordo.parts.findIndex((p) => p.kind === 'preces' && p.text.text.la?.includes('Kýrie, eléison')); diff --git a/tests/hours/vespers.test.ts b/tests/hours/vespers.test.ts index d963750..b01ff88 100644 --- a/tests/hours/vespers.test.ts +++ b/tests/hours/vespers.test.ts @@ -250,6 +250,19 @@ describe('resolveOrdo("vespers", ...)', () => { } }); + it("uses Common-of-a-Confessor-Bishop's real office bundle for St. Ubald's First Vespers", () => { + // St. Ubald (May 16, Semiduplex, common-of-a-confessor-bishop) claims + // First Vespers over May 15's own evening (no stronger rival that + // year). Live-verified against Divinum Officium (Monastic Tridentinum + // 1617) votive=C4 -- see vespers-hymn-common-of-a-confessor-bishop.yml's + // header. + const ordo = resolveOrdo('vespers', '2026-05-15'); + const chapter = ordo.parts.find((p) => p.kind === 'chapter'); + expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Sir 44:16-17'); + const hymn = ordo.parts.find((p) => p.kind === 'hymn'); + expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Iste Conféssor Dómini sacrátus'); + }); + it("renders Passiontide's seasonal office, with the Gloria Patri omitted from the responsory", () => { // 2026-03-25 is a Wednesday in Passiontide (Passion Sunday 2026-03-22 // through Holy Saturday 2026-04-04). @@ -299,8 +312,13 @@ describe('resolveOrdo("vespers", ...)', () => { }); it("renders Paschaltide's seasonal office, sharing its chapter with Lauds", () => { - // 2026-04-20 is in eastertide (Easter 2026-04-05). - const ordo = resolveOrdo('vespers', '2026-04-20'); + // 2026-04-18 is in eastertide (Easter 2026-04-05) -- deliberately not + // 04-20, whose own evening (as of the Common-of-a-Confessor-Bishop + // office-bundle authoring below) now correctly anticipates St. + // Anselm's First Vespers on 04-21 instead of falling through to this + // seasonal default; 04-18's own evening has no adjacent sanctoral + // saint at all, so it stays a clean plain-Paschaltide proof. + const ordo = resolveOrdo('vespers', '2026-04-18'); const chapter = ordo.parts.find((p) => p.kind === 'chapter'); expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Rom 6:9-10'); const hymn = ordo.parts.find((p) => p.kind === 'hymn');