aboutsummaryrefslogtreecommitdiff
path: root/lib/kernel/lectionary.ml
Commit message (Collapse)AuthorAgeFilesLines
* kernel(lectionary): fix round 1 -- load never raisesLukasz Kasprzak2026-08-141-0/+13
| | | | | | | | | | | | | | | Sexplib.Sexp.load_sexp raises bare Failure for several malformed inputs (unterminated list/string, empty file, more than one sexp) rather than Sexplib.Sexp.Parse_error, so those cases escaped Lectionary.load as an uncaught exception -- breaking the .mli's own promise and the kernel's never-raises-on-fallible-construction constraint. Mirrors the catch-all already present in Layer.load and Overlay.load, plus a second catch-all on the t_of_sexp branch for defence in depth. Adds test_load_never_raises, covering all of the above plus a missing file, using Filename.temp_file rather than a hardcoded path. Verified the new test fails against the pre-fix load (uncaught Failure) and passes against the fix.
* kernel(lectionary): slug-keyed reading citationsLukasz Kasprzak2026-08-141-0/+33
Data only, the same shape and discipline as Layer: slug-canonical, duplicates rejected at construction naming the offending slug, sexp round-trips. Which slug a day falls back to is a rubric and belongs to the rite module, so nothing here knows about ferias or Sundays.