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_validate.ml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/test_validate.ml') diff --git a/test/test_validate.ml b/test/test_validate.ml index 501dd2e..9fa3c5c 100644 --- a/test/test_validate.ml +++ b/test/test_validate.ml @@ -276,10 +276,14 @@ module Synthetic = struct defaults against the default empty [layer], since nothing ever contests the temporal office there) so the resolution fixtures further down can override them without duplicating every other field. *) + (* No fixture here exercises citations -- readings is a harmless constant + [], the same role the other placeholder defaults above play. *) + let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = [] + let rite ?(vocab = vocab) ?(anchors = fun _ -> []) ?(season_runs = [ A; B ]) ?(rules = rules) ?(transfer_target = fun _ origin _ -> origin) temporal : (season, rank) Rite.t = { Rite.id = "synthetic"; vocab; year_start; temporal; anchors; rules; season_runs; - transfer_target } + transfer_target; readings } (* Empty by default: every check built before Task 12 exercises the TEMPORAL-only pass, where an empty layer is exactly the fixture that -- cgit v1.3