summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 21:12:35 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 21:12:35 +0200
commitdcce3a5936c2232aaabbb2e8552be24ea7decdbf (patch)
tree98a55dd0fba8435ba4c832244b1b103f4f1c2be6 /test
parentd8ce8c3806111e1d1ba54d2ef99a8ae550c7567b (diff)
downloadcolitur-dcce3a5936c2232aaabbb2e8552be24ea7decdbf.tar.gz
colitur-dcce3a5936c2232aaabbb2e8552be24ea7decdbf.zip
fix(lectionary): the week after Trinity says its own assigned Mass
RG 299 located (scan1:1096-1098), which does two things at once. First it closes a standing gap: the ferial-Mass selection rule was recorded in the register as unconfirmed against the primary source, and step 3 said so in its own comment -- "lectio's own observed behaviour, not a confirmed Missal citation". It is confirmed now. "In reliquis feriis dicitur Missa dominicae praecedentis, nisi a rubricis aliter provisum sit", restated in the propers as "...nisi propria Missa assignetur". Second, that escape clause splits M26 shape 2 in half, which is why the shape was never resolvable as one thing. Shape 2(a), the week after Trinity, is fixed. Trinity is the temporal identity of its own Sunday, so a plain walkback lands on Trinity's Mass -- but the Missal prints a named formula for the following week, "Missa dominicae I post Pentecosten" (scan1:21758), precisely because the feast has taken that Sunday's own. Those ferias now resolve at step 2 from it and never reach the walkback. Shape 2(b), Christ the King's week, turns out not to be a bug at all. No proper Mass is assigned there -- checked directly, no rubric precedes that Mass heading (scan1:39163ff) -- so RG 299's default governs and "the Mass of the preceding Sunday" genuinely is Christ the King's own, which is what colitur emits and missalemeum does not. Kept open only because no rubric specific to that week was located either way; the verdict is now argued from the primary text rather than resting on oracle disagreement. No Thursday in the slug list: Corpus Christi is Easter+60, which IS that week's Thursday every year, so the ferial slug never exists. Found by the bootstrap's own reachability guard refusing to emit a key no Temporal_ef slug can match, not reasoned out in advance. Allow-lists: C35 opened (69 rows, verdict colitur -- lectio still walks back); C17 narrowed 406 to 397, nine Saturdays moving to C35 because they carry both a citation and a colour difference, with C35 gated to require the citation so a colour-only Saturday still falls to C17; M26 narrowed 30 to 27; M18 widened 352 to 355, the same three days keeping only their observed-identity difference. Register: section 6.11.
Diffstat (limited to 'test')
-rw-r--r--test/test_differential.ml37
-rw-r--r--test/test_lectionary.ml2
2 files changed, 38 insertions, 1 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml
index 31ae046..eb83c0e 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -719,6 +719,32 @@ let year_of_date date = int_of_string (String.sub date 0 4)
and citation shape are similar. *)
let holy_name_sunday_slug = "ef-holy-name-sunday"
+(* C35 -- movable-date-specs follow-up (2026-08-17); this is test_oracle.ml's
+ own M26 shape 2(a), now FIXED rather than allow-listed there.
+
+ RG 299 (scan1.txt:1096-1098) is the general ferial rule: "In reliquis
+ feriis dicitur Missa dominicae praecedentis, NISI A RUBRICIS ALITER
+ PROVISUM SIT", restated in the propers (scan1.txt:4933-4935) as "...nisi
+ propria Missa assignetur". The Missal DOES assign one for this week: it
+ prints "Missa dominicae I post Pentecosten" (heading, scan1.txt:21758)
+ immediately after Trinity Sunday's Mass, precisely because Trinity has
+ taken that Sunday's own -- 1 Ioann. 4, 8-21 (scan1.txt:21801-21802) /
+ Luc. 6, 36-42 (scan1.txt:21813-21814).
+
+ colitur now resolves these ferias at step 2 from that formula. lectio walks
+ back to Trinity Sunday's Mass instead (Rom 11:33-36 / Matt 28:18-20) --
+ which is exactly what colitur did until this fix. Verdict colitur, on the
+ Missal's own printed heading.
+
+ No Thursday: Corpus Christi is Easter+60, which IS the Thursday of this
+ week every year, so that ferial slug never exists at all -- found by the
+ bootstrap's own reachability guard, which refuses to emit a key no
+ Temporal_ef slug can ever match. *)
+let trinity_week_slugs =
+ [ "ef-time-after-pentecost-1-monday"; "ef-time-after-pentecost-1-tuesday";
+ "ef-time-after-pentecost-1-wednesday"; "ef-time-after-pentecost-1-friday";
+ "ef-time-after-pentecost-1-saturday" ]
+
let christmas_1_weekday_slugs =
List.map (fun wd -> "ef-christmas-1-" ^ wd) [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday" ]
@@ -1141,6 +1167,17 @@ let layer_c_reason (l : row) (c : row) diffs =
(Saturday stays C25's own, narrowed note above explains why). *)
diffs = [ First_f; Gospel_f ] && List.mem c.slug christmas_1_weekday_slugs
then Some "C30"
+ (* [Colour_f] is admitted only on the Saturday of this week, and only
+ alongside the citation difference: that day is ALSO an unoccupied
+ IV-class Saturday, so RG 78's votive Office of the BVM makes colitur
+ white where lectio (which builds no such office) is green -- C17's own
+ shape, landing on the same day as this one. [First_f] is REQUIRED, so a
+ colour-only Saturday still falls to C17 and cannot be absorbed here. *)
+ else if
+ List.mem c.slug trinity_week_slugs
+ && subset diffs [ First_f; Gospel_f; Colour_f ]
+ && List.mem First_f diffs
+ then Some "C35"
else if
(* C31 -- Task 9: the SAME rubric's own next sentence, "diebus
ferialibus a 7 ad 12 ianuarii ante dominicam I post Epiphaniam...
diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml
index 1f8ed75..7dbb253 100644
--- a/test/test_lectionary.ml
+++ b/test/test_lectionary.ml
@@ -116,7 +116,7 @@ let test_ef_data_file_loads () =
directly from the Missal, two major movable feasts with
previously no entry at all ([movable_feast_entries], +2).
116 + 1 + 6 + 1 + 2 + 3 + 2 + 15 + 2 = 148. *)
- Alcotest.(check int) "entry count" 148
+ Alcotest.(check int) "entry count" 153
(List.length (Lectionary.entries l));
(match Lectionary.find l (slug "ef-lent-1-monday") with
| Some [ a; b ] ->