Confirm Vigils are ferial-by-design; author Common-of-the-BVM Lauds/Vespers bundle
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:
2026-08-26 08:52:41 -04:00
parent 476f068fde
commit b7036edb35
10 changed files with 373 additions and 3 deletions
+17 -3
View File
@@ -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');