58958aa847
Deploy / deploy (push) Failing after 21s
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>
30 lines
917 B
TypeScript
30 lines
917 B
TypeScript
import type { Season, OccurringFeast } from '../calendar/types';
|
|
|
|
export interface SeasonalPropersTable {
|
|
perAnnum: string;
|
|
bySeason: Record<string, string>;
|
|
byFeastId?: Record<string, string>;
|
|
}
|
|
|
|
/**
|
|
* Shared by everything that picks a common-propers id by season with a
|
|
* per-feast override (the chapter responsory's verse, the hymn doxology,
|
|
* and presumably more once milestone 4 lands) — feast overrides win over
|
|
* season, which wins over the "per annum" default. `occurring` is always
|
|
* [] until milestone 4, so today this always returns a season match or
|
|
* perAnnum.
|
|
*/
|
|
export function resolveSeasonalPropersId(
|
|
season: Season,
|
|
occurring: OccurringFeast[],
|
|
table: SeasonalPropersTable,
|
|
): string {
|
|
for (const feast of occurring) {
|
|
const override = table.byFeastId?.[feast.id];
|
|
if (override) {
|
|
return override;
|
|
}
|
|
}
|
|
return table.bySeason[season] ?? table.perAnnum;
|
|
}
|