From 124d7e2261c721c4a49f7203efc276088c7cb217 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Sat, 15 Aug 2026 00:16:35 +0200 Subject: kernel+ef: resolve readings, chain steps 1 and 2 Liturgical_day.citations has read "always empty until Plan 4" since Plan 3; it is now filled. Rite.t gains a readings function, rite-supplied for the same reason transfer_target is: what a day with no proper falls back to is a rubric, not a universal. Calendar calls it and passes its own temporal function as the callback the rite needs to reach another date. Steps 1 and 2 only: the observed celebration's own proper, else the day's own temporal slug. Nothing encodes "Lent has daily propers" -- the presence of an entry is the discriminator. --- lib/kernel/calendar.ml | 4 +++- lib/kernel/rite.ml | 6 ++++++ lib/kernel/rite.mli | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) (limited to 'lib/kernel') diff --git a/lib/kernel/calendar.ml b/lib/kernel/calendar.ml index cffdf69..724641d 100644 --- a/lib/kernel/calendar.ml +++ b/lib/kernel/calendar.ml @@ -435,7 +435,9 @@ let build_day (rite : ('s, 'r) Rite.t) (idx : 'r Layer.by_date) transferred_in; transferred_out; omitted; - citations = []; + citations = + rite.Rite.readings ~observed:resolution.Precedence.observed.Precedence.cel ~temporal ~date + ~temporal_at:rite.Rite.temporal; } let year (rite : ('s, 'r) Rite.t) (layer : 'r Layer.t) (y : int) : diff --git a/lib/kernel/rite.ml b/lib/kernel/rite.ml index 89fceb6..91326a6 100644 --- a/lib/kernel/rite.ml +++ b/lib/kernel/rite.ml @@ -11,4 +11,10 @@ type ('s, 'r) t = { season_runs : 's list; transfer_target : 'r Precedence.candidate -> Date.t -> (Date.t -> 'r Celebration.t) -> Date.t; + readings : + observed:'r Celebration.t -> + temporal:('s, 'r) Temporal.t -> + date:Date.t -> + temporal_at:(Date.t -> ('s, 'r) Temporal.t) -> + Citation.t list; } diff --git a/lib/kernel/rite.mli b/lib/kernel/rite.mli index ffe9471..a41e034 100644 --- a/lib/kernel/rite.mli +++ b/lib/kernel/rite.mli @@ -59,4 +59,18 @@ type ('s, 'r) t = { [transfer_target] for a concrete termination argument (a structural step bound, not an appeal to the real calendar's own structure). *) + readings : + observed:'r Celebration.t -> + temporal:('s, 'r) Temporal.t -> + date:Date.t -> + temporal_at:(Date.t -> ('s, 'r) Temporal.t) -> + Citation.t list; + (** The day's Epistle and Gospel citations, or []. Rite-supplied for the + same reason [transfer_target] is: what a day with no proper of its + own falls back to is a rubric of a particular rite, not a universal. + + [temporal_at] is a callback so the rite can reach another date's + temporal identity (the preceding Sunday's, for the ferial rule) + without re-implementing the temporal cycle -- the same shape + [transfer_target]'s own [occupant] callback established. *) } -- cgit v1.3