Opening versicle; Ps 66 (fixed, no antiphon at all); the weekday-
variable psalm groups (Ps 50 plus 1-2 more, framed by their own
antiphon each, wholesale-substituted by Sunday's Ps 50+117-share-one-
antiphon shape); the weekday OT canticle; the Laudate psalms (148-150)
under one more shared antiphon; the weekday chapter/responsory/hymn/
versicle bundle; the Benedictus (framed by a day-resolved antiphon,
same incipit-or-full/full-repeat shape as Compline's Nunc Dimittis);
the Kyrie/Pater-noster short litany; the day's collect(s) — winner
plus one per commemoration, via the new getDayCollects; the four
Tridentine suffrages (omitted on a Double-or-higher feast); the
conclusio; the closing versicle (the silent Our Father that precedes
it isn't re-rendered, its text having already appeared once at the
short litany); and the closing Marian antiphon, reusing Compline's own
mechanism exactly.
Known, deliberate gap, not yet fixed: the psalmody doesn't model the
Commune/feast override real practice applies on a Semiduplex-or-higher
day (substituting an entirely different psalm+canticle set) — every
day currently gets the plain ferial weekday distribution regardless of
who wins. That's a separate, larger propers-authoring task (a full
Common-of-Saints psalm set per Common).
Also a simplification in getDayCollects: each collect in a multi-
collect day renders as its own complete "Let us pray ... Amen." block,
rather than the more compressed real form (one "Let us pray," only the
last collect's doxology).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Every fixed and weekday-variable text Lauds needs beyond the psalms/
canticles themselves: per-weekday antiphons (data/hours/lauds-
antiphons.yml, reconstructed with an embedded '*' from the engine's
separately-rendered incipit/full lines), the weekday capitulum/
responsory/hymn/versicle bundle (shared verbatim Mon-Fri for the
capitulum, confirmed against the live engine), the fixed Benedictus
text, the Kyrie/Pater-noster short litany, the four Tridentine
suffrages, the conclusio, and the closing versicle.
Saturday's hymn is left honestly `missing`: every ordinary-time
Saturday is either Marian-Sabbato-overridden or falls in a privileged
season whose hymn is itself swapped for the season's own, so there's
no achievable date showing a genuinely per-annum, unprivileged
Saturday Lauds hymn to source it from.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ps 5, 35, 42, 50, 56, 62, 63, 64, 66, 75, 87, 89, 91, 117, 142, 148-150
weren't needed by any hour built so far. The 7 weekday OT canticles
(Isaiah, Ezechias, Anna, Moses x2, Habacuc, the Three Young Men) get
their own small store (src/hours/lauds-canticles.ts), separate from the
Psalter, since they use their own liturgical verse-numbering per
canticle rather than the Psalter's 1-150 numbering.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Three separate resolver files (terce.ts/sext.ts/none.ts), not a shared
little-hour module — they're structurally identical but kept independent
by choice. Ordo verified against Divinum Officium (Monastic Tridentinum
1617): opening versicle, self-contained hymn, one antiphon framing three
psalms (no closing repeat, unlike Prime), a capitulum with its own
embedded short versicle/response, the day's own collect, and a closing
identical across all three hours.
Also fills in psalter-distribution.yml's previously-missing Sunday/
Monday/Tuesday psalm entries (Ps 118 sections for Sunday/Monday; Tuesday
turns out to share Wednesday/Thursday's native gradual-psalm set, not a
distinct one). Friday/Saturday's antiphons are derived from each day's
first psalm rather than reusing the native gradual antiphons, since
those two days already use a redistributed, non-native psalm set.
hours/types.ts gains a 'day-collect' part kind — the first ordo to use
the day's own Proper collect rather than a fixed text.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ordo is Monastic 1617 as a base, with deliberate Tridentine 1906
additions: the "In manus tuas" short responsory, the Nunc Dimittis
with its "Salva nos" antiphon, the fuller Preces (Monastic's own is
shorter), and Lent's "Christe, qui lux es et dies" hymn replacement
(English translation marked draft, pending a real historical one).
Psalms 4, 90, 133 are fixed daily with real verified text, unlike
Prime's weekday-rotated psalms.
The closing Marian antiphon now picks Alma Redemptoris Mater / Ave
Regina Caelorum / Regina Caeli / Salve Regina by real season, using
the calendar work from the previous commit — except Ave Regina
Caelorum's own window (Candlemas through the day before Maundy
Thursday) doesn't align to any single season value, so that one case
checks the real date directly instead of going through the by-season
table.
resolve-common.ts extracts the resolve/status/doxology/antiphon
helpers Prime already had into something Compline can share; a few
propers files lose their "prime-" prefix now that both hours use them.
Pulls in verified content from Divinum Officium rather than placeholders:
17 psalms (2, 6, 7-19, 118, 129), 365 days of the Martyrology, and the full
121-reading Regula cycle, plus the Athanasian Creed.
Ordo corrections driven by review against the real engine output:
- Capitulum and Preces now pick a Sunday/feast vs. ferial form
(calendar/isSundayOrFeast); ferial Preces said every ferial day by choice.
- Chapter responsory, hymn doxology, and the opening versicle's
Alleluia/Laus tibi all vary by season via a shared resolver
(hours/seasonal-propers.ts).
- Real Roman Kalends/Nones/Ides Latin dating (calendar/roman-date.ts,
verified against 363/365 real Martyrology headings) plus the historical
"bis sextus" Feb 29 handling, and the Martyrology's Luna (moon-day)
heading (a ported Golden-Number calculation).
- Fixed responsory structure (was missing its initial full repeat),
weekday psalm antiphons (opening as incipit-or-full by rank, full
repeat after the psalms/Creed as its own part, "*" chant mark kept),
scripture citations on the capitulum/lectio brevis, and V./R. markers
switched from Unicode symbols to plain text for reliable font rendering.
- Dropped Pretiosa and the dead-commemoration psalm (129) for time;
trimmed section headings down to the ones that are actually named
things (Preces, Chapter Office, etc. no longer relabel connective text).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Client-side-first PWA (Vite/TS, no backend) per the approved plan: day-
navigable shell listing all 8 hours, Prime fully resolves via the
calendar -> psalter -> ordo pipeline, the other 7 hours are registered
but flagged not-implemented. Sanctoral/temporal calendar data uses a
day -> id indirection layer (saints, easter-offsets, fixed-date-calendar)
so reassigning a feast to a different day is a data edit, not a code
change. Docker (Caddy-serving-static) + Gitea CI workflow scaffolded to
match the eec/drip/bookshop operational pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>