diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test_differential.ml | 167 | ||||
| -rw-r--r-- | test/test_lectionary.ml | 96 |
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); |
