aboutsummaryrefslogtreecommitdiff
path: root/test/test_oracle.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 11:36:33 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 11:36:33 +0200
commit0281a846ac7c22d22990a6664a37205930a94b7d (patch)
tree3b3d4140d0b3feb005a1bf36b52458b662944e3c /test/test_oracle.ml
parent01219763c87c84175fcfa469882c6f30a56720d5 (diff)
downloadcolitur-0281a846ac7c22d22990a6664a37205930a94b7d.tar.gz
colitur-0281a846ac7c22d22990a6664a37205930a94b7d.zip
fix(ef): the Assumption and St Lawrence vigils are violet (RG 128)
RG 128, transcribed in the rules register since 2026-08-11, gives violet to "vigils of II and III class outside Paschaltide". The Vigil of the Assumption (14 August, II class) carried White and the Vigil of St Lawrence (9 August, III class) carried Red. Both are outside Paschaltide, so both are violet. The Ascension's vigil is untouched: it is the one II-class vigil inside Paschaltide and was already correctly white. The rule had been sitting in the register, disagreeing with the shipped data, since before the data was bootstrapped. It was invisible because colitur, lectio and missalemeum all carried the same two wrong colours -- colitur was bootstrapped from lectio, lectio's ini is generated from missalemeum, and missalemeum uses Divinum Officium's data files. Three sources agreeing is one source counted three times, and the differential and the oracle both went green on the shared error. It surfaced only against witnesses outside that tree: a published 1962 Ordo flagged the Assumption's, and O'Connell, The Celebration of Mass 4th ed. (1964), section 4(c) and footnote 169, gave the general rule and with it St Lawrence's, which the Ordo omits entirely. Two golden pins added, in years where each vigil is actually observed rather than impeded. The divergence this creates against every DO-lineage source is cited in both allow-lists: C37 (lectio, 77 rows -- 92 possible minus 15 where the vigil falls on a Sunday) and M29 (missalemeum, 3 rows in 2026-2027 and 2 in each of 2035 and 2038). Both gated on the exact slugs or dates and on colour alone, so any other divergence on those days would still surface. Also recorded, no code change: rose on Gaudete and Laetare stays. RG 131 is permissive ("adhiberi possunt") and the Ordo prints violet, so the colour field carries a permission rather than a requirement on those two Sundays a year -- a decided position now, not an unexamined one.
Diffstat (limited to 'test/test_oracle.ml')
-rw-r--r--test/test_oracle.ml31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index 5177716..129c43b 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -1323,6 +1323,21 @@ let m25_dates = [ "2026-03-09"; "2026-03-24"; "2027-03-01"; "2027-03-16" ]
to distinguish this population from a genuinely new, unrelated
citation bug on some other Time-after-Pentecost feria): the SAME
discipline this file's own header names for every other entry here. *)
+(* M29 (ef-oconnell-rubrics) -- RG 128: violet for "vigils of II and III
+ class outside Paschaltide". The Vigil of St Lawrence (9 August, III class)
+ and the Vigil of the Assumption (14 August, II class) both qualify;
+ missalemeum keeps red and white respectively, as lectio and colitur also
+ did before this branch, because all three descend from Divinum Officium's
+ data files. This is the one divergence class in the file where the oracle
+ is not an independent witness against colitur at all -- it is colitur's own
+ discarded ancestor. See data/ef/expected-divergences.sexp's C37, the same
+ fix seen from the lectio side, and register 6.20 on the shared lineage.
+ Spans all three oracle windows. 2026-08-09 is absent because it is a
+ Sunday that year and the vigil never occurs; checked with `date -d`. *)
+let m29_dates =
+ [ "2026-08-14"; "2027-08-09"; "2027-08-14"; "2035-08-09"; "2035-08-14"; "2038-08-09";
+ "2038-08-14" ]
+
let m26_dates =
[ "2026-01-03"; "2026-01-10"; "2026-02-14"; "2026-06-02"; "2026-06-03"; "2026-06-20"; "2026-06-27";
"2026-07-04";
@@ -1477,6 +1492,7 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
List.mem c.c_date m27_dates
&& subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ]
then Some "M27"
+ else if List.mem c.c_date m29_dates && subset diffs [ Colour_f ] then Some "M29"
else None
(* ---------------------------------------------------------------------- *)
@@ -1919,6 +1935,17 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs =
Some "IMPEDED-SUNDAY-COMM (M8's rule, RG 109(a)/111(a))"
else if List.mem Comm_identity_unresolved diffs then
Some "COMM-IDENTITY-UNRESOLVED (temporal-origin, no English name -- M15's limit)"
+ (* RG 128 -- the two vigils of II/III class outside Paschaltide whose
+ colour this branch (ef-oconnell-rubrics) corrected from the values
+ inherited via lectio from missalemeum's own Divinum Officium data.
+ Same population as M29 in the 2026-2027 window and C37 in the lectio
+ differential; named here in this window's own vocabulary. Gated on the
+ exact date and colour alone, so any other divergence on these days
+ would still surface. *)
+ else if
+ List.mem c.c_date [ "2035-08-09"; "2035-08-14"; "2038-08-09"; "2038-08-14" ]
+ && diffs = [ Colour_f ]
+ then Some "VIGIL-COLOUR-RG128 (M29, colitur; see C37)"
else None
(* COMMEMORATIONS join the live-window comparison (2026-08-18).
@@ -2038,6 +2065,10 @@ let test_2038_class_counts () =
("CHRIST-THE-KING-WEEK (M26 shape 2b)", 2);
("CHRISTMAS-MULTI-MASS (M27)", 1);
("COLOUR (M21)", 7);
+ (* RG 128, ef-oconnell-rubrics: the two vigils of II/III class outside
+ Paschaltide. 2 of 2 possible -- neither 9 nor 14 August 2038 is a
+ Sunday, so both vigils are actually observed that year. *)
+ ("VIGIL-COLOUR-RG128 (M29, colitur; see C37)", 2);
("COMM-NAME-FORM (same entity, different English name)", 2);
("COMM-ONLY-TIE-BREAK (RG-under-determined convention -- register 6.16)", 1);
("JOSEPH-ANNUNCIATION-TRANSFER-ORDER (C14's own collision)", 2);