summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_differential.ml167
-rw-r--r--test/test_lectionary.ml96
2 files changed, 177 insertions, 86 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml
index bdb3377..998a8fa 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -763,38 +763,82 @@ let lectio_no_reading_slugs =
itself is not always the observed day). *)
let lent_ember_slugs = [ "ef-lent-ember-wed"; "ef-lent-ember-fri"; "ef-lent-ember-sat" ]
-(* C23/C24 (task 8, fix round 1, coordinator review, Critical 1): Holy
+(* C23 (task 8, fix rounds 1-2, coordinator review, Critical 1): Holy
Week's own citations (tools/bootstrap_lectionary.ml's own
[holy_week_entries] comment has the full Missal citations and the two-
- scan corroboration for each). lectio has no Holy Week propers at all --
- every "ef-passiontide-0-<weekday>" ini section is Passion week's own
- Mass (or, for Tuesday specifically, Holy Tuesday's own Passion Gospel
- riding along on Passion week's own Epistle -- a genuine internal
- inconsistency in lectio's own source, not this project's to fix), so
- lectio shows THAT reused/conflated citation on every Holy Week weekday,
- every year, regardless of what the real Missal prints there.
+ scan corroboration for each of the six days). lectio has no Holy Week
+ propers at all -- every "ef-passiontide-0-<weekday>" ini section is
+ Passion week's own Mass (or, for Tuesday specifically, Holy Tuesday's
+ own data outright -- C26 below), so lectio shows that reused/conflated
+ citation on every Holy Week weekday, every year, regardless of what the
+ real Missal prints there.
- C23 covers the four days colitur now answers correctly and completely
- (Monday, Tuesday, Thursday, Saturday) -- verdict colitur, cited
- directly. C24 covers the two days colitur deliberately answers with []
- instead of a guess (Wednesday, Good Friday -- both genuinely
- multi-lesson liturgies with no single Epistle slot this schema could
- honestly fill; [holy_week_entries]'s own comment has the full argument
- for why forcing a pair would be an uncited editorial choice, not a
- Missal fact). Both entries: gated on colitur's own literal slug list
- and [diffs] staying exactly [First_f; Gospel_f] (identity already
- agrees on both). Every occurrence across the whole 2005-2050 fixture
- falls in all 46 years without exception, on every one of these six
- slugs -- Holy Week recurs every year by construction, so this is not a
- coincidental count the way a collision-driven entry's would be.
- Derived directly from the OCaml comparator's own failure output, not
- hand-counted first and cross-checked after: C23 184 (46 x 4), C24 92
- (46 x 2). *)
-let holy_week_answered_slugs =
- [ "ef-passiontide-2-monday"; "ef-passiontide-2-tuesday"; "ef-passiontide-2-thursday";
- "ef-passiontide-2-saturday" ]
+ CORRECTED, fix round 2: the first pass split this into two entries --
+ C23 for the four days with one unambiguous reading in the Epistle
+ position (Monday, Tuesday, Thursday, Saturday), C24 for Wednesday and
+ Good Friday, left with NO citation at all on the reasoning that neither
+ has an unambiguous Epistle. That reasoning was right about the FIRST
+ slot but the conclusion was wrong and worse than what it replaced: an
+ absent lectionary key does not mean "no reading" to Lectionary_ef.
+ readings, it means step 3 silently resumes the preceding SUNDAY -- so
+ Good Friday, which has no Mass at all, was emitting Palm Sunday's own
+ Epistle and Passion narrative every single year. Fixed at the source
+ (tools/bootstrap_lectionary.ml's own [holy_week_entries]): the GOSPEL is
+ always authored (one unambiguous labelled Passion each day, nothing to
+ choose among); the FIRST slot is filled too, using the SAME "last
+ lesson before the Gospel" convention this file's own Lenten Ember
+ Wednesday entry already establishes for an identical two-peer-lesson
+ shape (neither lesson on either day is labelled "Epistola" the way Holy
+ Saturday's genuinely is, so this remains a stated convention, not a
+ textual fact -- but it is the SAME convention already load-bearing
+ elsewhere in this exact file, not invented to paper over this gap).
+ C24 is retired, not re-adjudicated: its own population (the two days)
+ now has a real citation and folds into C23, which covers all SIX days
+ uniformly.
-let holy_week_unanswered_slugs = [ "ef-passiontide-2-wednesday"; "ef-passiontide-2-friday" ]
+ Gated on the literal 6-slug list and [diffs] staying exactly
+ [First_f; Gospel_f] (identity already agrees on all six). Holy Week
+ recurs every year by construction, so this is not a coincidental count
+ the way a collision-driven entry's would be -- but it is NOT simply
+ 46 x 6 = 276 either: Holy TUESDAY (`ef-passiontide-2-tuesday`) is the
+ one day of the six whose hand-authored citation is BYTE-IDENTICAL to
+ lectio's own value (both draw, independently, on the identical Missal
+ Mass -- C26 below has the full account of why lectio's ini carries
+ Holy Tuesday's data under a Passion-week key), so all 46 of its own
+ rows match outright and never reach this entry at all. Derived
+ directly from the OCaml comparator's own failure output, not
+ hand-counted first and cross-checked after: 230 (276 - 46, confirmed
+ by that same arithmetic, not merely asserted). *)
+let holy_week_slugs =
+ [ "ef-passiontide-2-monday"; "ef-passiontide-2-tuesday"; "ef-passiontide-2-wednesday";
+ "ef-passiontide-2-thursday"; "ef-passiontide-2-friday"; "ef-passiontide-2-saturday" ]
+
+(* C26 (task 8, fix round 2, coordinator review, Important): Passion
+ week's own real Tuesday Mass (tools/bootstrap_lectionary.ml's own
+ [passion_tuesday_entry] comment has the full Missal citation and both
+ scans' line references) -- Dan 14:27, 28-42 / John 7:1-13. lectio's own
+ ini section for this ONE weekday of Passion week is not Passion
+ Tuesday's Mass at all: it is Holy Tuesday's (confirmed independently,
+ footnoted in C23's own predecessor comment before this round acted on
+ it), and lectio's own COMPUTED reading for the civil date it labels
+ "Passion Tuesday" is drawn from that same wrong source -- so colitur's
+ now-correct citation genuinely diverges from lectio's on every single
+ occurrence this office is actually observed, not a data gap on either
+ side that could close. The other five Passion-week weekdays were
+ independently re-verified against the Missal and are correct as
+ lectio already had them -- this is the ONE exception, not a wider
+ pattern. Gated on the literal slug and [diffs] staying exactly
+ [First_f; Gospel_f]. Derived directly from the OCaml comparator's own
+ failure output, not hand-counted first and cross-checked after: 43,
+ not 46 -- traced, not merely accepted: in 2013, 2024 and 2042, Passion
+ Tuesday's own civil date is impeded outright by a competing I-class
+ feast (St Joseph, 19 March, in 2013 and 2024; the Annunciation, 25
+ March, in 2042), so colitur's own OBSERVED slug that day is the
+ saint's, not `ef-passiontide-1-tuesday` at all -- this entry correctly
+ does not fire there, and those three rows already match independently
+ (both engines agree on the saint's own citation, unrelated to this
+ entry). 43 + 3 = 46, the full domain, with no residue. *)
+let passion_tuesday_slug = "ef-passiontide-1-tuesday"
(* C25 (task 8, fix round 1, coordinator review, Important 3(b)) --
[verdict open], the SAME RG 69 gap C6 above re-opened, one hop removed.
@@ -806,25 +850,52 @@ let holy_week_unanswered_slugs = [ "ef-passiontide-2-wednesday"; "ef-passiontide
not the fixed weekday placeholder -- but colitur's [Temporal_ef] gives
both the SAME slug, undifferentiated by weekday (C6's own note, and
data/ef/expected-divergences.sexp's own C6 entry, have the full
- account). Confirmed, not merely inferred,
- that THIS entry is the direct, one-hop-removed consequence of that same
- gap: every single one of these rows' colitur-side citation is "Tit. 3,
- 4-7" (the fixed weekday formulary), because [Lectionary_ef.readings]'
- step 3 resumes the SAME wrongly-undifferentiated Sunday C6 already
- names, not a second, independent cause. A genuine, precisely-diagnosed
- [Temporal_ef] defect -- out of this task's own scope (a behaviour
- change to a shared, multi-round-reviewed kernel-adjacent function) --
- recorded here per the coordinator's own instruction ("record it
- prominently... for a follow-up task"), not fixed and not left silently
- failing. Gated on the literal 4-slug family (the only members of
- [ef-christmas-1-<weekday>] this mechanism can ever reach -- Monday and
- Tuesday of that same week are always claimed first by the Circumcision
- or Holy Name's own DIRECT entries, so they can never fall through to
- this specific step-3 chain) and [diffs] staying exactly
+ account). Confirmed, not merely inferred, that THIS entry is the
+ direct, one-hop-removed consequence of that same gap: every single one
+ of these rows' colitur-side citation is "Titus 3:4-7" (the fixed
+ weekday formulary), because [Lectionary_ef.readings]' step 3 resumes
+ the SAME wrongly-undifferentiated Sunday C6 already names, not a
+ second, independent cause. A genuine, precisely-diagnosed [Temporal_ef]
+ defect -- out of this task's own scope (a behaviour change to a
+ shared, multi-round-reviewed kernel-adjacent function) -- recorded
+ here per the coordinator's own instruction ("record it prominently...
+ for a follow-up task"), not fixed and not left silently failing.
+
+ CORRECTED, fix round 2 (coordinator review): this entry's own reason
+ for the literal 4-slug list (Wednesday/Thursday/Friday/Saturday, never
+ Monday/Tuesday) previously claimed Monday and Tuesday "are always
+ claimed first by the Circumcision's or Holy Name's own direct
+ entries" -- FALSIFIED by 2028-01-03/04, real dates that genuinely exist
+ as their own `ef-christmas-1-{monday,tuesday}` slugs and genuinely
+ resume via step 3 (they are not "claimed away" from existing at all).
+
+ A first replacement of this reasoning, hand-derived from the weekday
+ arithmetic, was ALSO wrong on a second reading (an off-by-one: 2
+ January being a Sunday makes 3 January a MONDAY, not a Tuesday) and is
+ not repeated here -- this project's own discipline is to trust
+ measurement over a second unverified derivation. What is stated instead
+ is the DIRECTLY OBSERVED fact, from an exhaustive sweep of every
+ `ef-christmas-1-monday`/`ef-christmas-1-tuesday` occurrence across
+ 2004-2051 against the real resolver (not merely the slug, the actual
+ resolved citation): `ef-christmas-1-monday` occurs 21 times in that
+ range and resolves to Holy Name Sunday's own citation (Gal 4:1-7/Luke
+ 2:33-40) EVERY time; `ef-christmas-1-tuesday` occurs 22 times and
+ resolves to EITHER Holy Name Sunday's citation OR the Circumcision's
+ (Titus 2:11-15/Luke 2:21) -- both real, correct, directly-cited
+ entries, confirmed never the wrong Nativity-Octave-Sunday value C6
+ above names. Both weekdays fall close enough to 1-2 January that their
+ own preceding-Sunday walk stays within January; Wednesday/Thursday/
+ Friday/Saturday are far enough from the nearest Sunday that the SAME
+ walk can reach past 2 January into December when Holy Name Sunday
+ does not exist that year, landing on C6's own wrongly-undifferentiated
+ Sunday instead -- offered as the general shape of why the two groups
+ differ, not re-asserted as a proven arithmetic rule a third time.
+ Gated on the literal 4-slug family and [diffs] staying exactly
[First_f; Gospel_f] (identity already agrees -- this is a pure content
- consequence). Derived directly from the OCaml comparator's own failure
- output, not hand-counted first and cross-checked after: 57
- (19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively). *)
+ consequence). Derived directly from the OCaml
+ comparator's own failure output, not hand-counted first and cross-
+ checked after: 57 (19 + 19 + 13 + 6, Wednesday/Thursday/Friday/
+ Saturday respectively). *)
let rg69_one_hop_slugs =
[ "ef-christmas-1-wednesday"; "ef-christmas-1-thursday"; "ef-christmas-1-friday";
"ef-christmas-1-saturday" ]
@@ -933,8 +1004,8 @@ let layer_c_reason (l : row) (c : row) diffs =
then Some "C20"
else if List.mem c.slug rg69_one_hop_slugs && diffs = [ First_f; Gospel_f ] then Some "C25"
else if List.mem c.slug lent_ember_slugs && diffs = [ First_f; Gospel_f ] then Some "C22"
- else if List.mem c.slug holy_week_answered_slugs && diffs = [ First_f; Gospel_f ] then Some "C23"
- else if List.mem c.slug holy_week_unanswered_slugs && diffs = [ First_f; Gospel_f ] then Some "C24"
+ else if List.mem c.slug holy_week_slugs && diffs = [ First_f; Gospel_f ] then Some "C23"
+ else if String.equal c.slug passion_tuesday_slug && diffs = [ First_f; Gospel_f ] then Some "C26"
else None
(* ---------------------------------------------------------------------- *)
diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml
index 8fcf8e9..e88f103 100644
--- a/test/test_lectionary.ml
+++ b/test/test_lectionary.ml
@@ -84,21 +84,25 @@ let test_ef_data_file_loads () =
(* 119 lectio ini sections, translated/widened/renamed into colitur's
own Temporal_ef vocabulary, PLUS hand-authored/derived entries
(tools/bootstrap_lectionary.ml's own [colitur_keys]/
- [vigil_entries]/[holy_week_entries]/[nativity_octave_entries]/
- [derived_entries] comments have the full account, task 8, branch
- ef-lectionary, fix round 1): "ef-christmas-sunday-0" widens into
- itself PLUS "ef-holy-name-sunday" (+1); the six Passiontide/Lent-
- Ember sections translate/rename 1:1 (no count change: Passiontide
- no longer widens into two colitur keys since fix round 1's
- Critical 1 correction, and the three Lent Ember sections rename
- rather than widen); one hand-authored entry sourced from lectio's
- SANCTORAL calendar, not this lectionary ini ([ef-nativity-vigil],
- +1); four hand-authored directly from the Missal, Holy Week
- (+4); three hand-authored directly from the Missal, the fixed
- Nativity-Octave days (+3); one entry derived from an
- already-translated one rather than re-typed ([ef-holy-name], +1).
- 119 + 1 + 1 + 4 + 3 + 1 = 129. *)
- Alcotest.(check int) "entry count" 129
+ [vigil_entries]/[holy_week_entries]/[passion_tuesday_entry]/
+ [nativity_octave_entries]/[derived_entries] comments have the full
+ account, task 8, branch ef-lectionary, fix rounds 1-2):
+ "ef-christmas-sunday-0" widens into itself PLUS "ef-holy-name-
+ sunday" (+1); the three Lent Ember sections rename 1:1 (no count
+ change); "ef-passiontide-0-tuesday" is EXCLUDED (fix round 2,
+ Important -- it is Holy Tuesday's data, not Passion Tuesday's,
+ -1); the other five Passiontide sections rename 1:1 (no count
+ change); one hand-authored entry sourced from lectio's SANCTORAL
+ calendar, not this lectionary ini ([ef-nativity-vigil], +1); SIX
+ hand-authored directly from the Missal, all of Holy Week (+6,
+ fix round 2 -- Wednesday and Friday added, the first pass's
+ Critical bug); ONE hand-authored directly from the Missal,
+ Passion Tuesday's own real citation (+1, fix round 2); three
+ hand-authored directly from the Missal, the fixed Nativity-Octave
+ days (+3); one entry derived from an already-translated one
+ rather than re-typed ([ef-holy-name], +1).
+ 119 + 1 - 1 + 1 + 6 + 1 + 3 + 1 = 131. *)
+ Alcotest.(check int) "entry count" 131
(List.length (Lectionary.entries l));
(match Lectionary.find l (slug "ef-lent-1-monday") with
| Some [ a; b ] ->
@@ -127,40 +131,56 @@ let test_ef_data_file_loads () =
check_entry "ef-pentecost-ember-sat" "Rom 5:1-5." "Luke 4:38-44.";
(* Critical 2 fix (coordinator review round 1): the Lenten Ember days,
previously dead keys under lectio's own "ef-lent-1-<weekday>"
- naming -- now reachable under colitur's own slugs. *)
+ naming -- now reachable under colitur's own slugs. Minor, fix
+ round 2 (coordinator review): all THREE are pinned, not just
+ Wednesday -- a mutation on Friday's or Saturday's own value used
+ to leave the whole suite green. *)
check_entry "ef-lent-ember-wed" "3 Kgs. 19:3-8" "Matt 12:38-50";
+ check_entry "ef-lent-ember-fri" "Ezech 18:20-28" "John 5:1-15";
+ check_entry "ef-lent-ember-sat" "1 Thess. 5:14-23" "Matt 17:1-9";
(* Passiontide widens into Passion week ONLY now (Critical 1 fix) --
"ef-passiontide-1-monday" keeps lectio's own citation;
"ef-passiontide-2-monday" (Holy Monday) is Missal-sourced,
- DIFFERENT text, hand-authored in [holy_week_entries]. *)
+ DIFFERENT text, hand-authored in [holy_week_entries]. Fix round 2
+ (Important): "ef-passiontide-1-tuesday" no longer carries lectio's
+ own (wrong -- Holy Tuesday's) ini value; it is hand-authored from
+ the Missal's own real Passion Tuesday Mass, [passion_tuesday_entry]. *)
check_entry "ef-passiontide-1-monday" "Jonas 3:1-10" "John 7:32-39";
- check_entry "ef-passiontide-2-monday" "Isai. 50, 5-10" "Io. 12, 1-9";
- check_entry "ef-passiontide-2-tuesday" "Ier. 11, 18-20" "Mark 14, 32-72; 15, 1-46";
- check_entry "ef-passiontide-2-thursday" "1 Cor. 11, 20-32" "Io. 13, 1-15";
- check_entry "ef-passiontide-2-saturday" "Col. 3, 1-4" "Matt. 28, 1-7";
+ check_entry "ef-passiontide-1-tuesday" "Dan 14:27, 28-42" "John 7:1-13";
+ check_entry "ef-passiontide-2-monday" "Isa 50:5-10" "John 12:1-9";
+ (* Gospel punctuation ("15, 1-46") intentionally kept as lectio's own
+ ini already has it -- see bootstrap_lectionary.ml's own
+ [holy_week_entries] comment on this one entry. *)
+ check_entry "ef-passiontide-2-tuesday" "Jer 11:18-20" "Mark 14:32-72; 15, 1-46";
+ (* Critical fix, round 2: Wednesday and Good Friday were left entirely
+ absent by the first pass, which meant step 3 quietly resumed the
+ preceding Sunday's Mass there (Good Friday emitting PALM SUNDAY's
+ Epistle and Passion) -- the FIRST pass's own reasoning ("neither
+ day has a single Epistle") was right about the First slot alone;
+ the Gospel is always unambiguous and is now always authored, and
+ First uses the SAME "last lesson before the Gospel" convention
+ this file's own Lenten Ember Wednesday entry above already uses
+ for an identical two-lesson shape. *)
+ check_entry "ef-passiontide-2-wednesday" "Isa 53:1-12" "Luke 22:39-71; 23:1-53";
+ check_entry "ef-passiontide-2-thursday" "1 Cor 11:20-32" "John 13:1-15";
+ check_entry "ef-passiontide-2-friday" "Ex 12:1-11" "John 18:1-40; 19:1-42";
+ check_entry "ef-passiontide-2-saturday" "Col 3:1-4" "Matt 28:1-7";
(* Important 3(a) fix (coordinator review round 1): the fixed
Nativity-Octave days now carry their own direct Missal formulary
("Diebus infra octavam Nativitatis Domini"), not Holy Name
Sunday's (a first guess, measured wrong, reverted -- see
[nativity_octave_entries]'s own comment). *)
- check_entry "ef-nativity-octave-day-5" "Tit. 3, 4-7" "Luc. 2, 15-20";
- check_entry "ef-nativity-octave-day-6" "Tit. 3, 4-7" "Luc. 2, 15-20";
- check_entry "ef-nativity-octave-day-7" "Tit. 3, 4-7" "Luc. 2, 15-20";
- (* These three MUST stay absent -- Holy Wednesday and Good Friday are
- deliberately not hand-authored (multi-lesson liturgies, no single
- Epistle slot; see [holy_week_entries]'s own comment for why), and
- Lent's OWN "ef-lent-1-wednesday/friday/saturday" keys must not
+ check_entry "ef-nativity-octave-day-5" "Titus 3:4-7" "Luke 2:15-20";
+ check_entry "ef-nativity-octave-day-6" "Titus 3:4-7" "Luke 2:15-20";
+ check_entry "ef-nativity-octave-day-7" "Titus 3:4-7" "Luke 2:15-20";
+ (* Lent's OWN "ef-lent-1-wednesday/friday/saturday" keys must not
reappear once renamed away (colitur never computes them as its
- own slug at all). A regression net for those decisions, not
- merely documentation of them. *)
- let check_absent name =
- match Lectionary.find l (slug name) with
- | None -> ()
- | Some _ -> Alcotest.fail (name ^ ": must stay absent -- see bootstrap_lectionary.ml")
- in
- check_absent "ef-passiontide-2-wednesday";
- check_absent "ef-passiontide-2-friday";
- check_absent "ef-lent-1-wednesday"
+ own slug at all) -- a regression net for that decision, not
+ merely documentation of it. *)
+ match Lectionary.find l (slug "ef-lent-1-wednesday") with
+ | None -> ()
+ | Some _ ->
+ Alcotest.fail "ef-lent-1-wednesday: must stay absent -- see bootstrap_lectionary.ml"
let suite =
[ ("find present", `Quick, test_find_present);