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

St. Zephyrinus (Aug 26, common-of-a-martyr-bishop, Simplex) claims First
Vespers over St. Louis's Aug 25, but that evening was showing the plain
ferial hymn instead of a real Common-of-a-Martyr hymn: no content had
been authored yet for this Common category's Lauds/Vespers bundle, so
resolveOfficeBundle's chapter lookup came back missing and the whole
bundle fell through to the ferial default.

Live-verified against Divinum Officium (Monastic Tridentinum 1617)
votive=C2b: chapter Jac 1:12, Lauds hymn "Martyr Dei, qui unicum," Vespers
hymn "Deus tuorum militum," shared versicle "Justus ut palma florebit."
Used the votive-office view rather than a real saint's own day for the
same structural reason as the earlier Confessor-Not-Bishop fix: every
real Common-of-a-Martyr-Bishop saint either has proper content of his own
(St. Lawrence, St. Stephen) or never reaches the rank needed to keep his
own Vespers (St. Zephyrinus, St. Callistus). Cross-checked votive=C2/C2a/
C2b/C2-1 all render identical text, so the same 7 files were duplicated
under the plain common-of-a-martyr id too (St. Hadrian, St. Hermes, St.
Fidelis of Sigmaringen).

Updates one existing Vespers test whose date (2026-03-03) turned out to
also anticipate St. Lucius I's First Vespers, previously masked by this
same content gap; adds two new proof tests and a TODO.md entry.

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:19:02 -04:00
parent 63fd319509
commit 7816450086
17 changed files with 650 additions and 2 deletions
+13
View File
@@ -157,6 +157,19 @@ describe('resolveOrdo("lauds", ...)', () => {
expect(canticle?.kind === 'canticle' ? canticle.antiphon?.text.la : undefined).toContain('In cratícula');
});
it("uses Common-of-a-Martyr-Bishop's real office bundle on St. Zephyrinus's own day, not the ferial default", () => {
// St. Zephyrinus (Aug 26, Simplex, common-of-a-martyr-bishop) has no
// proper Lauds content of his own; before this Common's Lauds bundle
// was authored, the missing chapter made the whole bundle resolve to
// undefined and fall through to the plain ferial default -- see
// lauds-hymn-common-of-a-martyr-bishop.yml's header.
const ordo = resolveOrdo('lauds', '2026-08-26');
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Jas 1:12');
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Martyr Dei, qui únicum');
});
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'));
+30 -2
View File
@@ -198,14 +198,42 @@ describe('resolveOrdo("vespers", ...)', () => {
});
it("renders Lent's seasonal office", () => {
// 2026-03-03 is a Tuesday in Lent, before Passiontide.
const ordo = resolveOrdo('vespers', '2026-03-03');
// 2026-03-02 is a Monday in Lent, before Passiontide -- deliberately
// not 03-03, whose own evening (as of the Common-of-a-Martyr-Bishop
// office-bundle authoring below) now correctly anticipates St. Lucius
// I's First Vespers on 03-04 instead of falling through to this
// seasonal default; 03-02's own evening has no adjacent sanctoral
// saint at all, so it stays a clean plain-Lent proof.
const ordo = resolveOrdo('vespers', '2026-03-02');
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Joel 2:17');
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Audi, benígne Cónditor');
});
it("uses Common-of-a-Martyr-Bishop's real office bundle, not the ferial default, for a Simplex saint's First Vespers", () => {
// St. Zephyrinus (Aug 26, Simplex, common-of-a-martyr-bishop) claims
// First Vespers over St. Louis's Aug 25 -- see calendar/vespers.ts's
// hasFirstVespers comments. Before this Common's Lauds/Vespers bundle
// was authored, the missing chapter/hymn made the whole bundle
// resolve to undefined, silently falling through to the plain ferial
// default -- live-verified against Divinum Officium's `votive=C2b`
// view instead of a real saint's own day, same reasoning as Common-
// of-a-Confessor-Not-Bishop's own proof (see vespers-hymn-common-of-
// a-martyr-bishop.yml's header).
const ordo = resolveOrdo('vespers', '2026-08-25');
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Jas 1:12');
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Deus tuórum mílitum');
for (const part of ordo.parts) {
if (part.kind === 'chapter' || part.kind === 'responsory' || part.kind === 'hymn' || part.kind === 'versicle') {
expect(part.text.status.la).toBe('verified');
expect(part.text.status.en).toBe('verified');
}
}
});
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).