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.
import { resolveSeason, sundayOnOrBefore, firstSundayStrictlyAfter, adventStart, easterOffsetOf } from './temporal';
import { daysBetween } from './date-math';
import { weekdayOf } from './weekday';
const EASTER_OFFSET_IDS: [number, string][] = [
[-63, 'septuagesima'],
@@ -78,6 +79,21 @@ export function resolveTemporalId(isoDate: string): string {
const season = resolveSeason(isoDate);
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') {
const start = adventStart(year);
const n = Math.round(daysBetween(start, sundayOnOrBefore(isoDate)) / 7) + 1;