Compare commits

...

2 Commits

Author SHA1 Message Date
will 14227c7afe propers: add October's collect text
Deploy / deploy (push) Successful in 46s
7 collects. Also moves two pre-existing tests' dates off Oct 4-5, which
now carry real sanctoral content (St. Francis, Ss. Placid and
Companions) that changes their governing behavior -- same class of
collision as previous months.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:07:51 -04:00
will ab713f424a calendar: pull October's sanctoral calendar (pre-1955 pull, 10/12)
16 saints (14 real winners + 2 stubs). Three monastic-calendar-specific
finds this month: Ss. Placid and Companions (Oct 5, St. Benedict's own
disciple, Duplex II. classis -- absent from the base Tridentine table
entirely), St. Justina (Oct 7, reassigns what the base table gives to
St. Marcus, Pope), and St. Gall (Oct 16, founder of St. Gallen, also
absent from the base table). No octave-gap exclusions this month.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:07:44 -04:00
27 changed files with 409 additions and 11 deletions
@@ -0,0 +1,12 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check on a clean weekday (2027-10-25, a Monday) -- wins
# outright at Simplex. On a Saturday this date is instead outranked by
# the generic "Sanctae Mariae Sabbato" votive (confirmed re-checking
# 2025-10-25, a Saturday, where the votive won instead) -- an artifact of
# the tested weekday, same pattern as several saints in August. Own
# proper collect, no unique antiphon of their own.
id: ss-chrysanthus-and-daria
name: "Ss. Chrysanthus and Daria, Martyrs"
rank: simplex
common: common-of-several-martyrs
propers: "ss-chrysanthus-and-daria"
@@ -0,0 +1,12 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-09) -- winner outright, Semiduplex, alone. No
# unique collect: the raw file at this MM-DD slot (Sancti/10-09.txt) is
# actually St. John Leonardi's (a later, 17th-century addition to this
# filename slot, canonized 1938) -- a live prayTertia query for the
# Monastic 1617 track returns no Oratio at all, confirming propers: null
# is correct.
id: ss-dionysius-and-companions
name: "St. Dionysius, Bishop, and Companions, Martyrs"
rank: semiduplex
common: common-of-a-martyr-bishop
propers: null
@@ -0,0 +1,15 @@
# A monastic-calendar-specific addition: absent from the base Tridentine
# table (1570.txt) entirely, added by the monastic-specific delta table
# (M1617.txt) -- fittingly, since St. Placid is St. Benedict's own famous
# disciple. Verified live (Monastic Tridentinum 1617, 2026-10-05 and
# again 2032-10-05) -- winner outright, Duplex II. classis, alone; the
# highest-ranked monastic-only addition found in this pull so far. No
# unique collect: the raw file's [Oratio] is a plain cross-reference to a
# generic Common-of-several-martyrs formula (@Commune/C3a), not unique
# text, so propers: null is correct (Common-of-Saints only), same
# treatment as any other saint whose own file just points at the Common.
id: ss-placid-and-companions
name: "Ss. Placid and Companions, Martyrs"
rank: duplex-2-classis
common: common-of-several-martyrs
propers: null
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-28) -- winner outright, Duplex II. classis,
# alone. Own proper collect, no unique antiphon of their own.
id: ss-simon-and-jude
name: "Ss. Simon and Jude, Apostles"
rank: duplex-2-classis
common: common-of-an-apostle
propers: "ss-simon-and-jude"
@@ -0,0 +1,9 @@
# Genuinely unwinnable stub (verified 2025-10-21, 2026-10-21) -- always
# commemorated under St. Hilarion (see st-hilarion.yml), never wins
# outright; both are fixed, non-movable dates, so this isn't an artifact
# of the tested year. rank/propers unverified placeholders.
id: ss-ursula-and-companions
name: "Ss. Ursula and Companions, Virgins and Martyrs"
rank: simplex
common: common-of-several-martyrs
propers: null
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-14) -- winner outright, Duplex, alone. Own
# proper collect, no unique antiphon of his own.
id: st-callistus
name: "St. Callistus I, Pope and Martyr"
rank: duplex
common: common-of-a-martyr-bishop
propers: "st-callistus"
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2026-10-26) -- winner outright, Simplex, alone. No
# unique collect: the raw file at this MM-DD slot (Sancti/10-26.txt) is
# empty.
id: st-evaristus
name: "St. Evaristus, Pope and Martyr"
rank: simplex
common: common-of-a-martyr-bishop
propers: null
+8
View File
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-04) -- winner outright, Duplex, alone. Own
# proper collect, no unique antiphon of his own.
id: st-francis
name: "St. Francis of Assisi, Confessor"
rank: duplex
common: common-of-a-confessor-not-bishop
propers: "st-francis"
+14
View File
@@ -0,0 +1,14 @@
# A monastic-calendar-specific addition: absent from the base Tridentine
# table (1570.txt) entirely, added by the monastic-specific delta table
# (M1617.txt) -- fittingly, St. Gall (founder of the abbey of St. Gallen)
# is one of the most distinctly monastic saints in this whole pull.
# Verified live (Monastic Tridentinum 1617, 2025-10-16) -- winner
# outright, Duplex, alone. No unique collect: the raw file at this MM-DD
# slot (Sancti/10-16.txt) is actually St. Hedwig's (a later addition to
# this filename slot) -- a live prayTertia query for the Monastic 1617
# track returns no Oratio at all, confirming propers: null is correct.
id: st-gall
name: "St. Gall, Abbot"
rank: duplex
common: common-of-an-abbot
propers: null
+10
View File
@@ -0,0 +1,10 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-21, 2026-10-21) -- winner outright, Simplex,
# over the stub Ss. Ursula and Companions (see ss-ursula-and-companions.
# yml). No unique collect: the raw file at this MM-DD slot
# (Sancti/10-21.txt) is empty.
id: st-hilarion
name: "St. Hilarion, Abbot"
rank: simplex
common: common-of-an-abbot
propers: null
+16
View File
@@ -0,0 +1,16 @@
# A monastic-calendar-specific reassignment, not a mistake: the base
# Tridentine table (1570.txt) has St. Marcus, Pope, as Oct 7's primary,
# but the monastic-specific delta table (M1617.txt) overrides that day
# with this saint instead, demoting Marcus to a commemoration (see
# st-marcus.yml) -- confirmed live (Monastic Tridentinum 1617,
# 2025-10-07 and 2026-10-07), winning outright at Duplex. Same class of
# finding as April's St. Robert/St. Catherine and September's St.
# Nicholas of Tolentino reassignments. No unique collect: the raw file at
# this MM-DD slot (Sancti/10-07.txt) is actually Our Lady of the Rosary's
# (a later, 1573+ feast) -- a live prayTertia query for the Monastic 1617
# track returns no Oratio at all, confirming propers: null is correct.
id: st-justina
name: "St. Justina, Virgin and Martyr"
rank: duplex
common: common-of-a-virgin-martyr
propers: null
+8
View File
@@ -0,0 +1,8 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-18) -- winner outright, Duplex II. classis,
# alone. Own proper collect, no unique antiphon of his own.
id: st-luke
name: "St. Luke, Evangelist"
rank: duplex-2-classis
common: common-of-an-evangelist
propers: "st-luke"
+10
View File
@@ -0,0 +1,10 @@
# Genuinely unwinnable stub (verified 2025-10-07, 2026-10-07) -- always
# commemorated under St. Justina in the monastic calendar (see
# st-justina.yml), even though the base Tridentine table has him as the
# primary here; both are fixed, non-movable dates, so this isn't an
# artifact of the tested year. rank/propers unverified placeholders.
id: st-marcus
name: "St. Marcus, Pope and Confessor"
rank: simplex
common: common-of-a-confessor-bishop
propers: null
+9
View File
@@ -0,0 +1,9 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), live
# kalendar check (2025-10-01) -- winner outright, Simplex, alone. No
# unique collect: the raw file at this MM-DD slot (Sancti/10-01.txt) is
# empty.
id: st-remigius
name: "St. Remigius, Bishop and Confessor"
rank: simplex
common: common-of-a-confessor-bishop
propers: null
@@ -0,0 +1,8 @@
# A real vigil (2025-10-31, clean year), distinct from the pre-existing
# all-saints.yml (Nov 1). Own proper collect, generic enough that it
# doesn't name any particular saint, no unique antiphon of its own.
id: vigil-of-all-saints
name: "Vigil of All Saints"
rank: vigil
common: common-of-a-vigil
propers: "vigil-of-all-saints"
@@ -0,0 +1,7 @@
# A real vigil (2025-10-27, clean year). Own proper collect, no unique
# antiphon of its own.
id: vigil-of-ss-simon-and-jude
name: "Vigil of Ss. Simon and Jude"
rank: vigil
common: common-of-a-vigil
propers: "vigil-of-ss-simon-and-jude"
+21
View File
@@ -233,5 +233,26 @@ days:
"09-27": [ss-cosmas-and-damian]
"09-29": [st-michael]
"09-30": [st-jerome]
# October — 10/12 of the pre-1955 pull. Three monastic-calendar-specific
# finds this month, all absent from or overriding the base Tridentine
# table: Ss. Placid and Companions (Oct 5, St. Benedict's own famous
# disciple, a high-rank addition), St. Justina (Oct 7, reassigns what
# the base table gives to St. Marcus, Pope -- see st-justina.yml/
# st-marcus.yml), and St. Gall (Oct 16, founder of St. Gallen). No
# octave-gap exclusions this month.
"10-01": [st-remigius]
"10-04": [st-francis]
"10-05": [ss-placid-and-companions]
"10-07": [st-justina, st-marcus]
"10-09": [ss-dionysius-and-companions]
"10-14": [st-callistus]
"10-16": [st-gall]
"10-18": [st-luke]
"10-21": [st-hilarion, ss-ursula-and-companions]
"10-25": [ss-chrysanthus-and-daria]
"10-26": [st-evaristus]
"10-27": [vigil-of-ss-simon-and-jude]
"10-28": [ss-simon-and-jude]
"10-31": [vigil-of-all-saints]
"11-01": [all-saints]
"12-08": [immaculate-conception]
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2027-10-25).
id: ss-chrysanthus-and-daria-collect
text:
la: |
Orémus.
Beatórum Mártyrum tuórum, Dómine, Chrysánthi et Daríæ, quǽsumus, adsit nobis orátio: ut, quos venerámur obséquio, eórum pium júgiter experiámur auxílium.
Per 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.
℟. Amen.
en: |
Let us pray.
Lord, may Your holy Martyrs Chrysanthus and Daria assist us by their prayers. We offer them our homage; may we always experience their loving aid.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-28).
id: ss-simon-and-jude-collect
text:
la: |
Orémus.
Deus, qui nos per beátos Apóstolos tuos Simónem et Judam ad agnitiónem tui nóminis veníre tribuísti: da nobis eórum glóriam sempitérnam et proficiéndo celebráre, et celebrándo profícere.
Per 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.
℟. Amen.
en: |
Let us pray.
O God, Who didst use thine holy Apostles Simon and Jude to make known unto us thy Name, grant unto us so to profit by their doctrine as to do honour to their everlasting glory, and so to honour that glory as to gain profit to ourselves.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-14).
id: st-callistus-collect
text:
la: |
Orémus.
Deus, qui nos cónspicis ex nostra infirmitáte defícere: ad amórem tuum nos misericórditer per Sanctórum tuórum exémpla restáura.
Per 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.
℟. Amen.
en: |
Let us pray.
O God, Who seest that in our own weakness we do continually fall, make, in thy mercy, the examples of thy holy children a mean whereby to renew in us the love of thyself.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-04).
id: st-francis-collect
text:
la: |
Orémus.
Deus, qui Ecclésiam tuam beáti Francísci méritis fœtu novæ prolis amplíficas: tríbue nobis; ex ejus imitatióne, terréna despícere, et cæléstium donórum semper participatióne gaudére.
Per 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.
℟. Amen.
en: |
Let us pray.
O God, Who didst use the worthy deeds of thy blessed servant Francis as a mean whereby to make thy Church again the mother of children, grant that we like him may set little price by earthly things, and attain unto a portion of those good things which Thou givest in heaven.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-18).
id: st-luke-collect
text:
la: |
Orémus.
Intervéniat pro nobis, quǽsumus, Dómine, sanctus tuus Lucas Evangelísta: qui crucis mortificatiónem júgiter in suo córpore, pro tui nóminis honóre, portávit.
Per 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.
℟. Amen.
en: |
Let us pray.
O Lord, we beseech thee, that Luke, thy holy Evangelist, who for the honor of thy name bore continually in his body the suffering of the cross, may intercede in our behalf.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-31).
id: vigil-of-all-saints-collect
text:
la: |
Orémus.
Dómine, Deus noster, multíplica super nos grátiam tuam: et, quorum prævenimus gloriósa solemnia, tríbue subsequi in sancta professióne lætítiam.
Per 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.
℟. Amen.
en: |
Let us pray.
Pour forth abundantly upon us of thy mercy, O Lord our God, and grant us grace to follow in their joy in their holy testifying all thy blessed servants the Eve of whose glorious and solemn Commemoration we are keeping.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
@@ -0,0 +1,17 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617) — read
# directly from the reference engine's own real-date output (2025-10-27).
id: vigil-of-ss-simon-and-jude-collect
text:
la: |
Orémus.
Concede, quǽsumus, omnípotens Deus: ut, sicut Apostolórum tuórum Simónis et Judæ gloriósa natalícia prævenimus; sic ad tua benefícia promerenda, majestátem tuam pro nobis ipsi præveniant.
Per 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.
℟. Amen.
en: |
Let us pray.
Almighty God, grant, we beseech thee, that as we are preventing thine Apostles Simon and Jude, their glorious birth-day, so the same may prevent thy Majesty to win thy good things for us.
Through Jesus Christ, thy Son our Lord, Who liveth and reigneth with thee, in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
+89
View File
@@ -0,0 +1,89 @@
import { describe, expect, it } from 'vitest';
import { resolveDay } from '../../src/calendar';
import { getDayCollect } from '../../src/hours/resolve-common';
// Clean per-annum years for these dates (no Sunday collision) — see
// data/calendar/saints/*.yml for per-saint source detail.
describe('October sanctoral pull (first pass)', () => {
it('a monastic-calendar-specific addition (Ss. Placid and Companions, St. Benedict\'s own disciple) wins outright at Duplex II. classis', () => {
const day = resolveDay('2026-10-05');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'ss-placid-and-companions',
name: 'Ss. Placid and Companions, Martyrs',
rank: 'duplex-2-classis',
});
expect(day.commemorations).toEqual([]);
});
it('a monastic-calendar-specific reassignment (St. Justina) displaces what the base Tridentine table gives to St. Marcus, Pope', () => {
const day = resolveDay('2025-10-07');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-justina',
name: 'St. Justina, Virgin and Martyr',
rank: 'duplex',
});
expect(day.commemorations).toEqual([
{ kind: 'sanctoral', id: 'st-marcus', name: 'St. Marcus, Pope and Confessor', rank: 'simplex' },
]);
});
it('St. Gall, a monastic-calendar-specific addition, wins outright at Duplex, alone', () => {
const day = resolveDay('2025-10-16');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-gall',
name: 'St. Gall, Abbot',
rank: 'duplex',
});
expect(day.commemorations).toEqual([]);
});
it('St. Luke wins outright at Duplex II. classis with a real proper collect, alone', () => {
const day = resolveDay('2025-10-18');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-luke',
name: 'St. Luke, Evangelist',
rank: 'duplex-2-classis',
});
expect(getDayCollect(day).status.en).toBe('verified');
});
it('Ss. Simon and Jude win outright at Duplex II. classis with a real proper collect, distinct from their own Vigil the day before', () => {
const vigil = resolveDay('2025-10-27');
const day = resolveDay('2025-10-28');
expect(vigil.winner).toEqual({
kind: 'sanctoral',
id: 'vigil-of-ss-simon-and-jude',
name: 'Vigil of Ss. Simon and Jude',
rank: 'vigil',
});
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'ss-simon-and-jude',
name: 'Ss. Simon and Jude, Apostles',
rank: 'duplex-2-classis',
});
expect(getDayCollect(day).status.en).toBe('verified');
});
it('the Vigil of All Saints resolves distinctly from All Saints itself the next day', () => {
const vigil = resolveDay('2025-10-31');
const day = resolveDay('2025-11-01');
expect(vigil.winner).toEqual({
kind: 'sanctoral',
id: 'vigil-of-all-saints',
name: 'Vigil of All Saints',
rank: 'vigil',
});
expect(getDayCollect(vigil).status.en).toBe('verified');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'all-saints',
name: 'All Saints',
rank: 'duplex-1-classis',
});
});
});
+6 -3
View File
@@ -37,9 +37,12 @@ describe('resolveDay', () => {
// winning by the Vigil of St. Lawrence, itself impeded by the Sunday
// and transferred away — see tests/calendar/transfer.test.ts, and
// confirmed against the live reference engine, which shows the same
// commemoration despite the vigil's own absence that day).
const day = resolveDay('2026-10-04');
expect(day.date).toBe('2026-10-04');
// commemoration despite the vigil's own absence that day). Also not
// 2026-10-04 (moved here from there): since the October pull, that
// date is St. Francis's own day (Duplex), which wins outright even on
// an ordinary Sunday.
const day = resolveDay('2026-11-15');
expect(day.date).toBe('2026-11-15');
expect(day.weekday).toBe('sunday');
expect(day.winner.kind).toBe('temporal');
expect(day.commemorations).toEqual([]);
+11 -8
View File
@@ -1,14 +1,17 @@
import { describe, expect, it } from 'vitest';
import { resolveOrdo } from '../../src/hours';
// 2026-10-05 is a Monday, and (as of the pre-1955 sanctoral pull reaching
// October) still ordinary/ferial — the Monastic 1617 distribution gives
// Monday three whole psalms (1, 2, 6), the first of which (Psalm 1) has
// real sample content in data/psalms/001.yml, so these tests can check
// real verse data without needing every psalm authored. Already had to
// move once (from a June Monday that got real sanctoral content) — if a
// future month's pull lands here too, it'll need to move again.
const MONDAY = '2026-10-05';
// 2026-11-16 is a Monday, and (as of the pre-1955 sanctoral pull reaching
// October, with November/December still unpulled) still ordinary/ferial —
// the Monastic 1617 distribution gives Monday three whole psalms (1, 2,
// 6), the first of which (Psalm 1) has real sample content in
// data/psalms/001.yml, so these tests can check real verse data without
// needing every psalm authored. Already had to move twice (first from a
// June Monday, then from an October Monday that got real sanctoral
// content — Ss. Placid and Companions, see
// data/calendar/saints/ss-placid-and-companions.yml) — if November's own
// pull lands here too, it'll need to move again.
const MONDAY = '2026-11-16';
const SUNDAY = '2026-08-09';
describe('resolveOrdo("prime", ...)', () => {