aboutsummaryrefslogtreecommitdiff
path: root/test/test_oracle.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 12:11:05 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 12:11:05 +0200
commita6daed7820a97f4032f21964b5b1bb30fe00b36b (patch)
treefa8886ee97dba5a696fb2c7d8e62798f832ed538 /test/test_oracle.ml
parentca4287a6e99e14846f3560106156ef2b1c4b8cf2 (diff)
downloadcolitur-a6daed7820a97f4032f21964b5b1bb30fe00b36b.tar.gz
colitur-a6daed7820a97f4032f21964b5b1bb30fe00b36b.zip
fix(ef): ubaldus and didacus are III-class feasts, not commemorations
Both carried rank Class3 with status Commemoration_only, bootstrapped from lectio, which inherits it from missalemeum, which is generated from Divinum Officium. The Missal's own universal calendarium ranks both "III classis" outright, with no commemoration rubric: "S. Ubaldi Ep. et Conf., III classis" (16 May) and "S. Didaci Conf., III classis" (13 November), corroborated in the second scan and in a published 1962 Ordo. Universal by construction, not by assumption: the calendarium carries no "pro aliquibus locis" marker in its 573 lines while the wider Missal carries 79 of them elsewhere. Each saint also has his own Mass entry in the Proprium, which a bare commemoration never has -- a commemoration carries an oration only. Found by auditing ALL 290 fixed-date entries against that calendarium, day by day, anchored on the Roman calends column because the arabic day column is OCR-wrecked and the dominical-letter column vanishes in some months. These two were the only status defects in the whole file. The 15 days the automated pass could not cover were read by hand and all agree. Neither needed a proper authored: each takes its Mass from a Common with only its own Oratio proper, per its own rubric at its own date. ubaldus shares patrick's Common exactly. didacus needed one newly transcribed -- common-of-a-confessor-not-a-bishop-2, the "Altera Missa" Iustus, 1 Cor 4:9-14 and Luke 12:32-34, read independently in both scans, which agree, so the page-image third reading this file's method requires on disagreement was not triggered. Blast radius, full 1583-9999 sweep, every day classified: 13 036. That is 5 564 ubaldus observed, 7 196 didacus observed, and 276 where the Ascension Vigil still wins on 16 May but its single RG 111(c) slot passes from rogation-wednesday to ubaldus -- correct and already pinned, since the Rogation days are the MINOR Litanies and so an ordinary commemoration, which RG 113's table order ranks below a III-class feast. Cited as C38 (70 rows) and M30 (3); C8, C17 and M18 shrink accordingly, each with the reason recorded rather than the count silently adjusted.
Diffstat (limited to 'test/test_oracle.ml')
-rw-r--r--test/test_oracle.ml37
1 files changed, 36 insertions, 1 deletions
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index 129c43b..7ee3848 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -1334,6 +1334,20 @@ let m25_dates = [ "2026-03-09"; "2026-03-24"; "2027-03-01"; "2027-03-16" ]
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`. *)
+(* M30 (ef-sanctoral-status) -- `ubaldus` (16 May) and `didacus` (13 Nov),
+ promoted from Commemoration_only to Feast on the Missal's own universal
+ calendarium ("III classis" outright, no commemoration rubric, and a Mass
+ entry of their own in the Proprium). missalemeum keeps them as
+ commemorations, so on these days colitur observes the SAINT where the
+ oracle observes the feria: rank, observed identity and both citations
+ differ together, and the commemoration colitur used to emit is gone.
+ Colour differs only on 13 November, where the ferial green gives way to
+ the confessor's white; 16 May is in Paschaltide, already white. The same
+ population as C38 in the lectio differential -- and, as there, the oracle
+ here is colitur's own discarded ancestor rather than an independent
+ witness (register 6.20). *)
+let m30_dates = [ "2026-05-16"; "2026-11-13"; "2027-11-13" ]
+
let m29_dates =
[ "2026-08-14"; "2027-08-09"; "2027-08-14"; "2035-08-09"; "2035-08-14"; "2038-08-09";
"2038-08-14" ]
@@ -1493,6 +1507,11 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
&& 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 if List.mem c.c_date m30_dates
+ && subset diffs
+ [ Rank; Colour_f; Comm_presence; Comm_count; Observed_identity_mismatch;
+ Comm_identity_unresolved; First_mismatch; Gospel_mismatch ]
+ then Some "M30"
else None
(* ---------------------------------------------------------------------- *)
@@ -1844,7 +1863,19 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs =
nh = 0 || at 0
in
let first_is s = match c.c_first with Some f -> contains f s | None -> false in
- if contains title "Mass of the B. V. M." then Some "BVM-SATURDAY-MASS (M26 shape 1)"
+ (* ef-sanctoral-status: `didacus`, promoted to Feast on the Missal's own
+ calendarium. 13 November 2038 is a SATURDAY, so before the promotion the
+ day kept RG 78's votive Office of the BVM (nothing else occupied it) and
+ after it the III-class feast does. Classified here explicitly, ahead of
+ every other branch, because without it the day falls through to the
+ BVM-Saturday branch and is labelled as the very office the promotion
+ REMOVED -- a label that would read as "still a BVM Saturday" and hide the
+ real cause. Same population as M30 in the 2026-2027 window and C38 in the
+ lectio differential. 16 May 2038 is a Sunday, so `ubaldus` is impeded and
+ never reaches this window at all. *)
+ if c.c_date = "2038-11-13" then
+ Some "PROMOTED-FEAST-RG-CALENDARIUM (M30, colitur; see C38)"
+ else if contains title "Mass of the B. V. M." then Some "BVM-SATURDAY-MASS (M26 shape 1)"
else if first_is "Col 1:12-20" then Some "CHRIST-THE-KING-WEEK (M26 shape 2b)"
else if diffs = [ Colour_f ] && List.mem c.c_observed_slug m21_2038_slugs then Some "COLOUR (M21)"
else if first_is "Judith" then Some "JUDITH (M28, register 6.6)"
@@ -2069,6 +2100,10 @@ let test_2038_class_counts () =
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);
+ (* ef-sanctoral-status: 13 November 2038 is a Saturday, so the
+ promoted `didacus` displaces RG 78's BVM Office there. 1 of 2
+ possible: 16 May 2038 is a Sunday and `ubaldus` is impeded. *)
+ ("PROMOTED-FEAST-RG-CALENDARIUM (M30, colitur; see C38)", 1);
("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);