From 8fa9db25f55f4ae92ad6a28115484dd981593a3c Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 26 Aug 2026 09:53:22 +0200 Subject: feat(of): assemble Rite_of.context and wire --rite of into the CLI Task 5 of Phases 3-5 (the payoff task): bundles Tasks 1-4's separately built pieces (Temporal_of, Precedence_of, Rubrics_of, Lectionary_of) into a (Vocab_of.season, Vocab_of.rank) Colitur_kernel.Rite.t, and wires colitur day/readings --rite of into the CLI. Default stays ef; every pre-existing invocation is byte-identical (asserted directly in test/cli.t and against a real v1.0.0 build for three years, plus git diff --stat v1.0.0..HEAD over lib/rites/rite_ef/, lib/kernel/, data/ef/ is empty). No kernel change was needed, confirming the spec's central claim. season_runs needed real thought rather than the brief's own suggested Vocab_of.seasons: Temporal_of.season's own 'first run'/'second run' comments confirm Ordinary Time is genuinely interrupted by Lent and Easter over one liturgical year, so the expected run-length-compressed sequence names it twice, six runs over five seasons -- exactly the case Rite.t.season_runs's own doc comment already names as its illustration for why this field is rite-supplied rather than derived. easter/fixed_key are as specified, each carrying its own citation (Gregorian computus; the 2002 Missal's one bissextilis occurrence is a leap-year table entry, not a kalends-doubling rule, so fixed_key is identity). Follows rite_ef.ml's template and its lectionary-parameter lesson exactly: lectionary is caller-supplied, not closed over. test/test_rite_of.ml resolves the real assembled rite (calendar-2002 .sexp + all 13 amendment overlays + lectionary.sexp) through Calendar and Validate.run, the same discipline test_validate.ml/test_rite_ef.ml already apply to EF. This is the first time rite_of has been checked this way, and it surfaced two new, real, cited gaps outside this task's own scope to fix: Temporal_of never reaches Normae n.35(a)'s 30-December Holy Family fallback in a year with no Sunday in 26-31 December (first hit 1583, the domain floor), and Temporal_of.anchors disagrees with temporal on 24 December when that date is itself a Sunday (Advent IV outranks the Vigil, first hit 2006). Both pinned as known-wrong, not fixed, the same treatment the brief's own pre-known St Joseph/Palm Sunday gap (Normae n.56(f)) gets, pinned on 2062. A third gap was found in data/of/lectionary.sexp's own coverage (audited against one civil year only, so the other weekday-cycle letter is unaudited and at least one pairing is asymmetric on shipped data) -- that file is excluded from this task, so the wide 2005-2050 sweep checks structural invariants only and leaves the citation-chain checks to the small, individually-audited landmark-year set. make check (COLITUR_EXHAUSTIVE_SWEEP=1): exit 0, 867 tests, ~316s. --- test/dune | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'test/dune') diff --git a/test/dune b/test/dune index 50bdee2..0a3ade6 100644 --- a/test/dune +++ b/test/dune @@ -79,6 +79,24 @@ ../data/ef/adjustments.sexp ../data/ef/lectionary.sexp ../data/ef/commons.sexp + ; Task 5 (2026-08-25-colitur-of-phases-3-5), `colitur day|readings --rite + ; of`: the OF calendar's own runtime files, same "the cram sandbox only + ; ever gets what this stanza names" trap as every entry around them. + ../data/of/calendar-2002.sexp + ../data/of/amendments/001-padre-pio.sexp + ../data/of/amendments/002-juan-diego-cuauhtlatoatzin.sexp + ../data/of/amendments/003-our-lady-of-guadalupe.sexp + ../data/of/amendments/004-john-xxiii-john-paul-ii.sexp + ../data/of/amendments/005-mary-magdalene-rank.sexp + ../data/of/amendments/006-mary-mother-of-the-church.sexp + ../data/of/amendments/007-paul-vi.sexp + ../data/of/amendments/008-our-lady-of-loreto.sexp + ../data/of/amendments/009-faustina-kowalska.sexp + ../data/of/amendments/010-narek-avila-hildegard.sexp + ../data/of/amendments/011-martha-mary-lazarus.sexp + ../data/of/amendments/012-teresa-of-calcutta.sexp + ../data/of/amendments/013-john-henry-newman.sexp + ../data/of/lectionary.sexp ; Task 12, `colitur publish`: the cram sandbox only ever gets what this ; stanza names explicitly (unlike a plain `dune build`, it does not fall ; back to the workspace root's own default alias), so schema/day-v1.json -- cgit v1.3