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:
@@ -3037,6 +3037,39 @@ found to have their own real `ex Proprio Sanctorum` content (need per-saint impo
|
||||
category-level fix), plus Vigils and the remaining BVM feasts, not yet checked against their
|
||||
own source files.
|
||||
|
||||
### Vigils confirmed ferial-by-design (not a gap); Common-of-the-BVM authored (2026-08-26)
|
||||
|
||||
Finished the "ferial/other" bucket, reading each saint's own source file (`[Rank]`/`[Rule]`)
|
||||
directly rather than hunting per-saint clean years, per the methodology upgrade above.
|
||||
|
||||
**Vigils (9 saints): not a gap at all.** Every vigil's own `[Rule]` explicitly says "Responsory
|
||||
Feria" / "Versum Feria" — plain ferial content by deliberate rubric, live-confirmed on Vigil of
|
||||
St. Lawrence's real day (2025-08-09, Simplex, un-outranked): genuinely `ex Psalterio secundum
|
||||
diem`, not a masked gap. The 6 apostle vigils (James, Simon & Jude, Andrew, Bartholomew,
|
||||
Thomas, Matthew) carry an "ex C1v" tag, but `votive=C1v` itself resolves to the same plain
|
||||
ferial text — confirming C1v doesn't override the Lauds/Vespers bundle either. Matches this
|
||||
app's own already-established `isFerialOrVigil` convention (`resolve-common.ts`). No content
|
||||
authored, correctly.
|
||||
|
||||
**Common-of-the-BVM (5 feasts: Apparition of the Immaculate BVM, Queenship, Our Lady of Mount
|
||||
Carmel, Our Lady of Ransom, the Maternity): real category, authored.** Each one's own source
|
||||
file says plain "ex C11"/"vide C11". Live-verified `votive=C11`: chapter Sir 24:14 ("Ab inítio
|
||||
et ante sǽcula creáta sum"), Lauds hymn "O gloriósa Dómina" (same pre-Urban-VIII text already
|
||||
found for the Annunciation's own separate proper — a real overlap, not a mix-up), Vespers hymn
|
||||
"Ave maris stella", same responsory text at both hours (unusual for this session's categories —
|
||||
every other one had distinct Lauds/Vespers responsories), distinct versicles per hour.
|
||||
|
||||
One masked collision this surfaced: the Annunciation (Mar 25, `common: common-of-the-bvm`,
|
||||
`propers: "annunciation"` — but no `lauds-capitulum-annunciation.yml` authored yet) now
|
||||
resolves through this Common instead of falling through to Passiontide's seasonal default —
|
||||
a real improvement, though still interim until Annunciation's own real Proprio content (already
|
||||
found and queued in the individual-saints list) is imported and takes precedence over it.
|
||||
Updated the Passiontide-seasonal-office Vespers test off Mar 25 onto the clean Mar 30.
|
||||
|
||||
`npm test` (498 tests), `tsc --noEmit` both pass. This closes the "ferial/other" bucket
|
||||
entirely. **Still open**: the ~31 individual saints with their own real `ex Proprio Sanctorum`
|
||||
content, the actual next task.
|
||||
|
||||
## Known, deliberate simplifications (not bugs — working as designed)
|
||||
|
||||
- `getDayCollects`: each collect in a multi-collect day renders as its own
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
|
||||
# `votive=C11` live query, 2026-08 -- read directly from the source
|
||||
# first (Sancti/02-11.txt, 05-31.txt, 07-16.txt, 09-24.txt, 10-11.txt --
|
||||
# the 5 saints/feasts in this category, Apparition of the Immaculate
|
||||
# BVM, Queenship, Our Lady of Mount Carmel, Our Lady of Ransom, and the
|
||||
# Maternity), all of whose own `[Rank]`/`[Rule]` say plain "ex C11"/"vide
|
||||
# C11", settling the votive number with no calendar dependency. Same
|
||||
# chapter reused for Vespers -- no separate vespers-capitulum-<id> file
|
||||
# authored, per vespers.ts's vespersCapitulumForOverride fallback.
|
||||
id: lauds-capitulum-common-of-the-bvm
|
||||
text:
|
||||
la: "Ab inítio et ante sǽcula creáta sum, et usque ad futúrum sǽculum non désinam, et in habitatióne sancta coram ipso ministrávi."
|
||||
en: "From the beginning, and before the world, was I created, and unto the world to come I shall not cease to be, and in the holy dwelling place I have ministered before him."
|
||||
citation:
|
||||
la: "Sir 24:14"
|
||||
en: "Sir 24:14"
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,81 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
|
||||
# `votive=C11` live query, 2026-08 -- see lauds-capitulum-common-of-the-
|
||||
# bvm.yml's header. "O gloriósa Dómina" -- the same pre-Urban VIII hymn
|
||||
# text already found for the Annunciation's own proper (a separate,
|
||||
# individually-imported saint, not this Common) -- a real, confirmed
|
||||
# overlap between the two, not a mix-up.
|
||||
id: lauds-hymn-common-of-the-bvm
|
||||
text:
|
||||
la: >-
|
||||
O gloriósa Dómina,
|
||||
|
||||
Excélsa super sídera:
|
||||
|
||||
Qui te creávit, próvide
|
||||
|
||||
Lactásti sacro úbere.
|
||||
|
||||
|
||||
Quod Heva tristis ábstulit,
|
||||
|
||||
Tu reddis almo gérmine:
|
||||
|
||||
Intrent ut astra flébiles,
|
||||
|
||||
Cæli fenéstra facta es.
|
||||
|
||||
|
||||
Tu Regis alti jánua,
|
||||
|
||||
Et porta lucis fúlgida:
|
||||
|
||||
Vitam datam per Vírginem,
|
||||
|
||||
Gentes redémptæ, pláudite.
|
||||
|
||||
|
||||
Glória tibi Dómine,
|
||||
|
||||
Qui natus es de Vírgine,
|
||||
|
||||
Cum Patre et Sancto Spíritu,
|
||||
|
||||
In sempitérna sǽcula. Amen.
|
||||
en: >-
|
||||
O glorious lady! throned on high
|
||||
|
||||
Above the star-illumined sky;
|
||||
|
||||
Thereto ordained, thy bosom lent
|
||||
|
||||
To thy Creator nourishment.
|
||||
|
||||
|
||||
Through thy sweet offspring we receive
|
||||
|
||||
The bliss once lost through hapless Eve;
|
||||
|
||||
And heaven to mortals open lies
|
||||
|
||||
Now thou art portal of the skies.
|
||||
|
||||
|
||||
Thou art the door of heaven's high King,
|
||||
|
||||
Light's gateway fair and glistering;
|
||||
|
||||
Life through a Virgin is restored;
|
||||
|
||||
Ye ransomed nations, praise the Lord!
|
||||
|
||||
|
||||
All honour, laud, and glory be,
|
||||
|
||||
O Jesu, Virgin-born, to thee;
|
||||
|
||||
All glory, as is ever meet,
|
||||
|
||||
To Father and to Paraclete. Amen.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,24 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
|
||||
# `votive=C11` live query, 2026-08 -- see lauds-capitulum-common-of-the-
|
||||
# bvm.yml's header. Same responsory text as Vespers (unusual for this
|
||||
# app's Common categories so far -- every other one so far had distinct
|
||||
# Lauds/Vespers responsories).
|
||||
id: lauds-responsory-common-of-the-bvm
|
||||
text:
|
||||
la: |
|
||||
R.br. Ave María, grátia plena, * Dóminus tecum.
|
||||
℟. Ave María, grátia plena, * Dóminus tecum.
|
||||
℣. Benedícta tu in muliéribus, et benedíctus fructus ventris tui.
|
||||
℟. Dóminus tecum.
|
||||
℣. Glória Patri, et Fílio, * et Spirítui Sancto.
|
||||
℟. Ave María, grátia plena, * Dóminus tecum.
|
||||
en: |
|
||||
R.br. Hail Mary full of grace, * the Lord is with thee.
|
||||
℟. Hail Mary full of grace, * the Lord is with thee.
|
||||
℣. Blessed art thou among women, and blessed is the fruit of thy womb.
|
||||
℟. The Lord is with thee.
|
||||
℣. Glory be to the Father, and to the Son, * and to the Holy Ghost.
|
||||
℟. Hail Mary full of grace, * the Lord is with thee.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,15 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
|
||||
# `votive=C11` live query, 2026-08 -- see lauds-capitulum-common-of-the-
|
||||
# bvm.yml's header. Vespers has its own distinct versicle -- see
|
||||
# vespers-versicle-common-of-the-bvm.yml.
|
||||
id: lauds-versicle-common-of-the-bvm
|
||||
text:
|
||||
la: |
|
||||
℣. Diffúsa est grátia in lábiis tuis.
|
||||
℟. Proptérea benedíxit te Deus in ætérnum.
|
||||
en: |
|
||||
℣. Grace is poured into thy lips.
|
||||
℟. Therefore God hath blessed thee for ever.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,135 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers
|
||||
# `votive=C11` live query, 2026-08 -- "Ave maris stella," the classic
|
||||
# Common-of-the-BVM Vespers hymn, genuinely distinct from the Lauds hymn
|
||||
# (unlike some other categories this session where the two hours shared
|
||||
# one hymn text) -- see lauds-capitulum-common-of-the-bvm.yml's header
|
||||
# for the fuller gap/sourcing writeup.
|
||||
id: vespers-hymn-common-of-the-bvm
|
||||
text:
|
||||
la: >-
|
||||
Ave maris stella,
|
||||
|
||||
Dei Mater alma,
|
||||
|
||||
Atque semper Virgo,
|
||||
|
||||
Felix cæli porta.
|
||||
|
||||
|
||||
Sumens illud Ave
|
||||
|
||||
Gabriélis ore,
|
||||
|
||||
Funda nos in pace,
|
||||
|
||||
Mutans Hevæ nomen.
|
||||
|
||||
|
||||
Solve vincla reis,
|
||||
|
||||
Profer lumen cæcis,
|
||||
|
||||
Mala nostra pelle,
|
||||
|
||||
Bona cuncta posce.
|
||||
|
||||
|
||||
Monstra te esse matrem,
|
||||
|
||||
Sumat per te preces,
|
||||
|
||||
Qui pro nobis natus,
|
||||
|
||||
Tulit esse tuus.
|
||||
|
||||
|
||||
Virgo singuláris,
|
||||
|
||||
Inter omnes mitis,
|
||||
|
||||
Nos culpis solútos
|
||||
|
||||
Mites fac et castos.
|
||||
|
||||
|
||||
Vitam præsta puram,
|
||||
|
||||
Iter para tutum,
|
||||
|
||||
Ut vidéntes Jesum,
|
||||
|
||||
Semper collætémur.
|
||||
|
||||
|
||||
Sit laus Deo Patri,
|
||||
|
||||
Summo Christo decus,
|
||||
|
||||
Spirítui Sancto,
|
||||
|
||||
Tribus honor unus. Amen.
|
||||
en: >-
|
||||
Ave, star of ocean,
|
||||
|
||||
Child divine who barest,
|
||||
|
||||
Mother, ever-Virgin,
|
||||
|
||||
Heaven's portal fairest.
|
||||
|
||||
|
||||
Taking that sweet Ave
|
||||
|
||||
Erst by Gabriel spoken,
|
||||
|
||||
Eva's name reversing,
|
||||
|
||||
Be of peace the token.
|
||||
|
||||
|
||||
Break the sinners' fetters,
|
||||
|
||||
Light to blind restoring,
|
||||
|
||||
All our ills dispelling,
|
||||
|
||||
Every boon imploring.
|
||||
|
||||
|
||||
Show thyself a mother
|
||||
|
||||
In thy supplication;
|
||||
|
||||
He will hear who chose thee
|
||||
|
||||
At his incarnation.
|
||||
|
||||
|
||||
Maid all maids excelling,
|
||||
|
||||
Passing meek and lowly,
|
||||
|
||||
Win for sinners pardon,
|
||||
|
||||
Make us chaste and holy.
|
||||
|
||||
|
||||
As we onward journey
|
||||
|
||||
Aid our weak endeavour,
|
||||
|
||||
Till we gaze on Jesus
|
||||
|
||||
And rejoice forever.
|
||||
|
||||
|
||||
Father, Son, and Spirit,
|
||||
|
||||
Three in One confessing,
|
||||
|
||||
Give we equal glory
|
||||
|
||||
Equal praise and blessing. Amen.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,23 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers
|
||||
# `votive=C11` live query, 2026-08 -- see lauds-capitulum-common-of-the-
|
||||
# bvm.yml's header. Same responsory text as Lauds -- see that file's own
|
||||
# header note.
|
||||
id: vespers-responsory-common-of-the-bvm
|
||||
text:
|
||||
la: |
|
||||
R.br. Ave María, grátia plena, * Dóminus tecum.
|
||||
℟. Ave María, grátia plena, * Dóminus tecum.
|
||||
℣. Benedícta tu in muliéribus, et benedíctus fructus ventris tui.
|
||||
℟. Dóminus tecum.
|
||||
℣. Glória Patri, et Fílio, * et Spirítui Sancto.
|
||||
℟. Ave María, grátia plena, * Dóminus tecum.
|
||||
en: |
|
||||
R.br. Hail Mary full of grace, * the Lord is with thee.
|
||||
℟. Hail Mary full of grace, * the Lord is with thee.
|
||||
℣. Blessed art thou among women, and blessed is the fruit of thy womb.
|
||||
℟. The Lord is with thee.
|
||||
℣. Glory be to the Father, and to the Son, * and to the Holy Ghost.
|
||||
℟. Hail Mary full of grace, * the Lord is with thee.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -0,0 +1,14 @@
|
||||
# Verified against Divinum Officium (Monastic Tridentinum 1617), Vespers
|
||||
# `votive=C11` live query, 2026-08 -- distinct from the Lauds versicle
|
||||
# (see lauds-versicle-common-of-the-bvm.yml).
|
||||
id: vespers-versicle-common-of-the-bvm
|
||||
text:
|
||||
la: |
|
||||
℣. Dignáre me laudáre te, Virgo sacráta.
|
||||
℟. Da mihi virtútem contra hostes tuos.
|
||||
en: |
|
||||
℣. Holy Virgin, my praise by thee accepted be.
|
||||
℟. Give me strength against thine enemies.
|
||||
status:
|
||||
la: verified
|
||||
en: verified
|
||||
@@ -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