From 9ebb06983b7a26db5564302253f2551dfbcf834e Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 26 Aug 2026 23:45:16 +0200 Subject: fix(of): dispatch Holy Family's Normae n.35(a) fallback (W2) temporal_of.ml's temporal only ever reached holy_family's own correct 26-31 December / 30 December fallback logic through sunday_slug, which returns None immediately for a non-Sunday date. In a year 25 December is itself a Sunday (26-31 December then holding no Sunday of its own), the feast vanished entirely and fell through to an ordinary Christmas ferial slug -- confirmed on 2022, 2033, 2039, 2044, 2050 (and roughly 1583..9999 domain-wide, one year in seven). temporal's dispatch now consults holy_family directly, independent of weekday, between the sunday_slug and christmas_feria_slug branches, carrying the identical identity the Sunday case already builds (subject Lord, holy_family_names, rank Festum). holy_family and anchors were already correct and needed no change. Added a direct example-based test for the fallback across five affected years plus a control for the unaffected Sunday case, and a domain-wide property (Holy Family is observed in every liturgical year 1583-9999) folded into both the 200-sample QCheck run and the exhaustive sweep -- the property that would have caught this directly. Un-pinned the now-fixed behaviour everywhere it was recorded as known-wrong: test_rite_of.ml's own 1583 pin (rewritten to assert the fix), test_validate_of.ml's own independent exhaustive-sweep counter and landmark-year filter (found via make check, not the initial survey), and data/of/expected-divergences-litcal.sexp's L2/L3 allow-list entries against the litcal oracle (closed and removed, with a dedicated regression test replacing the allow-list's own silence). --- data/of/expected-divergences-litcal.sexp | 46 +++++++++++++------------------- 1 file changed, 18 insertions(+), 28 deletions(-) (limited to 'data') diff --git a/data/of/expected-divergences-litcal.sexp b/data/of/expected-divergences-litcal.sexp index f4de6f4..e0b8b2a 100644 --- a/data/of/expected-divergences-litcal.sexp +++ b/data/of/expected-divergences-litcal.sexp @@ -71,34 +71,24 @@ (note "Holy Thursday (evening Mass)/Good Friday/Holy Saturday: litcal tags EASTER_TRIDUUM, colitur has no Triduum season value and keeps the whole day Lent -- a cited design decision, not a defect.") (expected_rows 36)) -; L2, L3 -- task 6 (2026-08-26): the litcal layer extended beyond season/week -; to GRADE and IDENTITY (test_litcal_of.ml's own header). Both fire on the -; SAME date, the SAME already-known, already-PINNED-NOT-FIXED gap -; test_rite_of.ml's own [test_holy_family_fallback_1583_known_wrong_ferial]/ -; [is_known_holy_family_fallback_gap] record: Normae n. 35(a)'s "Dominica -; infra octavam Nativitatis, vel, ea deficiente, die 30 decembris" fallback -; is never reached by {!Rite_of.Temporal_of.temporal} in a year 25 December -; is itself a Sunday (its Holy-Family test lives inside the Sunday-only -; dispatch arm of [sunday_slug], so the 30-December fallback [holy_family] -; itself computes correctly is never actually consulted there). 2033 is this -; fixture's own live witness -- 1583 (test_rite_of.ml's own pin) is outside -; the fixture's 2023-2035 window, 2033 is the only affected year inside it -; (2005, 2011, 2016, 2022, 2039, 2044, 2050 are the gap's other known -; occurrences, all likewise outside this window). VERDICT "colitur": this is -; colitur's own known defect, not litcal's -- litcal correctly names -; "HolyFamily" on 30 December 2033; colitur observes an ordinary -; Nativity-octave feria instead. NOT fixed here, per this task's own brief -; ("do not fix any of them here. Keep them pinned"). -((id L2) - (citation "Normae n. 35(a); test_rite_of.ml's own test_holy_family_fallback_1583_known_wrong_ferial") - (verdict colitur) - (note "30 December 2033 (25 December 2033 is a Sunday, so the 26-31 December window has no Sunday of its own): litcal correctly names HolyFamily (band 50/60 expected); colitur's known Normae n.35(a) fallback gap leaves it an ordinary Nativity-octave feria (band 90) -- the GRADE half of the divergence.") - (expected_rows 1)) -((id L3) - (citation "Normae n. 35(a); test_rite_of.ml's own test_holy_family_fallback_1583_known_wrong_ferial") - (verdict colitur) - (note "30 December 2033: the IDENTITY half of the same divergence L2 records for grade -- colitur's observed slug is an ordinary ferial slug, not of-holy-family.") - (expected_rows 1)) +; L2, L3 -- CLOSED, REMOVED (W2 fix, CLAUDE.md, temporal_of.ml). These two +; entries used to record a defect from task 6 (2026-08-26): the litcal layer +; extended beyond season/week to GRADE and IDENTITY, and both fired on the +; SAME date, the SAME then-known, then-PINNED-NOT-FIXED gap test_rite_of.ml +; used to record: Normae n. 35(a)'s "Dominica infra octavam Nativitatis, vel, +; ea deficiente, die 30 decembris" fallback was never reached by +; {!Rite_of.Temporal_of.temporal} in a year 25 December is itself a Sunday +; (its Holy-Family test lived inside the Sunday-only dispatch arm of +; [sunday_slug], so the 30-December fallback [holy_family] itself computed +; correctly was never actually consulted there). 2033 was this fixture's own +; live witness. {!Rite_of.Temporal_of.temporal} now consults +; {!Rite_of.Temporal_of.holy_family} directly, independent of weekday, so +; litcal and colitur agree on 30 December 2033 on both axes -- test_litcal_of +; .ml's own [test_no_holy_family_2033_divergence] asserts this directly. +; `expected_rows` for both would now be 0 (no divergent rows remain), so the +; entries are removed rather than kept as zero-value ghosts, the same +; "CLOSED, REMOVED" discipline data/ef/expected-divergences-missalemeum.sexp +; already follows for a closed entry. ; L4 -- litcal's own [grade_lcl] text "celebration with precedence over ; solemnities" (this fixture's own display word for Tabula I.1/I.2) is ALSO -- cgit v1.3