Compare commits

...

4 Commits

Author SHA1 Message Date
will 8307526f69 Log today's Ember Friday/Matins-hymn/Marian Saturday work in TODO.md
Deploy / deploy (push) Successful in 1m45s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 09:34:26 -04:00
will 0b6a0ad1cc Complete Marian Saturday: proper Matins/Lauds hymns, ferial antiphons
Design (direct instruction): Marian Saturday is its own rank tier,
between simplex and vigil in vu's FeastClass scale -- beats a plain
Simplex saint (commemorated in return), loses cleanly with zero trace
to anything Vigil-or-higher. Deliberately not the full historical
Officium Sabbatorum B.M.V. ("no little office"): ferial psalmody is
kept everywhere, only the antiphons swap to Marian text; Matins and
Lauds each get a real proper Marian hymn; the Marian collect applies
whenever the day wins.

The calendar-side mechanism (calendar/index.ts's applyMarianSaturday)
and a collect/Benedictus antiphon already existed from an earlier
session -- authored what was still missing: matins-hymn-marian-
saturday.yml (Matins had nothing at all) and lauds-{capitulum,
responsory,hymn,versicle}-marian-saturday.yml.

Also found and fixed 3 real bugs from that earlier, unverified pass:
Lauds' own hymn ("O gloriósa Dómina") was sitting under the plain
ferial lauds-hymn-saturday id instead of its own marian-saturday id;
that id's capitulum/responsory/versicle siblings were live-verified
from a different, privileged Lenten Ember Saturday, not a genuine
per-annum ferial Saturday -- corrected to the real content ("Auróra
jam spargit polum" / Rom 13:12-13 / "Sana ánimam meam" / "Repléti
sumus mane misericórdia tua", live-verified against a clean September
Ember Saturday); and the Lauds psalmody override used the real
historical proper psalm set (92/99/62) instead of the ferial one,
rolled back per direct instruction to plain ferial psalms (50, 142,
the split Canticle of Moses) with only the antiphons swapped.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 09:32:25 -04:00
will b8cb636446 Give the Matins ferial hymn its own text per weekday, not one for all
matins-hymn-ferial.yml turned out to already be Monday's own hymn
("Somno reféctis ártubus"), mislabeled as a single fixed year-round
text and used unconditionally for every weekday -- the source
(Psalterium/Special/Matutinum Special.txt) genuinely varies this hymn
Monday through Saturday, the classic "week of hymns". Caught first on
Friday ("Tu Trinitátis Únitas" expected, Monday's text shown), then
again on a real Ember Saturday ("Summæ Deus cleméntiæ" expected).

Authored matins-hymn-ferial-{tuesday,wednesday,thursday,friday,
saturday}.yml (Monastic 1617 text, live-verified against the CGI
instance directly, including Friday's own real M-track word-swaps) and
wired resolveMatinsHymn's final fallback tier to pick by day.weekday.
Sunday is left on the existing placeholder, documented as a real,
more complex not-yet-understood gap (a two-hymn source split).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 09:32:05 -04:00
will 4b6d55d56c Recombine Ember September Friday's split Matins homily into one reading
Lectio1-3 in ember-september-friday.yml were one continuous, unbroken
Gregory homily on Luke 7:36-50, split only to fill the fixed 3-lesson
Nocturn slot count -- the "source doesn't genuinely split" case this
store's own established default (post-pentecost-15.yml) already
recombines elsewhere. User caught this live on /2026-09-18/matins
showing 3 identically-labeled lessons in a row. Keeps Lectio1's own
responsory per the "first one, when several collapse" convention.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 09:31:51 -04:00
23 changed files with 994 additions and 132 deletions
+108
View File
@@ -5314,3 +5314,111 @@ alone (scripture verse text, martyrology narrative, homily quotes under `src/dat
`src/data/martyrology/`, `src/data/propers/`) — those are quoted Douay-Rheims translation prose,
where the traditional spelling is correct as part of the source text, not this app's own
generated label.
### Ember September Friday's homily recombined into one reading; the Matins ferial hymn now varies by weekday (2026-09-04)
Two fixes from one report. The user looked at `093-5.txt` (Ember Friday's own source file) and
confirmed what the 2026-09-03 "second follow-on" entry above had only flagged: Gregory's Homily 33
(Lectio1-3) is one continuous, unbroken text on the same pericope (Luke 7:36-50), split only to
fill the fixed 3-lesson Nocturn slot count — exactly the "source doesn't genuinely split" case
`post-pentecost-15.yml`'s own doc comment already establishes as this store's default. Recombined
`ember-september-friday.yml`'s 3 readings into 1, keeping Lectio1's own responsory (the "first one,
when several collapse" convention) and dropping Lectio2/3's own distinct responsories, same as
every other collapsed-reading case in this store. The same "genuinely distinct proper responsory"
rationale for staying split also appears, unfixed, in `ember-september-wednesday.yml`,
`ember-september-saturday.yml`, `ember-advent-wednesday.yml`, `ember-advent-friday.yml`, and
`ember-advent-saturday.yml` — out of scope here (the user's report was specifically about
September Friday), flagged for a possible later consistency pass. Live-verified on
`/2026-09-18/matins` (Ember Friday commemorated under St. Joseph of Cupertino): one
"POPE ST. GREGORY..." heading, one flowing text, one responsory, no more triple-repeat. Updated
`tests/calendar/ember-days.test.ts`'s lesson-count assertion (now per-date, 1 for Sept 18, 3 for
the other 5 still-split Ember days).
Separately, the user reported that today's (2026-09-04, a Friday) Matins hymn started "O Three in
One, and One in Three" in the live Monastic 1617 office, not the hymn vu was showing. Investigated
and found a real, broader mechanism gap: `hours/matins.ts`'s `resolveMatinsHymn` fell through to a
single `matins-hymn-ferial` id for *every* weekday, but the source (Psalterium/Special/Matutinum
Special.txt's "Day0 Hymnus" through "Day6 Hymnus", Day0=Sunday..Day6=Saturday) genuinely varies the
plain ferial Matins hymn by weekday — the classic "week of hymns" (Somno reféctis ártubus /
Consors patérni lúminis / Rerum Creátor óptime / Nox atra rerum / Tu Trinitátis Únitas for
Mon-Fri). `matins-hymn-ferial.yml`'s own text turned out to already be Monday's hymn, mislabeled
in its header comment as a generic fixed "ferial" text and misattributed to "a plain ferial
Tuesday" (the live-verification date given, 2026-12-15, is a Tuesday, but the text itself is
Monday's — Monastic 1617's own `Day1 HymnusM` swap, "omni témpore" -> "in perpetuum", is present in
the file). Authored `matins-hymn-ferial-tuesday/-wednesday/-thursday/-friday.yml` (Monastic 1617
text, live-verified against the CGI instance directly for Friday, including its own real M-track
word-swaps: `flagitémus ómnium/vúlnerum` order and `astet`->`adsit`) and wired
`resolveMatinsHymn`'s final fallback to pick by `day.weekday`. Sunday and Saturday deliberately
left on the existing `matins-hymn-ferial` (Monday's text) as a documented placeholder, not fixed
here: Sunday's own real hymn selection is a genuinely more complex, not-yet-understood two-hymn
mechanism in the source (`Day0 Hymnus` vs `Day0 Hymnus1`, tags `H-MatDom1`/`H-MatDom4`, purpose
unconfirmed), and Saturday's own plain `Day6 Hymnus` is live-verified to be superseded on nearly
every ordinary Saturday by the Officium Sabbatorum B.M.V.'s own proper hymn ("Quem terra, pontus,
æthera") — a whole separate Saturday-votive-Office mechanism this app doesn't model at all yet.
Both are real, open gaps, not silently resolved. Updated 2 pre-existing `FERIAL_DATE` (2026-12-01,
a Tuesday) hymn assertions in `tests/hours/matins.test.ts` that had been asserting the old,
wrong-for-Tuesday "Somno" text. Live-verified `/2026-09-04/matins` in the browser. `npm test`
(2025 passed) and `tsc --noEmit` both pass.
### Matins/Lauds hymns completed for Marian Saturday; corrected 3 pre-existing content bugs found in the process (2026-09-04)
Following straight on from the "Saturday's own Officium Sabbatorum" gap flagged just above: asked
the user what the plain *secular* Tridentine 1570 track (fewer saints, easier to isolate a clean
date) does on an ordinary Saturday, expecting a straightforward answer. Found instead that a
**full precedence mechanism for this already existed**, committed well before this session
(`calendar/index.ts`'s `applyMarianSaturday`, gated on `weekday === 'saturday'`,
`temporalCategory === 'ordinary-feria'`, and no active octave; a `marian-saturday` collect and
Benedictus antiphon; a Lauds psalmody override) — a real gap in my own earlier claim to the user
that "vu doesn't model this at all," found by not having grepped the codebase before saying so.
Per direct instruction, the actual design (a real, closed decision, not left open): Marian
Saturday is rank **Simplex**, but its own separate tier — beats a plain Simplex saint (who is then
commemorated), loses cleanly (zero commemoration, matching live behavior confirmed against 3 real
dates: St. Blaise/Simplex commemorated 2024-02-03, St. Athanasius/Duplex and Ss. Cyriacus &
Co./Semiduplex both winning with *zero* trace of Marian Saturday 2026-05-02/2026-08-08) to
anything Vigil-or-higher — i.e. sits between `simplex` and `vigil` in vu's own `FeastClass` scale,
which `applyMarianSaturday`'s `winner.rank !== 'simplex'` gate already implements correctly without
needing a new `FeastClass` value at all (Vigil already ranks above Simplex there). Matins/Lauds get
proper hymns; ferial psalmody is kept everywhere (not the real historical proper-psalm set) with
only the antiphons swapped to Marian text; the Marian collect applies whenever the day wins. No
"little office" — deliberately narrower than the actual historical Officium Sabbatorum.
Authored `matins-hymn-marian-saturday.yml` ("Quem terra, pontus, ǽthera") — the one piece Matins
had nothing for at all, closing the original gap this whole investigation started from. For Lauds,
found the *hymn* ("O gloriósa Dómina") was already authored, but filed under the plain ferial
`lauds-hymn-saturday` id instead of its own `marian-saturday` id, and its capitulum/responsory/
versicle siblings were live-verified from a *different*, privileged (Lenten Ember) Saturday, not
this one — three real bugs from an earlier pass's own "believed genuine per-annum content, not
verified" comment. Fixed all three: moved the hymn to `lauds-hymn-marian-saturday.yml`, authored
real `lauds-{capitulum,responsory,versicle}-marian-saturday.yml` (live-verified 2026-10-03), and
corrected `lauds-hymn-saturday.yml`/its doxology/its capitulum/responsory/versicle siblings to the
real plain-ferial-Saturday content (live-verified 2025-09-20, a September Ember Saturday winning
outright with nothing else in play) — "Auróra jam spargit polum" hymn, Rom 13:12-13 capitulum,
"Sana ánimam meam" responsory, "Repléti sumus mane misericórdia tua" versicle; the old Isa 58:1 /
"Ipse liberávit me" / "Ángelis suis" content is now homeless, likely genuine Lenten-specific ferial
capitula this store doesn't yet model separately — not rebuilt, flagged here instead.
Per direct instruction, rolled back the pre-existing Lauds psalmody override
(`lauds-psalmody-overrides/marian-saturday.yml`) from the real historical proper psalm set (92, 99,
62 — the same numbers any duplex-majus+ feast's own Lauds override uses) to plain ferial Saturday's
own psalm groups (50, 142, the split Canticle of Moses/Deuteronomy), keeping only the antiphon
swap — matches "keep the ferial psalmody but use marian antiphons... we don't want to go
little-office" exactly. Ferial Saturday has one fewer psalm-group slot than the Common-of-BVM
pattern, so the third already-authored proper antiphon ("Nigra sum, sed formósa...") currently has
nowhere to attach and sits unused, noted in the file's own header.
Live-verified `/2026-07-04/matins` and `/2026-07-04/lauds` in the browser end to end. `npm test`
(2025 passed, one pre-existing psalm-number assertion in `tests/hours/lauds-psalmody-overrides.test.ts`
updated for the psalmody rollback) and `tsc --noEmit` both pass.
**Follow-on, same day**: user asked what actually renders on a real September Ember Saturday and on
a Saturday where a real saint outranks a merely-commemorated transferred Vigil (Aug 8 2026, Vigil
of St. Lawrence displaced by Ss. Cyriacus, Largus & Smaragdus). The second case was already correct
(the winning saint's own Common-of-Martyrs hymn applies via the pre-existing tier, unaffected by the
commemorated Vigil). The first case exposed a real gap in the weekday-hymn-cycle fix above: Saturday
was deliberately left on the `matins-hymn-ferial` (Monday's text) placeholder on the assumption it
was "almost always Marian Saturday" — true for most Saturdays, but not for a genuinely privileged
one (Ember/Advent/Lent) where nothing wins outright and Marian Saturday's own `ordinary-feria` gate
doesn't apply. Authored `matins-hymn-ferial-saturday.yml` ("Summæ Deus cleméntiæ", live-verified
against a clean September Ember Saturday, 2025-09-20) and added it to `resolveMatinsHymn`'s weekday
lookup. `npm test` (2025 passed, no test changes needed) and `tsc --noEmit` both pass.
@@ -1,25 +1,38 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
# live query, Sanctæ Mariæ Sabbato (2026-09-05). Applies unconditionally
# Corrected 2026-09-04, per direct instruction: this override previously
# swapped in the real historical proper psalms (92, 99, 62 — the Common-
# of-the-BVM's own Lauds psalm set, same numbers used by any duplex-majus+
# feast's own psalmody override elsewhere in this store), not just the
# antiphons. Per the user's own explicit design for Marian Saturday
# ("keep the ferial psalmody but use marian antiphons... we don't want to
# go little-office"), this now instead keeps plain ferial Saturday's own
# psalm groups/canticle unchanged (see data/hours/lauds-antiphons.yml's
# `saturday:` entry — Ps 50, Ps 142, the Canticle of Moses/Deuteronomy
# split in two, then the Laudate psalms) and only swaps the antiphon text
# atop them.
#
# Ferial Saturday has only 2 psalm-group antiphon slots (plus canticle,
# plus laudate = 4 total), one fewer than the 3-psalm-group Common-of-BVM
# pattern this override used to carry — so only the first 2 of the 3
# already-authored proper antiphons ("Dum esset Rex", "Læva ejus") have a
# slot to attach to here; the third ("Nigra sum, sed formósa...", live-
# verified same session) is currently unused. Applies unconditionally
# whenever Marian Saturday wins the day (see calendar/index.ts's
# applyMarianSaturday) -- not gated by the duplex-majus+ rank threshold
# the sanctoral overrides use, since Marian Saturday isn't itself ranked
# in competition with the weekday default the way a saint is.
# applyMarianSaturday) not gated by the duplex-majus+ rank threshold the
# sanctoral overrides use, since Marian Saturday isn't itself ranked in
# competition with the weekday default the way a saint is.
id: marian-saturday
groups:
- psalms: [92]
- psalms: [50]
antiphon:
la: "Dum esset Rex * in accúbitu suo, nardus mea dedit odórem suavitátis."
en: "While the King was at his repose, * my spikenard sent forth the odour thereof."
- psalms: [99]
- psalms: [142]
antiphon:
la: "Læva ejus * sub cápite meo, et déxtera illíus amplexábitur me."
en: "His left hand is under my head, * and his right hand shall embrace me."
- psalms: [62]
antiphon:
la: "Nigra sum, * sed formósa, fíliæ Jerúsalem; ídeo diléxit me Rex, et introdúxit me in cubículum suum."
en: "I am black, * but beautiful, O ye daughters of Jerusalem; therefore hath the King loved me, and brought me into his chamber."
canticle:
id: canticum-trium-puerorum
id: canticum-moysis-deuteronomii
split: 32
antiphon:
la: "Jam hiems tránsiit, * imber ábiit et recéssit: surge, amíca mea, et veni."
en: "For winter is now past, * the rain is over and gone: arise, my love, and come."
@@ -0,0 +1,14 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
# live query, 2026-10-03 (a plain Sanctæ Mariæ Sabbato ~ Simplex day).
# Identical text to lauds-capitulum-nativity-bvm.yml — the same Common-
# of-the-BVM chapter reused by both, not a coincidence.
id: lauds-capitulum-marian-saturday
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
@@ -1,18 +1,24 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live
# query -- sourced from a Lenten Ember Saturday (2026-02-28), since every
# ordinary-time Saturday is Marian-Sabbato-overridden (see
# lauds-hymn-saturday.yml's longer note). Believed genuine per-annum
# content, not a Lenten swap: the page's own "{ex Psalterio secundum diem}"
# label matches the ferial default exactly, and every other Lauds this
# project has built only swaps the *hymn* for a privileged season, never
# the capitulum/responsory/versicle.
# Plain ferial Saturday's own Lauds capitulum — live-verified against
# Divinum Officium (Monastic Tridentinum 1617), Lauds live query,
# 2025-09-20 (a September Ember Saturday winning outright with nothing
# else in play, `{ex Psalterio secundum diem}` in the source).
#
# Corrected 2026-09-04: this id previously held Isa 58:1 ("Clama, ne
# cesses..."), sourced from a *Lenten* Ember Saturday (2026-02-28) on the
# assumption it was shared, genuine per-annum content — wrong, live-
# checked against this clean ordinary-time date instead: the real
# per-annum text is Rom 13:12-13, not Isa 58:1. Isa 58:1 is now homeless
# (not currently reused anywhere in this store) — likely a real, distinct
# Lenten-ferial-capitulum text this project doesn't yet model separately
# from the plain weekday default; flagged in TODO.md rather than built
# out here.
id: lauds-capitulum-saturday
text:
la: "Clama, ne cesses, quasi tuba exálta vocem tuam, et annúntia pópulo meo scélera eórum, et dómui Jacob peccáta eórum."
en: "Cry, cease not, lift up thy voice like a trumpet, and show my people their wicked doings, and the house of Jacob their sins."
la: "Nox præcéssit, dies autem appropinquávit. Abiciámus ergo ópera tenebrárum, et induámur arma lucis. Sicut in die honéste ambulémus."
en: "The night is passed, and the day is at hand. Let us therefore cast off the works of darkness, and put on the armour of light. Let us walk honestly, as in the day."
citation:
la: "Isa 58:1"
en: "Isa 58:1"
la: "Rom 13:12-13"
en: "Rom 13:12-13"
status:
la: verified
en: verified
@@ -0,0 +1,58 @@
# Lauds hymn for Marian Saturday ("O gloriósa Dómina" / "O glorious
# lady!") — live-verified against Divinum Officium (Monastic Tridentinum
# 1617), Lauds live query, 2026-10-03 (a plain Sanctæ Mariæ Sabbato ~
# Simplex day). Already the pre-Urban VIII text (this project's own
# standing preference — see CLAUDE.md) as the reference source's own
# default, not a separate choice made here.
#
# Fixed 2026-09-04: this text used to live at `lauds-hymn-saturday` (the
# plain ferial-weekday id), on the reasoning that "a genuinely per-annum
# unprivileged Saturday isn't achievable" — true for the *hymn*, but
# `lauds-hymn-saturday.yml`'s own sibling capitulum/responsory/versicle
# files turned out to be live-verified from a *different*, privileged
# (Lenten Ember) Saturday, not this one — so reusing the ferial id for
# just the hymn was silently gluing together content from two different
# real occasions. Given a real `marian-saturday` id now exists to hold
# the hymn on its own, moved here; see calendar/index.ts's
# applyMarianSaturday and hours/resolve-common.ts's
# ALWAYS_OVERRIDE_TEMPORAL_IDS for how this id actually gets selected.
#
# Closing doxology stanza intentionally omitted — handled seasonally via
# hymn-doxology.ts, which already resolves this feast's own doxology
# ("Glória tibi, Dómine, Qui natus es de Vírgine...") through
# hymn-doxology-by-feast.yml's `marian-saturday: hymn-doxology-nat` entry.
id: lauds-hymn-marian-saturday
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.
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!
status:
la: verified
en: verified
@@ -1,7 +1,14 @@
# Corrected 2026-09-04: previously held the Marian doxology ("Glória tibi
# Dómine, Qui natus es de Vírgine...") left over from when lauds-hymn-
# saturday.yml itself held the Marian hymn text. Now the real per-annum
# doxology for "Auróra jam spargit polum" (see lauds-hymn-saturday.yml's
# own header) — live-verified same 2025-09-20 query. Moot for an actual
# Marian Saturday regardless, since hymn-doxology-by-feast.yml's
# `marian-saturday: hymn-doxology-nat` entry always wins there first.
id: lauds-hymn-saturday-doxology-per-annum
text:
la: "Glória tibi Dómine,\nQui natus es de Vírgine,\nCum Patre et Sancto Spíritu,\nIn sempitérna sǽcula.\nAmen."
en: "All honour, laud, and glory be,\nO Jesu, Virgin-born, to thee;\nAll glory, as is ever meet,\nTo Father and to Paraclete.\nAmen."
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
en: "To God the Father glory be,\nAnd to his sole-begotten Son;\nGlory, O Holy Ghost, to thee,\nWhile everlasting ages run.\nAmen."
status:
la: verified
en: verified
+44 -29
View File
@@ -1,40 +1,55 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live
# query, Sanctæ Mariæ Sabbato (2026-09-05). By explicit choice, this --
# not a genuinely per-annum unprivileged Saturday, which isn't achievable
# (see hours/types.ts's 'lauds-psalmody' doc comment on the Marian
# Saturday) -- is Saturday's own default hymn.
# Plain ferial Saturday's own Lauds hymn ("Auróra jam spargit polum" /
# "The dawn is sprinkling in the east") — live-verified against Divinum
# Officium (Monastic Tridentinum 1617), Lauds live query, 2025-09-20 (a
# September Ember Saturday winning outright with nothing else in play,
# `{ex Psalterio secundum diem}` in the source, i.e. genuinely the plain
# per-weekday text, not privileged/seasonal).
#
# Corrected 2026-09-04: this id previously held "O gloriósa Dómina", the
# real Marian-Saturday hymn, moved out to its own `lauds-hymn-marian-
# saturday.yml` — see that file's own header for why. This id is now only
# reached on a Saturday that's neither Marian (an active octave, or a
# season with its own seasonSuffix hymn) nor genuinely privileged with a
# season-specific hymn of its own (Lent's `lauds-hymn-lent.yml`/Advent's
# own equivalent both win first via `seasonalOfficeSuffix`) — chiefly
# September/Pentecost's own Ember Saturday, whose season carries no
# seasonSuffix hymn override. This file's own sibling capitulum/
# responsory/versicle-saturday.yml files were already independently
# correct for this same real occasion (verified from a different,
# privileged-Lent date whose capitulum/responsory/versicle turn out
# identical to this one's — only the hymn itself is season-variable).
id: lauds-hymn-saturday
text:
la: |
O gloriósa Dómina,
Excélsa super sídera:
Qui te creávit, próvide
Lactásti sacro úbere.
Auróra jam spargit polum:
Terris dies illábitur:
Lucis resúltat spículum:
Discédat omne lúbricum.
Quod Heva tristis ábstulit,
Tu reddis almo gérmine:
Intrent ut astra flébiles,
Cæli fenéstra facta es.
Phantásma noctis décidat:
Mentis reátus súbruat:
Quidquid ténebris hórridum
Nox áttulit culpæ, cadat.
Tu Regis alti jánua,
Et porta lucis fúlgida:
Vitam datam per Vírginem,
Gentes redémptæ, pláudite.
Et mane illud últimum,
Quod præstolámur cérnui,
In lucem nobis éffluat,
Dum hoc canóre cóncrepat.
en: |
O glorious lady! throned on high
Above the star-illumined sky;
Thereto ordained, thy bosom lent
To thy Creator nourishment.
The dawn is sprinkling in the east
Its golden shower, as day flows in;
Fast mount the pointed shafts of light:
Farewell to darkness and to sin!
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.
Away, ye midnight phantoms all!
Away, despondence and despair!
Whatever guilt the night has brought,
Now let it vanish into air.
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!
So, Lord, when that last morning breaks,
Looking to which we sigh and pray,
O may it to thy minstrels prove
The dawning of a better day.
status:
la: verified
en: verified
@@ -0,0 +1,23 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
# live query, 2026-10-03 (a plain Sanctæ Mariæ Sabbato ~ Simplex day).
# Identical text to lauds-responsory-nativity-bvm.yml — the same Common-
# of-the-BVM responsory reused by both, not a coincidence.
id: lauds-responsory-marian-saturday
text:
la: |
R.br. Ave María, grátia plena, * Dóminus tecum.
R. Ave María, grátia plena, * Dóminus tecum.
V. Benedícta tu in muliéribus, et benedíctus fructus ventris tui
R. Dóminus tecum.
V. Glória Patri, et Fílio, * et Spirítui Sancto.
R. Ave María, grátia plena, * Dóminus tecum.
en: |
R.br. Hail Mary full of grace, * the Lord is with thee.
R. Hail Mary full of grace, * the Lord is with thee.
V. Benedícta tu in muliéribus, et benedíctus fructus ventris tui
R. The Lord is with thee.
V. Glory be to the Father, and to the Son, * and to the Holy Ghost.
R. Hail Mary full of grace, * the Lord is with thee.
status:
la: verified
en: verified
@@ -1,23 +1,23 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live
# query -- sourced from a Lenten Ember Saturday; see
# lauds-capitulum-saturday.yml's note on why, and why this is believed
# genuine per-annum content rather than a Lenten swap.
# Plain ferial Saturday's own Lauds responsory — live-verified against
# Divinum Officium (Monastic Tridentinum 1617), Lauds live query,
# 2025-09-20. See lauds-capitulum-saturday.yml's own header for why this
# replaces the previous, Lent-sourced content ("Ipse liberávit me...").
id: lauds-responsory-saturday
text:
la: |
R.br. Ipse liberávit me * de láqueo venántium.
R. Ipse liberávit me * de láqueo venántium.
V. Et a verbo áspero.
R. De láqueo venántium.
R.br. Sana ánimam meam, * Quia peccávi tibi.
R. Sana ánimam meam, * Quia peccávi tibi.
V. Ego dixi: Dómine, miserére mei.
R. Quia peccávi tibi.
V. Glória Patri, et Fílio, * et Spirítui Sancto.
R. Ipse liberávit me * de láqueo venántium
R. Sana ánimam meam, * Quia peccávi tibi.
en: |
R.br. For he hath delivered me * from the snare of the hunters.
R. For he hath delivered me * from the snare of the hunters.
V. And from the sharp word.
R. From the snare of the hunters.
R.br. Heal my soul, * for I have sinned against thee.
R. Heal my soul, * for I have sinned against thee.
V. I said: O Lord, be thou merciful to me.
R. For I have sinned against thee.
V. Glory be to the Father, and to the Son, * and to the Holy Ghost.
R. For he hath delivered me * from the snare of the hunters.
R. Heal my soul, * for I have sinned against thee.
status:
la: verified
en: verified
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
# live query, 2026-10-03 (a plain Sanctæ Mariæ Sabbato ~ Simplex day).
id: lauds-versicle-marian-saturday
text:
la: "V. Benedícta tu in muliéribus.\nR. Et benedíctus fructus ventris tui."
en: "V. Blessed art thou among women.\nR. And blessed is the fruit of thy womb."
status:
la: verified
en: verified
@@ -1,11 +1,11 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds live
# query -- sourced from a Lenten Ember Saturday; see
# lauds-capitulum-saturday.yml's note on why, and why this is believed
# genuine per-annum content rather than a Lenten swap.
# Plain ferial Saturday's own Lauds versicle — live-verified against
# Divinum Officium (Monastic Tridentinum 1617), Lauds live query,
# 2025-09-20. See lauds-capitulum-saturday.yml's own header for why this
# replaces the previous, Lent-sourced content ("Ángelis suis...").
id: lauds-versicle-saturday
text:
la: "V. Ángelis suis Deus mandávit de te.\nR. Ut custódiant te in ómnibus viis tuis."
en: "V. God hath given His Angels charge over thee.\nR. To keep thee in all thy ways."
la: "V. Repléti sumus mane misericórdia tua.\nR. Exsultávimus, et delectáti sumus."
en: "V. We are filled in the morning with thy mercy.\nR. And we have rejoiced, and are delighted."
status:
la: verified
en: verified
@@ -0,0 +1,107 @@
# Friday's own plain ferial Matins hymn (Psalterium/Special/Matutinum
# Special.txt's "Day5 Hymnus" — Day0=Sunday .. Day6=Saturday). Live-
# verified 2026-09-04 (today, a plain post-Pentecost Friday) against
# Monastic Tridentinum 1617 directly via the CGI instance — Monastic's own
# "Day5 HymnusM" swaps stanza 2's "ómnium"/"vúlnerum" word order and
# stanza 4's "astet" -> "adsit"; the live page confirms both swaps.
#
# Reported by the user: the plain ferial Matins hymn was silently using
# Monday's own text (`matins-hymn-ferial`, mislabeled in its own comment
# as a generic "ferial" hymn) for every weekday, including Friday, where
# the real Monastic 1617 source is this genuinely different hymn.
#
# Closing doxology stanza intentionally omitted — shared across every
# weekday via matins-hymn-doxology-per-annum.yml (see hours/matins.ts).
id: matins-hymn-ferial-friday
text:
la: >-
Tu, Trinitátis Únitas,
Orbem poténter quæ regis,
Atténde laudis cánticum,
Quod excubántes psállimus.
Nam léctulo consúrgimus
Noctis quiéto témpore,
Ut flagitémus vúlnerum
A te medélam ómnium.
Quo fraude quidquid dǽmonum
In nóctibus delíquimus,
Abstérgat illud cǽlitus
Tuæ potéstas glóriæ.
Ne corpus adsit sórdidum,
Nec torpor instet córdium,
Ne críminis contágio
Tepéscat ardor spíritus.
Ob hoc, Redémptor, quǽsumus,
Reple tuo nos lúmine,
Per quod diérum círculis
Nullis ruámus áctibus.
en: >-
O Three in One, and One in Three,
Who rulest all things mightily:
Bow down to hear the songs of praise
Which, freed from bonds of sleep, we raise.
While lingers yet the peace of night,
We rouse us from our slumbers light:
That might of instant prayer may win
The healing balm for wounds of sin.
If, by the wiles of Satan caught,
This night-time we have sinned in aught,
That sin Thy glorious power to-day,
From heaven descending, cleanse away.
Let naught impure our bodies stain,
No laggard sloth our souls detain,
No taint of sin our spirits know,
To chill the fervor of their glow.
Wherefore, Redeemer grant that we
Fulfilled with thine own light may be:
That, in our course, from day to day,
By no misdeed we fall away.
status:
la: verified
en: verified
@@ -0,0 +1,101 @@
# Saturday's own plain ferial Matins hymn ("Summæ Deus cleméntiæ" —
# Monastic 1617's own "Day6 HymnusM", genuinely distinct text from the
# secular "Day6 Hymnus"/"Summæ Parens cleméntiæ", not just a word-swap —
# Psalterium/Special/Matutinum Special.txt, Day0=Sunday..Day6=Saturday).
# Live-verified 2025-09-20 (a September Ember Saturday winning outright
# with nothing else in play, `{ex Psalterio secundum tempora}` in the
# source, i.e. genuinely the plain per-weekday text).
#
# Reached whenever a Saturday is neither Marian (see calendar/index.ts's
# applyMarianSaturday — an active octave, a real winning saint, or any
# other non-`ordinary-feria` category all suppress it) nor covered by a
# season's own seasonSuffix hymn (Lent/Advent/Paschaltide's own Saturday
# already use their season's hymn first) — chiefly September/Pentecost's
# own Ember Saturday when nothing else wins, same real gap already fixed
# for Tuesday-Friday (see matins-hymn-ferial.yml's own header) but missed
# for Saturday at the time: reported by the user 2026-09-04 by asking
# what actually renders on Ember Saturday and a Saturday where a real
# saint outranks a merely-commemorated Vigil (Aug 8 2026) -- the second
# case turned out fine (the winning saint's own Common hymn already
# applies correctly), but this one was still silently falling to Monday's
# text via the `matins-hymn-ferial` placeholder.
#
# Closing doxology stanza intentionally omitted — shared across every
# weekday via matins-hymn-doxology-per-annum.yml (see hours/matins.ts),
# same convention as the Tuesday-Friday siblings; the live source's own
# closing stanza here is byte-identical to that shared text anyway.
id: matins-hymn-ferial-saturday
text:
la: >-
Summæ Deus cleméntiæ,
Mundíque Factor máchinæ,
Unus potentiáliter,
Trinúsque personáliter:
Nostros pius cum cánticis
Fletus benígne súscipe:
Quo corde puro sórdibus
Te perfruámur lárgius.
Lumbos, jecúrque mórbidum
Adúre igni cóngruo,
Accíncti ut sint pérpetim,
Luxu remóto péssimo.
Ut quique horas nóctium
Nunc concinéndo rúmpimus,
Donis beátæ pátriæ
Ditémur omnes áffatim.
en: >-
Great God of boundless mercy hear;
Thou Ruler of this earthly sphere;
In substance one, in persons three,
Dread Trinity in Unity!
Do thou in love accept our lays
Of mingled penitence and praise;
And set our hearts from error free,
More fully to rejoice in thee.
Our reins and hearts in pity heal,
And with thy chastening fires anneal;
Gird Thou our loins, each passion quell,
And every harmful lust expel.
Now as our anthems, upward borne,
Awake the silence of the morn,
Enrich us with thy gifts of grace,
From heaven, thy blissful dwelling-place!
status:
la: verified
en: verified
@@ -0,0 +1,83 @@
# Thursday's own plain ferial Matins hymn (Psalterium/Special/Matutinum
# Special.txt's "Day4 Hymnus" — Day0=Sunday .. Day6=Saturday, live-checked
# 2026-09-04, 2026-09-03). Monastic 1617's own "Day4 HymnusM" is a bare
# `@:Day4 Hymnus` cross-reference with no substitution — identical to the
# secular text below.
#
# Closing doxology stanza intentionally omitted — shared across every
# weekday via matins-hymn-doxology-per-annum.yml (see hours/matins.ts).
id: matins-hymn-ferial-thursday
text:
la: >-
Nox atra rerum cóntegit
Terræ colóres ómnium:
Nos confiténtes póscimus
Te, juste judex córdium.
Ut áuferas piácula,
Sordésque mentis ábluas:
Donésque, Christe, grátiam,
Ut arceántur crímina.
Mens ecce torpet ímpia,
Quam culpa mordet nóxia:
Obscúra gestit tóllere,
Et te, Redémptor, quǽrere.
Repélle tu calíginem
Intrínsecus quam máxime,
Ut in beáto gáudeat
Se collocári lúmine.
en: >-
The dusky veil of night hath laid
The varied hues of earth in shade;
Before Thee, righteous Judge of all,
We contrite in confession fall.
Take far away our load of sin,
Our soiled minds make clean within:
Thy sov'reign grace, O Christ, impart,
From all offence to guard our heart.
For lo! our mind is dull and cold,
Envenomed by sin's baneful hold:
Fain would it now the darkness flee,
And seek, Redeemer, unto Thee.
Far from it drive the shades of night,
Its inmost darkness put to flight;
Till in the daylight of the blest
It joys to find itself at rest.
status:
la: verified
en: verified
@@ -0,0 +1,65 @@
# Tuesday's own plain ferial Matins hymn (Psalterium/Special/Matutinum
# Special.txt's "Day2 Hymnus" — Day0=Sunday .. Day6=Saturday, live-checked
# 2026-09-04). Monastic 1617's own "Day2 HymnusM" is a bare `@:Day2
# Hymnus` cross-reference with no substitution — identical to the secular
# text below, unlike Wednesday/Friday's own genuine word-swaps.
#
# Closing doxology stanza intentionally omitted — shared across every
# weekday via matins-hymn-doxology-per-annum.yml (see hours/matins.ts).
id: matins-hymn-ferial-tuesday
text:
la: >-
Consors patérni lúminis,
Lux ipse lucis, et dies,
Noctem canéndo rúmpimus:
Assíste postulántibus.
Aufer ténebras méntium,
Fuga catérvas dǽmonum,
Expélle somnoléntiam,
Ne pigritántes óbruat.
Sic, Christe, nobis ómnibus
Indúlgeas credéntibus,
Ut prosit exorántibus,
Quod præcinéntes psállimus.
en: >-
O Light of Light, O Day-spring bright,
Co-equal in thy Father's light:
Assist us, as with prayer and psalm
Thy servants break the twilight calm.
All darkness from our minds dispel,
And turn to flight the hosts of hell:
Bid sleepfulness our eyelids fly,
Lest overwhelmed in sloth we lie.
Jesu, thy pardon, kind and free,
Bestow on us who trust in thee:
And as thy praises we declare,
O with acceptance hear our prayer.
status:
la: verified
en: verified
@@ -0,0 +1,86 @@
# Wednesday's own plain ferial Matins hymn (Psalterium/Special/Matutinum
# Special.txt's "Day3 Hymnus" — Day0=Sunday .. Day6=Saturday, live-checked
# 2026-09-04, 2026-09-02). Monastic 1617's own "Day3 HymnusM" swaps
# "culpis ómnibus" -> "tu criminibus" in stanza 2 (both mean "forgive our
# sins/crimes" — a stylistic variant, not a change of imagery, so the
# existing secular English translation is reused unchanged, same
# convention already used elsewhere in this store for minor M-track
# word-swaps).
#
# Closing doxology stanza intentionally omitted — shared across every
# weekday via matins-hymn-doxology-per-annum.yml (see hours/matins.ts).
id: matins-hymn-ferial-wednesday
text:
la: >-
Rerum Creátor óptime,
Rectórque noster, áspice:
Nos a quiéte nóxia
Mersos sopóre líbera.
Te, sancte Christe, póscimus,
Ignósce tu criminibus:
Ad confiténdum súrgimus,
Morásque noctis rúmpimus.
Mentes manúsque tóllimus,
Prophéta sicut nóctibus
Nobis geréndum prǽcipit,
Paulúsque gestis cénsuit.
Vides malum, quod fécimus:
Occúlta nostra pándimus:
Preces geméntes fúndimus,
Dimítte quod peccávimus.
en: >-
Who madest all and dost control,
Lord, with thy touch divine,
Cast out the slumbers of the soul,
The rest that is not thine.
Look down, Eternal Holiness,
And wash the sins away,
Of those, who, rising to confess,
Outstrip the lingering day.
Our hearts and hands by night, O Lord,
We lift them in our need;
As holy Psalmists give the word,
And holy Paul the deed.
Each sin to thee of years gone by,
Each hidden stain lies bare;
We shrink not from thine awful eye,
But pray that thou wouldst spare.
status:
la: verified
en: verified
+21 -6
View File
@@ -1,9 +1,24 @@
# Live-verified (Monastic Tridentinum 1617, 2026-12-15, a plain ferial
# Tuesday) — "{ex Psalterio secundum tempora}" in the source, meaning this
# is itself one of several season-variable hymns rather than a true fixed
# year-round text; only this one (evidently the ordinary-time/per-annum
# form) is authored so far. Seasonal variants deferred (see TODO.md),
# same incremental-content pattern as everywhere else in this project.
# This is Monday's own plain ferial Matins hymn (Psalterium/Special/
# Matutinum Special.txt's "Day1 Hymnus" — Day0=Sunday .. Day6=Saturday).
# The file's original comment mislabeled it as a single fixed
# "ferial" text and misattributed its live-verification date (2026-12-15)
# to "a plain ferial Tuesday" — that date is in fact a Tuesday, but the
# text itself is Monday's (Monastic 1617's own "Day1 HymnusM" swaps
# "omni témpore" -> "in perpetuum" in the closing line, matching what's
# below). Fixed 2026-09-04 after the user reported Friday showing this
# same text instead of Friday's own hymn: `hours/matins.ts`'s
# `resolveMatinsHymn` now looks up a weekday-specific id
# (`matins-hymn-ferial-tuesday`/`-wednesday`/`-thursday`/`-friday`/
# `-saturday`) for those five days; this file (`matins-hymn-ferial`, no
# day suffix) is still used directly for Monday, and — as a deliberate,
# documented placeholder, not yet its own real content — for Sunday too:
# Sunday's own real Matins hymn selection is a genuinely more complex,
# not-yet-modeled two-hymn mechanism (Day0 Hymnus vs Hymnus1, live source
# tags H-MatDom1/H-MatDom4, purpose unconfirmed). Saturday's own gap
# (superseded on nearly every ordinary Saturday by Marian Saturday, not a
# full Little Office — see matins-hymn-ferial-saturday.yml and
# calendar/index.ts's applyMarianSaturday) was closed the same day. See
# TODO.md's 2026-09-04 entries.
#
# The closing doxology stanza is split out into
# matins-hymn-doxology-per-annum.yml (see hours/matins.ts) — the source
@@ -0,0 +1,105 @@
# Matins hymn for Marian Saturday ("Quem terra, pontus, æthera" / "The
# God whom earth, and sea, and sky") — live-verified against Divinum
# Officium (Monastic Tridentinum 1617, Matins, 2026-10-03, a plain
# Sanctæ Mariæ Sabbato ~ Simplex day) directly via the CGI instance.
# Self-contained with its own closing doxology stanza baked in (unlike
# the plain weekday ferial hymns, whose doxology is split out and
# reattached seasonally) — same convention as every other per-feast
# Matins hymn (see e.g. matins-hymn-common-of-an-apostle.yml); this
# feast's own doxology ("Glória tibi, Dómine, Qui natus es de Vírgine...")
# is also independently wired via hymn-doxology-by-feast.yml's
# `marian-saturday: hymn-doxology-nat` entry for any hour that does split
# its doxology out (e.g. Lauds), so the two mechanisms agree.
id: matins-hymn-marian-saturday
text:
la: >-
Quem terra, pontus, ǽthera
Colunt, adórant, prædicant,
Trinam regéntem máchinam,
Claustrum Maríæ bájulat.
Cui luna, sol, et ómnia
Desérviunt per témpora,
Perfúsa cæli grátia,
Gestant puéllæ víscera.
Beáta Mater múnere,
Cujus supérnus ártifex
Mundum pugíllo cóntinens,
Ventris sub arca clausus est.
Beáta cæli núntio,
Fœcúnda sancto Spíritu,
Desiderátus géntibus,
Cujus per alvum fusus est.
Glória tibi, Dómine,
Qui natus es de Vírgine,
Cum Patre, et Sancto Spíritu,
In sempitérna sǽcula. Amen.
en: >-
The God whom earth, and sea, and sky
Adore, and laud, and magnify,
Who o'er their threefold fabric reigns,
The Virgin's spotless womb contains.
The God, whose will by moon and sun
And all things in due course is done,
Is borne upon a maiden's breast,
By fullest heavenly grace possest.
How blest that mother, in whose shrine
The great artificer divine,
Whose hand contains the earth and sky,
Vouchsafed, as in his ark, to lie.
Blest, in the message Gabriel brought;
Blest, by the work the Spirit wrought;
From whom the great desire of earth
Took human flesh and human birth.
All honour, praise 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
@@ -6,10 +6,27 @@
#
# Lectio1's Gospel citation (Luke 7:36-50) is a bare incipit with no full
# pericope text given, so only the homily portion is authored, same
# convention as ember-september-wednesday.yml. Kept as 3 separate
# readings, each with its own genuinely distinct proper responsory — see
# that file's own doc comment for why this departs from the usual
# combine-into-one default.
# convention as ember-september-wednesday.yml.
#
# Recombined into one reading 2026-09-04 (previously kept as 3 separate
# readings): the user flagged this on the live app (`/2026-09-18/matins`,
# Ember Friday as a commemoration) as reading oddly — Gregory's Homily 33
# split into 3 slots. Lectio1-3 are one continuous, unbroken homily on the
# same pericope, split only to fill the fixed 3-lesson Nocturn slot count
# — exactly the "source doesn't genuinely split" case this store's own
# established default (see post-pentecost-15.yml's own doc comment)
# recombines. The original per-lesson "genuinely distinct proper
# responsory" rationale for keeping this split (also present, unfixed so
# far, in ember-september-wednesday.yml/ember-september-saturday.yml/
# ember-advent-saturday.yml/ember-advent-wednesday.yml/
# ember-advent-friday.yml) doesn't hold up against that established
# default: post-pentecost-15.yml's own Nocturn 2 already collapses 4
# lessons with their own distinct responsories into one reading, keeping
# only the first's. Responsory here is Lectio1's own (Responsory1 =
# @Tempora/093-0:Responsory4) per that same "the first one, when several
# collapse" convention; Lectio2/3's own distinct responsories (Responsory2
# = @Tempora/093-0:Responsory5, Responsory3 = @Tempora/093-0:Responsory6)
# are dropped, same as every other collapsed-reading case in this store.
id: ember-september-friday
readings:
- nocturn: 1
@@ -23,49 +40,16 @@ readings:
pedes osculári non désiit. Nos ergo, nos illa múlier expréssit, si toto corde ad Dóminum post peccáta
redeámus, si ejus pœniténtiæ luctus imitémur. Quid namque unguénto, nisi bonæ odor opiniónis exprímitur?
Unde et Paulus dicit: Christi bonus odor sumus Deo in omni loco.
en: >-
Of what is the Pharisee that was exalted by self-righteousness a type, but of the Jewish people? And of
what the woman which was a sinner and came and wept at the Lord's feet, but of the conversion of the
Gentiles? She brought an alabaster box of ointment, and stood at His feet behind Him weeping, and began to
wash His Feet with tears, and did wipe them with the hairs of her head, and kissed His Feet, and anointed
them with the ointment. Of us, therefore, even of us, was that woman a type, if after our sins we turn unto
the Lord with all our heart, and imitate the example of her repentant grief. And of what is the ointment a
type, but of the sweet savour of a good reputation? Whence also Paul saith: In every place we are unto God
a sweet savour of Christ.
responsory:
la: "R. Sufficiébat nobis paupértas nostra, ut divítiæ computaréntur: numquam fuísset pecúnia ipsa, pro qua misísti fílium nostrum, * Báculum senectútis nostræ!\nV. Heu me, fili mi, ut quid te mísimus peregrinári, lumen oculórum nostrórum?\nR. Báculum senectútis nostræ!"
en: "R. Our poverty was enough for us, that it might have been accounted riches. O that the money had never been, for which thou hast sent away our son, * The staff of our old age.\nV. Alas, my son, wherefore have we sent thee wandering, even thee, the light of our eyes?\nR. The staff of our old age."
status: { la: verified, en: verified }
- nocturn: 2
isGospel: false
source: "Pope St. Gregory the Great, Homily 33 on the Gospels, on Luke 7:36-50"
text:
la: >-
Si ergo recta ópera ágimus, quibus opiniónis bonæ odóre Ecclésiam respergámus, quid in Dómini córpore, nisi
unguéntum fúndimus? Sed secus pedes Jesu múlier stetit: contra pedes enim dómini stétimus, cum in peccátis
pósiti ejus itinéribus renitebámur. Sed si ad veram pœniténtiam post peccáta convértimur, jam retro secus
pedes stamus; quia ejus vestígia séquimur, quem impugnabámus. Lácrimis múlier pedes ejus rigat: quod nos
quoque veráciter ágimus, si quibúslibet últimis membris Dómini per compassiónis afféctum inclinámur, si
sanctis ejus in tribulatióne compátimur, si eórum tristítiam, nostram putámus.
en: >-
If therefore we do good works, whereby we gain for the Church the savour of good reputation, what do we
but pour ointment upon the body of the Lord? But the woman stood at the Feet of Jesus, behind Him we stood
opposite to the Feet of the Lord, what time we were in sin, and went contrary unto His ways. But when we
turn again, and truly repent us of our sins, we stand behind His Feet, for we follow His footsteps against
Whom we once contended. The woman washed His Feet with her tears and we do in very deed the same when we
show the tenderness of sympathy to any of His humbler members, when we feel with His Saints in their
tribulations, when we make their woes our own.
responsory:
la: "R. Benedícite Deum cæli et coram ómnibus vivéntibus confitémini ei, * Quia fecit vobíscum misericórdiam suam.\nV. Ipsum benedícite et cantáte illi: et enarráte ómnia mirabília ejus.\nR. Quia fecit vobíscum misericórdiam suam."
en: "R. Bless the God of heaven, and confess Him before all living: * For He hath had mercy upon you.\nV. Bless Him, and sing praises unto Him, and tell of all His marvelous works.\nR. For He hath had mercy upon you."
status: { la: verified, en: verified }
- nocturn: 3
isGospel: false
source: "Pope St. Gregory the Great, Homily 33 on the Gospels, on Luke 7:36-50"
text:
la: >-
Capíllis ergo pedes Dómini térgimus, quando sanctis ejus, quibus ex caritáte compátimur, étiam ex his quæ
nobis supérfluunt, miserémur: quátenus sic mens per compassiónem dóleat, ut étiam larga manus afféctum
dolóris osténdat. Rigat namque lácrimis Redemptóris pedes, sed capíllis suis non tergit, qui utcúmque
@@ -75,6 +59,25 @@ readings:
largitáte continémus: ne gravis nobis sit necéssitas próximi; ne ipsa nobis ejus indigéntia, quæ
sustentátur, fiat onerósa: et cum manus necessária tríbuit, ánimus a dilectióne torpéscat.
en: >-
Of what is the Pharisee that was exalted by self-righteousness a type, but of the Jewish people? And of
what the woman which was a sinner and came and wept at the Lord's feet, but of the conversion of the
Gentiles? She brought an alabaster box of ointment, and stood at His feet behind Him weeping, and began to
wash His Feet with tears, and did wipe them with the hairs of her head, and kissed His Feet, and anointed
them with the ointment. Of us, therefore, even of us, was that woman a type, if after our sins we turn unto
the Lord with all our heart, and imitate the example of her repentant grief. And of what is the ointment a
type, but of the sweet savour of a good reputation? Whence also Paul saith: In every place we are unto God
a sweet savour of Christ.
If therefore we do good works, whereby we gain for the Church the savour of good reputation, what do we
but pour ointment upon the body of the Lord? But the woman stood at the Feet of Jesus, behind Him we stood
opposite to the Feet of the Lord, what time we were in sin, and went contrary unto His ways. But when we
turn again, and truly repent us of our sins, we stand behind His Feet, for we follow His footsteps against
Whom we once contended. The woman washed His Feet with her tears and we do in very deed the same when we
show the tenderness of sympathy to any of His humbler members, when we feel with His Saints in their
tribulations, when we make their woes our own.
She wipes the Lord's Feet with our hair when we give charity, even out of such things as we have ourselves
no need of, to His holy ones, with whom we feel in their trials, in as far as our heart so sympathizeth,
that the bounty of our hand showeth the truth of our compassion. He washeth the Feet of the Redeemer, but
@@ -85,6 +88,6 @@ readings:
the neediness of our neighbour is not grievous unto us, nor the penury which we relieve a weariness to us,
nor, when the hand is giving what is needful, the heart is untouched by compassion.
responsory:
la: "R. Tempus est ut revértar ad eum qui misit me; * Vos autem benedícite Deum, et enarráte ómnia mirabília ejus.\nV. Confitémini ei coram ómnibus vivéntibus, quia fecit vobíscum misericórdiam suam.\nR. Vos autem benedícite Deum, et enarráte ómnia mirabília ejus."
en: "R. It is time for me to return unto Him That sent me; * But bless ye God, and tell of all His marvelous works.\nV. Confess Him before all living, for He hath had mercy upon you.\nR. But bless ye God, and tell of all His marvelous works."
la: "R. Sufficiébat nobis paupértas nostra, ut divítiæ computaréntur: numquam fuísset pecúnia ipsa, pro qua misísti fílium nostrum, * Báculum senectútis nostræ!\nV. Heu me, fili mi, ut quid te mísimus peregrinári, lumen oculórum nostrórum?\nR. Báculum senectútis nostræ!"
en: "R. Our poverty was enough for us, that it might have been accounted riches. O that the money had never been, for which thou hast sent away our son, * The staff of our old age.\nV. Alas, my son, wherefore have we sent thee wandering, even thee, the light of our eyes?\nR. The staff of our old age."
status: { la: verified, en: verified }
+18 -1
View File
@@ -462,7 +462,24 @@ function resolveMatinsHymn(day: LiturgicalDay): ResolvedText {
// substitution marker (live-checked 2026-09-03) — unlike the Advent/
// Paschaltide seasonal hymns above, whose Monastic forms are each fixed,
// non-swapping text, so only this final fallback needs the swap.
const body = resolveCommon('matins-hymn-ferial');
//
// Weekday-specific (2026-09-04): the source's plain Matins hymn genuinely
// varies Monday-Saturday (the classic "week of hymns" — Somno reféctis
// ártubus, Consors patérni lúminis, Rerum Creátor óptime, Nox atra rerum,
// Tu Trinitátis Únitas, Summæ Deus cleméntiæ), not one fixed year-round
// text — a real gap uncovered when the user noticed Friday showing
// Monday's own hymn, and Saturday's own gap found the same day by
// asking what actually renders on a real Ember Saturday (see
// matins-hymn-ferial.yml's header for why Sunday alone still falls to
// the plain `matins-hymn-ferial` id as a documented placeholder).
const weekdayFerialHymnIds: Partial<Record<Weekday, string>> = {
tuesday: 'matins-hymn-ferial-tuesday',
wednesday: 'matins-hymn-ferial-wednesday',
thursday: 'matins-hymn-ferial-thursday',
friday: 'matins-hymn-ferial-friday',
saturday: 'matins-hymn-ferial-saturday',
};
const body = resolveCommon(weekdayFerialHymnIds[day.weekday] ?? 'matins-hymn-ferial');
const doxology = resolveCommon(getHymnDoxologyId(day, 'matins-hymn-doxology-per-annum'));
return appendDoxology(body, doxology);
}
+20 -4
View File
@@ -105,16 +105,32 @@ describe('Ember days', () => {
expect(getDayLabel(resolveDay('2026-12-19')).en).toContain('Ember Saturday in Advent (Feria)');
});
it('Matins renders 3 real, distinct, verified lessons+responsories for each of the 6 Ember days', () => {
const dates = ['2026-09-16', '2026-09-18', '2026-09-19', '2026-12-16', '2026-12-18', '2026-12-19'];
for (const date of dates) {
it('Matins renders real, distinct, verified lessons+responsories for each of the 6 Ember days', () => {
// September Ember Friday (2026-09-18) is 1, not >=3, since 2026-09-04:
// ember-september-friday.yml's own Gregory homily (Lectio1-3) was
// recombined into a single reading -- it's one continuous, unbroken
// homily on the same pericope, split only to fill the fixed 3-lesson
// slot count, the same "source doesn't genuinely split" default
// post-pentecost-15.yml's own doc comment already establishes. The
// other 5 Ember days' own nocturn-readings files still keep their
// historical 3-way split (each with its own genuinely distinct
// responsory) -- not revisited here, out of scope for this fix.
const dates: [string, number][] = [
['2026-09-16', 3],
['2026-09-18', 1],
['2026-09-19', 3],
['2026-12-16', 3],
['2026-12-18', 3],
['2026-12-19', 3],
];
for (const [date, minLessons] of dates) {
const ordo = resolveOrdo('matins', date);
const lessons = ordo.parts.filter((p) => p.kind === 'lesson') as {
text: { status: { en?: string } };
responsory?: { text: { status: { en?: string } } };
}[];
const emberLessons = lessons.filter((l) => l.text.status.en === 'verified' && l.responsory !== undefined);
expect(emberLessons.length).toBeGreaterThanOrEqual(3);
expect(emberLessons.length).toBeGreaterThanOrEqual(minLessons);
}
});
});
+8 -3
View File
@@ -54,10 +54,15 @@ describe('Lauds psalmody override (duplex-majus+ sanctoral, and Marian Saturday)
const psalmNumbers = ordo.parts
.filter((p) => p.kind === 'psalm')
.map((p) => (p.kind === 'psalm' ? p.psalmNumber : undefined));
expect(psalmNumbers).toEqual([66, 92, 99, 62, 148, 149, 150]);
// Ferial Saturday's own psalm numbers (50, 142), not the Common-of-
// BVM's proper set (92, 99, 62) -- corrected 2026-09-04, per direct
// instruction to keep the plain ferial psalmody and only swap the
// antiphons (see lauds-psalmody-overrides/marian-saturday.yml's own
// header).
expect(psalmNumbers).toEqual([66, 50, 142, 148, 149, 150]);
const ps92 = ordo.parts.find((p) => p.kind === 'psalm' && p.psalmNumber === 92);
expect(ps92?.kind === 'psalm' ? ps92.antiphon?.text.la : undefined).toContain('Dum esset Rex');
const ps50 = ordo.parts.find((p) => p.kind === 'psalm' && p.psalmNumber === 50);
expect(ps50?.kind === 'psalm' ? ps50.antiphon?.text.la : undefined).toContain('Dum esset Rex');
const benedictus = ordo.parts.find((p) => p.kind === 'canticle' && p.canticleId === 'benedictus');
expect(benedictus?.kind === 'canticle' ? benedictus.antiphon?.text.la : undefined).toContain('Beáta Dei Génitrix');
+8 -2
View File
@@ -774,7 +774,9 @@ describe('resolveOrdo("matins", ...) Assumption-octave hymn fallback (2026-08-22
});
it("a plain ferial day outside the octave still gets the plain ferial hymn, unaffected", () => {
expect(hymnLatin(FERIAL_DATE)).toContain('Somno');
// FERIAL_DATE (2026-12-01) is a Tuesday -- see the identical note on
// the other FERIAL_DATE hymn assertion below.
expect(hymnLatin(FERIAL_DATE)).toContain('Consors patérni lúminis');
});
});
@@ -1072,7 +1074,11 @@ describe('resolveOrdo("matins", ...) Common-of-an-Apostle hymn + invitatory (202
});
it('a plain ferial day is unaffected -- still falls through to the plain ferial hymn and invitatory antiphon', () => {
expect(hymnLatin(FERIAL_DATE)).toContain('Somno');
// FERIAL_DATE (2026-12-01) is a Tuesday, so this is Tuesday's own
// ferial hymn ("Consors patérni lúminis") since 2026-09-04's weekday-
// specific hymn fix -- previously every weekday fell through to the
// same (mislabeled) Monday text ("Somno reféctis ártubus").
expect(hymnLatin(FERIAL_DATE)).toContain('Consors patérni lúminis');
expect(invitatoryFullLatin(FERIAL_DATE)).toContain('Veníte');
expect(invitatoryFullLatin(FERIAL_DATE)).not.toContain('Regem Apostolórum');
});