Author proper Matins psalmody for the 5 angel feasts

Common-of-an-Angel doesn't exist in the reference engine -- every angel
feast has genuine proper Matins content of its own, so these are
saint-level overrides, not a Common category. Transcribed directly from
the reference engine's source files (Sancti/05-08 etc.) after a live-CGI
attempt mis-extracted a mid-nocturn antiphon change.

St. Michael needed his own file: the psalmody-override lookup keys off
the day's resolved winner id, not the `propers` field, and his own
Matins antiphons/lessons turn out to genuinely differ from Apparition's
despite his calendar file's "word-for-word identical" claim (true only
of the collect).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
This commit is contained in:
2026-08-27 22:23:24 -04:00
parent 797ebceafd
commit fd5ab0781e
5 changed files with 433 additions and 0 deletions
@@ -0,0 +1,78 @@
# Transcribed directly from the reference engine's own source files
# (Latin: web/www/horas/Latin/Sancti/05-08.txt, English:
# web/www/horas/English/Sancti/05-08.txt), Monastic Tridentinum 1617
# rubric (the untagged/default [Rank] block, "Duplex majus;;4;;" with no
# "vide C" — fully proper content, not a Common). This is the first of
# the 5 angel-feast proper-content files closing the "Common-of-an-Angel"
# gap flagged in TODO.md's 2026-08-27 pass: that pass found there is no
# Common-of-an-Angel in the reference engine at all (zero votive-index
# entry, zero CommuneM cross-references) — every angel feast genuinely
# has its own proper Matins content instead. This file supplies that
# proper content directly, keyed by this saint's own id, not a category.
#
# Read from source, not a live HTML query, after a live `command=
# prayMatutinum&date=5-8-2029` query's own crude text-extraction proved
# unreliable (missed a genuine mid-Nocturn-1 antiphon change at Psalm 18,
# and briefly mis-attributed Nocturn 3's own versicle to Nocturn 2 due to
# how the rendered page interleaves them) — the raw [Ant Matutinum] field
# below resolved both ambiguities unambiguously.
#
# Real structural finding, not a transcription gap: this feast's Nocturn
# 3 has NO antiphon or canticle of its own in the source file at all —
# `[Nocturn 3 Ant]`/an Old-Testament canticle set are simply absent;
# Nocturn 3 goes straight from the "Nocturnus III" heading to the Pater
# Noster, Lessons 7-9, and the Gospel pericope. Only `[Nocturn 3 Versum]`
# exists (`@:Versum 3`), which happens to be word-for-word the same text
# already authored as this feast's own Vespers versicle
# (vespers-versicle-apparition-of-st-michael.yml) — the reference engine
# genuinely reuses one versicle block across multiple hours of the same
# day, not a copy-paste error on vu's part. `nocturn3` below therefore
# carries only its `versicle`, with no `antiphon`/`canticles` fields —
# the schema (`MatinsPsalmodyNocturn`) already allows this since only
# `versicle` is required.
#
# May 8 always falls within Paschaltide (Easter's earliest possible date,
# March 22, still leaves Pentecost at May 10 at the very earliest) — so
# every "allelúja" below is a permanent, every-year feature of this
# feast's Matins text, not a one-year artifact of the particular date
# queried; already established the same way in this feast's own Lauds/
# Vespers versicle files.
id: apparition-of-st-michael
nocturn1:
groups:
- psalms: [8, 10, 14]
antiphon:
la: "Concússum est mare, * et contrémuit terra, ubi Archángelus Míchaël descendébat de cælo, allelúja."
en: "The sea was moved and the earth quaked, when the Archangel Michael descended from heaven. Alleluia."
- psalms: [18, 23, 33]
antiphon:
la: "Míchaël Archángele, * veni in adjutórium pópulo Dei, allelúja."
en: "Archangel Michael, come to help God's people. Alleluia."
versicle:
v:
la: "Stetit Angelus juxta aram templi, allelúja."
en: "An Angel stood at the Altar of the Temple. Alleluia."
r:
la: "Habens thuríbulum áureum in manu sua, allelúja."
en: "Having a golden censer in his hand. Alleluia."
nocturn2:
groups:
- psalms: [95, 96, 102]
antiphon:
la: "Angelus Archángelus Míchaël, * Dei núntius pro animábus justis, allelúja, allelúja."
en: "The Angel Michael the Archangel, he is the messenger whom God sendeth to all the souls of the righteous. Alleluia, Alleluia."
versicle:
v:
la: "Ascéndit fumus arómatum in conspéctu Dómini, allelúja."
en: "The smoke of the incense ascended up before the Lord. Alleluia."
r:
la: "De manu Angeli, allelúja."
en: "Out of the Angel's hand. Alleluia."
nocturn3:
versicle:
v:
la: "In conspéctu Angelórum psallam tibi, Deus meus, allelúja."
en: "Before the Angels will I sing praise unto thee, O my God. Alleluia."
r:
la: "Adorábo ad templum sanctum tuum, et confitébor nómini tuo, allelúja."
en: "I will worship toward thy holy Temple, and praise thy Name. Alleluia."
@@ -0,0 +1,80 @@
# Transcribed directly from the reference engine's own source files
# (Latin: web/www/horas/Latin/Sancti/10-02.txt, English:
# web/www/horas/English/Sancti/10-02.txt), Monastic Tridentinum 1617
# rubric. Companion file to ../apparition-of-st-michael.yml — see that
# file's own header for the "Common-of-an-Angel doesn't exist" context.
#
# This saint's own calendar file (`src/data/calendar/saints/guardian-
# angels.yml`) already correctly flagged the key finding: the untagged
# [Rank] block reads "Duplex majus;;4;;vide C4" (Common of a Confessor
# Bishop), but that's a structural/lesson-count tag only — the feast's
# own [Ant Matutinum] block supplies 9 fully distinct proper antiphons
# (one per psalm, no repeats), confirming genuinely proper content, not
# Common-of-a-Confessor-Bishop's own scheme. Nocturn 1/2/3's own Versum
# fields all read `@Sancti/05-08` (a bare whole-section copy, no field
# name given) -- these fall back unchanged to Apparition of St. Michael's
# own Nocturn 1/2/3 versicles (see apparition-of-st-michael.yml), minus
# her Paschaltide alleluias, since Oct 2 is never in Paschaltide.
id: guardian-angels
nocturn1:
groups:
- psalms: [8]
antiphon:
la: "Dóminus, Deus * cæli et terræ, ipse mittet Angelum suum coram te."
en: "The Lord God of heaven and earth shall send His Angel before thee."
- psalms: [10]
antiphon:
la: "Deus meus * misit Angelum suum et conclúsit ora leónum, et non nocuérunt mihi."
en: "My God hath sent His Angel, and hath shut the lions' mouths, that they have not hurt me."
- psalms: [14]
antiphon:
la: "Bene ambulétis, * et Dóminus sit in itínere vestro, et Angelus ejus comitétur vobíscum."
en: "Go prosperously, and the Lord be with you in your journey, and His Angel keep you company."
- psalms: [18]
antiphon:
la: "Cum essem vobíscum, * per voluntátem Dei eram: ipsum benedícite et cantáte ei."
en: "When I came unto you, by the will of God I came; bless Him, and give Him thanks."
- psalms: [23]
antiphon:
la: "Tollens se Angelus Dómini, * qui præcedébat castra Israël, ábiit post eos."
en: "The Angel of the Lord, which went before the camp of Israel, removed, and went behind them."
- psalms: [33]
antiphon:
la: "Immíttet Angelus Dómini * in circúitu timéntium eum, et erípiet eos."
en: "The Angel of the Lord encampeth round about them that fear Him, and delivereth them."
versicle:
v:
la: "Stetit Angelus juxta aram templi."
en: "An Angel stood at the Altar of the Temple."
r:
la: "Habens thuríbulum áureum in manu sua."
en: "Having a golden censer in his hand."
nocturn2:
groups:
- psalms: [95]
antiphon:
la: "Misit Dóminus * Angelum suum, qui percússit omnem virum robústum et bellatórem, et príncipem exércitus regis Assyriórum."
en: "The Lord sent His Angel, which cut off all the mighty of valour, and the leaders and captains in the camp of the King of Assyria."
- psalms: [96]
antiphon:
la: "Adoráte Dóminum * omnes Angeli ejus: audívit, et lætáta est Sion."
en: "Worship the Lord, all ye His Angels! Zion heard, and was glad."
- psalms: [102]
antiphon:
la: "Benedícite Dómino, * omnes Angeli ejus, poténtes virtúte, faciéntes verbum illíus, ad audiéndam vocem sermónum ejus."
en: "Bless the Lord, all ye His Angels, that excel in strength, that do His commandments, to hearken unto the voice of His word."
versicle:
v:
la: "Ascéndit fumus arómatum in conspéctu Dómini."
en: "The smoke of the incense ascended up before the Lord."
r:
la: "De manu Angeli."
en: "Out of the Angel's hand."
nocturn3:
versicle:
v:
la: "In conspéctu Angelórum psallam tibi, Deus meus."
en: "Before the Angels will I sing praise unto thee, O my God."
r:
la: "Adorábo ad templum sanctum tuum, et confitébor nómini tuo."
en: "I will worship toward thy holy Temple, and praise thy Name."
@@ -0,0 +1,95 @@
# Transcribed directly from the reference engine's own source files
# (Latin: web/www/horas/Latin/Sancti/03-24.txt, English:
# web/www/horas/English/Sancti/03-24.txt), Monastic Tridentinum 1617
# rubric. Companion file to ../apparition-of-st-michael.yml — see that
# file's own header for the "Common-of-an-Angel doesn't exist" context.
# `03-24.txt`'s own [Rank]/[Rule] read "ex Sancti/05-08" as a whole-file
# default, but its own [Ant Matutinum] block overrides with 9 fully
# distinct proper antiphons narrating the Gabriel episodes (Daniel,
# Zachary, the Annunciation) -- genuinely proper, matching this saint's
# own calendar-file comment ("Real, unique collect/antiphon/Nocturn 2-3
# content"). Nocturn 1/2/3 Versum are NOT overridden, so they fall back
# to Apparition of St. Michael's own (see apparition-of-st-michael.yml),
# without her Paschaltide alleluias -- March 24 falls within Paschaltide
# only in the vanishingly rare years Easter itself lands on March 22-23
# (its earliest possible date), so treated as permanently non-Paschal
# here, matching the plain (non-alleluia) Versum 1/Nocturn-2-Versum text.
#
# Sourced directly from these files rather than a live CGI query, since
# an existing sibling file (`data/propers/common/lauds-capitulum-st-
# gabriel-archangel.yml`) turns out to already carry Apparition's own
# capitulum text ("Significávit Deus...") under Gabriel's id by mistake
# -- his own real capitulum is "Ecce vir Gábriel, quem víderam in
# visióne..." (Dan 9:21-22, see [Capitulum Laudes] in 03-24.txt above).
# Flagged here as a pre-existing data bug found in passing, not fixed in
# this pass (out of scope -- this pass only covers Matins psalmody).
#
# The English source file's parenthetical "(Alleluia.)" tags scattered
# inconsistently across a few of these antiphons (e.g. psalms 8, 14, 18,
# 33, 95) have no Latin counterpart anywhere in the Latin source and
# don't correlate with any liturgical season -- treated as a translation-
# file artifact and dropped here, keeping the English antiphons in step
# with the (alleluia-free) Latin.
id: st-gabriel-archangel
nocturn1:
groups:
- psalms: [8]
antiphon:
la: "Dixit Angelus Gábriel * ad Daniélem: Intéllige, fílii hóminis, quóniam in témpore finis implébitur vísio."
en: "The Angel Gabriel said unto Daniel: Understand, O son of man; for at the time of the end shall the vision be fulfilled."
- psalms: [10]
antiphon:
la: "Ecce vir Gábriel * quem víderam in visióne cito volans tétigit me in témpore sacrifícii vespertíni et dócuit me."
en: "Behold the man Gabriel, whom I had seen in the vision, being caused to fly swiftly, touched me about the time of the evening oblation; and he informed me."
- psalms: [14]
antiphon:
la: "Cumque Gábriel * loquerétur ad me collápsus sum pronus in terram et tétigit me, et státuit me in gradu meo."
en: "When Gabriel was about speaking unto me, I fell upon my face toward the ground; but he touched me, and set me upright."
- psalms: [18]
antiphon:
la: "Gábriel Angelus * appáruit Zacharíæ, dicens: Uxor tua Elísabeth páriet tibi fílium, et vocábitur nomen ejus Joánnem."
en: "The Angel Gabriel appeared unto Zacharias, and said unto him: Thy wife Elizabeth shall bear thee a son, and thou shalt call his name John."
- psalms: [23]
antiphon:
la: "Et dixit Zacharías * ad Angelum: Unde hoc sciam? ego enim sum senex, et uxor mea procéssit in diébus suis."
en: "And Zacharias said unto the Angel: Whereby shall know this? for I am an old man, and my wife well stricken in years."
- psalms: [33]
antiphon:
la: "Respóndens autem Angelus * dixit ei: Ego sum Gábriel, qui asto ante Deum: et missus sum loqui ad te, et hæc tibi evangelizáre."
en: "And the Angel, answering, said unto him: I am Gabriel, that stand in the presence of God, and am sent to speak unto thee, and to show thee these glad tidings."
versicle:
v:
la: "Stetit Angelus juxta aram templi."
en: "An Angel stood at the Altar of the Temple."
r:
la: "Habens thuríbulum áureum in manu sua."
en: "Having a golden censer in his hand."
nocturn2:
groups:
- psalms: [95]
antiphon:
la: "Missus est * Gábriel Angelus ad Maríam Vírginem desponsátam Joseph."
en: "The Angel Gabriel was sent to a virgin espoused to a man whose name was Joseph, and the virgin's name was Mary."
- psalms: [96]
antiphon:
la: "Gábriel Angelus * Maríæ dixit: Ecce Elísabeth cognáta tua, et ipsa concépit fílium in senectúte sua."
en: "The Angel Gabriel said unto Mary: Behold, thy cousin Elizabeth, she hath also conceived a son in her old age."
- psalms: [102]
antiphon:
la: "Súscipe Verbum * Virgo María, quod tibi a Dómino per Angelum Gabriélem transmíssum est."
en: "O Virgin Mary, receive the word of the Lord which is sent thee by His Angel Gabriel."
versicle:
v:
la: "Ascéndit fumus arómatum in conspéctu Dómini."
en: "The smoke of the incense ascended up before the Lord."
r:
la: "De manu Angeli."
en: "Out of the Angel's hand."
nocturn3:
versicle:
v:
la: "In conspéctu Angelórum psallam tibi, Deus meus."
en: "Before the Angels will I sing praise unto thee, O my God."
r:
la: "Adorábo ad templum sanctum tuum, et confitébor nómini tuo."
en: "I will worship toward thy holy Temple, and praise thy Name."
@@ -0,0 +1,98 @@
# Transcribed directly from the reference engine's own source files
# (Latin: web/www/horas/Latin/Sancti/09-29.txt, English:
# web/www/horas/English/Sancti/09-29.txt), Monastic Tridentinum 1617
# rubric. Companion file to ../apparition-of-st-michael.yml — see that
# file's own header for the "Common-of-an-Angel doesn't exist" context.
#
# **Correction to this saint's own calendar-file comment** (`src/data/
# calendar/saints/st-michael.yml`, which says the two feasts' content is
# "word-for-word identical" and that only the *collect* needed checking):
# that claim holds for the Oratio (confirmed — 09-29.txt's own file has
# no `[Oratio]` block at all, only `[Ant Matutinum]` and `[Lectio4]`
# through `[Lectio9]` overrides, so the collect genuinely does fall back
# to Apparition's via the file's own `ex Sancti/05-08` default), but the
# Matins **psalmody antiphons are NOT shared** — 09-29.txt supplies its
# own full set of 9 distinct proper antiphons (one per psalm, no repeats
# across a group, unlike Apparition's grouped-repeat pattern), and
# Lessons 4-9 are also this feast's own (St. Gregory's homily on the nine
# choirs of Angels, not St. Bernard's). Only the Nocturn 1/2/3 **Versum**
# (closing versicle) genuinely falls back unchanged to Apparition's own
# (09-29.txt has no `[Nocturn N Versum]` override of its own) — reused
# verbatim below, minus Apparition's Paschaltide alleluias, since Sept 29
# is never in Paschaltide (Nocturn 2's third antiphon still keeps its own
# built-in "allelúja, allelúja" — that's fixed text in the antiphon
# itself, shared word-for-word with Apparition's own Nocturn 2 antiphon,
# not a seasonal addition).
#
# Per this app's own established note (`hours/matins.ts`'s
# `getMatinsSaintOverride`/`getMatinsPsalmodyOverride`, keyed off the
# day's own resolved winner id, not the `propers` field), this file is
# required even though `st-michael.yml`'s own comment records that this
# feast's real rank (Duplex I. classis, "In dedicatione S. Michaëlis
# Archangelis") has never won outright against a stronger day in any of
# the 6 years spot-checked live — so this content may currently be
# unreachable through the app's actual calendar resolution, but is
# authored for completeness/correctness rather than left as a silent gap.
id: st-michael
nocturn1:
groups:
- psalms: [8]
antiphon:
la: "Concússum est mare, * et contrémuit terra, ubi Archángelus Míchaël descendébat de cælo."
en: "The sea was moved * and the earth quaked, when the Archangel Michael descended from heaven."
- psalms: [10]
antiphon:
la: "Laudémus Dóminum, * quem laudant Ángeli, quem Chérubim et Séraphim, Sanctus, Sanctus, Sanctus proclámant."
en: "Let us praise the Lord, * Whom the Angels do praise, unto Whom Cherubim and Seraphim do cry, Holy, Holy, Holy."
- psalms: [14]
antiphon:
la: "Ascéndit * fumus arómatum in conspéctu Dómini de manu Ángeli."
en: "The smoke of the incense ascended up * before the Lord, out of the Angel's hand."
- psalms: [18]
antiphon:
la: "Míchaël Archángele, * veni in adjutórium pópulo Dei."
en: "Archangel Michael, * come to help God's people."
- psalms: [23]
antiphon:
la: "Míchaël * præpósitus paradísi, quem honoríficant Angelórum cives."
en: "The Archangel Michael * is the Vice-Roy of Paradise, and the Angels that are the dwellers therein do hold him in worship."
- psalms: [33]
antiphon:
la: "Gloriósus * apparuísti in conspéctu Dómini: proptérea decórem índuit te Dóminus."
en: "Thou wast manifested in thy glory * in the Presence of the Lord. Therefore the Lord hath clothed thee with majesty."
versicle:
v:
la: "Stetit Angelus juxta aram templi."
en: "An Angel stood at the Altar of the Temple."
r:
la: "Habens thuríbulum áureum in manu sua."
en: "Having a golden censer in his hand."
nocturn2:
groups:
- psalms: [95]
antiphon:
la: "Ángelus Archángelus Míchaël, * Dei núntius pro animábus justis, allelúja, allelúja."
en: "The Angel Michael the Archangel, * he is the messenger whom God sendeth to all the souls of the righteous. Alleluia, Alleluia."
- psalms: [96]
antiphon:
la: "Data sunt ei * incénsa multa, ut adoléret ea ante altáre áureum, quod est ante óculos Dómini."
en: "There was given unto him * much incense, that he should offer it upon the golden altar which is before the eyes of the Lord."
- psalms: [102]
antiphon:
la: "Multa magnália * de Michaéle Archángelo, qui, fortis in prǽlio, fecit victóriam."
en: "Great things are spoken * of Michael the Archangel, who waxed valiant in fight, and won the victory."
versicle:
v:
la: "Ascéndit fumus arómatum in conspéctu Dómini."
en: "The smoke of the incense ascended up before the Lord."
r:
la: "De manu Angeli."
en: "Out of the Angel's hand."
nocturn3:
versicle:
v:
la: "In conspéctu Angelórum psallam tibi, Deus meus."
en: "Before the Angels will I sing praise unto thee, O my God."
r:
la: "Adorábo ad templum sanctum tuum, et confitébor nómini tuo."
en: "I will worship toward thy holy Temple, and praise thy Name."
@@ -0,0 +1,82 @@
# Transcribed directly from the reference engine's own source files
# (Latin: web/www/horas/Latin/Sancti/10-24.txt, English:
# web/www/horas/English/Sancti/10-24.txt), Monastic Tridentinum 1617
# rubric. Companion file to ../apparition-of-st-michael.yml — see that
# file's own header for the "Common-of-an-Angel doesn't exist" context.
# `10-24.txt`'s own [Rank]/[Rule] read "ex Sancti/05-08" as a whole-file
# default, but its own [Ant Matutinum] block overrides with 9 fully
# distinct proper antiphons narrating the Book of Tobias episodes —
# genuinely proper, matching this saint's own calendar-file comment
# ("Real, unique collect/antiphon/Nocturn 2-3 content"). Psalm 14's own
# antiphon carries a fixed, non-seasonal "allelúja" in its own text (not
# a Paschaltide addition — Oct 24 is never in Paschaltide).
#
# Versicles are a genuine mix, unlike the other angel feasts: Nocturn 1
# and Nocturn 3 both have their OWN proper versicle in this file (not
# inherited); only Nocturn 2's `[Nocturn 2 Versum]` explicitly redirects
# (`@Sancti/05-08:Nocturn 2 Versum_`) to Apparition of St. Michael's own
# ("Ascéndit fumus arómatum..." — see apparition-of-st-michael.yml),
# without her Paschaltide alleluia.
id: st-raphael-archangel
nocturn1:
groups:
- psalms: [8]
antiphon:
la: "Egréssus Tobías * invénit júvenem præcínctum, et quasi parátum ad ambulándum, et, ignórans quod Angelus esset, salutávit eum."
en: "When Tobias went in, * he found a young man with his loins girded, and as it were ready to set forth, and knowing not that it was an Angel, he saluted him."
- psalms: [10]
antiphon:
la: "Angelus Ráphaël * seípsum occúltans, ait: Ego sum Azarías, magni Ananíæ fílius."
en: "The Angel Raphael * hid himself, and said: I am Azarias, the son of Ananias the Great."
- psalms: [14]
antiphon:
la: "Sanum ducam * fílium tuum in regiónem Medórum, et sanum tibi redúcam, allelúja."
en: "I will bring thy son safely * into the land of the Medes, and bring him back safely unto thee again, alleluia."
- psalms: [18]
antiphon:
la: "Dixit autem Angelus: * Apprehénde bránchiam piscis, et trahe eum extra aquas."
en: "And the Angel said: * Take the fish by the gill, and draw him out of the water."
- psalms: [23]
antiphon:
la: "Obsecro te, * Azaría frater, ut dicas mihi, quod remédium habébunt ista, quæ de pisce serváre jussísti."
en: "Tell me, I pray thee, * brother Azarias, to what use is that which thou hast bidden me keep of the fish."
- psalms: [33]
antiphon:
la: "Lúmina fel sanat, * sed virtus cordis et jécoris diáboli expéllit potestátem."
en: "The gall is a healing to the eyes, * but the virtue of the heart and the liver putteth the power of the devil to flight."
versicle:
v:
la: "Data sunt Angelo incénsa multa."
en: "There was given unto the Angel much incense."
r:
la: "Ut adoléret ea ante altáre áureum, quod est ante óculos Dómini."
en: "That he should offer it upon the golden altar, which is before the presence of the Lord."
nocturn2:
groups:
- psalms: [95]
antiphon:
la: "Est hic Sara * Raguélis fília; quæ tibi conjúgio dábitur, et omnis substántia ejus."
en: "Here is Sara * the daughter of Raguel, who shall be given unto thee to wife, and all her substance with her."
- psalms: [96]
antiphon:
la: "Septem viros hábuit, * quos dæmónium oppréssit; tímeo ne mihi símile contíngat."
en: "She hath had seven husbands, * who were all strangled by an evil spirit; I am afraid lest the like should befall me."
- psalms: [102]
antiphon:
la: "Per tres dies * oratióni cum uxóre tua vacábis, ut in sémine Abrahæ benedictiónem in fíliis consequáris."
en: "Spend three days * in prayer with thy wife, that thou mayest obtain the blessing of sons, in the seed of Abraham."
versicle:
v:
la: "Ascéndit fumus arómatum in conspéctu Dómini."
en: "The smoke of the incense ascended up before the Lord."
r:
la: "De manu Angeli."
en: "Out of the Angel's hand."
nocturn3:
versicle:
v:
la: "Apprehéndit Angelus Ráphaël dæmónium."
en: "The Angel Raphael took hold on the evil spirit."
r:
la: "Et religávit illud in desérto superióris Ægýpti."
en: "And drove him away into the desert of Upper Egypt."