Compare commits

...

3 Commits

Author SHA1 Message Date
will 39f30b42c1 Update TODO.md for third Matins psalmody overrides pass
Deploy / deploy (push) Successful in 1m24s
Records the Virgin/Confessor-Doctor/Confessor-Pope closures via the
source-file-first method, St. Scholastica's proper-content case, and
corrects a prior pass's wrong claim that Ss. Perpetua and Felicity are
"only ever Commemoratio" -- their own source file shows rank Duplex.
Widow and Several Women Martyrs remain blocked for a sharper reason:
CommuneM/C7a.txt and C7b.txt are synthetic patchworks that no real
saint anywhere in the Monastic corpus ever actually invokes, so there's
no live rendering to verify a hand-resolution against.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
2026-08-28 05:20:19 -04:00
will 09cf0c1aa0 Alias Virgin/Confessor-Doctor/Confessor-Pope to existing Matins Common schemes
Read the reference engine's CommuneM/*.txt templates directly (C6a,
C4a, C4b), rather than trial-and-error live queries, to confirm each
whole-file-inherits its parent Common's Matins nocturn psalmody with no
override. Live-verified byte-identical against St. Scholastica (Virgin
-> Virgin-Martyr) and St. Ambrose (Confessor-Doctor -> Confessor-Bishop);
Confessor-Pope -> Confessor-Bishop aliased on the source redirect chain
alone, since none of vu's three Pope-Confessor saints exist on the
Monastic-1617 calendar at all (matching the convention their own files
already use for every other hour).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
2026-08-28 05:20:13 -04:00
will 9e0c1b3eb1 Author St. Scholastica's proper Matins psalmody
Her psalm numbers and all three nocturn versicles match Common-of-a-
Virgin(-Martyr) exactly, but her page is headed "ex Proprio Sanctorum"
and her antiphons genuinely narrate her own rainstorm-miracle episode --
real proper content, not Common text, so she gets her own saint-level
file rather than being left to the Common fallback.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y
2026-08-28 05:20:06 -04:00
4 changed files with 265 additions and 28 deletions
+111 -23
View File
@@ -95,29 +95,31 @@ across every hour and content type in this app.
citations resolve to `missing` text until it lands.
- Matins psalmody overrides for a Duplex+ weekday feast (see "Matins psalmody overrides"
below): mechanism refactored to category-keyed (`categories/*.yml` + `saints/*.yml`), now
eleven categories authored plus six genuine alias redirects across two passes (2026-08-27,
see "Matins psalmody overrides — nine more categories" and "— second pass, four more
categories" below): Martyr, Apostle (+ aliases Common-of-Apostles-plural and
Common-of-an-Evangelist), Confessor (+ aliases Common-of-an-Abbot,
Common-of-a-Confessor-not-Bishop, and Common-of-Several-Confessors), Confessor-Bishop,
Several Martyrs, Virgin-Martyr, the BVM, a Dedication, and a Holy Woman — plus, separately,
all 5 angel feasts now have their own saint-level proper Matins psalmody authored directly
(`saints/apparition-of-st-michael.yml`, `st-michael.yml`, `guardian-angels.yml`,
`st-gabriel-archangel.yml`, `st-raphael-archangel.yml` — see "Angel feasts' proper Matins
psalmody authored" below), closing the "Common-of-an-Angel doesn't exist" gap the second pass
found — there was never a missing category file here, just missing saint-level content, same
shape as `st-andrew.yml`/`st-lawrence.yml`. Still open, each with a specific blocker found
across both category-tier passes (privileged-feria/movable-feast collisions that ruled out
every representative saint tried across multiple years, or a genuine structural mismatch —
see the second pass's section for full detail rather than re-deriving): Virgin (plain, not
Virgin-Martyr — every Duplex+ candidate tried is either absent from the live Monastic 1617
calendar on her own date, or (St. Gertrude) carries real proper content of her own so isn't a
valid Common source), Widow (same "absent from the calendar on this specific track" problem —
confirmed via the reference engine's own votive index that this Common, C7a, has *zero*
SanctiM cross-references anywhere in the Monastic corpus, unlike every other category here),
Confessor-Doctor, Confessor-Pope, Several Women Martyrs (blocked by design, not oversight —
its one candidate, Ss. Perpetua and Felicity, is always in Lent and is only ever a
`Commemoratio`, never a full Duplex+ day, in every source file checked). These five still
**fourteen of nineteen categories authored, plus nine genuine alias redirects**, across three
passes (2026-08-27/28, see "Matins psalmody overrides — nine more categories", "— second
pass, four more categories", and "— third pass, source-file-first method" below): Martyr,
Apostle (+ aliases Apostles-plural and Evangelist), Confessor (+ aliases Abbot,
Confessor-not-Bishop, and Several-Confessors), Confessor-Bishop (+ aliases
Confessor-Doctor and Confessor-Pope, 2026-08-28), Several Martyrs, Virgin-Martyr (+ alias
Virgin, plain, 2026-08-28), the BVM, a Dedication, and a Holy Woman — plus, separately, all 5
angel feasts and St. Scholastica (Virgin, 2026-08-28) have their own saint-level proper
Matins psalmody authored directly (same shape as `st-andrew.yml`/`st-lawrence.yml`), each a
case where the saint's own `[Rank]` cites a Common but their real content is genuinely
proper. **Methodology change in the third pass**: reading the reference engine's own
`CommuneM/*.txt`/`Commune/*.txt` template source files directly (redirect-chain tracing, one
targeted live query per finding to confirm) replaced the earlier trial-and-error of querying
multiple candidate saints/years live — much faster, and it directly disproved two of the
second pass's own claims (Common-of-a-Virgin isn't a distinct scheme after all, and Ss.
Perpetua and Felicity are Duplex, not "only ever Commemoratio" — see the third pass's section
for both corrections). Still open, now down to **Widow, Several Women Martyrs**, both
genuinely blocked by the same underlying cause found via source-reading: the Monastic
corpus's own `C7`/`C7a`/`C7b` template family (Widow, and — through `C7b`'s own whole-file
inherit of `C7` — Several Women Martyrs too) is a synthetic patchwork stitched together from
secular-track fragments with psalm-number substitutions and cross-nocturn borrowing, and is
never actually invoked by any real saint anywhere in the Monastic Sancti/SanctiM corpus
(confirmed by exhaustive grep) — so there is no live rendering to check a hand-resolution
against, and hand-resolving the substitution chain blind risks getting the liturgical text
wrong. A genuinely different, harder problem than "no clean candidate found yet." Both still
fall back to the plain ferial weekday table, redistributed into 3 nocturns.
- The four "Commemoratio Octavæ" Ant+V/R+collect blocks (Christmas Octave's own
Nativity/Stephen/John/Holy-Innocents commemorations, e.g. on Dec 30) are now done —
@@ -3145,6 +3147,92 @@ ids resolve through `getMatinsSaintOverride`, and `resolveOrdo('matins', ...)` a
invitatory (Ps 3, 94) plus all 9 nocturn psalms with zero `missing`-status parts end-to-end — also
the direct evidence correcting the "gated `rubrica 1930`" claim in the pass above.
### Matins psalmody overrides — third pass, source-file-first method (2026-08-28)
Directed explicitly: read the reference engine's own `CommuneM/*.txt` (Monastic) and
`Commune/*.txt` (secular) template source files directly instead of live-CGI trial-and-error
across candidate saints/years — much faster, and it also settled two open questions the second
pass had gotten wrong by relying on live-query attempts alone. Also directed to use non-1617
tracks where the Monastic one is silent (this project already blends tracks by design, see this
file's own header/CLAUDE.md), and to prefer real saint-level propers over forcing a generic
Common read wherever a saint turns out to have proper content of her own — same principle as the
angel-feasts pass above.
**Common-of-a-Virgin (plain, `C6a`) — closed as an alias, corrected from the prior pass's own
"kept separate by design" claim.** Reading `CommuneM/C6a.txt` directly: the whole file is a
top-level inherit of `@CommuneM/C6` (Virgin-Martyr, already authored) with no
`[Ant Matutinum]`/`[Ant Matutinum 3N]` override anywhere — it only overrides
Officium(secular)/Oratio/Hymn/Responsory1/Capitulum/Lectio-Prima, none of which is Matins nocturn
psalmody. Live-confirmed against St. Scholastica (2029-02-10, her own real day, `vide C6a` in her
`[Rank]`): her rendered psalm numbers (8,18,23,44,45,47 / 84,86,95,96,97,98) and all three
nocturn-closing versicles are byte-identical to `common-of-a-virgin-martyr.yml`'s own. Added
`common-of-a-virgin` as an alias there, with the earlier incorrect claim in that file's header
corrected in place.
**St. Scholastica herself needed her own proper file, not the Common** — her rendered page is
explicitly headed "{Antiphonæ et Psalmi ex Proprio Sanctorum}": `SanctiM/02-10.txt` overrides the
inherited Common wholesale with 9 antiphons narrating her own life (the "prodigious rainstorm"
episode with St. Benedict). Psalm numbers and all three versicles still match the Common exactly
(confirming they really are the shared pool); only the antiphon text is hers. Authored
`saints/st-scholastica.yml` (`category: common-of-a-virgin`) from the same live query used to
verify the alias above.
**Common-of-a-Confessor-Doctor (`C4a`) and Common-of-a-Confessor-Pope (`C4b`) — both closed as
aliases of `common-of-a-confessor-bishop`, genuine full redirects (versicles included, unlike the
Confessor/Confessor-Bishop split, which differs only in versicles).**
- `C4a`: `CommuneM/C4a.txt` whole-file inherits `@CommuneM/C4` with no Matins-nocturn-psalmody
override — its own `[Ant 1]`/`[Ant 3]` blocks turned out to be Lauds antiphon tags (confirmed by
cross-reference against `Commune/C4.txt`'s own `[Ant 3]`/`[Ant 3 summi Pontificis]` pair, the
same bare naming convention), not Matins Nocturn 3. Live-verified against St. Ambrose
(2026-12-07, `vide C4a`, real Duplex day, un-outranked): every antiphon, psalm number, and all
three versicles (`Amávit eum Dóminus...` / `Elégit eum Dóminus sacerdótem sibi...` / `Tu es
sacérdos in ætérnum...`) reproduce `common-of-a-confessor-bishop.yml` exactly — independently
corroborated by that file's own pre-existing St. Basil the Great data point (also `vide C4a`,
already recorded as byte-identical, but not previously connected to this category id).
- `C4b`: `CommuneM/C4b.txt` whole-file inherits `@CommuneM/C4` and only overrides Oratio variants,
Lectio9-12 (redirected to St. Gregory the Great's own lessons, irrelevant to this psalmody-only
module), and a Lauds `[Ant 3]` cross-reference — again no Matins-nocturn override. Not
live-verifiable against a real Monastic-calendar saint: all three vu saints carrying this Common
(`st-leo-ii`, `st-pius-v`, `st-pius-x`) have no `SanctiM/*.txt` file at all — confirmed by
attempting a live query against St. Pius X's expected date (2026-09-03 and 2027-09-03 both
render plain ferial, no trace of him), meaning none of the three are observed under the
Monastic-1617 track vu's structure otherwise follows, only under the secular/Divino-Afflatu
tracks vu's calendar also draws from. Aliased on the strength of the source redirect chain
alone, consistent with the convention already established in all three saints' own files, which
already fall back to this same Common for their Benedictus/minor-hours content for the identical
reason.
**Widow (`C7a`) and Several Women Martyrs (`C7b`) — still open, but the real blocker is now
precisely identified, not just "no clean candidate found yet."** `CommuneM/C7a.txt`'s own
`[Officium]` block redirects to `@CommuneM/C7` ("Commune Unius non Virginis Martyris"), not C6a —
genuinely distinct content, not an alias to anything authored. `CommuneM/C7.txt` itself is a
12-lesson Monastic structure stitched together from secular `Commune/C7` fragments with
psalm-number substitutions (`s/95/84/ s/96/86/ s/97/95/`) and a cross-reference into
`CommuneM/C6`'s own antiphon numbering — resolvable in principle by hand, but a full exhaustive
grep across every `SanctiM/*.txt` file in the corpus for a `C7a` cross-reference returns zero
hits: no saint in the Monastic tradition actually invokes this Common, so there is no live
rendering to check a hand-resolution against. `CommuneM/C7b.txt` (Several Women Martyrs) compounds
the same problem — it whole-file inherits `@CommuneM/C7` too (Widow's own unresolved scheme),
layering further secular-track overrides (`Commune/C7b`) and a borrowed Nocturn-1 versicle from
`CommuneM/C6`'s own secular file on top. Both are the same underlying gap, not two independent
ones.
**Correction to the second pass's own claim about Ss. Perpetua and Felicity**: their source file
(`Sancti/03-06.txt`) shows rank **Duplex** (`;;Duplex;;3;;vide C7b`), not "only ever
`Commemoratio`, never a full Duplex+ day" as previously logged here — that claim was simply wrong,
caught by reading the file directly instead of relying on the earlier live-query attempts. Their
own vu file (`ss-perpetua-and-felicity.yml`) already reflects the correct Duplex rank and has for
some time; only this file's own prior claim about them was stale. Doesn't change the fact that
they're still blocked by the `C7`/`C7b` template problem above, though — a clean calendar year for
them was never actually the obstacle.
`npm test` (522 tests) and `tsc --noEmit` both pass. A runtime smoke test confirmed
`resolveOrdo('matins', ...)` for St. Scholastica (2029-02-10) and St. Ambrose (2026-12-07) returns
zero `missing`-status psalm/antiphon/versicle/canticle parts (the only `missing` parts present are
unrelated Matins scripture-reading lessons, the long-deferred bulk-Vulgate-import gap logged
above), and that St. Pius X's Confessor-Pope Matins resolves without error.
### Lauds/Vespers chapter-responsory-hymn-versicle bundle: rank-agnostic Common fallback (2026-08-25)
**Bug fixed**: St. Louis (2026-08-25, `common-of-a-confessor-not-bishop`, Simplex, wins
@@ -18,7 +18,43 @@
# doesn't support "same groups, different versicles" as a partial
# override -- see matins-psalmody-overrides.ts's own doc comment on
# category files being standalone, not diffed/merged.
#
# `aliases` also registers `common-of-a-confessor-doctor` and
# `common-of-a-confessor-pope` here (2026-08-28), both genuine full
# redirects (unlike the Confessor/Confessor-Bishop split above, these
# really are zero-difference, versicles included):
#
# - Confessor-Doctor (`C4a`): `CommuneM/C4a.txt` whole-file inherits
# `@CommuneM/C4` (this file) with no `[AntMatutinumM]`/`[Ant
# Matutinum]`/versicle override anywhere -- its own `[Ant 1]`/`[Ant 3]`
# blocks are Lauds antiphon tags (same bare naming as `Commune/C4.txt`'s
# own `[Ant 3]`/`[Ant 3 summi Pontificis]` pair, confirmed Lauds-only by
# cross-reference), not Matins Nocturn 3. Live-verified against St.
# Ambrose (2026-12-07, `vide C4a`, real Duplex day): every antiphon,
# psalm number, AND all three versicles (`Amávit eum Dóminus...` /
# `Elégit eum Dóminus sacerdótem sibi...` / `Tu es sacérdos in
# ætérnum...`) reproduce this file exactly. Independently corroborated
# by St. Basil the Great's own case above (also `vide C4a`, also
# byte-identical) -- two saints, same finding.
# - Confessor-Pope (`C4b`): `CommuneM/C4b.txt` whole-file inherits
# `@CommuneM/C4` and only overrides Oratio variants, Lectio9-12
# (redirected to `@SanctiM/03-12`, St. Gregory the Great's own
# lessons -- irrelevant to this psalmody-only module), and a Lauds
# `[Ant 3]` cross-reference into secular `Commune/C4:Ant 3 summi
# Pontificis` -- again no Matins-nocturn-psalmody override at all.
# Not live-verifiable against a real Monastic-calendar saint: all
# three vu saints carrying this Common (`st-leo-ii`, `st-pius-v`,
# `st-pius-x`) turn out to have no `SanctiM/*.txt` file at all -- none
# of them are observed under the Monastic-1617 track vu's structure
# otherwise follows, only under the secular/Divino-Afflatu tracks vu's
# calendar also draws from (per this repo's own CLAUDE.md). Aliased on
# the strength of the source redirect chain alone, consistent with the
# convention already established in all three of those saints' own
# files, which already fall back to this same Common for their
# Benedictus/minor-hours content for the identical reason (no
# Pope-specific content exists to fall back to instead).
id: common-of-a-confessor-bishop
aliases: [common-of-a-confessor-doctor, common-of-a-confessor-pope]
nocturn1:
groups:
- psalms: [1]
@@ -21,12 +21,25 @@
# All 6 Nocturn 1/2 antiphons draw on the Song of Songs (bridal imagery);
# Nocturn 3's canticle is Sirach 39 + Isaiah 61-62 (garment-of-salvation/
# bridal-adornment imagery), distinct from Common-of-a-Confessor's Sirach/
# Jeremiah canticle set. Genuinely different from Common-of-a-Virgin
# (`common-of-a-virgin.yml`, votive C6a "Unius Virginis tantum" -- a
# different votive number, not the same scheme) -- not verified
# byte-identical, kept as separate files by design (the reference index
# itself lists them as separate Commons).
# Jeremiah canticle set.
#
# `aliases` also registers `common-of-a-virgin` (2026-08-28), corrected
# from an earlier note here claiming it was a separate, unverified
# scheme under its own votive number (C6a, "Unius Virginis tantum").
# Reading `CommuneM/C6a.txt` directly settles it: the whole file is a
# top-level inherit from `@CommuneM/C6` (this file) with no `[Ant
# Matutinum]`/`[Ant Matutinum 3N]` override of its own anywhere -- C6a
# only overrides Officium(secular)/Oratio/Hymn/Responsory1/Capitulum/
# Lectio-Prima, none of which is Matins nocturn psalmody. Confirmed live
# against St. Scholastica (2029-02-10, `common: common-of-a-virgin`,
# `vide C6a` in her own `[Rank]`): her rendered psalm numbers and all
# three nocturn-closing versicles are byte-identical to this file's own
# (8,18,23,44,45,47 / 84,86,95,96,97,98 / same Nocturn 3 canticle refs
# and versicle) -- only her antiphon *text* differs, and that's because
# she carries real proper antiphons of her own (see
# `saints/st-scholastica.yml`), not because the Common itself differs.
id: common-of-a-virgin-martyr
aliases: [common-of-a-virgin]
nocturn1:
groups:
- psalms: [8]
@@ -0,0 +1,100 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# prayMatutinum query, 2029-02-10 (her own real day, confirmed clean --
# no Sunday collision -- per her own calendar-file comment). Her own
# `[Rank]` says "vide C6a" (Common-of-a-Virgin, plain), but the rendered
# page is explicitly headed "{Antiphonæ et Psalmi ex Proprio Sanctorum}"
# -- proper antiphons, not the generic Common text -- confirmed against
# `SanctiM/02-10.txt`'s own `[Ant Matutinum]`-family blocks, which
# override the Common wholesale with 9 antiphons narrating her own
# life/miracle (the "prodigious rainstorm" episode with St. Benedict).
# Psalm numbers and all three nocturn-closing versicles, though, are
# byte-identical to `common-of-a-virgin-martyr.yml`'s own (see that
# file's header) -- confirming they really are the shared Common-of-a-
# Virgin pool, only the antiphon text itself is proper to her.
id: st-scholastica
category: common-of-a-virgin
nocturn1:
groups:
- psalms: [8]
antiphon:
la: "O quam admirábile * nomen Dómini! In cujus virtúte beáta Virgo Scholástica tam ingéntem plúviam obtinére méruit."
en: "O how admirable is thy name, O Lord! * Through whose strength the blessed virgin Scholastica merited to obtain a prodigious fall of rain."
- psalms: [18]
antiphon:
la: "Cæli * enárrant glóriam Dei, et annúntiant mérita sanctæ Scholásticæ Vírginis."
en: "The heavens * show forth the glory of God, and announce the merits of the holy virgin Scholastica."
- psalms: [23]
antiphon:
la: "Hæc accépit * benedictiónem a Dómino, et misericórdiam a Deo salutári suo."
en: "She received * a blessing from the Lord, and mercy from God her Saviour."
- psalms: [44]
antiphon:
la: "Dilexísti * justítiam, et odísti iniquitátem; proptérea unxit te Deus, Deus tuus, óleo lætítiæ."
en: "Thou hast loved * justice, and hated iniquity: therefore God, thy God, hath anointed thee with the oil of gladness."
- psalms: [45]
antiphon:
la: "Flúminis ímpetus * lætíficat Scholásticam, Sponsam Dei."
en: "The stream of the river * maketh joyful Scholastica the spouse of God."
- psalms: [47]
antiphon:
la: "Circúmdate * Scholásticam, et narráte virtútes ejus."
en: "Surround * Scholastica, and tell of her excellence."
versicle:
v:
la: "Spécie tua et pulchritúdine tua."
en: "In thy comeliness and thy beauty."
r:
la: "Inténde, próspere procéde, et regna."
en: "Go forward, fare prosperously, and reign."
nocturn2:
groups:
- psalms: [84]
antiphon:
la: "Dóminus * Scholásticæ dedit benignitátem et terra dedit fructum."
en: "The Lord * gave Scholastica his blessing: and the earth shall yield her fruit."
- psalms: [86]
antiphon:
la: "Sicut lætántium ómnium * habitátio est in te, o beáta mater Scholástica."
en: "All who rejoice * find their home in thee, O blessed mother Scholastica."
- psalms: [95]
antiphon:
la: "Conféssio * et pulchritúdo in conspéctu Dómini; sanctimónia et magnificéntia in sanctificatióne Scholásticæ sponsæ suæ."
en: "Praise and beauty * are before the Lord: holiness and majesty in his sanctuary, in the sanctification of Scholastica his bride."
- psalms: [96]
antiphon:
la: "Illuxérunt * fúlgura Dei, dum oráret ad eum sancta Virgo Scholástica."
en: "God's lightnings * flashed forth when the holy virgin Scholastica prayed to him."
- psalms: [97]
antiphon:
la: "Cantáte * Dómino cánticum novum, quia mirabília fecit in dilécta fília Scholástica."
en: "Sing ye * to the Lord a new canticle: because he hath done wonderful things through his beloved daughter Scholastica."
- psalms: [98]
antiphon:
la: "Invocábat * Scholástica Dóminum; et exaudiébat eam."
en: "Scholastica * called upon the Lord, and he heard her."
versicle:
v:
la: "Adjuvábit eam Deus vultu suo."
en: "God shall help her with His countenance."
r:
la: "Deus in médio ejus, non commovébitur."
en: "God is in the midst of her, she shall not be moved."
nocturn3:
antiphon:
la: "Dóminus * Scholásticam quasi sponsum decorávit coróna, et ornávit monílibus suis."
en: "The Lord * as a bridegroom decked Scholastica with a crown, and as a bride adorned her with her jewels."
canticles:
- refs:
- { book: sir, chapter: 39, verses: "17-21" }
- refs:
- { book: isa, chapter: 61, verses: "10-11" }
- { book: isa, chapter: 62, verses: "1-3" }
- refs:
- { book: isa, chapter: 62, verses: "4-7" }
versicle:
v:
la: "Elégit eam Deus, et præelégit eam."
en: "God hath chosen her, and fore-chosen her."
r:
la: "In tabernáculo suo habitáre facit eam."
en: "He hath made her to dwell in His tabernacle."