Author Common-of-a-Confessor-Bishop Lauds/Vespers chapter/responsory/hymn/versicle
Deploy / deploy (push) Successful in 1m22s

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
This commit is contained in:
2026-08-26 07:50:38 -04:00
parent 52d6810f3a
commit 716937b8f9
10 changed files with 348 additions and 2 deletions
+11
View File
@@ -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'));
+20 -2
View File
@@ -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');