aboutsummaryrefslogtreecommitdiff
path: root/test/test_differential.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 10:04:21 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 10:04:21 +0200
commit59fbda87d565ad9b98c2493e9703390cd988609d (patch)
tree71ebfb8e9568cd5003c10dabc8804fba4ca66e76 /test/test_differential.ml
parent254cfd7d9111b0f23f9c44e82d3e31d5817dc5a4 (diff)
parente30a4be5a2594fb3b6c4b51345d138cd89ba78ad (diff)
downloadcolitur-59fbda87d565ad9b98c2493e9703390cd988609d.tar.gz
colitur-59fbda87d565ad9b98c2493e9703390cd988609d.zip
Merge branch 'ef-rg112-rg110': the Holy Family, RG 112(a), observed identity
Builds the Feast of the Holy Family (RG 17(b), first Sunday after Epiphany, II class), which did not exist in colitur at all -- it emitted an ordinary Sunday on all 8417 days the feast occurs. Adds RG 112(a)'s exclusion, on RG 95 paragraph 2's authority ('Si vero duo festa eiusdem Divinae Personae ... fit de festo, quod in tabella praecedentiae superiorem obtinet locum, et aliud omittitur'), corroborated by RG 112(a) and by the Holy Family Mass propers' own 13-January rubric. Three validation layers had missed the missing feast, each for its own reason: the differential because lectio lacks it too and shares colitur's data lineage; the golden layer for want of a pin; and the oracle because it compared the observed day's rank and colour but never its identity. That last gap is the more important half of this change and is now closed -- the oracle compares observed identity, with the unresolvable population counted and pinned rather than silently skipped. Also rescales RG 91's band table x10. entry_14_movable_band had been a negative sentinel, chosen to avoid collision with a real table position; it also inverted ordering, making a movable II-class feast of the Lord outrank every I-class day. Unreachable on universal data, live the moment a diocesan overlay places a I-class proper or indult feast in the 7-13 January window. A half-row is now an ordinary position between its neighbours. The rescale was verified entry-by-entry against a photographic scan and moves zero days across the domain. RG 110 is NOT built despite the branch name; it remains open, as do the Holy Name of Jesus office (missing in 3619 of 8417 years) and RG 98's transfer-ordering mechanism.
Diffstat (limited to 'test/test_differential.ml')
-rw-r--r--test/test_differential.ml34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml
index 89e6873..94adb2c 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -471,6 +471,35 @@ let nativity_octave_day_slugs =
note for the full account of why that was wrong). *)
let joseph_annunciation_collision_dates_2005_2050 = [ "2008-04-01"; "2035-04-03"; "2046-04-03" ]
+(* C15 -- ef-rg112-rg110 task: SPLIT OUT of C1's own blanket 6-13 January
+ window, not a new kind of divergence -- the same discipline C13 (now
+ closed, see the header above) already established for this exact date,
+ and the SAME check the task brief asked for explicitly ("if C1 now
+ absorbs a different observed celebration, split it out"). Before this
+ task, colitur had no Holy Family office at all: on these seven dates (13
+ January, the one civil day it falls on a Sunday in the 2005-2050 window
+ -- 2008, 2013, 2019, 2030, 2036, 2041, 2047), colitur's own generic
+ Sunday fallback happened to lose outright to the fixed Commemoration of
+ the Baptism of the Lord (RG16(a)'s existing "festum Domini beats an
+ ordinary Sunday" mechanism, subject Lord already present in the
+ REBOOTSTRAPPED data), producing the SAME slug lectio's own tridentine-
+ calendar.ini shows for that date ("commemoration-of-the-baptism-of-the-
+ lord") -- only [Season] differed (RG 72-73 vs lectio's own 6 January
+ boundary), squarely inside C1's own shape. Now that Holy Family is built
+ (RG 17(b)) and correctly outranks the fixed Baptism (RG 91 entry 14,
+ "primum mobilia, deinde fixa"; RG 112(a) excludes the Baptism as a
+ commemoration too, both this task's own precedence_ef.ml changes),
+ colitur's own slug on these seven dates changes to
+ "ef-time-after-epiphany-sunday-1" (Holy Family's own, unchanged from the
+ ordinary-Sunday key it always carried, temporal_ef.ml's own comment on
+ why) -- a GENUINE identity divergence against lectio, which has no Holy
+ Family at all and still shows the fixed Baptism observed there. Gated on
+ the literal 7-date list AND colitur's own slug (the same guard C1/C6/C8/
+ C14 already apply, fix round 1's own finding 1: a predicate must pin
+ WHICH celebration it is about, not only the date). *)
+let holy_family_baptism_collision_dates_2005_2050 =
+ [ "2008-01-13"; "2013-01-13"; "2019-01-13"; "2030-01-13"; "2036-01-13"; "2041-01-13"; "2047-01-13" ]
+
(* [layer_c_reason l c diffs] returns the [data/ef/expected-divergences.sexp]
[id] this row-pair's remaining (post Layer A/B) diff set belongs to, or
[None] if nothing here explains it (a genuine, uncovered failure). *)
@@ -516,6 +545,11 @@ let layer_c_reason (l : row) (c : row) diffs =
every predicate -- geometry, not this pin. *)
&& String.equal c.slug "joseph-spouse-of-the-bl-virgin-mary"
then Some "C14"
+ else if
+ List.mem l.date holy_family_baptism_collision_dates_2005_2050
+ && subset diffs [ Season; Slug_f ]
+ && String.equal c.slug "ef-time-after-epiphany-sunday-1"
+ then Some "C15"
else None
(* ---------------------------------------------------------------------- *)