Give the Vigil of Christmas (Dec 24) its own proper content
Deploy / deploy (push) Successful in 1m28s

Non-Sunday Dec 24 previously just inherited Advent 4's ferial collect and
antiphons with nothing of its own. Import the Vigil's real proper content
from the reference engine (Duplex I classis): its own collect, all 5 Lauds
antiphons, the Benedictus antiphon, and Matins' Gospel (Matt 1:18-21) +
St. Jerome homily, wired via a new `vigil-of-christmas` temporal id scoped
to non-Sunday Dec 24 only. Advent IV landing on Dec 24 itself is untouched,
left as its own separate design question.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ME8QNPdEmHSbSx1r6VmDRG
This commit is contained in:
2026-08-30 07:45:44 -04:00
parent b3a7176cb8
commit 654ec868cb
6 changed files with 132 additions and 0 deletions
+16
View File
@@ -30,6 +30,7 @@
// confirmed against that source rather than re-derived by hand. // confirmed against that source rather than re-derived by hand.
import { resolveSeason, sundayOnOrBefore, firstSundayStrictlyAfter, adventStart, easterOffsetOf } from './temporal'; import { resolveSeason, sundayOnOrBefore, firstSundayStrictlyAfter, adventStart, easterOffsetOf } from './temporal';
import { daysBetween } from './date-math'; import { daysBetween } from './date-math';
import { weekdayOf } from './weekday';
const EASTER_OFFSET_IDS: [number, string][] = [ const EASTER_OFFSET_IDS: [number, string][] = [
[-63, 'septuagesima'], [-63, 'septuagesima'],
@@ -78,6 +79,21 @@ export function resolveTemporalId(isoDate: string): string {
const season = resolveSeason(isoDate); const season = resolveSeason(isoDate);
const year = Number(isoDate.slice(0, 4)); const year = Number(isoDate.slice(0, 4));
// The Vigil of Christmas (Dec 24) has its own real proper content
// (collect, Lauds antiphons, Matins Gospel+homily nocturn) distinct from
// Advent 4's own — see data/propers/temporal/vigil-of-christmas-collect.yml
// and data/propers/nocturn-readings/vigil-of-christmas.yml, both
// transcribed directly from the reference engine's Sancti/12-24.txt.
// Scoped to non-Sunday only for now: when Dec 24 itself is Advent 4's own
// Sunday, the reference engine's own 12-24s.txt keeps Advent 4's psalms
// and most of its Matins lessons (only swapping in the Vigil's Gospel
// nocturn) rather than fully substituting this id — a genuine content
// splice this app doesn't model yet, deliberately left as `advent-4` for
// that one specific case pending that design decision.
if (isoDate.slice(5) === '12-24' && weekdayOf(isoDate) !== 'sunday') {
return 'vigil-of-christmas';
}
if (season === 'advent') { if (season === 'advent') {
const start = adventStart(year); const start = adventStart(year);
const n = Math.round(daysBetween(start, sundayOnOrBefore(isoDate)) / 7) + 1; const n = Math.round(daysBetween(start, sundayOnOrBefore(isoDate)) / 7) + 1;
@@ -0,0 +1,29 @@
# Read directly from the reference engine's Sancti/12-24.txt (Latin `[Ant
# Laudes]`, 5 antiphons) and English/Sancti/12-24.txt -- the Vigil of
# Christmas's own proper Lauds antiphons, mapped onto this app's usual
# 3-psalm-group + canticle + laudate override shape (same fixed 92/99/62
# psalm set every other duplex-majus+ override here uses, e.g.
# christmas-octave-sunday.yml/all-saints.yml).
id: vigil-of-christmas
groups:
- psalms: [92]
antiphon:
la: "Judǽa et Jerúsalem, * nolíte timére: cras egrediémini, et Dóminus erit vobíscum, allelúja."
en: "O Judah and Jerusalem, * fear not: tomorrow ye shall go out, and the Lord will be with you."
- psalms: [99]
antiphon:
la: "Hódie sciétis * quia véniet Dóminus: et mane vidébitis glóriam ejus."
en: "This day ye shall know * that the Lord cometh and in the morning, then ye shall see His glory."
- psalms: [62]
antiphon:
la: "Crástina die * delébitur iníquitas terræ: et regnábit super nos Salvátor mundi."
en: "On the morrow * the sins of the earth shall be washed away, and the Saviour of the world will be our King."
canticle:
id: canticum-trium-puerorum
antiphon:
la: "Dóminus véniet, * occúrrite illi, dicéntes: Magnum princípium, et regni ejus non erit finis: Deus, Fortis, Dominátor, Princeps pacis, allelúja."
en: "The Lord cometh! * Go ye out to meet Him, and say How great is His dominion, and of His kingdom there shall be no end! He is the Mighty God, the Ruler, the Prince of Peace, Alleluia!"
laudate:
antiphon:
la: "Crástina erit * vobis salus, dicit Dóminus Deus exercítuum."
en: "On the morrow * ye shall be saved, saith the Lord God of hosts."
@@ -0,0 +1,50 @@
# Matins reading for the Vigil of Christmas (Dec 24, when it's not itself
# Advent 4's own Sunday) -- read directly from the reference engine's
# Sancti/12-24.txt (Lectio1, Latin) and English/Sancti/12-24.txt (Lectio1,
# English): the day's Gospel pericope (Matt 1:18-21, given in full, not a
# bare incipit) plus St. Jerome's homily on it. Same single-nocturn Vigil
# shape as vigil-of-st-john-the-baptist.yml -- `nocturn: 1`, matching the
# Ember-day convention for a ferial day's one real nocturn (see
# hours/matins.ts's own nocturnReadingIds doc comment).
id: vigil-of-christmas
readings:
- nocturn: 1
isGospel: true
citation: { la: "Matt 1:18-21", en: "Matt 1:18-21" }
text:
la: >-
Cum esset desponsáta Mater Jesu María Joseph, ántequam convenírent, invénta est in útero
habens de Spíritu Sancto. Et réliqua.
en: >-
When as his mother Mary was espoused to Joseph, before they came together, she was found
with child, of the Holy Ghost. And so on.
status: { la: verified, en: verified }
responsory:
la: |
R. Sanctificámini hódie, et estóte paráti: quia die crástina vidébitis
* Majestátem Dei in vobis.
V. Hódie sciétis quia véniet Dóminus, et mane vidébitis.
R. Majestátem Dei in vobis.
en: |
R. Sanctify yourselves today, and be ready; for on the morrow, ye shall see
* The majesty of God upon you.
V. This day ye shall know that the Lord cometh, and in the morning, then ye shall see.
R. The majesty of God upon you.
- nocturn: 1
isGospel: false
source: "Homily by St. Jerome, Priest (at Bethlehem), Book of Commentaries, on Matth. i."
text:
la: >-
Quare non de símplici vírgine, sed de desponsáta concípitur? Primum, ut per generatiónem
Joseph, orígo Maríæ monstrarétur: secúndo, ne lapidarétur a Judǽis ut adúltera: tértio, ut
in Ægýptum fúgiens habéret solátium. Martyr Ignátius étiam quartam áddidit causam, cur a
desponsáta concéptus sit: Ut partus, ínquiens, ejus celarétur diábolo, dum eum putat non de
vírgine, sed de uxóre generátum.
en: >-
Why was the Lord conceived of an espoused virgin rather than of a free? First, for the
sake of the genealogy of Mary, which we have obtained by that of Joseph. Secondly, because
she was thus saved from being stoned by the Jews as an adulteress. Thirdly, that Himself
and His mother might have a guardian on their journey into Egypt. To these, Ignatius, the
martyr of Antioch, has added a fourth reason namely, that the birth might take place
unknown to the devil, who would naturally suppose that Mary had conceived by Joseph.
status: { la: verified, en: verified }
@@ -0,0 +1,16 @@
# Verified against Divinum Officium (Monastic Tridentinum 1617), Lauds
# live query, 2026-12-24 (a plain Thursday, non-Sunday Vigil of
# Christmas). The static reference file (Sancti/12-24.txt) has no
# explicit `[Ant Benedictus]` tag for this date -- turns out the live
# engine reuses the same text tagged `[Ant 2]` there (labeled "Antiphona
# ex Proprio Sanctorum" in the live render), already imported separately
# for Matins' own Nocturn 2 -- see nocturn-readings/vigil-of-christmas.yml.
# Same text, two real uses, not a coincidence to collapse into one file:
# these are two distinct ResolvedPart slots.
id: vigil-of-christmas-benedictus-antiphon
text:
la: "Oriétur * sicut sol Salvátor mundi: et descéndet in úterum Vírginis, sicut imber super gramen, allelúja."
en: "The Saviour of the world * shall rise like the sun, and come down into the womb of the Virgin as the showers upon the grass, alleluia."
status:
la: verified
en: verified
@@ -0,0 +1,20 @@
# Read directly from the reference engine's own Sancti/12-24.txt (Latin)
# and English/Sancti/12-24.txt -- the Vigil of Christmas's own proper
# Oratio (`In Vigilia Nativitatis Domini`, Duplex I classis), used on Dec
# 24 regardless of rank contest (see calendar/temporal-id.ts's own
# `vigil-of-christmas` case, currently scoped to a non-Sunday Dec 24 only).
id: vigil-of-christmas-collect
text:
la: |
Orémus.
Deus, qui nos redemptiónis nostræ ánnua exspectatióne lætíficas: præsta; ut Unigénitum tuum, quem Redemptórem læti suscípimus, veniéntem quoque Júdicem secúri videámus, 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: |
Let us pray.
O God, thou Who gladden us year after year with the expectation of our redemption, grant that we, who now welcome with joy thy only-begotten Son as our Redeemer, may also gaze upon Him without fear when He comes as our judge, our Lord Jesus Christ, thy Son:
Who liveth and reigneth with thee, in the unity of the Holy Spirit, God, world without end.
R. Amen.
status:
la: verified
en: verified
+1
View File
@@ -57,6 +57,7 @@ export const ALWAYS_OVERRIDE_TEMPORAL_IDS = new Set([
'immaculate-heart-of-mary', 'immaculate-heart-of-mary',
'circumcision', 'circumcision',
'holy-name-of-jesus', 'holy-name-of-jesus',
'vigil-of-christmas',
]); ]);
/** /**