Confirm Vigils are ferial-by-design; author Common-of-the-BVM Lauds/Vespers bundle
Deploy / deploy (push) Successful in 1m19s
Deploy / deploy (push) Successful in 1m19s
Finished the "ferial/other" audit bucket via each saint's own source file. Vigils (9 saints) are not a gap at all: every vigil's own [Rule] explicitly says "Responsory Feria"/"Versum Feria" -- deliberate rubric, matching this app's existing isFerialOrVigil convention. Even the "ex C1v" tag on the 6 apostle vigils resolves to the same plain ferial text when live-queried, confirming no override applies to the Lauds/Vespers bundle for any vigil. Common-of-the-BVM (5 feasts) is a real category: each source file says plain "ex C11"/"vide C11". Live-verified votive=C11: chapter Sir 24:14, Lauds hymn "O gloriósa Dómina" (the same pre-Urban-VIII text as the Annunciation's own separate proper), Vespers hymn "Ave maris stella," same responsory at both hours, distinct versicles per hour. Surfaced one masked collision: the Annunciation now resolves through this Common instead of the ferial default (real improvement, still interim until its own proper content is imported). Moved the Passiontide-seasonal-office Vespers test off its date (Mar 25) onto the clean Mar 30. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
This commit is contained in:
@@ -277,6 +277,18 @@ describe('resolveOrdo("lauds", ...)', () => {
|
||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Jesu coróna célsior');
|
||||
});
|
||||
|
||||
it("uses common-of-the-bvm's real office bundle on Our Lady of Mount Carmel's own day", () => {
|
||||
// Read directly from the source: Sancti/07-16.txt, 02-11.txt,
|
||||
// 05-31.txt, 09-24.txt, 10-11.txt (the 5 saints/feasts in this
|
||||
// category) all say plain "ex C11"/"vide C11" -- see lauds-
|
||||
// capitulum-common-of-the-bvm.yml's header.
|
||||
const ordo = resolveOrdo('lauds', '2026-07-16');
|
||||
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
|
||||
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Sir 24:14');
|
||||
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
|
||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('O gloriósa Dómina');
|
||||
});
|
||||
|
||||
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'));
|
||||
|
||||
@@ -334,10 +334,24 @@ describe('resolveOrdo("vespers", ...)', () => {
|
||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Fortem viríli péctore');
|
||||
});
|
||||
|
||||
it("uses common-of-the-bvm's real office bundle for Our Lady of Mount Carmel's First Vespers", () => {
|
||||
// Live-verified against Divinum Officium (Monastic Tridentinum 1617)
|
||||
// votive=C11 -- see vespers-hymn-common-of-the-bvm.yml's header.
|
||||
const ordo = resolveOrdo('vespers', '2026-07-15');
|
||||
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
|
||||
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Sir 24:14');
|
||||
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
|
||||
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined).toContain('Ave maris stella');
|
||||
});
|
||||
|
||||
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).
|
||||
const ordo = resolveOrdo('vespers', '2026-03-25');
|
||||
// 2026-03-30 is Holy Monday (Passion Sunday 2026-03-22 through Holy
|
||||
// Saturday 2026-04-04) -- deliberately not 03-25, the Annunciation's
|
||||
// own fixed date, whose evening now correctly resolves to real
|
||||
// Common-of-the-BVM content instead of falling through to this
|
||||
// seasonal default (the Annunciation's own proper content isn't
|
||||
// imported yet, so this is still an interim improvement, not final).
|
||||
const ordo = resolveOrdo('vespers', '2026-03-30');
|
||||
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
|
||||
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Jer 11:20');
|
||||
const responsory = ordo.parts.find((p) => p.kind === 'responsory');
|
||||
|
||||
Reference in New Issue
Block a user