Compare commits

..

27 Commits

Author SHA1 Message Date
will 6ecd1485c4 Add jdc (Judges) responsory, composed from Gideon's cry at Jdc 7:17-20
Deploy / deploy (push) Successful in 1m52s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKC2QQGLYo2UTiDjDyWEkW
2026-09-05 07:14:07 -04:00
will 9e66ad10e4 Add josue (Joshua) responsory, composed from Josue 24:15-16
Deploy / deploy (push) Successful in 1m56s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKC2QQGLYo2UTiDjDyWEkW
2026-09-05 07:04:25 -04:00
will dcea19015f Add 1esdr (Ezra) responsory, composed from 1 Esdr 8:21-23
Deploy / deploy (push) Successful in 1m56s
No liturgical precedent exists for this book; the verse's antithesis
("the hand of our God is upon all them that seek him in goodness: and
his power and strength, and wrath upon all them that forsake him") is
reordered so the hopeful clause repeats after the V., not the wrath
clause. Closes the per-book pool at 68/72 -- the last 4 have no
sourceable material at all.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ALE7phKTAnmRWvWMU9dZa7
2026-09-05 06:39:18 -04:00
will c98abaebb9 Drop parenthetical gloss from Nehemiah responsory V.
Deploy / deploy (push) Successful in 2m12s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ALE7phKTAnmRWvWMU9dZa7
2026-09-05 06:24:21 -04:00
will 1d566ec6e0 Add 2esdr (Nehemiah), correcting a prior mis-diagnosis
Deploy / deploy (push) Successful in 2m2s
Nehemiah was wrongly bundled in with ezra's "ambiguous, not acted on"
reasoning and left unseeded. It actually has a real, unambiguous
citation in the Missa (Ember Wednesday of September's Lectio/Communio,
Neh 8:1-10) that a prior pass never checked. R. from v.3, V. from v.9,
both from that accented Missa Lectio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ALE7phKTAnmRWvWMU9dZa7
2026-09-05 06:14:20 -04:00
will c2a15d94dd Add ruth -- composed with no liturgical precedent at all
Deploy / deploy (push) Successful in 1m51s
User-directed: compose Ruth's own responsory from Ruth 1:16-17 ("thy
people shall be my people, and thy God my God") on the verse's own
merit. Unlike deut/rom/bar, this text has no liturgical precedent
anywhere in the reference source (no Nuptial Mass file even exists
there) -- flagged that distinction before proceeding; user confirmed
explicitly.

Since data/scripture/ruth-1.yml (the usual bulk import) carries no
accents, the Latin was hand-accented rather than transcribed, but
cross-checked word-by-word against already-accented occurrences of
the same words elsewhere in the corpus rather than guessed freehand.

66 of 72 bible-plan books now seeded. npm test (2029 passed) and
tsc --noEmit pass; live-verified through getBiblePlanReadings.
Canonical-key audit re-run, clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 22:01:15 -04:00
will 3ee87098c0 Note user's explanation for the Ezra Introit citation mismatch
Deploy / deploy (push) Successful in 1m53s
Vulgate "Esdras" numbering is genuinely ambiguous: 1/2 Esdras is
canonical Ezra/Nehemiah, but there's also a separate non-canonical
Greek "Esdras A" (the Vulgate appendix's own 3 Esdras, sometimes
itself called "1 Esdras" in Septuagint/Orthodox numbering) -- a
different text this project has never digitized. The reference
engine's own citation never disambiguates, so this can't be
confirmed, but it cleanly explains why the Pasc7-2.txt Introit's
"Esdr 2:36-37" citation doesn't match our canonical Ezra text.
Practical outcome unchanged (ezra stays unseeded), now documented
with a clear reason rather than an open mystery.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 21:51:06 -04:00
will e52c285f99 Add bar (Baruch), found in the Missa propers, not the Horas
Deploy / deploy (push) Successful in 1m54s
User pointed to missa/Latin/Tempora/Quad6-6.txt -- the Mass propers, a
directory tree this whole responsory search had never once checked
(everything so far searched horas/, the Divine Office proper). The
Easter Vigil Mass's own fourth prophecy ([Proph_Baruch3], Bar 3:9-38,
"Audi, Israel, mandata vitae") is genuine, real, accented liturgical
Latin -- just never part of Matins at all.

Composed bar the same way as deut/rom: built from that prophecy's own
climactic close ("Hic est Deus noster... Post haec in terris visus
est, et cum hominibus conversatus est" -- read at the Vigil because
early exegetes saw "seen upon earth, and conversed with men" as a
prophecy of the Incarnation).

Extended the Missa check to the other 6 already-absent books too --
genuinely zero citations anywhere. Ezra turned up one thin, ambiguous
Missa Introit citation that doesn't match its own cited verse; left
unseeded rather than force it.

65 of 72 bible-plan books now seeded -- this closes the per-book
responsory pool. npm test (2029 passed) and tsc --noEmit pass;
live-verified through getBiblePlanReadings. Canonical-key audit
re-run, clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 21:36:48 -04:00
will 2b7495fc91 Close the Matins per-book responsory pool: rom is the last book
Deploy / deploy (push) Successful in 1m53s
Composed rom from Rom 13:11-12 ("the night is past, the day is at
hand... let us cast off the works of darkness, and put on the armour
of light") -- the standing year-round ferial Lauds Capitulum, also
used at Advent I's own Capitulum. Genuine accented Vulgate/
Douay-Rheims text, never historically assembled into its own Matins
responsory, same approach as deut. User-confirmed before adding.

64 of 72 bible-plan books now seeded -- every book actually used in
the bible-plan has a real responsory, whether transcribed (62) or
composed from genuine already-liturgical text (deut, rom). The
remaining 8 have no citation anywhere in the source at all; there's
nothing further to check.

npm test (2029 passed) and tsc --noEmit pass; live-verified through
getBiblePlanReadings. Canonical-key audit re-run, clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 21:14:03 -04:00
will afa187032b Add deut, this pool's first genuine original composition
Deploy / deploy (push) Successful in 1m55s
User found a lead reading a patristic homily (English/Sancti/01-02.txt)
that quotes Deut 32:11's eagle image. Deuteronomy has no historical
Matins responsory anywhere in the reference source, so unlike every
other entry in this pool, this one is composed rather than
transcribed: a real R./V. pairing built from the Canticle of Moses'
own genuine verses (Latin/Psalterium/Psalmorum/Psalm226.txt, sung at
Lauds), verified against data/scripture/deut-32.yml to confirm the
citation is standard verse 11 and not the breviary's own internal
chant-verse-numbering (32:15-16) for the same text. Documented plainly
in the data file's own header as vu's composition, not presented as
historically attested.

63 of 72 bible-plan books now seeded. npm test (2029 passed) and
tsc --noEmit pass; live-verified through getBiblePlanReadings.
Canonical-key audit re-run, clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 20:06:48 -04:00
will d39359e5ac Carry over unreached Advent bible-plan readings into Christmastide
Deploy / deploy (push) Successful in 1m55s
Advent's own reading plan (advent-1-sunday through advent-4-saturday,
28 rows for a full 4-week Advent) is always longer than real Advent
runs. Advent's last real day is always Dec 23 (Dec 24 is the Vigil of
Christmas's own temporal id), while Advent 1 Sunday lands anywhere
from Nov 27 to Dec 3 -- even the longest possible Advent is one row
short of the full plan, and the shortest is a whole week short. Every
year, at least the plan's last row never reaches its own natural date.

Added adventCarryoverReadings to propers/bible-plan.ts: whatever
doesn't land on its own natural date now carries forward one reading
per day starting Christmas Day, pooled alongside whatever
Christmastide's own calendar-dated rows already have -- never
replacing them. This is the one place in bible-plan.ts that needs
real calendar-year awareness (calendar/temporal.ts's adventStart).

4 new tests covering the shortest (2028) and a long (2027) Advent,
pooling behavior, and the Dec-24 boundary. npm test (2029 passed) and
tsc --noEmit pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 19:17:24 -04:00
will 52052d737e Find Canticles, Leviticus, and Numbers in Sancti, not Tempora
Deploy / deploy (push) Successful in 1m51s
User pushback on Canticles being "confirmed absent" -- right instinct
to check the Commune files, which redirected productively: the same
Lectio-citation survey run against Sancti (individual saint/feast
files) rather than just Tempora found real, genuine content:

- cant: the Visitation (July 2) reads straight through the Song of
  Songs, blending it with the Visitation narrative itself.
- lev: the Purification of the BVM's own Leviticus purification-law
  reading is the feast's actual reason for being.
- num: the Exaltation of the Holy Cross's bronze-serpent/Cross
  typology (Num 21:6-9).

Re-checked the other 9 already-"confirmed absent" books against
Sancti too -- still genuinely absent, no alternate abbreviation
missed.

62 of 72 bible-plan books now seeded -- the real final count. Only
Romans and 9 books with no citation anywhere (Tempora or Sancti)
remain. npm test (2025 passed) and tsc --noEmit pass; live-verified
through getBiblePlanReadings. Canonical-key audit re-run, clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 19:03:01 -04:00
will e96d201346 Close out the Matins per-book responsory pool: 59 of 72 books
Deploy / deploy (push) Successful in 1m49s
Asked to translate the 15 remaining "real Latin, no English" books.
None needed translation: the whole post-Epiphany reading season
(Galatians/Ephesians/Philippians/Colossians/1-2 Timothy/Titus/
Philemon/2 Thessalonians) turns out to have no distinct responsory
content of its own -- every feria file references 2 Corinthians' own
week (already bilingual) by weekday position. Same for 2 Peter/2-3
John/Jude, which reference Ascension Day's own responsories (act).

Only Romans genuinely has nothing: every citing file borrows an
unrelated feast's own proper responsory (Circumcision, Christmas Day,
a January saint), never anything Romans-specific. Left unseeded --
using one would repeat the Sacred Heart/Jeremiah mismatch this pool
already avoids elsewhere.

59 of 72 books now seeded -- every book with any usable Latin content
in the source at all. The remaining 13 (Romans plus 12 books with no
citation anywhere) are the real, final gap.

Ran the full canonical-key audit again; confirmed clean. npm test
(2025 passed) and tsc --noEmit pass; live-verified through
getBiblePlanReadings.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 18:50:56 -04:00
will 1867f73080 Add R./V./repeat labels to per-book responsory pool output
Deploy / deploy (push) Successful in 1m54s
getResponsoryForBook's joinResponsory concatenated the r/v text with a
bare newline and no "R."/"V." labels at all, unlike every other
responsory source in the app (octave-readings' own responsory field,
nocturn-readings' inline responsory, and the new per-Common-category
pool) which all include the full "R. ...\n* ...\nV. ...\nR. ..."
convention. User caught this looking at the rendered Judith entry.

Fixed by computing the repeat line from the existing "*" marker
already present in the pool's r text. npm test (2025 passed) and
tsc --noEmit pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 18:44:38 -04:00
will ff87aff240 Add 1 Cor, 2 Cor, 1 Peter, 1 John; fix a repeated canonical-key bug
Deploy / deploy (push) Successful in 1m52s
Confirmed Leviticus/Numbers/Deuteronomy genuinely absent from Tempora
(precise awk-based survey, not a loose grep). Added 1cor (Maundy
Thursday's own Institution-narrative Nocturn 3), 2cor (Epiphany II
Sunday), 1pet and 1joan (Paschaltide Sunday sets already partly used
for jac/jas).

Caught a repeat of the same canonical-key mistake from the previous
commit: the jas entry should have been keyed jac (BOOK_ALIASES maps
jas->jac). Fixed, and this time audited every single key in the file
programmatically against BOOK_ALIASES rather than just the keys
touched this pass -- confirmed clean.

45 of 72 books now seeded. npm test (2025 passed) and tsc --noEmit
pass; live-verified through getBiblePlanReadings.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 18:31:13 -04:00
will c32fabb54d Add Acts, Apocalypse, James, Hebrews, and the 4 Gospels to responsory pool
Deploy / deploy (push) Successful in 1m48s
Surveyed Tempora precisely with an awk one-liner reading the line after
every [LectioN] tag (two lines deep for Gospel citations) rather than a
loose grep-for-book-prefix, which had already produced one false
positive this session.

Added act (Ascension Day's own Matins), marc (Easter Sunday's own),
heb (Good Friday's own Tenebrae), apoc (Easter III Sunday), jas
(Easter IV Sunday), and luc/matt/joan (Advent I/II/III Sundays, one
entry each). 41 of 72 bible-plan books now seeded.

Confirmed no English exists anywhere in the reference engine for
Galatians/Ephesians/Philippians/Colossians/Titus/Philemon or Romans --
real Latin exists, no bilingual source; left unseeded.

npm test (2025 passed) and tsc --noEmit pass; live-verified through
the real getBiblePlanReadings call chain (not a direct
getResponsoryForBook call, per the previous commit's lesson).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 18:20:44 -04:00
will f0b771a02a Fix real correctness bug: pool keys must match canonical book form
Deploy / deploy (push) Successful in 1m50s
bible-plan.ts normalizes a reading's book through canonicalBook()
(scripture/index.ts's BOOK_ALIASES map) before calling
getResponsoryForBook -- so the pool must be keyed by the canonical
form, not the bible-plan YAML's own raw book code. 12 of the 33 keys
seeded earlier today used the raw form and would have silently
resolved to undefined in the real app despite passing an initial
"live verification" that called getResponsoryForBook directly
(bypassing the normalization the real call site always applies).

Renamed: 1macc->1mach, 2macc->2mach, 1sam->1reg, 2sam->2reg,
1kgs->3reg, 2kgs->4reg, jdt->jdth, zeph->soph, obad->abd, jonah->jon,
hos->osee, mic->mich.

Re-verified through the actual getBiblePlanReadings call chain this
time (2026-06-04, post-pentecost-01/Thursday, "1sam 9-10" now
resolves a real responsory). npm test (2025 passed) and
tsc --noEmit pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 18:11:36 -04:00
will 3b46a18d63 Add 14 more books to Matins responsory pool, fix 2 dropped entries
Deploy / deploy (push) Successful in 1m52s
User caught jdt (Judith) listed as unseeded despite having real
responsory content directly visible in the reference source -- and
already flagged present in this same session's own citation dump,
never followed up on. Self-audit after that catch found job had also
been extracted earlier this session but never committed to the file.

Added jdt, esth, job, eccl, hab, joel, zeph, obad, jonah, mal, hos, mic,
nah, and lam (Maundy Thursday's own Tenebrae responsories). 33 of 72
bible-plan books now seeded, up from 19.

npm test (2025 passed) and tsc --noEmit pass; live-verified via
getResponsoryForBook resolving real text for every new key.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 17:43:43 -04:00
will 816dcadf0d Fix wrong book-count estimate in Matins responsory pool notes (66 -> 72)
Deploy / deploy (push) Successful in 1m52s
"~66" was an eyeballed guess from a sort|uniq -c list, never actually
counted -- and coincidentally echoes the 66-book Protestant canon count,
a bad number to leave uncorrected in a Catholic office project's own
docs. The real count (grep -c distinct `book:` values across
data/hours/bible-plan/*.yml) is 72.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 17:28:22 -04:00
will 7cee7a1e8a Fix Matins responsory extraction bug, unblock 8 more books
Deploy / deploy (push) Successful in 1m50s
The per-book pool extraction script only matched a bare [ResponsoryN]
tag, missing the reference engine's underscore-suffixed [ResponsoryN_]
template convention that holds the real text (a bare tag often just
@:-references it, alongside a Cistercian-rubric variant). This wrongly
made 1sam/2sam/1kgs/2kgs/2macc look untranslated in English.

Fixed the script and hand-followed @Tempora/X:ResponsoryN cross-file
references to add 1sam, 2sam, 1kgs, 2kgs, 2macc, zach, amos, and agg --
19 of ~66 bible-plan books now seeded (up from 11).

npm test (2025 passed) and tsc --noEmit pass; live-verified via
getResponsoryForBook resolving real text for every new key at every
pool index.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 17:13:13 -04:00
will 91dcc2c972 Seed 8 more books in the Matins per-book responsory pool
Deploy / deploy (push) Successful in 1m59s
Added exod, prov, sir, sap, tob, ezek, dan, 1macc (11 of ~66 total now
seeded), each sourced from a genuine, non-overridden reference-engine
Tempora file with real bilingual Responsory text. sir/sap and dan reuse
prov's/ezek's own entries respectively, confirmed by the reference
engine's own week files @-referencing that same pool -- real evidence
this app's loose book-level responsory match is historically authentic,
not invented.

Skipped 1sam (macro-only responsory text, not worth resolving for one
book) and 2sam/1kgs/2kgs/2macc/zach/amos/agg (real Latin but no
reference-engine English translation at all).

npm test (2025 passed) and tsc --noEmit pass; live-verified via
getResponsoryForBook resolving real text for every new key.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 16:59:50 -04:00
will a570266028 Add per-Common-category Matins responsory pool, expand per-book pool
Deploy / deploy (push) Successful in 1m52s
The per-book responsory pool (Nocturn 1 scripture readings) only had `isa`
seeded; the much bigger, previously untracked gap was that 272 of 355
nocturn-readings/*.yml files (Nocturn 2/3 patristic readings) had no
responsory at all. Added a sibling per-Common-category pool, sourced from
the reference engine's static Commune text files, covering all 19 of vu's
real `common:` category ids (several confirmed aliases of the same
underlying file). Wired into matins.ts's reading assembly as a fallback
when a reading has no proper responsory of its own. Also expanded the
per-book pool with `gen` and `jer`.

Live-verified end-to-end (St. Francis de Sales, Ss. Cornelius/Cyprian, Ss.
Euphemia/Lucy/Geminianus). npm test (2025 passed) and tsc --noEmit pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 16:47:17 -04:00
will 2a98386bdd Log the Suffragium Paschale mechanism fix in TODO.md
Deploy / deploy (push) Successful in 1m52s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 15:37:59 -04:00
will 58b201dc23 Build the Paschaltide "Suffragium Paschale" mechanism
Throughout Paschaltide (Eastertide/Ascensiontide/Pentecost), two
things happen wherever they'd otherwise show: the ordinary
5-suffrage set (Cross/BVM/Joseph/Apostles/Peace) collapses into one
alleluia-form "Suffragium Paschale" (Lauds and Vespers each have
their own distinct antiphon here, unlike the ordinary suffrages,
which share identical text at both hours), and the ferial-Preces
litany drops entirely rather than being replaced. Live-verified
against the reference source's own [Suffragium] macro directly,
byte-identical between Monastic Tridentinum 1617 and Tridentine 1906.

Exported isPaschaltide(season) from resolve-common.ts (wraps the
pre-existing PASCHALTIDE_SEASONS set). resolveSuffrages gained a
third hourId parameter to pick the right antiphon; the Preces
omission is a small new check gated on the same isFerialOrVigil
predicate that already selects the ferial litany form.

Authored lauds-suffrage-paschale.yml and vespers-suffrage-
paschale.yml -- English on the Vespers antiphon is this project's own
translation (the reference engine leaves it untranslated) and marked
draft; everything else verified.

Closes the last item in TODO.md's "Mechanism gaps" priority tier.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 15:37:53 -04:00
will b90789cab3 Log the Lent Vespers verification in TODO.md
Deploy / deploy (push) Successful in 1m50s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 15:12:11 -04:00
will 7551d205b7 Mark the rest of Lent's Vespers/Lauds hymn content verified
Same shape as the earlier Lauds capitulum/responsory/versicle fix
this session: real content, just never live-query-verified. Live-
verified Vespers' whole bundle (capitulum/responsory/hymn/versicle,
including the hymn's own claimed Monastic word-swap) against a plain
Lenten Wednesday (2026-03-04). Lauds' own hymn and both hours'
doxology-per-annum files were already seen live earlier the same
session (checking lauds-hymn-saturday.yml's real content against a
Lenten Ember Saturday) -- byte-identical, just needed the status
flipped. No more draft Lent content anywhere in this app.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 15:12:04 -04:00
will 25dc73da1f Add Lent's still-draft Vespers/hymn content to the Open Work list
Deploy / deploy (push) Successful in 1m54s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGjUyhUZJaSjiniEmnLdak
2026-09-04 15:00:53 -04:00
19 changed files with 2604 additions and 47 deletions
+637 -6
View File
@@ -19,16 +19,12 @@ across every hour and content type in this app.
1. **Mechanism gaps** — a real design/code piece not built yet, blocking any content pass on
it from starting:
- Paschaltide should substitute the ordinary suffrages/ferial-Preces set with a single
alleluia-form "Suffragium Paschale" — not modeled; the ordinary set is shown unchanged
throughout Paschaltide instead.
- (none currently open — the last one, Paschaltide's "Suffragium Paschale" substitution,
was closed 2026-09-04, see the dated log below)
2. **Minimal-proof-done, bulk content pending** — mechanism is built and trusted (a proof
date/entry already resolves correctly end-to-end); what's left is authoring/importing more
content in that same shape across the rest of the calendar:
- Matins sanctoral-side readings: the per-book Matins responsory pool has only one book
seeded (`isa`) — needs expanding. Bible-plan TSV content also isn't yet in a test table
(see "Bible-plan TSV — bulk conversion done" below).
- Lauds/Vespers duplex-majus+ Common-category psalmody: all 24 `SaintRecord.common`
categories are resolved (Vespers 10/10 real category files, Lauds 9/10 — see
"Lauds/Vespers duplex-majus+ Common-category psalmody" below and its follow-up entry) with
@@ -5630,3 +5626,638 @@ its own "outranks an active octave" test (previously asserted "Duplex I Class",
now live-verified rank is Duplex II Class); `tests/calendar/transfer.test.ts`'s St. Felix I test
(Trinity Sunday now the real winner on 2026-05-31, Queenship/post-pentecost-01/Pentecost's octave
all commemorated in return). `npm test` (2025 passed) and `tsc --noEmit` both pass.
### Lent's remaining Vespers/Lauds draft content, verified (2026-09-04)
Closed the rest of the "Lent's own seasonal office bundle" gap flagged in the entry above the same
day: `vespers-{capitulum,responsory,hymn,versicle}-lent.yml` and both hours' own
`-doxology-per-annum` files were all real content, just never marked verified. Live-verified
Vespers' own bundle against a plain Lenten Wednesday (2026-03-04) — Joel 2:17 chapter, "Scápulis
suis obumbrábit tibi" responsory, "Audi, benígne Cónditor" hymn (including its own claimed Monastic
word-swap, confirmed live), shared "Ángelis suis" versicle. `lauds-hymn-lent.yml`'s own content
("Jam Christe sol justítiæ") and its doxology were already seen live earlier the same session (while
checking `lauds-hymn-saturday.yml`'s real content against the same 2026-02-28 Lenten Ember Saturday
date) — byte-identical, just needed the status flipped. All 8 files now `verified`; no more draft
Lent content anywhere in this app. `npm test` (2025 passed) and `tsc --noEmit` both pass.
### Paschaltide's "Suffragium Paschale" mechanism (2026-09-04)
Closed the highest-priority remaining mechanism gap. Live-verified against Divinum Officium (both
Monastic Tridentinum 1617 and Tridentine 1906, byte-identical between the two tracks — the source's
own `[Suffragium]` macro literally has a `(sed tempore paschali) @:Suffragium Paschale` override,
2026-04-20, a plain Eastertide feria): throughout the whole Paschaltide window (`eastertide`/
`ascensiontide`/`pentecost` — the same boundary `PASCHALTIDE_SEASONS` already governs elsewhere in
this store), two things happen whenever they'd otherwise show at all:
1. The ordinary 5-suffrage set (Cross/BVM/Joseph/Apostles/Peace) collapses into one single
alleluia-form "Suffragium Paschale" block — one antiphon (different at Lauds, "Crucifíxus
surréxit a mórtuis...", vs. Vespers, "Crucem sanctam súbiit...", unlike the ordinary 4/5
suffrages, which share identical text at both hours), one shared versicle, one shared collect.
2. The ferial-Preces litany (`lauds-preces-feriales`/`vespers-preces-feriales`, sourced from
Tridentine 1906/1910 since Monastic 1617 has none at all — see that file's own header) drops
entirely rather than being replaced by anything ("Preces Feriales{omittitur}" live) — a
Sunday/feast's own short litany (`lauds-short-litany`) is untouched, a separate, universal
collect-opening dialogue unrelated to this ferial-specific one.
Exported a new `isPaschaltide(season)` helper from `hours/resolve-common.ts` (wraps the existing
`PASCHALTIDE_SEASONS` set, previously private to that file) and used it in both
`resolveSuffrages` (gated after the pre-existing "omit suffrages entirely" checks — Double+/active
octave/Advent-Christmastide-Passiontide already drop suffrages regardless of season, unaffected)
and a new check in `hours/lauds.ts`'s/`hours/vespers.ts`'s own `'lauds-preces'`/`'vespers-preces'`
cases (gated on `isFerialOrVigil(day)`, matching the existing predicate that already selects the
ferial litany in the first place). `resolveSuffrages` gained a third `hourId: 'lauds' | 'vespers'`
parameter (both call sites updated) to pick the right antiphon.
Authored `lauds-suffrage-paschale.yml` and `vespers-suffrage-paschale.yml` — English on the Vespers
antiphon is this project's own translation and left `draft` (the reference engine's own English
render leaves that one antiphon untranslated, Latin-only); everything else `verified`.
Verified end-to-end via `resolveOrdo` on real dates for Lauds (both the suffrage collapse and the
Preces omission fire together correctly on a clean Eastertide feria, 2026-04-20) and via a direct
`resolveSuffrages` unit call plus a separately-found clean Vespers evening (2026-04-15, since this
particular stretch of Eastertide 2026 is otherwise densely packed with First-Vespers anticipations
and octaves — Easter's own, the Patronage of St. Joseph's, Ascension's, Pentecost's — that already
correctly suppress suffrages for other, pre-existing reasons and would have made a false negative
look like a false positive). `npm test` (2025 passed, no pre-existing tests exercised this path at
all) and `tsc --noEmit` both pass.
### Matins responsory pools: per-book expansion + new per-Common-category pool (2026-09-04)
User request: real Matins responsories for each Bible book (sourced from the reference engine),
and for the patristic (Nocturn 2/3 homiletic) readings too. Investigation found the patristic side
was a much bigger, previously-untracked gap than the per-book pool's own "expand beyond `isa`" item
already on this list: 272 of 355 `data/propers/nocturn-readings/*.yml` files have no `responsory`
field at all — most of the calendar, not a handful of stragglers.
**Per-book pool** (`data/hours/matins-responsories-by-book.yml`): added `gen` (2 entries, Latin/
Tempora/Quadp1-1.txt — Monday of Septuagesima week, the historical start of the Genesis "Historia"
cycle, a plain ferial with no overriding feast; only 2 entries because the source's own English
translation is missing a 3rd) and `jer` (3 entries, Latin/Tempora/Quad6-2.txt — Tuesday of Holy
Week, "Feria privilegiata," genuine ferial Jeremiah/Lamentations content). Deliberately did *not*
seed `jer` from Pent02-5.txt despite it citing Jeremiah too — that day's Rank is Sacred Heart
(Duplex I classis), so its Responsory1-3 are the feast's own proper text, not genuine ferial-book
content, even though its Lectio verses are borrowed from Jeremiah. Still only 3 of 72 books used
in the user's own bible-plan seeded (`isa`, `gen`, `jer`) — the rest is deferred bulk content, one
real live-sourced query per book, same pattern.
**New per-Common-category pool** (`data/hours/matins-responsories-by-common.yml` +
`getResponsoryForCommon` in `src/propers/matins-responsories.ts`, sibling to the existing
`getResponsoryForBook`): keyed by `SaintRecord.common` instead of a scripture book, same "loose
match, cycle by index" design. Unlike the per-book pool (scattered one query per book, across the
whole liturgical year), a Commune category's responsories live in one static file each
(`divinum-officium-reference`'s `web/www/horas/{Latin,English}/Commune/CN.txt`) — 9 files
(`C1`-`C8`, `C11`) transcribed directly, cover all 19 of vu's real `common:` category ids (several
are genuine aliases, confirmed by reading each candidate file's own `@Commune/CX` inheritance line
rather than guessed — e.g. `common-of-a-confessor-doctor`/`-pope` inherit C4 unchanged, same pool
as `common-of-a-confessor-bishop`; `common-of-an-abbot`/`-not-bishop`/`several-confessors` inherit
C5 unchanged; `common-of-a-martyr` inherits C2 unchanged; `common-of-a-virgin` inherits C6
unchanged; `common-of-a-widow`/`several-women-martyrs` inherit C7 unchanged — see the data file's
own header for the full mapping). Not seeded: `common-of-an-angel`/`-an-evangelist`/`-a-vigil` and
the `proper-to-*` ids — none of these are real Commune categories with a responsory file to source
from (angels/evangelists have their own proper content instead).
Wired into `hours/matins.ts`'s `nocturnReadingPart`/`gospelReadingPart`: when a reading's own
`responsory` field is absent, falls back to `getResponsoryForCommon(getSaintRecord(id)?.common,
index)` — `index` is the reading's position within that same id's own file (a new `commonPoolIndex`
counter in `buildReadingPool`'s assembly loop), so a saint with several undated readings still gets
distinct responsories across them rather than the pool's first entry repeated. A temporal/octave id
(no `common` category) still correctly gets `undefined` — an honest absence, not a wrong guess.
Live-verified end-to-end via `resolveOrdo`: St. Francis de Sales (2026-01-29, `common-of-a-
confessor-bishop`, previously responsory-less) now resolves a real Nocturn 3 responsory; Ss.
Cornelius and Cyprian plus Ss. Euphemia, Lucy, and Geminianus (both on 2026-09-16, both `common-
of-several-martyrs`) each resolve their own responsory from the same pool, confirming the
per-saint-file cycling index doesn't leak across different saints sharing a day. `npm test` (2025
passed) and `tsc --noEmit` both pass.
### Matins responsory pools: 8 more books seeded (2026-09-04)
Follow-up to the same-day entry above, continuing the per-book pool's bulk-content pass — same
"one real source per book" method, no mechanism changes. Added `exod` (Latin/Tempora/Quad4-0.txt,
Sunday IV in Lent, its own ordinary rank — the burning bush through the Song of the Sea), `prov`
(081-1.txt, August week 1's own ferial), `tob` (093-0.txt, September week 3's own Sunday), `ezek`
(111-1.txt, November week 1's own ferial), and `1macc` (101-1.txt, October week 1's own ferial) —
all bilingual, all genuinely their own book's content, no overriding rank.
Also added `sir` and `sap` (identical to `prov`'s own entries) and `dan` (identical to `ezek`'s) —
not guessed reuse, confirmed by reading each week's own reference-engine file: the August "Wisdom
literature" weeks (081 Prov, 083 Sap, 084-085 Sir) and the November "prophetic" weeks (111 Ezek,
113 Dan) `@`-reference *the same* underlying responsory set regardless of which specific book that
week's Lectio actually reads that day — a real confirmation, from the reference engine's own data,
that this app's "loose, book-level match, not exact-citation" responsory design (see the pool's own
header, and the 2026-08 user direction it's sourced from) matches how these responsories genuinely
worked historically, not an invention to paper over a smaller pool.
Skipped, deliberately: `1sam` (1 Reg) — every Pent01 week file's responsories are macro references
(`@:Responsory1_ (sed rubrica cisterciensis) ...`, `[Rule] Initia cum responsory`) rather than
literal text, needing the base macro template resolved with per-file substitutions to get real
text; not worth the complexity for one book this pass. `2sam`/`1kgs`/`2kgs`/`2macc` (2/3/4 Reg, 2
Mac) — real Latin responsories exist in every week's own file, but the reference engine's own
English translation is entirely absent for all of them (checked every Post-Pentecost week each book
appears in); left unseeded rather than guessing a translation, consistent with only seeding books
that have real bilingual source text. `zach`/`amos`/`agg` (minor prophets) — same English-translation
gap, but Latin is real and available (Latin/Tempora/114-4.txt, 115-4.txt, 115-5.txt) if a future
pass wants to add an own-translation draft English side (see `vu-prefer-text-over-missing` memory
for the precedent).
Now 11 of 72 bible-plan books seeded: `isa`, `gen`, `jer`, `exod`, `prov`, `sir`, `sap`, `tob`,
`ezek`, `dan`, `1macc`. `npm test` (2025 passed) and `tsc --noEmit` both pass; live-verified via
`getResponsoryForBook` resolving real text for every new key.
### Matins responsory pools: a real extraction bug found, 8 more books unblocked (2026-09-04)
User pushback on the previous entry's "5 books skipped, no English available" claim ("look at the
secular office for most of the books") — right call: re-checking found a genuine bug, not a real
source gap. The extraction script's Responsory-block regex only matched a bare `[ResponsoryN]` tag;
it missed the reference engine's own `[ResponsoryN_]` convention (an underscore-suffixed literal
template tag holding the real text, which a plain `[ResponsoryN]` often just `@:`-references
alongside a Cistercian-rubric variant) — so every file using that convention looked like it had no
English translation when the real text was sitting right there under a different tag name. Fixed
the script to prefer the `_`-suffixed tag's literal body over a bare `@:`-reference.
This unblocked `1sam` (Latin/Tempora/Pent01-1.txt, its own genuine 3-entry set — the young Samuel's
call and consecration) outright. Chasing the `@Tempora/X:ResponsoryN` cross-file references (not
resolved by the extraction script, hand-followed instead) also unblocked:
- `2sam`/`1kgs`/`2kgs` (2/3/4 Reg) — all three books' own week files `@`-reference the *same*
single entry, Tempora/Pent03-1Feria's Responsory1 (2 Samuel 24's census/plague narrative,
"Recordáre, Dómine, testaménti tui") — read directly, not guessed, same "loose match" reuse
pattern already established for the Wisdom-literature and Ezekiel/Daniel weeks. One entry only;
Responsory2/3 chain further references not followed this pass.
- `2macc` — reuses `1macc`'s own 3-entry set outright (Tempora/104-1 `@`-references Tempora/101-1).
- `zach` (Tempora/115-5, itself referencing 111-0's Responsory4-6 — Ezekiel's own Sunday, distinct
from `ezek`/`dan`'s own Monday-sourced entries) and `amos`/`agg` (both referencing Tempora/
Pent01-0's Responsory1 — Isaiah's throne-vision — plus 111-0's Responsory2-3) — all three
minor-prophet books previously assumed to have no reference-engine English at all; that was true
of their *own* week files in isolation, but false once their `@`-references were actually
followed.
19 of 72 bible-plan books now seeded (added this pass: `1sam`, `2sam`, `1kgs`, `2kgs`, `2macc`,
`zach`, `amos`, `agg`). `npm test` (2025 passed) and `tsc --noEmit` both pass; live-verified via
`getResponsoryForBook` resolving real text for every new key, at every pool index (not just index
0) for the 3-entry sets.
Still genuinely unseeded after this pass — real gaps, re-confirmed: books with no reference-engine
citation anywhere in Tempora at all (Josue, Judices, Ruth, Paralipomenon/Chronicles, Esdras/
Nehemias, Canticles — the historic secular/monastic Historia cycle apparently never assigns these
their own continuous reading), and the remaining ~45 New Testament epistle/Acts/Apocalypse books
plus minor books not yet attempted.
### Matins responsory pools: 12 more OT books, and 2 real process misses caught (2026-09-04)
User caught two things this pass, neither of them a source gap:
1. Directly pointed at `web/www/horas/English/Tempora/094-3.txt` and asked why Judith ("jdt") was
listed as unseeded when it plainly has real responsory content. Checking confirmed it — worse,
`jdt` and `esth` (Esther) had *both* already surfaced in this same day's own full-citation dump
of Tempora (`!Jdt`, `!Esth` were right there in the list) and were simply never followed up on.
Not a search-methodology gap this time, an attention gap: the data was already in hand.
2. Self-audit prompted by that catch found a second, independent miss: `job` — one of the
heaviest-used books in the bible-plan (42 rows) — had been extracted early in this same day's
session (Latin/Tempora/091-1.txt, the classic "Job Responsories," also used in the Requiem) but
never actually committed to the pool file at all. Sourced, verified, then silently dropped.
Fixed both, then used the same "reused across a whole prophetic-literature week" pattern already
established for `ezek`/`dan`/`zach` to sweep the rest of November's minor prophets efficiently by
following each book's own `@Tempora/X:ResponsoryN` reference rather than re-querying from scratch:
`obad` (reuses `zach`'s own R1), `jonah`/`mal` (share one entry, Tempora/111-0:R7), `hos`/`nah`
(reuse `ezek`/`dan`'s own R1), `mic` (reuses `amos`/`agg`'s own R1), `hab`/`joel` (share one entry,
Tempora/111-2:R1), `zeph` (Tempora/111-3:R1, its own). Also added `eccl` (Tempora/081-2:R1, the
same August "Wisdom literature" week cluster as `prov`/`sir`/`sap`, a different entry than
`prov`'s own) and `lam` (Latin/Tempora/Quad6-4.txt — Maundy Thursday's own Tenebrae Matins, the
classic "In monte Oliveti"/"Tristis est anima mea"/"Ecce vidimus eum" responsories; unlike the
Sacred Heart/Jeremiah override case above, Holy Week's own high rank isn't an unrelated feast
displacing ordinary content here — Tenebrae's Lamentations reading is intrinsically Holy Week's
own, so no override caution applied).
33 of 72 bible-plan books now seeded (added this pass: `jdt`, `esth`, `job`, `eccl`, `hab`, `joel`,
`zeph`, `obad`, `jonah`, `mal`, `hos`, `mic`, `nah`, `lam` — 14 new). `npm test` (2025 passed) and
`tsc --noEmit` both pass; live-verified via `getResponsoryForBook` resolving real text for every
new key.
Confirmed still genuinely absent (re-checked directly, not just re-asserted): `bar` (Baruch),
Josue, Judices, Ruth, Paralipomenon/Chronicles, Esdras/Nehemias, Canticles — no citation anywhere
in Tempora. 39 remaining books not yet attempted: Leviticus/Numbers/Deuteronomy, the four Gospels,
Acts, Apocalypse, and the NT epistles.
### Matins responsory pools: real key-alias bug found and fixed (2026-09-04)
A serious correctness bug, found by re-verifying through the *real* pipeline rather than trusting
the earlier direct-function-call "live verification": `bible-plan.ts` normalizes a reading's book
through `canonicalBook()` (`scripture/index.ts`'s `BOOK_ALIASES` map) *before* calling
`getResponsoryForBook` — so the pool must be keyed by the canonical form, not the bible-plan TSV's
own raw book code, whenever the two differ. 12 of this same day's 33 seeded keys used the raw form
instead: `1macc`/`2macc` (canonical `1mach`/`2mach`), `1sam`/`2sam`/`1kgs`/`2kgs` (`1reg`/`2reg`/
`3reg`/`4reg`), `jdt` (`jdth`), `zeph` (`soph`), `obad` (`abd`), `jonah` (`jon`), `hos` (`osee`),
`mic` (`mich`) — every one of these would have silently resolved to `undefined` in the real app
despite passing this same day's own "live-verified" test, because that test called
`getResponsoryForBook` directly with the raw code, bypassing the normalization the real call site
always applies. Renamed all 12 keys (and their own header comments) to the canonical form.
Re-verified this time through the actual `getBiblePlanReadings` call site (not a direct
`getResponsoryForBook` call) on a real date (2026-06-04, `post-pentecost-01`/Thursday, `1sam 9-10`)
— confirms a real responsory now resolves where it silently wouldn't have before this fix. `npm
test` (2025 passed) and `tsc --noEmit` both pass.
**Lesson for future sourcing passes**: when a book has a `BOOK_ALIASES` entry, the pool key is the
*alias target*, not the bible-plan YAML's own book code — check `scripture/index.ts`'s
`BOOK_ALIASES` map before choosing a key, and verify through `getBiblePlanReadings`/`resolveOrdo`
(the real call chain), not a direct, unnormalized call to `getResponsoryForBook`.
### Matins responsory pools: NT books (Acts, Apocalypse, James, Hebrews, the 4 Gospels) (2026-09-04)
Continuing the same bulk-sourcing pass, applying the previous entry's own lesson from the start
this time (canonical keys, pipeline-verified). Surveyed the whole reference engine's own citation
set precisely (an `awk` one-liner reading the line *after* every `[LectioN]` tag, following two
lines deep for Gospel entries whose citation sits below a "Léctio sancti Evangélii secúndum..."
line) rather than grepping loosely for a book prefix — the loose approach had already produced one
false positive this session (`Rom` matching a Lauds Capitulum, not a real Matins Lectio).
Added, all bilingual, all real Nocturn responsories:
- `act` (Ascension Day's own Matins, Latin/Tempora/Pasc5-4.txt) and `marc` (Easter Sunday's own
Matins, Pasc0-0.txt) — both high-ranked feast days, but genuinely proper content (Ascension's
own Nocturn 1 *is* Acts 1; Easter's *is* Mark 16), not an unrelated override like the Sacred
Heart/Jeremiah case — same reasoning already used for `lam`.
- `heb` (Good Friday's own Tenebrae Matins, Quad6-5.txt) — same reasoning again, Passion-narrative
responsories ("Omnes amici mei," "Velum templi scissum est").
- `apoc` (Easter III Sunday, its own ordinary rank, Pasc3-0.txt) and `jas` (Easter IV Sunday,
Pasc4-0.txt) — genuine Paschaltide Sunday responsory sets, not thematically tied to Apocalypse/
James specifically (a generic Alleluia-form psalm-based set), same "loose match" convention as
everywhere else in this pool.
- `luc`/`matt`/`joan` (Advent I/II/III Sundays, Adv1-0/Adv2-0/Adv3-0.txt) — each Gospel's own
reading week, generic Advent-themed responsories, only 1 entry each (a second Sunday's own set
wasn't chased down this pass).
41 of 72 bible-plan books now seeded. `npm test` (2025 passed) and `tsc --noEmit` both pass;
live-verified through the real `getBiblePlanReadings` call chain this time (not a direct
`getResponsoryForBook` call) — `easter-3`/Monday (`act`, `joan` via the `john``joan` alias),
`post-pentecost-01`/Saturday (`1sam` via alias, `prov`, `matt`), and a calendar-dated Jan 10 row
(`heb`) all resolve real responsory text; `Deut` correctly still resolves `undefined` (genuinely
unseeded, confirmed absent from Tempora entirely).
Confirmed no English exists anywhere in the reference engine for Galatians/Ephesians/Philippians/
Colossians/Titus/Philemon (the whole post-Epiphany reading season) or Romans (the Christmas-Octave
season) — real Latin text exists for all of these, just no bilingual source; left unseeded rather
than own-translating six-plus books in one pass. 32 books remain (9 of them the already-confirmed-
genuinely-absent `bar`/Josue/Judices/Ruth/Chronicles/Esdras-Nehemias/Canticles): Leviticus/
Numbers/Deuteronomy, Romans, 1-2 Corinthians, Galatians, Ephesians, Philippians, Colossians, 1-2
Thessalonians, 1-2 Timothy, Titus, Philemon, 1-2 Peter, 1-3 John, Jude not yet attempted.
### Matins responsory pools: last real batch (1 Cor, 2 Cor, 1 Peter, 1 John), a repeated key bug (2026-09-04)
Confirmed Leviticus/Numbers/Deuteronomy genuinely absent from Tempora (re-checked precisely with
the `awk`-based Lectio-citation survey, not a loose grep — no hit under any Latin form of the
book's name). Added `1cor` (Maundy Thursday's own Nocturn 3, Latin/Tempora/Quad6-4.txt
Responsory7-9 — the Institution narrative, distinct from that same file's Responsory1-3 already
used for `lam`), `2cor` (Epiphany II Sunday, its own ordinary rank, Epi2-0.txt), `1pet` (1 Peter's
own reading week `@`-references the ordinary Paschaltide Sunday psalm-set already used for `jac`
below — R4-6 of that same Pasc4-0.txt), and `1joan` (Sunday within the Ascension Octave, Pasc6-0.txt,
the Paraclete responsory, only 1 entry).
**A repeated mistake, caught by self-audit this time**: the previous entry's `jas` key was wrong —
same bug as the 12-key fix two entries up. `BOOK_ALIASES` maps bible-plan's `jas` to canonical
`jac`; the pool needed `jac:`, not `jas:`. Fixed, and re-verified through `getBiblePlanReadings`
(not a direct call) on `easter-6`/Monday, 2026-05-11 (`Jas 2` now resolves a real responsory).
**Ran a full audit this time**: checked every single current pool key against `BOOK_ALIASES`
programmatically (not just the ones touched this pass) — confirmed clean, zero raw-alias-source
keys remain anywhere in the file.
45 of 72 bible-plan books now seeded. `npm test` (2025 passed) and `tsc --noEmit` both pass.
Remaining 27, none easily gettable this pass: 12 confirmed genuinely absent from the reference
source (`bar`, Canticles, Joshua, Judges, Ruth, 1-2 Chronicles, Ezra, Nehemiah, Leviticus, Numbers,
Deuteronomy); 15 with real Latin but no reference-engine English anywhere (Romans, Galatians,
Ephesians, Philippians, Colossians, Titus, Philemon, 2 Thessalonians, 2 Timothy, 2 Peter, 2-3 John,
Jude). Own-translating any of these would be the next step, if wanted — not attempted here per the
established "only seed real bilingual source" pattern.
### Matins responsory pools: the "untranslated 15" turned out mostly already bilingual (2026-09-04)
Asked to translate the 15 "real Latin, no English" books. Before translating anything, re-checked
each one's own `@Tempora/X:ResponsoryN` reference chain (the same technique that unblocked 8 books
earlier the same day) — and found the whole post-Epiphany "ordinary time" reading season (weeks
3-5, covering Galatians/Ephesians/Philippians/Colossians/1-2 Timothy/Titus/Philemon/2
Thessalonians) doesn't have its own distinct responsory content at all: every one of its 21 feria
files `@`-references 2 Corinthians' own week (Epi2-0 through Epi2-6, already fully bilingual from
earlier this same day) by weekday position. Confirmed by reading every week-3/4/5 feria file's own
`@`-line directly, not guessed. Same story for 2 Peter, 2-3 John, and Jude — all four `@`-reference
Ascension Day's own responsories (already seeded as `act`). **None of these 12 books needed any
translation at all** — added `gal`/`phil`/`1tim` (share Epi2-1), `col`/`2tim` (share Epi2-2),
`eph` (Epi2-3), `1thess`/`tit` (share Epi2-4), `2thess`/`phlm` (share Epi2-6), `2pet`/`2joan`/
`3joan` (share `act`'s R1), `jud` (`act`'s R7) — all real, already-transcribed bilingual text.
Also fixed a real, separate bug the user caught by eye in the rendered app: `getResponsoryForBook`'s
`joinResponsory` concatenated the pool's `r`/`v` text with a bare newline and no "R."/"V." labels
at all — every other responsory source in the app (`octave-readings.ts`'s own `responsory` field,
every `nocturn-readings/*.yml`'s inline `responsory`, and the new per-Common-category pool) uses
the full "R. ...\n* ...\nV. ...\nR. ..." convention. Fixed by computing the repeat line from the
`*` marker already present in the pool's own `r` text (a separate commit, `1867f73`, before this
content pass).
**Only `rom` (Romans) turned out to have no content to translate at all**, on inspection — re-
checked every one of its 15 citing files (all in the Christmas-Octave `Nat0X` range): every single
one `@`-references an unrelated feast's own proper responsory (Circumcision, Christmas Day, or a
January 7 saint), never anything Romans-specific, standalone or borrowed. There's no genuine
"Romans content" anywhere in this reference source to translate, sourced or original — using one of
these borrowed responsories would repeat the Sacred Heart/Jeremiah mismatch this file already
avoids elsewhere. Left `rom` unseeded; it would need an entirely original composition, not a
translation, if ever wanted.
59 of 72 bible-plan books now seeded — every book with any genuinely usable Latin at all. The
remaining 13 (`rom` plus the 12 already-confirmed-absent books) are the real, final gap: `rom` has
no book-specific content anywhere in this source; the other 12 have no citation anywhere at all.
Ran the full canonical-key audit again (programmatic check against `BOOK_ALIASES`, per the
established lesson) — confirmed clean. `npm test` (2025 passed) and `tsc --noEmit` both pass;
live-verified through `getBiblePlanReadings` (`post-epiphany-3`/Wednesday `Gal`, `post-epiphany-5`/
Monday `1tim`, `sunday-after-ascension`/Saturday `Jude` all resolve real responsory text; `Ruth`
correctly still resolves `undefined`).
### Matins responsory pools: `cant` (Canticles) found in the Sancti files, not Tempora (2026-09-05)
User pushback on `cant` being listed "confirmed genuinely absent": right instinct to check the
Commune files specifically — Canticles/Song of Songs imagery is heavily used in Marian propers.
Checked `Latin/Commune/C12.txt` (the Little Office of the BVM) directly: it does cite `!Cant 6:8`,
but only as a Lauds Capitulum, not a Matins Nocturn lesson — Capitula don't carry their own
9-Responsory structure, and C12's actual Lectio1-3 are Sirach 24, not Canticles (matching this
pool's existing `common-of-the-bvm` sourcing). So the Commune search itself came up empty for a
genuine Matins responsory — but it redirected the search productively: checked `Sancti/` (individual
saint/feast files) with the same `awk` Lectio-citation survey used for Tempora, and found real
`!Cant` Nocturn lessons on the Visitation (July 2) and throughout the Assumption Octave
(Sancti/08-15t through 08-22t) — the historic BVM feasts that read straight through the Song of
Songs. Only the Visitation's own file (`07-02.txt`) has both languages; the Assumption Octave days
have real Latin but no English anywhere.
Added `cant`, sourced from `Sancti/07-02.txt` — genuinely Canticles-sourced responsories that
directly blend Song of Songs verses with the Visitation narrative itself ("Surge, própera, amíca
mea... Intrávit María in domum Zacharíæ"), not a borrowed-unrelated-feast mismatch.
60 of 72 bible-plan books now seeded. `npm test` (2025 passed) and `tsc --noEmit` both pass;
live-verified through `getBiblePlanReadings` (a Dec 27 calendar-dated row resolves real `Cant 3`
responsory text). Canonical-key audit re-run, clean (`cant` has no `BOOK_ALIASES` entry).
Prompted by finding `cant` in Sancti, re-checked the other 11 already-confirmed-absent books
against Sancti too (not just Tempora) — found 2 more: `lev` (Leviticus, `Sancti/02-02.txt`, the
Purification of the BVM — its own Leviticus purification-law reading is the feast's actual reason
for being) and `num` (Numbers, `Sancti/09-14.txt`, the Exaltation of the Holy Cross — the
bronze-serpent/Cross typology, Num 21:6-9, only 1 entry). Both genuine thematic matches, not
borrowed-unrelated content. The other 9 (`bar`, Josue, Judices, Ruth, 1-2 Chronicles, Ezra,
Nehemiah, Deuteronomy) checked against the reference engine's own full Sancti citation list —
confirmed still absent, no alternate abbreviation missed.
62 of 72 bible-plan books now seeded — the real final count. `npm test` (2025 passed) and
`tsc --noEmit` both pass; live-verified through `getBiblePlanReadings` (`lent-3`/Sunday resolves
real `Lev 1` responsory text, `palm-sunday`/Sunday resolves real `Num 25-27` text). Canonical-key
audit re-run, clean. Remaining 10, the true final gap: `rom` plus 9 books with no citation
anywhere in Tempora or Sancti (`bar`, Josue, Judices, Ruth, 1-2 Chronicles, Ezra, Nehemiah,
Deuteronomy).
### Advent reading-plan carryover into Christmastide (2026-09-05)
User-flagged wrinkle in `data/hours/bible-plan/*.yml`'s own Isaiah plan: it's authored as a full
4-week Advent (`advent-1-sunday` through `advent-4-saturday`, 28 rows), but real Advent is never
that long. Advent's last real day is always Dec 23 (Dec 24 is the Vigil of Christmas's own
temporal id, `calendar/temporal-id.ts`), while Advent 1 Sunday itself — the Sunday nearest Nov 30
— falls anywhere from Nov 27 to Dec 3. Even the *longest* possible Advent (Nov 27, 27 real days)
is one short of the full 28-row plan; the *shortest* (Dec 3, 21 real days) is a whole week short.
Every single year, at least the plan's last row never lands on its own natural date — not just
"most years," as the request first put it.
Fixed in `propers/bible-plan.ts`'s new `adventCarryoverReadings`: whatever doesn't land on its own
natural date now carries forward one reading per day starting Christmas Day itself, pooled
alongside whatever Christmastide's own calendar-dated rows already have for that day (never
replacing them) — same "every contributing source pools, none override" design already used
throughout this file and `hours/matins.ts`'s own reading-pool assembly. Computed live from
`calendar/temporal.ts`'s `adventStart(year)` for each date's own year (the one place in this file
that needs real calendar-year awareness, since every other lookup here is year-independent); no
new content authoring needed, since the Isaiah rows were already there, just never reachable on
their own natural date in a short year.
User's own framing accepted as the trade-off: "for advent only, we need to show all of those
chapters" — i.e. every planned reading should surface somewhere, even if that means spilling into
Christmastide, rather than silently dropping the tail end of a short year's Advent plan.
Live-verified across the full spread of possible Advent-1-Sunday dates (`adventStart` for
2020-2035 spans exactly the Nov 27 - Dec 3 range): 2028 (Advent 1 Sunday = Dec 3, the latest/
shortest case) carries all 7 of week 4's Isaiah readings forward across Dec 25-31 in order; 2027/
2032 (Advent 1 Sunday = Nov 28, near-earliest/longest) carry only the last 2. Added 4 permanent
tests to `tests/propers/bible-plan.test.ts` covering both extremes, the pooling-not-replacing
behavior, and that nothing carries over before Christmas Day itself. `npm test` (2029 passed,
+4 new) and `tsc --noEmit` both pass.
### Matins responsory pools: `deut` — the first genuine original composition, not a transcription (2026-09-05)
User found a real lead while reading a patristic homily (`English/Sancti/01-02.txt`, on Matt
23:37 "O Jerusalem, Jerusalem"): it quotes Deut 32:11's eagle image in passing ("as also it is
written... an eagle stirreth up her nest... spreadeth abroad her wings"). Confirmed the verse
number against `data/scripture/deut-32.yml`'s own `n: 11` — genuinely Deut 32:11 in standard
citation, not the breviary's own internal chant-verse-numbering for the same text (which splits
it as 32:15-16 in `Latin/Psalterium/Psalmorum/Psalm226.txt`, the real Canticle of Moses sung at
Lauds — that file supplied real, properly accented liturgical Latin and its English counterpart
gave the matching translation, so no accentuation had to be guessed).
Unlike every other entry in this pool, Deuteronomy genuinely has no historical Matins responsory
anywhere in the reference source (confirmed absent from both Tempora and Sancti in the two prior
entries) — so this one is composed, not transcribed: a real R./V. pairing built entirely from
that same canticle's own genuine verses (32:15's eagle image as the R., 32:13-14's "apple of his
eye" as the V.), verbatim text, not paraphrased or invented, just newly paired. Documented plainly
in the data file's own header comment as vu's own composition rather than presented as a
historically-attested responsory, matching this project's "not a reconstruction" ethos.
63 of 72 bible-plan books now seeded (`deut` added). `npm test` (2029 passed) and `tsc --noEmit`
both pass; live-verified through `getBiblePlanReadings` (`easter-3`/Saturday resolves the real,
properly R./V.-formatted text for `Deut 33-34`). Canonical-key audit re-run, clean (`deut` has no
`BOOK_ALIASES` entry).
### Matins responsory pools: `rom` — the second (and last) original composition (2026-09-05)
Asked directly for thoughts on Romans, the one book with real citations but no usable Matins
content anywhere (every citing file borrows an unrelated feast's own proper responsory — Christmas
Day, Circumcision, or a January 7 saint). Same approach as `deut`: composed rather than
transcribed, but built from real, already-liturgical text rather than invented — Rom 13:11-12
("the night is past, the day is at hand... let us cast off the works of darkness, and put on the
armour of light") is the standing year-round ferial Lauds Capitulum
(`Latin/Psalterium/Special/Major Special.txt`'s own "Feria Laudes") and is used again at Advent
I's own Capitulum (`Tempora/Adv1-0.txt`) — genuine accented Vulgate/Douay-Rheims text, just never
combined into its own 9-lesson Matins responsory set the way every other book in this pool was.
User-confirmed before adding.
**64 of 72 bible-plan books now seeded — every book actually used in the user's own bible-plan has
a real responsory, whether transcribed (62) or composed from genuine liturgical text (`deut`,
`rom`).** The remaining 8 are the true, final, unclosable gap: books with no citation anywhere in
Tempora or Sancti at all (`bar`, Josue, Judices, Ruth, 1-2 Chronicles, Ezra, Nehemiah) — there's no
comparable "already-liturgical, just never assembled into a responsory" text to build from for any
of these, since they're never quoted or read in the Office at all, historically. `npm test` (2029
passed) and `tsc --noEmit` both pass; live-verified through `getBiblePlanReadings` (a Jan 1
calendar-dated row resolves real, correctly R./V.-formatted text for `Rom 7-8`). Canonical-key
audit re-run, clean.
### Matins responsory pools: `bar` found in the Missa, not the Horas (2026-09-05)
The "closes the pool" claim above turned out premature by one book. User pointed to
`missa/Latin/Tempora/Quad6-6.txt` — the *Mass* propers, a directory tree this whole responsory
search had never once checked (everything so far searched `horas/`, the Divine Office proper).
The Easter Vigil Mass's own fourth prophecy (`[Proph_Baruch3]`, Bar 3:9-38, "Audi, Israël, mandáta
vitæ") is genuine, real, accented liturgical Latin — just never part of the Office's own Matins at
all, in either directory tree. Composed `bar` the same way as `deut`/`rom`: built from that
prophecy's own climactic close ("Hic est Deus noster... Post hæc in terris visus est, et cum
homínibus conversátus est" — read at the Vigil because early exegetes saw "seen upon earth, and
conversed with men" as a prophecy of the Incarnation), genuine text, not invented.
**65 of 72 bible-plan books now seeded.** `npm test` (2029 passed) and `tsc --noEmit` both pass;
live-verified through `getBiblePlanReadings` (`palm-sunday`/Thursday resolves real, correctly
R./V.-formatted text for `Bar 1-2`). Canonical-key audit re-run, clean (`bar` has no `BOOK_ALIASES`
entry).
**This closes the per-book responsory pool as a project** (see "Matins responsory pools" and its
eleven follow-up entries, 2026-09-04/05) — the per-Common-category pool (19/19 real categories) is
also done; see that same first entry. Extended the Missa check to the other 6 already-absent books
too (Josue, Judices, Ruth, 1-2 Chronicles) — genuinely zero citations anywhere, Horas or Missa.
Ezra came up with one thin, ambiguous lead not acted on: `missa/Latin/Tempora/Pasc7-2.txt`'s
Introit cites `!Esdr 2:36 2:37`, but the actual Vulgate text there (checked against
`data/scripture/1esdr-2.yml`) is a plain census list that doesn't match the Introit's own text at
all ("Accípite jucunditátem glóriæ vestræ... qui vos ad cœléstia regna vocávit"). User's own
explanation (2026-09-05), plausible and probably right, though unprovable without a text we don't
have: Vulgate numbering is genuinely ambiguous here — "1/2 Esdras" is canonical Ezra/Nehemiah, but
there's also a separate, non-canonical Greek "Esdras A" (the Vulgate appendix's own "3 Esdras,"
sometimes itself called "1 Esdras" in Septuagint/Orthodox numbering) — a different text entirely
that this project has never digitized. The reference engine's own citation never disambiguates
("Esdr" bare, no "3" anywhere else in the source to compare against), so this can't be confirmed
outright, but it cleanly explains why the citation doesn't match our canonical Ezra text. Left
both `ezra` and `neh` unseeded rather than force an uncertain match. One small, unrelated loose end
noted along the way
and not addressed here: the bible-plan TSV's own content still isn't covered by a table-driven
test the way other bulk-imported content stores are (see "Bible-plan TSV — bulk conversion done"
below) — `tests/propers/bible-plan.test.ts` tests specific real dates ad hoc, not the full imported
set.
### Matins responsory pools: `ruth` — the first composition with no liturgical precedent at all (2026-09-05)
User-directed: compose Ruth's own responsory from Ruth 1:16-17 ("thy people shall be my people,
and thy God my God") on the verse's own merit, even though — unlike `deut`/`rom`/`bar` — this text
has *no* liturgical precedent anywhere in the reference source at all (no Nuptial Mass file even
exists there to check against). Flagged that distinction directly before proceeding; user confirmed
it explicitly, aware of the difference from the three prior compositions (all of which recombined
text already used liturgically elsewhere, just never in Matins).
Since the project's usual bulk-imported `data/scripture/ruth-1.yml` carries no accents, the Latin
was hand-accented rather than transcribed — but cross-checked word-by-word against already-accented
occurrences of the same words elsewhere in the reference corpus (`quocúmque`, `pópulus tuus`,
`páriter`, `ábeam`, `relínquam`, `moráta`, `morábor`, `móriar`, `moriéntem`, `suscéperit`,
`sepultúræ`) rather than guessed freehand from scratch.
66 of 72 bible-plan books now seeded. `npm test` (2029 passed) and `tsc --noEmit` both pass;
live-verified through `getBiblePlanReadings` (`sunday-after-ascension`/Saturday resolves real,
correctly R./V.-formatted text in both languages for `Ruth 3-4`). Canonical-key audit re-run, clean
(`ruth` has no `BOOK_ALIASES` entry). Remaining 6: Josue, Judices, 1-2 Chronicles, Nehemiah (no
citation anywhere at all) plus `ezra` (one thin, ambiguous near-miss, deliberately left unseeded —
see the entry above).
### Matins responsory pools: `2esdr` (Nehemiah) — correcting a mis-diagnosis (2026-09-05)
The entry above's "Nehemiah: no citation anywhere at all" was wrong — Nehemiah had been bundled in
with `ezra`'s "one thin, ambiguous near-miss" reasoning without ever getting its own Missa check, the
same check that had already found and closed `bar` a few entries earlier. It has a real, unambiguous
citation: Ember Wednesday of September's own Lectio and Communio both quote Neh 8
(`missa/Latin/Tempora/093-3.txt`, `!Neh 8:1-10` / `!Neh 8:10`), genuine accented Latin, matching
English in the sibling `English/Tempora/093-3.txt`.
User-directed: R. from v.3 ("Et legit in eo apérte in platéa... et aures omnis pópuli erant eréctæ
ad librum" — Esdras reading the law plainly, all ears attentive), V. from v.9 ("Dies sanctificátus
est Dómino, Deo nostro: nolíte lugére et nolíte flere" — user's pick, offered against v.6's "Amen,
Amen" and v.10's "Ite, comédite pínguia," for the contrast between the plain reading and the
proclaimed holy day of no mourning). Both Latin lines taken verbatim from the same accented Missa
Lectio; English from the project's own verified `src/data/scripture/2esdr-8.yml`, not retranslated.
Keyed `2esdr:` in the pool (not `neh:`) since that's what `BOOK_ALIASES` maps `neh` to.
67 of 72 seeded. Remaining 5: Josue, Judices, 1-2 Chronicles (no citation anywhere at all) plus
`ezra` (one thin, ambiguous near-miss, deliberately left unseeded — see the entry above).
### Matins responsory pools: `1esdr` (Ezra) — composed, no liturgical precedent (2026-09-05)
User-directed: compose Ezra's own responsory from 1 Esdras 8:21-23, on the verse's own merit — like
`ruth`, not like `bar`/`2esdr`, since the one candidate lead for this book (`Pasc7-2.txt`'s Introit,
see the earlier `ezra`/`neh` entry) turned out to be a text mismatch, not a real match to build from.
v.22's antithesis ("the hand of our God is upon all them that seek him in goodness: and his power and
strength, and wrath upon all them that forsake him") is the strongest material, but the Vulgate's own
clause order puts the wrath half last — a sour note to end the repeated (`*`) clause on, especially
right before v.23's "it fell out prosperously." Edited: swapped the two halves of v.22 so the hopeful
clause is the one repeated after V. — same words, no invention, just reordered for the R./V./R. shape.
V. is v.23 unaltered.
Source (`1esdr-8.yml`) has no accents, like `ruth-1.yml`; Latin hand-accented, cross-checked
word-by-word against already-accented occurrences elsewhere in the corpus (`impérium`, `fortitúdo`,
`derelínquunt`, `bonitáte`, `jejunávimus`, `próspere`). Keyed `1esdr:` (`BOOK_ALIASES` maps `ezra` to
it). `npm test` (2029 passed) and `tsc --noEmit` both pass; live-verified through
`getBiblePlanReadings` (`easter-sunday`/Monday resolves real, correctly R./V.-formatted text in both
languages for `Ezra 3-4`).
68 of 72 seeded. This closes every book with any real sourceable material — the remaining 3 (Josue,
Judices, 1-2 Chronicles) have no citation anywhere, Horas or Missa, and no scripture text of their
own has been composed from on its own merit the way `ruth`/`ezra` were, since that hasn't been
directed for them yet (Josue itself got exactly this treatment shortly after — see the dated entry
below).
### Matins responsory pools: `jos` (Josue) — composed, no liturgical precedent (2026-09-05)
User-directed: compose Josue's own responsory from Josue 24:15-16, on the verse's own merit — like
`ruth`/`1esdr`, since Josue has no citation anywhere in the reference source at all, Horas or Missa
(re-confirmed live: every "Josue" hit in the corpus is an incidental mention of the person inside
unrelated books' readings — Ambrose's *De Officiis* homily, 1-2 Kings — never the Book of Josue's
own text).
The verse pair is already a two-voice exchange — Joshua's challenge to Israel ("choose you this day
... but as for me and my house, we will serve the Lord") and the people's reply — mapping directly
onto R./V. form with no invented content, just split at the natural seam. Asterisk placed before
"Ego autem", so the full choice-clause is R. and the famous declaration is the repeated close; V. is
v.16 kept whole, including "Respondítque pópulus, et ait" (not trimmed for the change of speaker,
since R./V. form doesn't make that redundant here — the narrative frame still matters).
Source (`jos-24.yml`) has no accents, like `ruth-1.yml`/`1esdr-8.yml`; Latin hand-accented,
cross-checked word-by-word against already-accented occurrences elsewhere in the corpus (`vidétur`,
`Dómino`, `elígite`, `hódie`, `potíssimum`, `servíre`, `debeátis`, `serviérunt`, `Mesopotámia`,
`habitátis`, `serviémus`, `Respondítque`, `pópulus`, `relinquámus`, `serviámus`, `aliénis`); `óptio`
left unaccented (2 syllables, no precedent either way, but this project's own accenting convention
never marks a 2-syllable word). `Amorreorum` kept in the spelling `jos-24.yml`'s own bulk import
uses (no `h`, single `r`) rather than the Clementine `Amorrhæórum` spelling found elsewhere in the
corpus (Ps 134/135), since that's this book's own source-text tradition, not a typo to "fix" toward
the more familiar spelling.
Keyed `jos:` (`BOOK_ALIASES` maps `josh` to this canonical id) — not `josue`, which would silently
miss every lookup. `npm test` (2029 passed) and `tsc --noEmit` both pass; live-verified through
`getBiblePlanReadings` (`easter-4`/Sunday resolves real, correctly R./V.-formatted text in both
languages for `Josh 1`).
69 of 72 seeded. Remaining 3 (Judices, 1-2 Chronicles) have no citation anywhere, Horas or Missa,
and no scripture text of their own has been composed on its own merit yet.
### Matins responsory pools: `jdc` (Judges) — composed, no liturgical precedent (2026-09-05)
User-directed: compose Judges' own responsory from Gideon's trumpet-and-pitchers stratagem at the
camp of Madian (Jdc 7:17-20), on the verse's own merit — like `jos`, since Judges has no citation
anywhere in the reference source at all, Horas or Missa.
Considered and set aside: the Song of Deborah's closing benediction (Jdc 5:31) has no natural second
verse to pair with it without inventing one; Samson's dying prayer (Jdc 16:28-30) was set aside as an
uncomfortable emphasis for a Matins responsory (a prayer for strength to kill himself with his
enemies). Gideon's cry won out as the single most recognizable line in the book, and — like
`ruth`/`jos` before it — the passage is already a command/fulfillment structure that maps directly
onto R./V. form: R. is v.17-18 (Gideon's command to the three hundred men); V. is v.19-20's
fulfillment, trimmed to its own core clause (dropped v.20's "in tribus locis... hydrias
confregissent" middle as restating what "conplodere lagoenas" already said), landing the versicle
directly on the iconic cry itself: "Gladius Domini, et Gedeonis."
Source (`jdc-7.yml`) has no accents, like `jos-24.yml`; Latin hand-accented, cross-checked
word-by-word against already-accented occurrences elsewhere in the corpus (`vidéritis`, `fácite`
— matching the "Hoc fácite" idiom's own established accenting — `ingrédiar`, `sectámini`,
`personáverit`, `castrórum`, `circúitum`, `clángite`, `conclamáte`, `tenuérunt`, `mánibus`,
`sonántes`, `clamaverúntque`, `Gládius`, `Gedeónis`, `Gedeóni`); `sinistris`/`dextris` left
unaccented, matching this corpus's own consistent practice for those two specific words even where
the general accenting rule would suggest otherwise. Also caught: the source's own English for v.18
is incomplete (drops "et conclamate, Domino et Gedeoni" entirely, ending mid-sentence) — supplied
the missing clause from the standard Douay-Rheims wording rather than reproducing that gap.
Keyed `jdc:` (`BOOK_ALIASES` maps `judg` to this canonical id). `npm test` (2029 passed) and
`tsc --noEmit` both pass; live-verified through `getBiblePlanReadings` (`easter-6`/Wednesday
resolves real, correctly R./V.-formatted text in both languages for `Judg 7`).
70 of 72 seeded. Remaining 2 (1-2 Paralipomenon/Chronicles) have no citation anywhere, Horas or
Missa, and no scripture text of their own has been composed on its own merit yet.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,320 @@
# A per-Common-category pool of Matins Nocturn 2/3 responsories — sibling to
# matins-responsories-by-book.yml's per-book pool, same "loose match, cycled
# by index" design, but keyed by a saint's own `common:` category (see
# SaintRecord.common in calendar/types.ts) instead of a scripture book. Most
# of this project's 272 nocturn-readings/*.yml files (out of 355) have no
# `responsory:` field of their own — a real, large content gap, not the
# small handful the header comments in those files individually call out —
# and this pool is the mechanism to close it generically rather than
# per-saint.
#
# All content transcribed directly from the reference engine's own Commune
# text files (divinum-officium-reference's web/www/horas/{Latin,English}/
# Commune/CN.txt — the *secular* Commune; Monastic 1617's own CommuneM/CN.txt
# files just `@Commune/CN`-reference these verbatim for every category here,
# so there is no separate Monastic responsory text to source), each holding
# a fixed 6-9 Great Responsories (Nocturn 1-3, in their historical position)
# for one Commune category. Several of vu's own `common:` category ids are
# genuine aliases of the same underlying reference file — verified by
# reading each candidate file's own `@Commune/CX` inheritance line, not
# guessed:
# - `common-of-a-confessor-doctor` / `common-of-a-confessor-pope` inherit
# C4's responsories unchanged (only the Oratio/Officium title differ) —
# same pool as `common-of-a-confessor-bishop`.
# - `common-of-a-confessor-not-bishop` / `common-of-an-abbot` /
# `common-of-several-confessors` (the last confirmed against its one
# real user, Ss. Seven Founders of the Servite Order, non-bishops) all
# inherit C5 unchanged — same pool as `common-of-a-confessor`.
# - `common-of-a-martyr` (C2a) inherits C2 unchanged — same pool as
# `common-of-a-martyr-bishop`.
# - `common-of-a-virgin` (C6a) inherits C6 unchanged — same pool as
# `common-of-a-virgin-martyr`.
# - `common-of-a-widow` (C7a) / `common-of-several-women-martyrs` (the
# latter confirmed against its one real user, Ss. Perpetua and
# Felicity, both non-virgins) inherit C7 unchanged — same pool as
# `common-of-a-holy-woman`.
# - `common-of-apostles` (plural feasts, e.g. the Octave of Ss. Peter and
# Paul) is the same C1 pool as `common-of-an-apostle`.
#
# Not seeded here, deliberately — no direct Commune responsory file exists
# (angels and evangelists each have their own real proper content instead;
# vigils and the handful of `proper-to-*` ids aren't Commune categories at
# all): `common-of-an-angel`, `common-of-an-evangelist`, `common-of-a-vigil`,
# `proper-to-*`.
common-of-a-confessor:
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily;\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum:\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High;\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him;\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Índuit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him; He clothed him with a robe of glory,\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Iste homo perfécit ómnia quæ locútus est ei Deus, et dixit ad eum: Ingrédere in réquiem meam:\n* Quia te vidi justum coram me ex ómnibus géntibus.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Quia te vidi justum coram me ex ómnibus géntibus."
en: "R. This is he which did according unto all that God commanded him; and God said unto him: Enter thou into My rest,\n* For thee have I seen righteous before Me among all people.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For thee have I seen righteous before Me among all people."
- la: "R. Iste est qui ante Deum magnas virtútes operátus est, et de omni corde suo laudávit Dóminum:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Ecce homo sine queréla, verus Dei cultor, ábstinens se ab omni ópere malo, et pérmanens in innocéntia sua.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and praised the Lord with all his heart.\n* May he pray for all people, that their sins may be forgiven unto them.\nV. Behold a man without blame, a worshipper of God in truth, keeping himself clean from every evil work, and abiding still in his innocency.\nR. May he pray for all people, that their sins may be forgiven unto them."
common-of-a-confessor-bishop:
- la: "R. Euge, serve bone et fidélis, quia in pauca fuísti fidélis, supra multa te constítuam:\n* Intra in gáudium Dómini tui.\nV. Dómine, quinque talénta tradidísti mihi, ecce ália quinque superlucrátus sum.\nR. Intra in gáudium Dómini tui."
en: "R. Well done, thou good and faithful servant, thou hast been faithful over a few things. I will make thee ruler over many things:\n* Enter thou into the joy of thy Lord.\nV. Lord, thou deliveredst unto me five talents; behold, I have gained beside them five talents more.\nR. Enter thou into the joy of thy Lord."
- la: "R. Ecce sacérdos magnus, qui in diébus suis plácuit Deo:\n* Ideo jurejurándo fecit illum Dóminus créscere in plebem suam.\nV. Benedictiónem ómnium géntium dedit illi, et testaméntum suum confirmávit super caput ejus.\nR. Ideo jurejurándo fecit illum Dóminus créscere in plebem suam."
en: "R. Behold an high priest, who in his days pleased God\n* Therefore the Lord assured him by an oath that He would multiply his seed among His people.\nV. He hath made him a blessing unto all nations, and hath established His covenant upon his head.\nR. Therefore the Lord assured him by an oath that He would multiply his seed among His people"
- la: "R. Jurávit Dóminus, et non pœnitébit eum:\n* Tu es sacérdos in ætérnum secúndum órdinem Melchísedech.\nV. Dixit Dóminus Dómino meo, Sede a dextris meis.\nR. Tu es sacérdos in ætérnum secúndum órdinem Melchísedech."
en: "R. The Lord hath sworn and will not repent\n* Thou art a Priest for ever after the order of Melchisedek.\nV. The Lord said unto my Lord Sit Thou at My right hand.\nR. Thou art a Priest for ever after the order of Melchisedek."
- la: "R. Invéni David servum meum, óleo sancto meo unxi eum:\n* Manus enim mea auxiliábitur ei.\nV. Nihil profíciet inimícus in eo, et fílius iniquitátis non nocébit ei.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have found David My servant, with My holy oil have I anointed him\n* For My hand shall help him.\nV. The enemy shall prevail nothing against him, nor the son of wickedness afflict him.\nR. For My hand shall help him."
- la: "R. Pósui adjutórium super poténtem, et exaltávi eléctum de plebe mea:\n* Manus enim mea auxiliábitur ei.\nV. Invéni David servum meum, óleo sancto meo unxi eum.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have laid help upon one that is mighty, and have exalted one chosen out of My people\n* For My hand shall help him.\nV. I have found David My servant, with My holy oil have I anointed him.\nR. For My hand shall help him."
- la: "R. Iste est, qui ante Deum magnas virtútes operátus est, et omnis terra doctrína ejus repléta est:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and the whole earth is full of his teaching\n* May he pray for all people, that their sins may be forgiven unto them\nV. This is he which loved not his life in this world, and hath attained unto the kingdom of heaven.\nR. May he pray for all people, that their sins may be forgiven unto them"
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Induit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him He clothed him with a robe of glory\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Sint lumbi vestri præcíncti, et lucérnæ ardéntes in mánibus vestris:\n* Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis.\nV. Vigiláte ergo, quia nescítis qua hora Dóminus vester ventúrus sit.\nR. Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis."
en: "R. Let your loins be girded about, and your lights burning;\n* And ye yourselves like unto men that wait for their lord, when he will return from the wedding.\nV. Watch therefore, for ye know not what hour your Lord doth come.\nR. And ye yourselves like unto men that wait for their lord, when he will return from the wedding."
common-of-a-confessor-doctor:
- la: "R. Euge, serve bone et fidélis, quia in pauca fuísti fidélis, supra multa te constítuam:\n* Intra in gáudium Dómini tui.\nV. Dómine, quinque talénta tradidísti mihi, ecce ália quinque superlucrátus sum.\nR. Intra in gáudium Dómini tui."
en: "R. Well done, thou good and faithful servant, thou hast been faithful over a few things. I will make thee ruler over many things:\n* Enter thou into the joy of thy Lord.\nV. Lord, thou deliveredst unto me five talents; behold, I have gained beside them five talents more.\nR. Enter thou into the joy of thy Lord."
- la: "R. Ecce sacérdos magnus, qui in diébus suis plácuit Deo:\n* Ideo jurejurándo fecit illum Dóminus créscere in plebem suam.\nV. Benedictiónem ómnium géntium dedit illi, et testaméntum suum confirmávit super caput ejus.\nR. Ideo jurejurándo fecit illum Dóminus créscere in plebem suam."
en: "R. Behold an high priest, who in his days pleased God\n* Therefore the Lord assured him by an oath that He would multiply his seed among His people.\nV. He hath made him a blessing unto all nations, and hath established His covenant upon his head.\nR. Therefore the Lord assured him by an oath that He would multiply his seed among His people"
- la: "R. Jurávit Dóminus, et non pœnitébit eum:\n* Tu es sacérdos in ætérnum secúndum órdinem Melchísedech.\nV. Dixit Dóminus Dómino meo, Sede a dextris meis.\nR. Tu es sacérdos in ætérnum secúndum órdinem Melchísedech."
en: "R. The Lord hath sworn and will not repent\n* Thou art a Priest for ever after the order of Melchisedek.\nV. The Lord said unto my Lord Sit Thou at My right hand.\nR. Thou art a Priest for ever after the order of Melchisedek."
- la: "R. Invéni David servum meum, óleo sancto meo unxi eum:\n* Manus enim mea auxiliábitur ei.\nV. Nihil profíciet inimícus in eo, et fílius iniquitátis non nocébit ei.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have found David My servant, with My holy oil have I anointed him\n* For My hand shall help him.\nV. The enemy shall prevail nothing against him, nor the son of wickedness afflict him.\nR. For My hand shall help him."
- la: "R. Pósui adjutórium super poténtem, et exaltávi eléctum de plebe mea:\n* Manus enim mea auxiliábitur ei.\nV. Invéni David servum meum, óleo sancto meo unxi eum.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have laid help upon one that is mighty, and have exalted one chosen out of My people\n* For My hand shall help him.\nV. I have found David My servant, with My holy oil have I anointed him.\nR. For My hand shall help him."
- la: "R. Iste est, qui ante Deum magnas virtútes operátus est, et omnis terra doctrína ejus repléta est:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and the whole earth is full of his teaching\n* May he pray for all people, that their sins may be forgiven unto them\nV. This is he which loved not his life in this world, and hath attained unto the kingdom of heaven.\nR. May he pray for all people, that their sins may be forgiven unto them"
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Induit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him He clothed him with a robe of glory\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Sint lumbi vestri præcíncti, et lucérnæ ardéntes in mánibus vestris:\n* Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis.\nV. Vigiláte ergo, quia nescítis qua hora Dóminus vester ventúrus sit.\nR. Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis."
en: "R. Let your loins be girded about, and your lights burning;\n* And ye yourselves like unto men that wait for their lord, when he will return from the wedding.\nV. Watch therefore, for ye know not what hour your Lord doth come.\nR. And ye yourselves like unto men that wait for their lord, when he will return from the wedding."
common-of-a-confessor-not-bishop:
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily;\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum:\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High;\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him;\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Índuit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him; He clothed him with a robe of glory,\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Iste homo perfécit ómnia quæ locútus est ei Deus, et dixit ad eum: Ingrédere in réquiem meam:\n* Quia te vidi justum coram me ex ómnibus géntibus.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Quia te vidi justum coram me ex ómnibus géntibus."
en: "R. This is he which did according unto all that God commanded him; and God said unto him: Enter thou into My rest,\n* For thee have I seen righteous before Me among all people.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For thee have I seen righteous before Me among all people."
- la: "R. Iste est qui ante Deum magnas virtútes operátus est, et de omni corde suo laudávit Dóminum:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Ecce homo sine queréla, verus Dei cultor, ábstinens se ab omni ópere malo, et pérmanens in innocéntia sua.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and praised the Lord with all his heart.\n* May he pray for all people, that their sins may be forgiven unto them.\nV. Behold a man without blame, a worshipper of God in truth, keeping himself clean from every evil work, and abiding still in his innocency.\nR. May he pray for all people, that their sins may be forgiven unto them."
common-of-a-confessor-pope:
- la: "R. Euge, serve bone et fidélis, quia in pauca fuísti fidélis, supra multa te constítuam:\n* Intra in gáudium Dómini tui.\nV. Dómine, quinque talénta tradidísti mihi, ecce ália quinque superlucrátus sum.\nR. Intra in gáudium Dómini tui."
en: "R. Well done, thou good and faithful servant, thou hast been faithful over a few things. I will make thee ruler over many things:\n* Enter thou into the joy of thy Lord.\nV. Lord, thou deliveredst unto me five talents; behold, I have gained beside them five talents more.\nR. Enter thou into the joy of thy Lord."
- la: "R. Ecce sacérdos magnus, qui in diébus suis plácuit Deo:\n* Ideo jurejurándo fecit illum Dóminus créscere in plebem suam.\nV. Benedictiónem ómnium géntium dedit illi, et testaméntum suum confirmávit super caput ejus.\nR. Ideo jurejurándo fecit illum Dóminus créscere in plebem suam."
en: "R. Behold an high priest, who in his days pleased God\n* Therefore the Lord assured him by an oath that He would multiply his seed among His people.\nV. He hath made him a blessing unto all nations, and hath established His covenant upon his head.\nR. Therefore the Lord assured him by an oath that He would multiply his seed among His people"
- la: "R. Jurávit Dóminus, et non pœnitébit eum:\n* Tu es sacérdos in ætérnum secúndum órdinem Melchísedech.\nV. Dixit Dóminus Dómino meo, Sede a dextris meis.\nR. Tu es sacérdos in ætérnum secúndum órdinem Melchísedech."
en: "R. The Lord hath sworn and will not repent\n* Thou art a Priest for ever after the order of Melchisedek.\nV. The Lord said unto my Lord Sit Thou at My right hand.\nR. Thou art a Priest for ever after the order of Melchisedek."
- la: "R. Invéni David servum meum, óleo sancto meo unxi eum:\n* Manus enim mea auxiliábitur ei.\nV. Nihil profíciet inimícus in eo, et fílius iniquitátis non nocébit ei.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have found David My servant, with My holy oil have I anointed him\n* For My hand shall help him.\nV. The enemy shall prevail nothing against him, nor the son of wickedness afflict him.\nR. For My hand shall help him."
- la: "R. Pósui adjutórium super poténtem, et exaltávi eléctum de plebe mea:\n* Manus enim mea auxiliábitur ei.\nV. Invéni David servum meum, óleo sancto meo unxi eum.\nR. Manus enim mea auxiliábitur ei."
en: "R. I have laid help upon one that is mighty, and have exalted one chosen out of My people\n* For My hand shall help him.\nV. I have found David My servant, with My holy oil have I anointed him.\nR. For My hand shall help him."
- la: "R. Iste est, qui ante Deum magnas virtútes operátus est, et omnis terra doctrína ejus repléta est:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and the whole earth is full of his teaching\n* May he pray for all people, that their sins may be forgiven unto them\nV. This is he which loved not his life in this world, and hath attained unto the kingdom of heaven.\nR. May he pray for all people, that their sins may be forgiven unto them"
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Induit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him He clothed him with a robe of glory\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Sint lumbi vestri præcíncti, et lucérnæ ardéntes in mánibus vestris:\n* Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis.\nV. Vigiláte ergo, quia nescítis qua hora Dóminus vester ventúrus sit.\nR. Et vos símiles homínibus exspectántibus dóminum suum, quando revertátur a núptiis."
en: "R. Let your loins be girded about, and your lights burning;\n* And ye yourselves like unto men that wait for their lord, when he will return from the wedding.\nV. Watch therefore, for ye know not what hour your Lord doth come.\nR. And ye yourselves like unto men that wait for their lord, when he will return from the wedding."
common-of-a-dedication:
- la: "R. In dedicatióne templi decantábat pópulus laudem:\n* Et in ore eórum dulcis resonábat sonus.\nV. Fundáta est domus Dómini supra vérticem móntium, et vénient ad eam omnes gentes.\nR. Et in ore eórum dulcis resonábat sonus."
en: "R. When the Temple was dedicated the people sang praise;\n* And sweet in their mouths was the sound.\nV. The Lord's house is established in the top of the mountains; and all nations shall flow unto it.\nR. And sweet in their mouths was the sound."
- la: "R. Fundáta est domus Dómini supra vérticem móntium, et exaltáta est super omnes colles:\n* Et vénient ad eam omnes gentes, et dicent: Glória tibi, Dómine.\nV. Veniéntes autem vénient cum exsultatióne, portántes manípulos suos.\nR. Et vénient ad eam omnes gentes, et dicent: Glória tibi, Dómine."
en: "R. The Lord's house is established in the top of the mountains, and exalted above the hills;\n* And all nations shall flow unto it, and shall say: Glory be to thee, O Lord!\nV. They shall doubtless come again with rejoicing, bringing their sheaves with them.\nR. And all nations shall flow unto it, and shall say: Glory be to thee, O Lord!"
- la: "R. Bénedic, Dómine, domum istam, quam ædificávi nómini tuo: veniéntium in loco isto\n* Exáudi preces in excélso sólio glóriæ tuæ.\nV. Dómine, si convérsus fúerit pópulus tuus, et oráverit ad sanctuárium tuum.\nR. Exáudi preces in excélso sólio glóriæ tuæ."
en: "R. O Lord, bless this house which I have built unto thy name. whosoever shall come unto this place and pray, then\n* Hear thou from the excellent throne of thy glory.\nV. O Lord, if thy people turn and pray toward thy sanctuary.\nR. Hear thou from the excellent throne of thy glory."
- la: "R. Orántibus in loco isto,\n* Dimítte peccáta pópuli tui, Deus, et osténde eis viam bonam per quam ámbulent, et da glóriam in loco isto.\nV. Qui regis Israël inténde, qui dedúcis velut ovem Joseph, qui sedes super Chérubim.\nR. Dimítte peccáta pópuli tui, Deus, et osténde eis viam bonam per quam ámbulent, et da glóriam in loco isto."
en: "R. If they pray toward this place,\n* Forgive the sin of thy people, O God, and teach them the good way wherein they should walk, and manifest forth thy glory in this place.\nV. Give ear, O Shepherd of Israel, thou that leadest Joseph like a flock, thou that sittest upon the cherubim.\nR. Forgive the sin of thy people, O God, and teach them the good way wherein they should walk, and manifest forth thy glory in this place."
- la: "R. O quam metuéndus est locus iste:\n* Vere non est hic áliud nisi domus Dei et porta cæli.\nV. Hæc est domus Dómini fírmiter ædificáta, bene fundáta est supra firmam petram.\nR. Vere non est hic áliud nisi domus Dei et porta cæli."
en: "R. How dreadful is this place!\n* Surely this is none other but the house of God, and this is the gate of heaven.\nV. This is the house of God, stoutly builded, well founded upon a sure rock.\nR. Surely this is none other but the house of God, and this is the gate of heaven."
- la: "R. Mane surgens Jacob, erigébat lápidem in títulum, fundens óleum désuper; votum vovit Dómino:\n* Vere locus iste sanctus est, et ego nesciébam.\nV. Cumque evigilásset Jacob de somno, ait.\nR. Vere locus iste sanctus est, et ego nesciébam."
en: "R. Jacob rose up early in the morning, and set up the stone for a pillar, and poured oil upon the top of it, and vowed a vow unto the Lord.\n* Surely this place is holy, and I knew it not.\nV. And Jacob awaked out of his sleep, and he said\nR. Surely this place is holy, and I knew it not."
- la: "R. Domus mea, domus oratiónis vocábitur, dicit Dóminus: in ea omnis qui petit, áccipit; et qui quærit, ínvenit;\n* Et pulsánti aperiétur.\nV. Pétite, et accipiétis; quǽrite, et inveniétis.\nR. Et pulsánti aperiétur."
en: "R. My house shall be called the house of prayer, saith the Lord. Therein, he that asketh, receiveth; he that seeketh, findeth;\n* And to him that knocketh, it shall be opened.\nV. Ask, and ye shall receive; seek, and ye shall find.\nR. And to him that knocketh, it shall be opened."
- la: "R. Lápides pretiósi omnes muri tui,\n* Et turres Jerúsalem gemmis ædificabúntur.\nV. Portæ Jerúsalem ex sapphíro et smarágdo ædificabúntur, et ex lápide pretióso omnis circúitus muri ejus.\nR. Et turres Jerúsalem gemmis ædificabúntur."
en: "R. All thy walls are of stones most precious.\n* The towers of Jerusalem shall be built up with jewels.\nV. The gates of Jerusalem shall be built up with the sapphire stone, and the emerald, and all her walls round about with stones most precious.\nR. The towers of Jerusalem shall be built up with jewels."
common-of-a-holy-woman:
- la: "R. Fallax grátia, et vana est pulchritúdo:\n* Múlier timens Dóminum, ipsa laudábitur.\nV. Date ei de fructu mánuum suárum, et laudent eam in portis ópera ejus.\nR. Múlier timens Dóminum, ipsa laudábitur."
en: "R. Favour is deceitful, and beauty is vain\n* A woman that feareth God she shall be praised.\nV. Give her of the fruit of her hands, and let her own works praise her in the gates.\nR. A woman that feareth God she shall be praised."
- la: "R. Os suum apéruit sapiéntiæ, et lex cleméntiæ in lingua ejus: considerávit sémitas domus suæ,\n* Et panem otiósa non comédit.\nV. Gustávit et vidit quia bona est negotiátio ejus: non exstinguétur in nocte lucérna ejus.\nR. Et panem otiósa non comédit."
en: "R. She openeth her mouth with wisdom, and in her tongue is the law of kindness. She looketh well to the ways of her household\n* And eateth not the bread of idleness.\nV. She tasteth and perceiveth that her merchandise is good. Her candle goeth not out by night.\nR. And she eateth not the bread of idleness."
- la: "R. Regnum mundi et omnem ornátum sǽculi contémpsi, propter amórem Dómini mei Jesu Christi:\n* Quem vidi, quem amávi, in quem crédidi, quem diléxi.\nV. Eructávit cor meum verbum bonum: dico ego ópera mea Regi.\nR. Quem vidi, quem amávi, in quem crédidi, quem diléxi."
en: "R. The kingdom of this world and all the beauty of life I have esteemed as nothing, for the excellency of the love of Jesus Christ my Lord\n* Whom, having seen, I loved Whom, having believed, I longed after.\nV. My heart is overflowing with a good matter I speak of my works unto the King.\nR. Whom, having seen, I loved Whom, having believed, I longed after."
common-of-a-martyr:
- la: "R. Iste Sanctus pro lege Dei sui certávit usque ad mortem, et a verbis impiórum non tímuit:\n* Fundátus enim erat supra firmam petram.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Fundátus enim erat supra firmam petram."
en: "R. This man is holy, for he hath striven for the law of his God even unto death, and hath not feared for the words of the ungodly;\n* For he had his foundation upon a strong rock.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For he had his foundation upon a strong rock."
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Descendítque cum illo in fóveam, et in vínculis non derelíquit eum.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him,\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Desidérium ánimæ ejus tribuísti ei Dómine,\n* Et voluntáte labiórum ejus non fraudásti eum.\nV. Quóniam prævenísti eum in benedictiónibus dulcédinis: posuísti in cápite ejus corónam de lápide pretióso.\nR. Et voluntáte labiórum ejus non fraudásti eum."
en: "R. Lord, Thou hast given him his heart's desire.\n* And hast not withholden the request of his lips.\nV. For Thou hast prevented him with the blessings of sweetness: Thou hast set a crown of precious stones upon his head.\nR. And hast not withholden the request of his lips."
- la: "R. Stola jucunditátis índuit eum Dóminus:\n* Et corónam pulchritúdinis pósuit super caput ejus.\nV. Cibávit illum Dóminus pane vitæ et intelléctus: et aqua sapiéntiæ salutáris potávit illum.\nR. Et corónam pulchritúdinis pósuit super caput ejus."
en: "R. The Lord hath put on him a robe of honour,\n* And put about his head a crown of joy.\nV. With the bread of life and understanding hath the Lord fed him, and given him the water of health and wisdom to drink.\nR. And put about his head a crown of joy."
- la: "R. Coróna áurea super caput ejus,\n* Expréssa signo sanctitátis, glória honóris, et opus fortitúdinis.\nV. Quóniam prævenísti eum in benedictiónibus dulcédinis, posuísti in cápite ejus corónam de lápide pretióso.\nR. Expréssa signo sanctitátis, glória honóris, et opus fortitúdinis."
en: "R. A crown of gold upon his head,\n* Wherein is engraved Holiness, an ornament of honour, a costly work.\nV. For Thou hast prevented him with the blessings of sweetness, Thou hast set a crown of precious stones upon his head.\nR. Wherein is engraved Holiness, an ornament of honour, a costly work."
- la: "R. Hic est vere Martyr, qui pro Christi nómine sánguinem suum fudit:\n* Qui minas júdicum non tímuit, nec terrénæ dignitátis glóriam quæsívit, sed ad cæléstia regna pervénit.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Qui minas júdicum non tímuit, nec terrénæ dignitátis glóriam quæsívit, sed ad cæléstia regna pervénit."
en: "R. This is a Martyr indeed, who shed his blood for Christ's Name's sake\n* Who feared not for the threats of judges, nor sought to be great with the glory of this world, but pressed on unto the kingdom of heaven.\nV. The Lord guided the righteous in right paths, and showed him the kingdom of God.\nR. Who feared not for the threats of judges, nor sought to be great with the glory of this world, but pressed on unto the kingdom of heaven."
common-of-a-martyr-bishop:
- la: "R. Iste Sanctus pro lege Dei sui certávit usque ad mortem, et a verbis impiórum non tímuit:\n* Fundátus enim erat supra firmam petram.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Fundátus enim erat supra firmam petram."
en: "R. This man is holy, for he hath striven for the law of his God even unto death, and hath not feared for the words of the ungodly;\n* For he had his foundation upon a strong rock.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For he had his foundation upon a strong rock."
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Descendítque cum illo in fóveam, et in vínculis non derelíquit eum.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him,\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Desidérium ánimæ ejus tribuísti ei Dómine,\n* Et voluntáte labiórum ejus non fraudásti eum.\nV. Quóniam prævenísti eum in benedictiónibus dulcédinis: posuísti in cápite ejus corónam de lápide pretióso.\nR. Et voluntáte labiórum ejus non fraudásti eum."
en: "R. Lord, Thou hast given him his heart's desire.\n* And hast not withholden the request of his lips.\nV. For Thou hast prevented him with the blessings of sweetness: Thou hast set a crown of precious stones upon his head.\nR. And hast not withholden the request of his lips."
- la: "R. Stola jucunditátis índuit eum Dóminus:\n* Et corónam pulchritúdinis pósuit super caput ejus.\nV. Cibávit illum Dóminus pane vitæ et intelléctus: et aqua sapiéntiæ salutáris potávit illum.\nR. Et corónam pulchritúdinis pósuit super caput ejus."
en: "R. The Lord hath put on him a robe of honour,\n* And put about his head a crown of joy.\nV. With the bread of life and understanding hath the Lord fed him, and given him the water of health and wisdom to drink.\nR. And put about his head a crown of joy."
- la: "R. Coróna áurea super caput ejus,\n* Expréssa signo sanctitátis, glória honóris, et opus fortitúdinis.\nV. Quóniam prævenísti eum in benedictiónibus dulcédinis, posuísti in cápite ejus corónam de lápide pretióso.\nR. Expréssa signo sanctitátis, glória honóris, et opus fortitúdinis."
en: "R. A crown of gold upon his head,\n* Wherein is engraved Holiness, an ornament of honour, a costly work.\nV. For Thou hast prevented him with the blessings of sweetness, Thou hast set a crown of precious stones upon his head.\nR. Wherein is engraved Holiness, an ornament of honour, a costly work."
- la: "R. Hic est vere Martyr, qui pro Christi nómine sánguinem suum fudit:\n* Qui minas júdicum non tímuit, nec terrénæ dignitátis glóriam quæsívit, sed ad cæléstia regna pervénit.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Qui minas júdicum non tímuit, nec terrénæ dignitátis glóriam quæsívit, sed ad cæléstia regna pervénit."
en: "R. This is a Martyr indeed, who shed his blood for Christ's Name's sake\n* Who feared not for the threats of judges, nor sought to be great with the glory of this world, but pressed on unto the kingdom of heaven.\nV. The Lord guided the righteous in right paths, and showed him the kingdom of God.\nR. Who feared not for the threats of judges, nor sought to be great with the glory of this world, but pressed on unto the kingdom of heaven."
common-of-a-virgin:
- la: "R. Veni Sponsa Christi, áccipe corónam, quam tibi Dóminus præparávit in ætérnum; pro cujus amóre sánguinem tuum fudísti,\n* Et cum Ángelis in paradísum introísti.\nV. Veni, elécta mea, et ponam in te thronum meum; quia concupívit Rex spéciem tuam.\nR. Et cum Ángelis in paradísum introísti."
en: "R. Come, Bride of Christ, and take the everlasting crown, which the Lord hath prepared for thee, even for thee who for the love of Him hast shed thy blood;\n* And art entered with Angels into His garden.\nV. Come, O My chosen one, and I will establish My throne in thee, for the King hath reatly desired thy beauty\nR. And art entered with Angels into His garden."
- la: "R. Diffúsa est grátia in lábiis tuis,\n* Proptérea benedíxit te Deus in ætérnum.\nV. Spécie tua et pulchritúdine tua inténde, próspere procéde, et regna.\nR. Proptérea benedíxit te Deus in ætérnum."
en: "R. Grace is poured into thy lips, therefore;\n* God hath blessed thee for ever.\nV. In thy comeliness and thy beauty, go forward, fare prosperously, and reign.\nR. God hath blessed thee for ever."
- la: "R. Spécie tua et pulchritúdine tua\n* Inténde, próspere procéde, et regna.\nV. Diffúsa est grátia in lábiis tuis, proptérea benedíxit te Deus in ætérnum.\nR. Inténde, próspere procéde, et regna."
en: "R. In thy comeliness and thy beauty;\n* Go forward, fare prosperously, and reign.\nV. Grace is poured into thy lips, therefore God hath blessed thee for ever.\nR. Go forward, fare prosperously, and reign."
- la: "R. Propter veritátem, et mansuetúdinem, et justítiam:\n* Et dedúcet te mirabíliter déxtera tua.\nV. Spécie tua et pulchritúdine tua inténde, próspere procéde, et regna.\nR. Et dedúcet te mirabíliter déxtera tua."
en: "R. Because of truth, and meekness, and righteousness;\n* And thy right hand shall lead thee wonderfully.\nV. In thy comeliness, and thy beauty, go forward, fare prosperously, and reign.\nR. And thy right hand shall lead thee wonderfully."
- la: "R. Dilexísti justítiam, et odísti iniquitátem:\n* Proptérea unxit te Deus, Deus tuus, óleo lætítiæ.\nV. Propter veritátem, et mansuetúdinem, et justítiam.\nR. Proptérea unxit te Deus, Deus tuus, óleo lætítiæ."
en: "R. Thou hast loved righteousness, and hated iniquity;\n* Therefore God, thy God, hath anointed thee with the oil of gladness.\nV. Because of truth, and meekness, and righteousness.\nR. Therefore God, thy God, hath anointed thee with the oil of gladness."
- la: "R. Afferéntur Regi vírgines post eam, próximæ ejus;\n* Afferéntur tibi in lætítia et exsultatióne.\nV. Spécie tua et pulchritúdine tua; inténde, próspere procéde, et regna.\nR. Afferéntur tibi in lætítia et exsultatióne."
en: "R. After her shall virgins be brought unto the King, her fellows\n* They shall be brought unto thee with gladness and rejoicing.\nV. In thy comeliness and thy beauty, go forward, fare prosperously, and reign.\nR. They shall be brought unto thee with gladness and rejoicing."
- la: "R. Hæc est Virgo sápiens, quam Dóminus vigilántem invénit, quæ accéptis lampádibus sumpsit secum óleum:\n* Et veniénte Dómino, introívit cum eo ad núptias.\nV. Média nocte clamor factus est: Ecce sponsus venit, exíte óbviam ei.\nR. Et veniénte Dómino, introívit cum eo ad núptias."
en: "R. This is one of those wise virgins, whom the Lord found watching, for when she took her lamp, she took oil with her.\n* And when the Lord came, she went in with him to the marriage.\nV. At midnight there was a cry made: Behold, the Bridegroom cometh, go ye out to meet him.\nR. And when the Lord came, she went in with him to the marriage."
- la: "R. Média nocte clamor factus est:\n* Ecce sponsus venit, exíte óbviam ei.\nV. Prudéntes vírgines, aptáte vestras lámpades.\nR. Ecce sponsus venit, exíte óbviam ei."
en: "R. At midnight there was a cry made:\n* Behold, the Bridegroom cometh, go ye out to meet him.\nV. Trim your lamps, O ye wise virgins.\nR. Behold, the Bridegroom cometh, go ye out to meet him."
common-of-a-virgin-martyr:
- la: "R. Veni Sponsa Christi, áccipe corónam, quam tibi Dóminus præparávit in ætérnum; pro cujus amóre sánguinem tuum fudísti,\n* Et cum Ángelis in paradísum introísti.\nV. Veni, elécta mea, et ponam in te thronum meum; quia concupívit Rex spéciem tuam.\nR. Et cum Ángelis in paradísum introísti."
en: "R. Come, Bride of Christ, and take the everlasting crown, which the Lord hath prepared for thee, even for thee who for the love of Him hast shed thy blood;\n* And art entered with Angels into His garden.\nV. Come, O My chosen one, and I will establish My throne in thee, for the King hath reatly desired thy beauty\nR. And art entered with Angels into His garden."
- la: "R. Diffúsa est grátia in lábiis tuis,\n* Proptérea benedíxit te Deus in ætérnum.\nV. Spécie tua et pulchritúdine tua inténde, próspere procéde, et regna.\nR. Proptérea benedíxit te Deus in ætérnum."
en: "R. Grace is poured into thy lips, therefore;\n* God hath blessed thee for ever.\nV. In thy comeliness and thy beauty, go forward, fare prosperously, and reign.\nR. God hath blessed thee for ever."
- la: "R. Spécie tua et pulchritúdine tua\n* Inténde, próspere procéde, et regna.\nV. Diffúsa est grátia in lábiis tuis, proptérea benedíxit te Deus in ætérnum.\nR. Inténde, próspere procéde, et regna."
en: "R. In thy comeliness and thy beauty;\n* Go forward, fare prosperously, and reign.\nV. Grace is poured into thy lips, therefore God hath blessed thee for ever.\nR. Go forward, fare prosperously, and reign."
- la: "R. Propter veritátem, et mansuetúdinem, et justítiam:\n* Et dedúcet te mirabíliter déxtera tua.\nV. Spécie tua et pulchritúdine tua inténde, próspere procéde, et regna.\nR. Et dedúcet te mirabíliter déxtera tua."
en: "R. Because of truth, and meekness, and righteousness;\n* And thy right hand shall lead thee wonderfully.\nV. In thy comeliness, and thy beauty, go forward, fare prosperously, and reign.\nR. And thy right hand shall lead thee wonderfully."
- la: "R. Dilexísti justítiam, et odísti iniquitátem:\n* Proptérea unxit te Deus, Deus tuus, óleo lætítiæ.\nV. Propter veritátem, et mansuetúdinem, et justítiam.\nR. Proptérea unxit te Deus, Deus tuus, óleo lætítiæ."
en: "R. Thou hast loved righteousness, and hated iniquity;\n* Therefore God, thy God, hath anointed thee with the oil of gladness.\nV. Because of truth, and meekness, and righteousness.\nR. Therefore God, thy God, hath anointed thee with the oil of gladness."
- la: "R. Afferéntur Regi vírgines post eam, próximæ ejus;\n* Afferéntur tibi in lætítia et exsultatióne.\nV. Spécie tua et pulchritúdine tua; inténde, próspere procéde, et regna.\nR. Afferéntur tibi in lætítia et exsultatióne."
en: "R. After her shall virgins be brought unto the King, her fellows\n* They shall be brought unto thee with gladness and rejoicing.\nV. In thy comeliness and thy beauty, go forward, fare prosperously, and reign.\nR. They shall be brought unto thee with gladness and rejoicing."
- la: "R. Hæc est Virgo sápiens, quam Dóminus vigilántem invénit, quæ accéptis lampádibus sumpsit secum óleum:\n* Et veniénte Dómino, introívit cum eo ad núptias.\nV. Média nocte clamor factus est: Ecce sponsus venit, exíte óbviam ei.\nR. Et veniénte Dómino, introívit cum eo ad núptias."
en: "R. This is one of those wise virgins, whom the Lord found watching, for when she took her lamp, she took oil with her.\n* And when the Lord came, she went in with him to the marriage.\nV. At midnight there was a cry made: Behold, the Bridegroom cometh, go ye out to meet him.\nR. And when the Lord came, she went in with him to the marriage."
- la: "R. Média nocte clamor factus est:\n* Ecce sponsus venit, exíte óbviam ei.\nV. Prudéntes vírgines, aptáte vestras lámpades.\nR. Ecce sponsus venit, exíte óbviam ei."
en: "R. At midnight there was a cry made:\n* Behold, the Bridegroom cometh, go ye out to meet him.\nV. Trim your lamps, O ye wise virgins.\nR. Behold, the Bridegroom cometh, go ye out to meet him."
common-of-a-widow:
- la: "R. Fallax grátia, et vana est pulchritúdo:\n* Múlier timens Dóminum, ipsa laudábitur.\nV. Date ei de fructu mánuum suárum, et laudent eam in portis ópera ejus.\nR. Múlier timens Dóminum, ipsa laudábitur."
en: "R. Favour is deceitful, and beauty is vain\n* A woman that feareth God she shall be praised.\nV. Give her of the fruit of her hands, and let her own works praise her in the gates.\nR. A woman that feareth God she shall be praised."
- la: "R. Os suum apéruit sapiéntiæ, et lex cleméntiæ in lingua ejus: considerávit sémitas domus suæ,\n* Et panem otiósa non comédit.\nV. Gustávit et vidit quia bona est negotiátio ejus: non exstinguétur in nocte lucérna ejus.\nR. Et panem otiósa non comédit."
en: "R. She openeth her mouth with wisdom, and in her tongue is the law of kindness. She looketh well to the ways of her household\n* And eateth not the bread of idleness.\nV. She tasteth and perceiveth that her merchandise is good. Her candle goeth not out by night.\nR. And she eateth not the bread of idleness."
- la: "R. Regnum mundi et omnem ornátum sǽculi contémpsi, propter amórem Dómini mei Jesu Christi:\n* Quem vidi, quem amávi, in quem crédidi, quem diléxi.\nV. Eructávit cor meum verbum bonum: dico ego ópera mea Regi.\nR. Quem vidi, quem amávi, in quem crédidi, quem diléxi."
en: "R. The kingdom of this world and all the beauty of life I have esteemed as nothing, for the excellency of the love of Jesus Christ my Lord\n* Whom, having seen, I loved Whom, having believed, I longed after.\nV. My heart is overflowing with a good matter I speak of my works unto the King.\nR. Whom, having seen, I loved Whom, having believed, I longed after."
common-of-an-abbot:
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily;\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum:\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High;\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him;\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Índuit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him; He clothed him with a robe of glory,\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Iste homo perfécit ómnia quæ locútus est ei Deus, et dixit ad eum: Ingrédere in réquiem meam:\n* Quia te vidi justum coram me ex ómnibus géntibus.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Quia te vidi justum coram me ex ómnibus géntibus."
en: "R. This is he which did according unto all that God commanded him; and God said unto him: Enter thou into My rest,\n* For thee have I seen righteous before Me among all people.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For thee have I seen righteous before Me among all people."
- la: "R. Iste est qui ante Deum magnas virtútes operátus est, et de omni corde suo laudávit Dóminum:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Ecce homo sine queréla, verus Dei cultor, ábstinens se ab omni ópere malo, et pérmanens in innocéntia sua.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and praised the Lord with all his heart.\n* May he pray for all people, that their sins may be forgiven unto them.\nV. Behold a man without blame, a worshipper of God in truth, keeping himself clean from every evil work, and abiding still in his innocency.\nR. May he pray for all people, that their sins may be forgiven unto them."
common-of-an-apostle:
- la: "R. Ecce ego mitto vos sicut oves in médio lupórum, dicit Dóminus:\n* Estóte ergo prudéntes sicut serpéntes, et símplices sicut colúmbæ.\nV. Dum lucem habétis, crédite in lucem, ut fílii lucis sitis.\nR. Estóte ergo prudéntes sicut serpéntes, et símplices sicut colúmbæ."
en: "R. Behold, I send you as sheep in the midst of wolves, said the Lord:\n* Be ye, therefore, wise as serpents and simple as doves.\nV. Whilst you have the light, believe in the light, that you may be the children of light.\nR. Be ye therefore wise as serpents and simple as doves."
- la: "R. Tóllite jugum meum super vos, dicit Dóminus, et díscite a me, quia mitis sum et húmilis corde:\n* Jugum enim meum suáve est, et onus meum leve.\nV. Et inveniétis réquiem animábus vestris.\nR. Jugum enim meum suáve est, et onus meum leve."
en: "R. Take up my yoke upon you, said the Lord, and learn of me, because I am meek, and humble of heart.\n* For my yoke is sweet and my burden light.\nV. And you shall find rest to your souls.\nR. For my yoke is sweet and my burden light."
- la: "R. Dum stetéritis ante reges et prǽsides, nolíte cogitáre quómodo aut quid loquámini:\n* Dábitur enim vobis in illa hora, quid loquámini.\nV. Non enim vos estis qui loquímini: sed Spíritus Patris vestri, qui lóquitur in vobis.\nR. Dábitur enim vobis in illa hora, quid loquámini."
en: "R. But when they shall deliver you up to the judges, take no thought how or what to speak:\n* for it shall be given you in that hour what to speak:\nV. For it is not you that speak, but the spirit of your Father that speaketh in you.\nR. For it shall be given you in that hour what to speak."
- la: "R. Vidi conjúnctos viros, habéntes spléndidas vestes, et Ángelus Dómini locútus est ad me, dicens:\n* Isti sunt viri sancti facti amíci Dei.\nV. Vidi Ángelum Dei fortem, volántem per médium cælum, voce magna clamántem et dicéntem.\nR. Isti sunt viri sancti facti amíci Dei."
en: "R. I saw men standing together, clad in shining raiment, and the Angel of the Lord spoke unto me, saying:\n* These men are holy, for they are the friends of God.\nV. I saw a strong Angel of God fly into the midst of heaven, saying with a loud voice:\nR. These men are holy, for they are the friends of God."
- la: "R. Beáti estis, cum maledíxerint vobis hómines, et persecúti vos fúerint, et díxerint omne malum advérsum vos, mentiéntes, propter me:\n* Gaudéte et exsultáte, quóniam merces vestra copiósa est in cælis.\nV. Cum vos óderint hómines, et cum separáverint vos, et exprobráverint, et ejécerint nomen vestrum tamquam malum propter Fílium hóminis.\nR. Gaudéte et exsultáte, quóniam merces vestra copiósa est in cælis."
en: "R. Blessed are ye when men shall revile you, and persecute you, and shall say all manner of evil against you falsely, for My sake;\n* Rejoice, and be exceeding glad, for great is your reward in heaven.\nV. When men shall hate you, and when they shall separate you from their company, and shall reproach you, and cast out your name as evil, for the Son of Man's sake.\nR. Rejoice, and be exceeding glad, for great is your reward in heaven."
- la: "R. Isti sunt triumphatóres et amíci Dei, qui contemnéntes jussa príncipum, meruérunt prǽmia ætérna:\n* Modo coronántur, et accípiunt palmam.\nV. Isti sunt qui venérunt ex magna tribulatióne, et lavérunt stolas suas in sánguine Agni.\nR. Modo coronántur, et accípiunt palmam."
en: "R. These are they which have conquered, and are become the friends of God, who recked not of the commandments of princes, and earned the everlasting reward.\n* And now have they crowns on their heads, and palms in their hands.\nV. These are they which came out of great tribulation, and have washed their robes in the blood of the Lamb.\nR. And now have they crowns on their heads, and palms in their hands."
- la: "R. Isti sunt qui vivéntes in carne, plantavérunt Ecclésiam sánguine suo:\n* Cálicem Dómini bibérunt, et amíci Dei facti sunt.\nV. In omnem terram exívit sonus eórum, et in fines orbis terræ verba eórum.\nR. Cálicem Dómini bibérunt, et amíci Dei facti sunt."
en: "R. These are they who while yet they lived in the flesh, planted the Church in their own blood;\n* They drank of the Lord's cup, and became the friends of God.\nV. Their sound is gone out through all the earth, and their words to the ends of the world.\nR. They drank of the Lord's cup, and became the friends of God."
- la: "R. Isti sunt viri sancti, quos elégit Dóminus in caritáte non ficta, et dedit illis glóriam sempitérnam:\n* Quorum doctrína fulget Ecclésia, ut sole luna.\nV. Sancti per fidem vicérunt regna: operáti sunt justítiam.\nR. Quorum doctrína fulget Ecclésia, ut sole luna."
en: "R. These men are saints, whom the Lord hath chosen in love unfeigned, and hath given them glory everlasting. These are they\n* By the light of whose teaching the Church is glorified, even as the moon is glorified by the light of the sun.\nV. The saints through faith subdued kingdoms, wrought righteousness.\nR. By the light of whose teaching the Church is glorified, even as the moon is glorified by the light of the sun."
common-of-apostles:
- la: "R. Ecce ego mitto vos sicut oves in médio lupórum, dicit Dóminus:\n* Estóte ergo prudéntes sicut serpéntes, et símplices sicut colúmbæ.\nV. Dum lucem habétis, crédite in lucem, ut fílii lucis sitis.\nR. Estóte ergo prudéntes sicut serpéntes, et símplices sicut colúmbæ."
en: "R. Behold, I send you as sheep in the midst of wolves, said the Lord:\n* Be ye, therefore, wise as serpents and simple as doves.\nV. Whilst you have the light, believe in the light, that you may be the children of light.\nR. Be ye therefore wise as serpents and simple as doves."
- la: "R. Tóllite jugum meum super vos, dicit Dóminus, et díscite a me, quia mitis sum et húmilis corde:\n* Jugum enim meum suáve est, et onus meum leve.\nV. Et inveniétis réquiem animábus vestris.\nR. Jugum enim meum suáve est, et onus meum leve."
en: "R. Take up my yoke upon you, said the Lord, and learn of me, because I am meek, and humble of heart.\n* For my yoke is sweet and my burden light.\nV. And you shall find rest to your souls.\nR. For my yoke is sweet and my burden light."
- la: "R. Dum stetéritis ante reges et prǽsides, nolíte cogitáre quómodo aut quid loquámini:\n* Dábitur enim vobis in illa hora, quid loquámini.\nV. Non enim vos estis qui loquímini: sed Spíritus Patris vestri, qui lóquitur in vobis.\nR. Dábitur enim vobis in illa hora, quid loquámini."
en: "R. But when they shall deliver you up to the judges, take no thought how or what to speak:\n* for it shall be given you in that hour what to speak:\nV. For it is not you that speak, but the spirit of your Father that speaketh in you.\nR. For it shall be given you in that hour what to speak."
- la: "R. Vidi conjúnctos viros, habéntes spléndidas vestes, et Ángelus Dómini locútus est ad me, dicens:\n* Isti sunt viri sancti facti amíci Dei.\nV. Vidi Ángelum Dei fortem, volántem per médium cælum, voce magna clamántem et dicéntem.\nR. Isti sunt viri sancti facti amíci Dei."
en: "R. I saw men standing together, clad in shining raiment, and the Angel of the Lord spoke unto me, saying:\n* These men are holy, for they are the friends of God.\nV. I saw a strong Angel of God fly into the midst of heaven, saying with a loud voice:\nR. These men are holy, for they are the friends of God."
- la: "R. Beáti estis, cum maledíxerint vobis hómines, et persecúti vos fúerint, et díxerint omne malum advérsum vos, mentiéntes, propter me:\n* Gaudéte et exsultáte, quóniam merces vestra copiósa est in cælis.\nV. Cum vos óderint hómines, et cum separáverint vos, et exprobráverint, et ejécerint nomen vestrum tamquam malum propter Fílium hóminis.\nR. Gaudéte et exsultáte, quóniam merces vestra copiósa est in cælis."
en: "R. Blessed are ye when men shall revile you, and persecute you, and shall say all manner of evil against you falsely, for My sake;\n* Rejoice, and be exceeding glad, for great is your reward in heaven.\nV. When men shall hate you, and when they shall separate you from their company, and shall reproach you, and cast out your name as evil, for the Son of Man's sake.\nR. Rejoice, and be exceeding glad, for great is your reward in heaven."
- la: "R. Isti sunt triumphatóres et amíci Dei, qui contemnéntes jussa príncipum, meruérunt prǽmia ætérna:\n* Modo coronántur, et accípiunt palmam.\nV. Isti sunt qui venérunt ex magna tribulatióne, et lavérunt stolas suas in sánguine Agni.\nR. Modo coronántur, et accípiunt palmam."
en: "R. These are they which have conquered, and are become the friends of God, who recked not of the commandments of princes, and earned the everlasting reward.\n* And now have they crowns on their heads, and palms in their hands.\nV. These are they which came out of great tribulation, and have washed their robes in the blood of the Lamb.\nR. And now have they crowns on their heads, and palms in their hands."
- la: "R. Isti sunt qui vivéntes in carne, plantavérunt Ecclésiam sánguine suo:\n* Cálicem Dómini bibérunt, et amíci Dei facti sunt.\nV. In omnem terram exívit sonus eórum, et in fines orbis terræ verba eórum.\nR. Cálicem Dómini bibérunt, et amíci Dei facti sunt."
en: "R. These are they who while yet they lived in the flesh, planted the Church in their own blood;\n* They drank of the Lord's cup, and became the friends of God.\nV. Their sound is gone out through all the earth, and their words to the ends of the world.\nR. They drank of the Lord's cup, and became the friends of God."
- la: "R. Isti sunt viri sancti, quos elégit Dóminus in caritáte non ficta, et dedit illis glóriam sempitérnam:\n* Quorum doctrína fulget Ecclésia, ut sole luna.\nV. Sancti per fidem vicérunt regna: operáti sunt justítiam.\nR. Quorum doctrína fulget Ecclésia, ut sole luna."
en: "R. These men are saints, whom the Lord hath chosen in love unfeigned, and hath given them glory everlasting. These are they\n* By the light of whose teaching the Church is glorified, even as the moon is glorified by the light of the sun.\nV. The saints through faith subdued kingdoms, wrought righteousness.\nR. By the light of whose teaching the Church is glorified, even as the moon is glorified by the light of the sun."
common-of-several-confessors:
- la: "R. Justus germinábit sicut lílium:\n* Et florébit in ætérnum ante Dóminum.\nV. Plantátus in domo Dómini, in átriis domus Dei nostri.\nR. Et florébit in ætérnum ante Dóminum."
en: "R. The righteous shall grow as the lily;\n* Yea, he shall flourish in the presence of the Lord for ever.\nV. Those that be planted in the house of the Lord, shall flourish in the courts of the house of our God.\nR. Yea, he shall flourish in the presence of the Lord for ever."
- la: "R. Iste cognóvit justítiam, et vidit mirabília magna, et exorávit Altíssimum:\n* Et invéntus est in número Sanctórum.\nV. Iste est qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Et invéntus est in número Sanctórum."
en: "R. This is he which knew righteousness, and saw great wonders, and made his prayer unto the Most High;\n* And he is numbered among the Saints.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. And he is numbered among the Saints."
- la: "R. Honéstum fecit illum Dóminus, et custodívit eum ab inimícis, et a seductóribus tutávit illum:\n* Et dedit illi claritátem ætérnam.\nV. Justum dedúxit Dóminus per vias rectas, et osténdit illi regnum Dei.\nR. Et dedit illi claritátem ætérnam."
en: "R. The Lord made him honourable, and defended him from his enemies, and kept him safe from those that lay in wait for him;\n* And gave him perpetual glory.\nV. He went down with him into the pit, and left him not in bonds.\nR. And gave him perpetual glory."
- la: "R. Amávit eum Dóminus, et ornávit eum: stolam glóriæ índuit eum,\n* Et ad portas paradísi coronávit eum.\nV. Índuit eum Dóminus lorícam fídei, et ornávit eum.\nR. Et ad portas paradísi coronávit eum."
en: "R. The Lord loved him and beautified him; He clothed him with a robe of glory,\n* And crowned him at the gates of Paradise.\nV. The Lord hath put on him the breast-plate of faith, and hath adorned him.\nR. And crowned him at the gates of Paradise."
- la: "R. Iste homo perfécit ómnia quæ locútus est ei Deus, et dixit ad eum: Ingrédere in réquiem meam:\n* Quia te vidi justum coram me ex ómnibus géntibus.\nV. Iste est, qui contémpsit vitam mundi, et pervénit ad cæléstia regna.\nR. Quia te vidi justum coram me ex ómnibus géntibus."
en: "R. This is he which did according unto all that God commanded him; and God said unto him: Enter thou into My rest,\n* For thee have I seen righteous before Me among all people.\nV. This is he which loved not his life in this world, and is come unto an everlasting kingdom.\nR. For thee have I seen righteous before Me among all people."
- la: "R. Iste est qui ante Deum magnas virtútes operátus est, et de omni corde suo laudávit Dóminum:\n* Ipse intercédat pro peccátis ómnium populórum.\nV. Ecce homo sine queréla, verus Dei cultor, ábstinens se ab omni ópere malo, et pérmanens in innocéntia sua.\nR. Ipse intercédat pro peccátis ómnium populórum."
en: "R. This is he which wrought great wonders before God, and praised the Lord with all his heart.\n* May he pray for all people, that their sins may be forgiven unto them.\nV. Behold a man without blame, a worshipper of God in truth, keeping himself clean from every evil work, and abiding still in his innocency.\nR. May he pray for all people, that their sins may be forgiven unto them."
common-of-several-martyrs:
- la: "R. Abstérget Deus omnem lácrimam ab óculis Sanctórum: et jam non erit ámplius neque luctus, neque clamor, sed nec ullus dolor:\n* Quóniam prióra transiérunt.\nV. Non esúrient, neque sítient ámplius, neque cadet super illos sol, neque ullus æstus.\nR. Quóniam prióra transiérunt."
en: "R. God shall wipe away all tears from the eyes of His Saints, and there shall be no more sorrow, there shall be no more death, neither sorrow, nor crying, neither shall there be any more pain;\n* For the former things are passed away.\nV. They shall hunger no more, neither thirst any more, neither shall the sun light on them, nor any heat.\nR. For the former things are passed away."
- la: "R. Viri sancti gloriósum sánguinem fudérunt pro Dómino, amavérunt Christum in vita sua, imitáti sunt eum in morte sua:\n* Et ídeo corónas triumpháles meruérunt.\nV. Unus spíritus, et una fides erat in eis.\nR. Et ídeo corónas triumpháles meruérunt."
en: "R. These men are holy, who have gloriously shed their blood for the Lord's sake, yea, who loved Christ in their lives, and were made like unto Him in their flesh,\n* And therefore they have earned crowns of victory.\nV. One spirit, and one faith was in them.\nR. And therefore they have earned crowns of victory."
- la: "R. Tradidérunt córpora sua propter Deum ad supplícia:\n* Et meruérunt habére corónas perpétuas.\nV. Isti sunt qui venérunt ex magna tribulatióne, et lavérunt stolas suas in sánguine Agni.\nR. Et meruérunt habére corónas perpétuas."
en: "R. They gave their bodies for Gods sake to death\n* And gained the everlasting crown.\nV. These are they which came out of great tribulation, and have washed their robes in the Blood of the Lamb.\nR. And gained the everlasting crown."
- la: "R. Sancti tui, Dómine, mirábile consecúti sunt iter, serviéntes præcéptis tuis, ut inveniréntur illǽsi in aquis válidis:\n* Terra appáruit árida: et in Mari Rubro via sine impediménto.\nV. Quóniam percússit petram, et fluxérunt aquæ, et torréntes inundavérunt.\nR. Terra appáruit árida: et in Mari Rubro via sine impediménto."
en: "R. thy Saints, O Lord, have passed a wonderful way, serving thy commandments, that they might be found without hurt in the midst of the mighty waters.\n* Dry land appeared, and, out of the Red Sea, a way without impediment.\nV. He smote the rock, and the waters gushed out, and the streams overflowed.\nR. Dry land appeared, and, out of the Red Sea, a way without impediment."
- la: "R. Vérbera carníficum non timuérunt Sancti Dei, moriéntes pro Christi nómine:\n* Ut herédes fíerent in domo Dómini.\nV. Tradidérunt córpora sua propter Deum ad supplícia.\nR. Ut herédes fíerent in domo Dómini."
en: "R. The Saints of God shrank not from the stripes of the executioners, but died for Christ's Name's sake\n* That they might be made joint-heirs in the house of the Lord.\nV. They gave their bodies for God's sake to death.\nR. That they might be made joint-heirs in the house of the Lord."
- la: "R. Tamquam aurum in fornáce probávit eléctos Dóminus, et quasi holocáusti hóstiam accépit illos: et in témpore erit respéctus illórum:\n* Quóniam donum et pax est eléctis Dei.\nV. Qui confídunt in illum, intélligent veritátem, et fidéles in dilectióne acquiéscent illi.\nR. Quóniam donum et pax est eléctis Dei."
en: "R. As gold in the furnace hath the Lord tried His chosen ones, and received them as a burnt-offering, and yet a while, and they shall be regarded;\n* For the grace of God, and His peace, are with His chosen.\nV. They that put their trust in Him shall understand the truth and such as be faithful in love shall abide with Him.\nR. For the grace of God, and His peace, are with His chosen."
- la: "R. Propter testaméntum Dómini, et leges patérnas, Sancti Dei perstitérunt in amóre fraternitátis:\n* Quia unus fuit semper spíritus in eis, et una fides.\nV. Ecce quam bonum et quam jucúndum habitáre fratres in unum.\nR. Quia unus fuit semper spíritus in eis, et una fides."
en: "R. Because of the covenant of the Lord, and the laws of their fathers, the Saints of God abode in brotherly love,\n* For one spirit and one faith was ever in them.\nV. Behold how good and how pleasant it is for brethren to dwell together in unity.\nR. For one spirit and one faith was ever in them."
- la: "R. Sancti mei, qui in carne pósiti, certámen habuístis:\n* Mercédem labóris ego reddam vobis.\nV. Veníte benedícti Patris mei, percípite regnum.\nR. Mercédem labóris ego reddam vobis."
en: "R. O ye My Saints, who, being in the flesh, didst have striving\n* I will render unto you a reward of your labours.\nV. Come, ye blessed of My Father, inherit the kingdom\nR. I will render unto you a reward of your labours."
common-of-several-women-martyrs:
- la: "R. Fallax grátia, et vana est pulchritúdo:\n* Múlier timens Dóminum, ipsa laudábitur.\nV. Date ei de fructu mánuum suárum, et laudent eam in portis ópera ejus.\nR. Múlier timens Dóminum, ipsa laudábitur."
en: "R. Favour is deceitful, and beauty is vain\n* A woman that feareth God she shall be praised.\nV. Give her of the fruit of her hands, and let her own works praise her in the gates.\nR. A woman that feareth God she shall be praised."
- la: "R. Os suum apéruit sapiéntiæ, et lex cleméntiæ in lingua ejus: considerávit sémitas domus suæ,\n* Et panem otiósa non comédit.\nV. Gustávit et vidit quia bona est negotiátio ejus: non exstinguétur in nocte lucérna ejus.\nR. Et panem otiósa non comédit."
en: "R. She openeth her mouth with wisdom, and in her tongue is the law of kindness. She looketh well to the ways of her household\n* And eateth not the bread of idleness.\nV. She tasteth and perceiveth that her merchandise is good. Her candle goeth not out by night.\nR. And she eateth not the bread of idleness."
- la: "R. Regnum mundi et omnem ornátum sǽculi contémpsi, propter amórem Dómini mei Jesu Christi:\n* Quem vidi, quem amávi, in quem crédidi, quem diléxi.\nV. Eructávit cor meum verbum bonum: dico ego ópera mea Regi.\nR. Quem vidi, quem amávi, in quem crédidi, quem diléxi."
en: "R. The kingdom of this world and all the beauty of life I have esteemed as nothing, for the excellency of the love of Jesus Christ my Lord\n* Whom, having seen, I loved Whom, having believed, I longed after.\nV. My heart is overflowing with a good matter I speak of my works unto the King.\nR. Whom, having seen, I loved Whom, having believed, I longed after."
common-of-the-bvm:
- la: "R. Sancta et immaculáta virgínitas, quibus te láudibus éfferam, néscio:\n* Quia quem cæli cápere non póterant, tuo grémio contulísti.\nV. Benedícta tu in muliéribus, et benedíctus fructus ventris tui.\nR. Quia quem cæli cápere non póterant, tuo grémio contulisti."
en: "R. O how holy and how spotless is thy virginity; I am too dull to praise thee:\n* For thou hast borne in thy breast Him Whom the heavens cannot contain.\nV. Blessed art thou among women, and blessed is the fruit of thy womb.\nR. For thou hast borne in thy breast Him Whom the heavens cannot contain."
- la: "R. Congratulámini mihi, omnes qui dilígitis Dóminum: quia cum essem párvula, plácui Altíssimo,\n* Et de meis viscéribus génui Deum et hóminem.\nV. Beátam me dicent omnes generatiónes, quia ancíllam húmilem respéxit Deus.\nR. Et de meis viscéribus génui Deum et hóminem."
en: "R. Rejoice with me, all ye that love the Lord, for while I was yet a little one, I pleased the Most High.\n* And I have brought forth from my bowels God and man.\nV. All generations shall call me blessed, since the Lord hath regarded the lowliness of his handmaiden.\nR. And I have brought forth from my bowels God and man."
- la: "R. Beáta es, Virgo María, quæ Dóminum portásti, Creatórem mundi:\n* Genuísti qui te fecit, et in ætérnum pérmanes Virgo.\nV. Ave, María, grátia plena; Dóminus tecum.\nR. Genuísti qui te fecit, et in ætérnum pérmanes Virgo."
en: "R. Blessed art thou, O Virgin Mary, who hast carried the Lord, the Maker of the world.\n* Thou hast borne Him Who created thee, and thou abidest a virgin for ever.\nV. Hail, Mary, full of grace. the Lord is with thee.\nR. Thou hast borne Him Who created thee, and thou abidest a virgin for ever."
- la: "R. Sicut cedrus exaltáta sum in Líbano, et sicut cypréssus in monte Sion: quasi myrrha elécta,\n* Dedi suavitátem odóris.\nV. Et sicut cinnamómum et bálsamum aromatízans.\nR. Dedi suavitátem odóris."
en: "R. I was exalted like a cedar in Lebanon, and as a cypress-tree upon Mount Zion. Like the best myrrh\n* I yielded a pleasant odour.\nV. Like cinnamon and sweet balsam.\nR. I yielded a pleasant odour."
- la: "R. Quæ est ista quæ procéssit sicut sol, et formósa tamquam Jerúsalem?\n* Vidérunt eam fíliæ Sion, et beátam dixérunt, et regínæ laudavérunt eam.\nV. Et sicut dies verni circúmdabant eam flores rosárum et lília convállium.\nR. Vidérunt eam fíliæ Sion, et beátam dixérunt, et regínæ laudavérunt eam."
en: "R. Who is this that cometh up like the sun? This, comely as Jerusalem?\n* The daughters of Zion saw her, and called her blessed: the queens also, and they praised her.\nV. And about her it was as the flower of roses in the spring of the year, and lilies of the valleys.\nR. The daughters of Zion saw her, and called her blessed the queens also, and they praised her."
- la: "R. Ornátam monílibus fíliam Jerúsalem Dóminus concupívit:\n* Et vidéntes eam fíliæ Sion, beatíssimam prædicavérunt, dicéntes: * Unguéntum effúsum nomen tuum.\nV. Astitit regína a dextris tuis in vestítu deauráto, circúmdata varietáte.\nR. Et vidéntes eam fíliæ Sion, beatíssimam prædicavérunt, dicéntes:"
en: "R. When the Lord beheld the daughter of Jerusalem adorned with her jewels, He greatly desired her beauty\n* And when the daughters of Zion saw her, they cried out that she was most blessed, saying thy name is as ointment poured forth.\nV. Upon thy right hand did stand the Queen in a vesture of gold wrought about with diverse colours.\nR. And when the daughters of Zion saw her, they cried out that she was most blessed, saying:"
- la: "R. Felix namque es, sacra Virgo María, et omni laude digníssima:\n* Quia ex te ortus est sol justítiæ, Christus, Deus noster.\nV. Ora pro pópulo, intérveni pro clero, intercéde pro devóto femíneo sexu: séntiant omnes tuum juvámen, quicúmque célebrant tuam sanctam festivitátem.\nR. Quia ex te ortus est sol justítiæ, Christus, Deus noster."
en: "R. O Holy Virgin Mary, happy indeed art thou, and right worthy of all praise\n* For out of thee rose the Sun of righteousness, even Christ our God.\nV. Pray for the people, plead for the clergy, make intercession for all women vowed to God. May all that are keeping this thine holy Feast day feel the might of thine assistance.\nR. For out of thee rose the Sun of righteousness, even Christ our God."
- la: "R. Beátam me dicent omnes generatiónes,\n* Quia fecit mihi Dóminus magna qui potens est, et sanctum nomen ejus.\nV. Et misericórdia ejus a progénie in progénies timéntibus eum.\nR. Quia fecit mihi Dóminus magna qui potens est, et sanctum nomen ejus."
en: "R. All generations shall call me blessed.\n* For He that is mighty, even the Lord, hath done to me great things; and Holy is His Name.\nV. And his mercy is on them that fear Him, from generation to generation.\nR. He that is mighty, even the Lord, hath done to me great things; and Holy is His Name."
@@ -1,7 +1,8 @@
# Live-verified 2026-09-04 — see lauds-hymn-lent.yml's own header.
id: lauds-hymn-lent-doxology-per-annum
text:
la: "Te rerum univérsitas,\nClemens, adóret, Trínitas,\nEt nos novi per véniam,\nNovum canámus cánticum.\nAmen."
en: "May heaven and earth aloud proclaim\nThe Trinity's almighty fame;\nAnd we, restored to grace, rejoice\nIn newness both of heart and voice.\nAmen."
status:
la: draft
en: draft
la: verified
en: verified
+6 -4
View File
@@ -1,8 +1,10 @@
# Sourced from Divinum Officium's Monastic block ("[HymnusM Quad
# Laudes]", Psalterium/Special/Major Special.txt) — full separate
# Monastic text ("Jam Christe sol justítiæ"), not a substitution against
# the Roman "O sol salútis, íntimis". Not live-query-verified (see
# TODO.md).
# the Roman "O sol salútis, íntimis". Live-verified 2026-09-04 (already
# seen live against a Lenten Ember Saturday, 2026-02-28, while checking
# lauds-hymn-saturday.yml's own real content earlier the same session —
# byte-identical).
id: lauds-hymn-lent
text:
la: |
@@ -46,5 +48,5 @@ text:
May we of their indulgence share,
And bless the God that grants our prayer.
status:
la: draft
en: draft
la: verified
en: verified
@@ -0,0 +1,29 @@
# Throughout Paschaltide (Eastertide/Ascensiontide/Pentecost), the whole
# ordinary 5-suffrage set (Cross/BVM/Joseph/Apostles/Peace) collapses into
# this single alleluia-form "Suffragium Paschale" instead — live-verified
# against Divinum Officium (Monastic Tridentinum 1617 and Tridentine 1906,
# byte-identical between the two tracks), Lauds live query, 2026-04-20 (a
# plain Eastertide feria). Distinct antiphon from Vespers' own
# (vespers-suffrage-paschale.yml, "Crucem sanctam súbiit..."); the
# versicle/response and collect are shared between both hours.
id: lauds-suffrage-paschale
text:
la: |
Ant. Crucifíxus surréxit a mórtuis, et redémit nos, allelúja, allelúja.
V. Dícite in natiónibus, allelúja.
R. Quia Dóminus regnávit a ligno, allelúja.
Orémus.
Deus qui pro nobis Fílium tuum Crucis patíbulum subíre voluísti, ut inimíci a nobis expélleres potestátem: concéde nobis fámulis tuis; ut resurrectiónis grátiam consequámur.
Per eúmdem Dóminum nostrum Jesum Christum Fílium tuum, qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum.
R. Amen.
en: |
Ant. He that was crucified is risen from the dead, and hath redeemed us. Alleluia, alleluia.
V. Say among the heathen, alleluia.
R. That the Lord reigneth from the tree, alleluia.
Let us pray.
O God, who didst send thy Son to suffer death for us upon the Cross, that thou mightest deliver us from the power of the enemy: grant unto us thy servants to be made partakers of his Resurrection.
Through the same Jesus Christ, thy Son, Our Lord, Who liveth and reigneth with thee in the unity of the Holy Ghost, God, world without end.
R. Amen.
status:
la: verified
en: verified
@@ -1,6 +1,6 @@
# Sourced from Divinum Officium's Monastic block ("[Quad Vespera_]",
# Psalterium/Special/Major Special.txt). Not live-query-verified (see
# TODO.md) — read directly from source.
# Psalterium/Special/Major Special.txt). Live-verified 2026-09-04 against
# a plain Lenten Wednesday (2026-03-04).
id: vespers-capitulum-lent
text:
la: "Inter vestíbulum et altáre plorábunt sacerdótes, minístri Dómini, et dicent: Parce, Dómine, parce pópulo tuo: et ne des hereditátem tuam in oppróbrium, ut dominéntur eis natiónes."
@@ -9,5 +9,5 @@ citation:
la: "Joel 2:17"
en: "Joel 2:17"
status:
la: draft
en: draft
la: verified
en: verified
@@ -1,7 +1,9 @@
# Live-verified 2026-09-04 against a plain Lenten Wednesday (2026-03-04)
# — same text as matins-hymn-lent.yml's own baked-in closing stanza.
id: vespers-hymn-lent-doxology-per-annum
text:
la: "Præsta, beáta Trínitas,\nConcéde, simplex Únitas;\nUt fructuósa sint tuis\nJejuniórum múnera.\nAmen."
en: "We pray thee, Holy Trinity,\nOne God, unchanging Unity,\nThat we from this our abstinence\nMay reap the fruits of penitence.\nAmen."
status:
la: draft
en: draft
la: verified
en: verified
@@ -2,8 +2,9 @@
# Vespera]", Psalterium/Special/Major Special.txt): two substitutions
# against the base "[Hymnus Quad Vespera]" text — a word-order swap in
# stanza 3 ("Ad nóminis laudem tui" -> "Ad laudem tui nóminis") and a full
# replacement of stanza 4 — applied by hand here. Not live-query-verified
# (see TODO.md). English has no separate Monastic variant in the source.
# replacement of stanza 4 — applied by hand here. Live-verified 2026-09-04
# against a plain Lenten Wednesday (2026-03-04), including the Monastic
# swap. English has no separate Monastic variant in the source.
id: vespers-hymn-lent
text:
la: |
@@ -47,5 +48,5 @@ text:
That fasting inward secretly
The soul may purely dwell with thee.
status:
la: draft
en: draft
la: verified
en: verified
@@ -1,6 +1,6 @@
# Sourced from Divinum Officium's Monastic block ("[Responsory Quad
# Vespera]", Psalterium/Special/Major Special.txt). Not
# live-query-verified (see TODO.md) — read directly from source.
# Vespera]", Psalterium/Special/Major Special.txt). Live-verified
# 2026-09-04 against a plain Lenten Wednesday (2026-03-04).
id: vespers-responsory-lent
text:
la: |
@@ -18,5 +18,5 @@ text:
V. Glory be to the Father, and to the Son, * and to the Holy Ghost.
R. He will overshadow * thee with his shoulders.
status:
la: draft
en: draft
la: verified
en: verified
@@ -0,0 +1,30 @@
# Vespers' own antiphon for the same "Suffragium Paschale" substitution
# described in lauds-suffrage-paschale.yml's own header — shares that
# file's versicle/response and collect, but its own distinct antiphon
# ("Crucem sanctam súbiit..."), live-verified against Divinum Officium
# (Monastic Tridentinum 1617), Vespers live query, 2026-04-20 (a plain
# Eastertide feria). English antiphon translation is this project's own
# (the reference engine's own English-language render leaves this
# particular antiphon untranslated, Latin-only) — status left `draft`
# for the English text specifically pending a better-sourced translation.
id: vespers-suffrage-paschale
text:
la: |
Ant. Crucem sanctam súbiit, qui inférnum confrégit; accínctus est poténtia, surréxit die tértia, allelúja.
V. Dícite in natiónibus, allelúja.
R. Quia Dóminus regnávit a ligno, allelúja.
Orémus.
Deus qui pro nobis Fílium tuum Crucis patíbulum subíre voluísti, ut inimíci a nobis expélleres potestátem: concéde nobis fámulis tuis; ut resurrectiónis grátiam consequámur.
Per eúmdem Dóminum nostrum Jesum Christum Fílium tuum, qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum.
R. Amen.
en: |
Ant. He bore the holy Cross, who broke the gates of hell; he was girded with power, and rose again on the third day, alleluia.
V. Say among the heathen, alleluia.
R. That the Lord reigneth from the tree, alleluia.
Let us pray.
O God, who didst send thy Son to suffer death for us upon the Cross, that thou mightest deliver us from the power of the enemy: grant unto us thy servants to be made partakers of his Resurrection.
Through the same Jesus Christ, thy Son, Our Lord, Who liveth and reigneth with thee in the unity of the Holy Ghost, God, world without end.
R. Amen.
status:
la: verified
en: draft
@@ -2,8 +2,8 @@
# Officium's Monastic block ("[Quad Versum 3]", Psalterium/Special/Major
# Special.txt) — "[Quad Versum 2]" (Lauds' own) is a bare alias to this
# same text, so Lauds and Vespers share it here too (see
# lauds-versicle-lent.yml). Not live-query-verified (see TODO.md) — read
# directly from source.
# lauds-versicle-lent.yml). Live-verified 2026-09-04 against a plain
# Lenten Wednesday (2026-03-04).
id: vespers-versicle-lent
text:
la: |
@@ -13,5 +13,5 @@ text:
V. God hath given His Angels charge over thee.
R. To keep thee in all thy ways.
status:
la: draft
en: draft
la: verified
en: verified
+11 -1
View File
@@ -26,6 +26,7 @@ import {
resolveResponsory,
resolveOfficeBundle,
resolveSuffrages,
isPaschaltide,
} from './resolve-common';
import laudsDefinitionData from '../data/hours/lauds.yml';
import laudsAntiphonsData from '../data/hours/lauds-antiphons.yml';
@@ -366,7 +367,7 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
case 'day-collects':
return getDayCollects(day);
case 'suffrages':
return resolveSuffrages(day, part.omitOnDouble);
return resolveSuffrages(day, part.omitOnDouble, 'lauds');
case 'versicle':
case 'chapter':
case 'responsory':
@@ -377,6 +378,15 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
return [{ kind: 'preces', text: resolveCommon(id), label: getMarianAntiphonLabel(id) }];
}
case 'lauds-preces': {
// Throughout Paschaltide, the whole ferial-Preces litany drops
// entirely rather than being replaced by anything — live-verified
// ("Preces Feriales{omittitur}" against both Monastic Tridentinum
// 1617 and Tridentine 1906, a plain Eastertide feria, 2026-04-20).
// Sunday/feast's own short litany is untouched — that's a separate,
// universal collect-opening dialogue, not this ferial-specific one.
if (isFerialOrVigil(day) && isPaschaltide(day.season)) {
return [];
}
const id = isFerialOrVigil(day) ? 'lauds-preces-feriales' : 'lauds-short-litany';
return [{ kind: 'preces', text: resolveCommon(id) }];
}
+16 -6
View File
@@ -95,6 +95,7 @@ import { getTemporalFeastRecord } from '../calendar/temporal-feasts';
import { getBiblePlanReadings } from '../propers/bible-plan';
import { getNocturnReadings, type NocturnReading } from '../propers/nocturn-readings';
import { getOctaveReading } from '../propers/octave-readings';
import { getResponsoryForCommon } from '../propers/matins-responsories';
import { getGospelIncipitFromCitation } from '../propers/bible-book-incipits';
import { getMatinsSaintOverride, getMatinsCommonOverride, type MatinsPsalmodyScheme } from './matins-psalmody-overrides';
import matinsSundayAntiphonsData from '../data/hours/matins-sunday-antiphons.yml';
@@ -752,12 +753,19 @@ function fallbackHagiographicLabel(id: string): string | undefined {
return name.startsWith('The ') ? `On the ${name.slice(4)}` : `On ${name}`;
}
function nocturnReadingPart(r: NocturnReading, id: string): ResolvedPart {
/** `index` is this reading's position among this same id's own
* nocturn-readings (not the whole day's pool) — the cycling key for
* `getResponsoryForCommon` when `r` has no proper `responsory` of its own,
* same convention as the per-book pool. Common-category fallback only
* applies to a real saint id (`getSaintRecord(id)?.common`) — a temporal or
* octave id has no Commune category to fall back to. */
function nocturnReadingPart(r: NocturnReading, id: string, index: number): ResolvedPart {
const responsoryText = r.responsory ?? getResponsoryForCommon(getSaintRecord(id)?.common, index);
return {
kind: 'lesson',
text: { text: r.text, status: r.status, citation: r.citation },
label: r.source ?? fallbackHagiographicLabel(id),
responsory: r.responsory ? { text: r.responsory, status: { la: 'verified', en: 'verified' } } : undefined,
responsory: responsoryText ? { text: responsoryText, status: { la: 'verified', en: 'verified' } } : undefined,
};
}
@@ -769,14 +777,15 @@ function nocturnReadingPart(r: NocturnReading, id: string): ResolvedPart {
* ResolvedPart can't be split across two nocturns by `distributeIntoNocturns`,
* whereas two adjacent pool entries could be (and, before this, sometimes
* were). */
function gospelReadingPart(r: NocturnReading, homily: NocturnReading | undefined): ResolvedPart {
function gospelReadingPart(r: NocturnReading, homily: NocturnReading | undefined, id: string, index: number): ResolvedPart {
const incipit = getGospelIncipitFromCitation(r.citation);
const responsoryText = r.responsory ?? getResponsoryForCommon(getSaintRecord(id)?.common, index);
return {
kind: 'gospel',
text: { text: r.text, status: r.status, citation: r.citation },
source: r.source,
label: incipit ? { la: incipit.la, en: incipit.en } : undefined,
responsory: r.responsory ? { text: r.responsory, status: { la: 'verified', en: 'verified' } } : undefined,
responsory: responsoryText ? { text: responsoryText, status: { la: 'verified', en: 'verified' } } : undefined,
homily: homily
? { source: homily.source, text: { text: homily.text, status: homily.status, citation: homily.citation } }
: undefined,
@@ -832,6 +841,7 @@ function buildReadingPool(day: LiturgicalDay, temporalId: string, date: string,
const byNocturn = new Map<number, ResolvedPart[]>();
for (const id of ids) {
const readings = getNocturnReadings(id);
let commonPoolIndex = 0;
for (let i = 0; i < readings.length; i++) {
const reading = readings[i]!;
const bucket = byNocturn.get(reading.nocturn) ?? [];
@@ -845,10 +855,10 @@ function buildReadingPool(day: LiturgicalDay, temporalId: string, date: string,
// apart by distributeIntoNocturns.
const next = readings[i + 1];
const homily = next && !next.isGospel && next.nocturn === reading.nocturn ? next : undefined;
bucket.push(gospelReadingPart(reading, homily));
bucket.push(gospelReadingPart(reading, homily, id, commonPoolIndex++));
if (homily) i++;
} else {
bucket.push(nocturnReadingPart(reading, id));
bucket.push(nocturnReadingPart(reading, id, commonPoolIndex++));
}
byNocturn.set(reading.nocturn, bucket);
}
+26 -1
View File
@@ -306,6 +306,15 @@ export function getMinorHourOverrideId(day: LiturgicalDay): string | undefined {
*/
const PASCHALTIDE_SEASONS = new Set(['eastertide', 'ascensiontide', 'pentecost']);
/** Whether `season` falls within the same broad Paschaltide window
* `PASCHALTIDE_SEASONS` already governs elsewhere in this file (Marian
* antiphon, Common-category text, hymn doxology) — exported so
* hours/lauds.ts's and hours/vespers.ts's own ferial-Preces omission can
* share the identical boundary rather than redeclaring it. */
export function isPaschaltide(season: string): boolean {
return PASCHALTIDE_SEASONS.has(season);
}
/**
* Which seasonal office-content suffix (if any) a day's season maps to —
* shared by Lauds' and Vespers' own resolveOffice, both of which fall
@@ -789,7 +798,11 @@ const SUFFRAGE_LABELS: Record<string, string> = {
* the caveat on what real practice also suppresses them for that isn't
* modeled.
*/
export function resolveSuffrages(day: LiturgicalDay, omitOnDouble: boolean | undefined): ResolvedPart[] {
export function resolveSuffrages(
day: LiturgicalDay,
omitOnDouble: boolean | undefined,
hourId: 'lauds' | 'vespers' = 'lauds',
): ResolvedPart[] {
// isDoubleOrHigher only ever looks at a sanctoral rank — Christ the
// King is modeled as a named temporal winner (see
// ALWAYS_OVERRIDE_TEMPORAL_IDS above) with no FeastClass to check at
@@ -812,6 +825,18 @@ export function resolveSuffrages(day: LiturgicalDay, omitOnDouble: boolean | und
if (omitOnDouble && (isDoubleOrHigher(day.winner) || isChristTheKing || isSeasonallyExcluded || isWithinAnOctave)) {
return [];
}
// Throughout the rest of Paschaltide, the whole ordinary 5-suffrage set
// below collapses into a single alleluia-form "Suffragium Paschale" —
// live-verified against both Monastic Tridentinum 1617 and Tridentine
// 1906 directly (a plain Eastertide feria, 2026-04-20), byte-identical
// between the two tracks. Checked after the omit-entirely gate above
// (an active octave/Double+/Advent-Christmastide-Passiontide already
// drops suffrages regardless of season, unaffected by this) but before
// the ordinary per-suffrage filtering below, since this replaces that
// filtering outright rather than adjusting it.
if (isPaschaltide(day.season)) {
return [{ kind: 'preces', text: resolveCommon(`${hourId}-suffrage-paschale`) }];
}
// "Of the Holy Cross" is the real *ferial*-office suffrage, sourced
// from Tridentine 1906/1910 (a different track than the other four,
// which come from Monastic 1617 -- that track has no Cross suffrage
+8 -1
View File
@@ -26,6 +26,7 @@ import {
resolveResponsory,
resolveOfficeBundle,
resolveSuffrages,
isPaschaltide,
} from './resolve-common';
import vespersDefinitionData from '../data/hours/vespers.yml';
import vespersAntiphonsData from '../data/hours/vespers-antiphons.yml';
@@ -275,13 +276,19 @@ function resolvePart(part: HourPart, day: LiturgicalDay, weekday: Weekday): Reso
];
}
case 'vespers-preces': {
// Throughout Paschaltide, the whole ferial-Preces litany drops
// entirely rather than being replaced by anything — see lauds.ts's
// identical 'lauds-preces' case for the live-verification detail.
if (isFerialOrVigil(day) && isPaschaltide(day.season)) {
return [];
}
const id = isFerialOrVigil(day) ? 'vespers-preces-feriales' : 'lauds-short-litany';
return [{ kind: 'preces', text: resolveCommon(id) }];
}
case 'day-collects':
return getDayCollects(day);
case 'suffrages':
return resolveSuffrages(day, part.omitOnDouble);
return resolveSuffrages(day, part.omitOnDouble, 'vespers');
case 'preces':
return [{ kind: 'preces', text: resolveCommon(part.textRef.id), label: part.label }];
case 'versicle':
+52 -4
View File
@@ -22,6 +22,9 @@ import { resolvePassages, type ScriptureCitation } from './octave-readings';
import { getResponsoryForBook } from './matins-responsories';
import { getBookIncipit } from './bible-book-incipits';
import { canonicalBook } from '../scripture';
import { adventStart } from '../calendar/temporal';
import { addDays, daysBetween } from '../calendar/date-math';
import type { Weekday } from '../calendar/types';
const GOSPEL_BOOKS = new Set(['matt', 'mark', 'luke', 'john']);
@@ -154,10 +157,54 @@ for (const mod of Object.values(modules)) {
}
}
const WEEKDAYS: Weekday[] = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
/** Advent's own reading plan (`advent-1-sunday` through `advent-4-saturday`,
* 28 rows, one per day of a full 4-week Advent) is longer than Advent
* itself ever actually runs: Advent's last real day is Dec 23 (Dec 24 is
* the Vigil of Christmas's own temporal id, calendar/temporal-id.ts) but
* Advent 1 Sunday falls anywhere from Nov 27 to Dec 3 (the Sunday nearest
* Nov 30) — even in the longest possible Advent (Advent 1 Sunday = Nov 27,
* 27 real days before Dec 24) the 28th planned reading never lands on its
* own natural date, and in the shortest (Advent 1 Sunday = Dec 3, 21 real
* days) the entire last week's worth (7 readings) never does. Rather than
* silently drop that content, whatever didn't land on its own natural date
* carries forward one reading per day starting Christmas Day itself,
* pooled alongside whatever Christmastide's own calendar-dated rows
* already have for that day (never replacing them) — same "every
* contributing source pools, none override" design as everywhere else in
* this file and in hours/matins.ts's own reading-pool assembly. User
* direction, 2026-09-05: "for advent only, we need to show all of those
* chapters," accepting the spillover into Christmastide as the trade-off.
*
* Real day-by-day for `date`'s own year: the pool has no calendar-year
* awareness anywhere else (temporal ids are already year-independent), so
* this is the one place in this file that computes real dates. */
function adventCarryoverReadings(date: string): BiblePlanReading[] {
const year = Number(date.slice(0, 4));
const christmasDay = `${year}-12-25`;
const daysAfterChristmas = daysBetween(christmasDay, date);
if (daysAfterChristmas < 0) return [];
const vigilOfChristmas = `${year}-12-24`;
const start = adventStart(year);
const skippedKeys: string[] = [];
for (let i = 0; i < 28; i++) {
if (addDays(start, i) >= vigilOfChristmas) {
const week = Math.floor(i / 7) + 1;
skippedKeys.push(`advent-${week}-${WEEKDAYS[i % 7]}`);
}
}
const key = skippedKeys[daysAfterChristmas];
return key ? (readingsByTemporalKey.get(key) ?? []) : [];
}
/** Every reading this plan contributes to Matins' pooled reading list for
* `date` — both the (temporalId, weekday) row and the fixed-calendar-date
* row (if any), pooled together rather than one overriding the other, since
* both can genuinely apply to the same date (see this file's header).
* `date` — the (temporalId, weekday) row, the fixed-calendar-date row (if
* any), and (Christmas Day onward) any Advent reading bumped past its own
* natural date by a short Advent that year (see `adventCarryoverReadings`)
* — all pooled together rather than one overriding another, since more
* than one can genuinely apply to the same date (see this file's header).
* Empty array, not undefined, when nothing's authored for this day yet —
* every caller already treats "no readings" as a valid, renderable state
* (see hours/matins.ts), so there's no separate "missing entirely" signal
@@ -165,5 +212,6 @@ for (const mod of Object.values(modules)) {
export function getBiblePlanReadings(temporalId: string, weekday: string, date: string): BiblePlanReading[] {
const byTemporal = readingsByTemporalKey.get(`${temporalId}-${weekday}`) ?? [];
const byCalendarDate = readingsByCalendarDate.get(date.slice(5)) ?? [];
return [...byTemporal, ...byCalendarDate];
const carryover = adventCarryoverReadings(date);
return [...byTemporal, ...byCalendarDate, ...carryover];
}
+61 -2
View File
@@ -2,6 +2,11 @@
// data/hours/matins-responsories-by-book.yml's own header for why matching
// is book-level, not citation-level, and why this is a seeded subset, not
// a full pool.
//
// This file also holds the sibling per-Common-category pool (see
// data/hours/matins-responsories-by-common.yml's own header) — used to
// fill in a real responsory for a saint's own Nocturn 2/3 patristic
// reading when that reading has no proper `responsory` of its own.
import type { LanguageCode, TranslationStatus } from '../psalter/types';
interface BilingualText {
@@ -37,9 +42,28 @@ for (const mod of Object.values(modules)) {
}
}
/** Builds the full "R. ...\n* ...\nV. ...\nR. ..." block — same R./V./repeat
* convention as octave-readings.ts's own `responsory` field and every
* nocturn-readings/*.yml file's inline `responsory` — from the pool's
* plain `{r, v}` text (no "R."/"V." labels, `r` already carries a `*`
* marking where the repeat begins, per the extraction convention
* documented in the data file's own header). Previously joined these with
* a bare newline and no R./V. labels at all — a real, visible
* inconsistency (caught 2026-09-04): every other responsory source in
* this app labels its lines. */
function joinOne(r: string | undefined, v: string | undefined): string | undefined {
if (!r) return undefined;
const starIndex = r.indexOf('*');
const repeat = starIndex >= 0 ? r.slice(starIndex + 1).trim() : r;
const lines = [`R. ${r}`];
if (v) lines.push(`V. ${v}`);
lines.push(`R. ${repeat}`);
return lines.join('\n');
}
function joinResponsory(record: ResponsoryRecord): MatinsResponsory {
const la = record.r.la && record.v.la ? `${record.r.la}\n${record.v.la}` : record.r.la;
const en = record.r.en && record.v.en ? `${record.r.en}\n${record.v.en}` : record.r.en;
const la = joinOne(record.r.la, record.v.la);
const en = joinOne(record.r.en, record.v.en);
return {
text: { la, en },
status: { la: la ? 'verified' : 'missing', en: en ? 'verified' : 'missing' },
@@ -56,3 +80,38 @@ export function getResponsoryForBook(book: string, index: number): MatinsRespons
if (!pool || pool.length === 0) return undefined;
return joinResponsory(pool[index % pool.length]!);
}
interface FullTextResponsory {
la: string;
en: string;
}
const commonModules = import.meta.glob<{ default: Record<string, FullTextResponsory[]> }>(
'../data/hours/matins-responsories-by-common.yml',
{ eager: true },
);
const poolByCommon = new Map<string, FullTextResponsory[]>();
for (const mod of Object.values(commonModules)) {
for (const [commonId, entries] of Object.entries(mod.default)) {
poolByCommon.set(commonId, entries);
}
}
/** Same cycling convention as getResponsoryForBook, but the pooled text is
* already the full "R. ...\n* ...\nV. ...\nR. ..." block (matching the
* inline `responsory` convention every nocturn-readings/*.yml file uses),
* ready to drop straight into a reading's `responsory` field — not the
* split {r, v} shape the book pool uses. Undefined when the saint has no
* `common` category, or that category isn't seeded (e.g. angel/evangelist/
* vigil — see the data file's own header for why those are out of scope). */
export function getResponsoryForCommon(
commonId: string | undefined,
index: number,
): Partial<Record<LanguageCode, string>> | undefined {
if (!commonId) return undefined;
const pool = poolByCommon.get(commonId);
if (!pool || pool.length === 0) return undefined;
const entry = pool[index % pool.length]!;
return { la: entry.la, en: entry.en };
}
+37
View File
@@ -38,3 +38,40 @@ describe('getBiblePlanReadings label uses the same book-alias normalization as v
expect(readings[0]?.label?.la).toBe('Léctio libri Judith');
});
});
// The Advent reading plan has 28 rows (advent-1-sunday through
// advent-4-saturday, a full 4-week Advent), but real Advent is never that
// long -- its last real day is always Dec 23 (Dec 24 is the Vigil of
// Christmas's own temporal id), while Advent 1 Sunday itself lands anywhere
// from Nov 27 to Dec 3. Even the longest possible Advent (Nov 27) is 27
// real days, one short of the full plan; the shortest (Dec 3) is 21, a
// whole week short. Whatever doesn't land on its own natural date carries
// forward one reading per day starting Christmas Day, pooled alongside
// whatever Christmastide's own calendar-dated rows already have. User
// direction, 2026-09-05: "for advent only, we need to show all of those
// chapters," accepting the spillover into Christmastide as the trade-off.
describe('Advent reading-plan carryover into Christmastide', () => {
it('a short Advent (2028: Advent 1 Sunday = Dec 3, latest possible) carries all 7 of week 4\'s readings forward, one per day', () => {
const isaiahCitations = [25, 26, 27, 28, 29, 30, 31].map(
(day) => getBiblePlanReadings('christmas-octave-sunday', 'monday', `2028-12-${day}`).find((r) => r.citation.la?.startsWith('Isa'))?.citation.la,
);
expect(isaiahCitations).toEqual(['Isa 46-48', 'Isa 49-51', 'Isa 52-54', 'Isa 55-57', 'Isa 58-60', 'Isa 61-63', 'Isa 64-66']);
});
it('a long Advent (2027: Advent 1 Sunday = Nov 28, near-earliest) carries only the last 2 readings forward', () => {
const isaiahCitations = [25, 26, 27, 28].map(
(day) => getBiblePlanReadings('christmas-octave-sunday', 'monday', `2027-12-${day}`).find((r) => r.citation.la?.startsWith('Isa'))?.citation.la,
);
expect(isaiahCitations).toEqual(['Isa 61-63', 'Isa 64-66', undefined, undefined]);
});
it('carried-over readings pool alongside Christmastide\'s own calendar-dated rows, never replacing them', () => {
const readings = getBiblePlanReadings('christmas-octave-sunday', 'friday', '2028-12-25');
expect(readings.map((r) => r.citation.la)).toEqual(['Cant 1', 'Isa 46-48']);
});
it('does not carry anything over before Christmas Day', () => {
const readings = getBiblePlanReadings('vigil-of-christmas', 'thursday', '2028-12-24');
expect(readings.find((r) => r.citation.la?.startsWith('Isa'))).toBeUndefined();
});
});