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. --- test/test_calendar.ml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/test_calendar.ml') diff --git a/test/test_calendar.ml b/test/test_calendar.ml index 22f5f04..2f6df6d 100644 --- a/test/test_calendar.ml +++ b/test/test_calendar.ml @@ -99,9 +99,13 @@ module Fixture = struct let rec search d = if (occupant d).Cel.rank = Lo then d else search (D.add_days d 1) in search (D.add_days origin 1) + (* No fixture here exercises citations -- readings is a harmless constant + [], the same role [empty_layer] plays for the sanctoral side. *) + let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = [] + let rite : (season, rank) Rite.t = { Rite.id = "synthetic-calendar"; vocab; year_start; temporal; anchors = (fun _ -> []); - rules; season_runs = [ A; B ]; transfer_target } + rules; season_runs = [ A; B ]; transfer_target; readings } let entry ~month ~day ~slug ~rank = { Layer.date = (match Date_spec.fixed ~month ~day with Ok d -> d | Error e -> failwith e); -- cgit v1.3