From 9947a28f3a40bd8ac36892dcf5aad59d9e6f847c Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Sat, 15 Aug 2026 04:48:59 +0200 Subject: test(differential): fix round 3 -- two more Ember Saturdays, doc fixes Two Ember Saturdays shipped an apostle's Mass verbatim from lectio's own ini, the exact shape already found and fixed for Passion Tuesday (C26): ef-advent-ember-sat carried St Thomas the Apostle's Mass (Eph 2:19-22 / John 20:24-29, 21 December) instead of the real "Sabbato Quatuor Temporum Adventus" (2 Thess 2:1-8 / Luke 3:1-6); ef-september- ember-sat carried St Matthew's Mass (Ezek 1:10-14 / Matt 9:9-13, 21 September) instead of the real "Sabbato Quatuor Temporum septembris" (Heb 9:2-12 / Luke 13:6-17). Both verified against both primary-source scans independently. Both readings are explicitly labelled "Lectio Epistolae" in the Missal on both days, so neither needed the "last lesson before the Gospel" convention Holy Wednesday/Good Friday relied on -- a textual fact, not an editorial choice. Fixed at the source in tools/bootstrap_lectionary.ml: colitur_keys excludes both wrong ini sections; a new ember_saturday_corrections list hand-authors the real citations. New allow-list entries C27/C28 (40 rows each, not the naive 46 -- traced to the identical 6 civil years where 21 September and 21 December, always exactly 91 days apart, land on a Saturday and the fixed saint's feast wins outright). Both values pinned in test_lectionary.ml and mutation-tested. Also: C25's per-weekday breakdown was mislabelled (right multiset, rotated weekday labels) in both test_differential.ml and expected- divergences.sexp -- corrected to Wednesday 6/Thursday 19/Friday 19/Saturday 13, and the claim that this split came directly from the comparator's own output is narrowed to what's actually true (only the total, 57, does). C26's scan2 citation range was extended to include the Gospel (previously stopped after the Epistle). lib/kernel/liturgical_day.mli's "citations always empty until Plan 4" comment is now stale on this branch -- left untouched (Task 11's own documentation pass), noted in the task report so it isn't lost. dune test: 358 tests green; COLITUR_EXHAUSTIVE_SWEEP=1: 359 green. --- tools/bootstrap_lectionary.ml | 74 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 7 deletions(-) (limited to 'tools/bootstrap_lectionary.ml') diff --git a/tools/bootstrap_lectionary.ml b/tools/bootstrap_lectionary.ml index 4939770..670130d 100644 --- a/tools/bootstrap_lectionary.ml +++ b/tools/bootstrap_lectionary.ml @@ -157,6 +157,26 @@ let colitur_keys name = data/ef/expected-divergences.sexp's own new entry records the resulting divergence. *) [] + else if String.equal name "ef-advent-ember-sat" then + (* Important, fix round 3 (coordinator review): lectio's own ini value + for this key is St THOMAS THE APOSTLE's Mass (Eph 2:19-22 / John + 20:24-29, "doubting Thomas" -- 21 December, which the Advent Ember + Saturday's own civil date is NOT), not the real "Sabbato Quatuor + Temporum Adventus". Same shape as the Passion-Tuesday exclusion + above and C26's own entry: a wrong value inherited verbatim from + lectio's ini, invisible to the differential because lectio's own + computed reading is drawn from the identical wrong source. Excluded + here; the correct citation is hand-authored below, + [ember_saturday_corrections]. *) + [] + else if String.equal name "ef-september-ember-sat" then + (* Important, fix round 3 (coordinator review): lectio's own ini value + for this key is ST MATTHEW's Mass (Ezek 1:10-14 / Matt 9:9-13, the + calling of Matthew -- 21 September, which the September Ember + Saturday's own civil date is NOT), the identical shape as + "ef-advent-ember-sat" immediately above. Excluded here; the correct + citation is hand-authored below, [ember_saturday_corrections]. *) + [] else ( match List.find_opt (fun wd -> String.equal name ("ef-passiontide-0-" ^ wd)) weekdays with | Some wd -> @@ -333,6 +353,45 @@ let holy_week_entries = let passion_tuesday_entry = [ (slug_or_die "ef-passiontide-1-tuesday", pair ~first:"Dan 14:27, 28-42" ~gospel:"John 7:1-13") ] +(* Important, fix round 3 (coordinator review): two more Ember Saturdays + shipping a saint's Mass verbatim from lectio's ini -- the exact C26 + shape, found by re-review after this generator's own [assert_reachable] + and the Holy Week/Passion-Tuesday fixes had already closed the shapes + that check could and could not catch. Both are multi-lesson Ember + Masses (like Lenten Ember Wednesday and Good Friday/Holy Wednesday + above), but neither needed the "last lesson" CONVENTION: both readings + below are explicitly labelled "Lectio Epistolae" in the Missal, exactly + like Holy Saturday's own Epistle, distinct from the several numbered + prophecies (Isaiah, Daniel's Benedictus, etc.) that precede them -- + a textual fact, not an editorial choice. + + - [ef-advent-ember-sat] ("Sabbato Quatuor Temporum Adventus, II + classis"): 2 Thess 2:1-8 / Luke 3:1-6 -- scan1.txt "Lectio Epistolae + beati Pauli Apostoli ad Thessalonicenses. 2 Thess. 2, 1-8" + + "Sequentia sancti Evangelii secundum Lucam. Luc. 3, 1-6"; scan2.txt + corroborates both word for word. lectio's own ini value (Eph 2:19-22 + / John 20:24-29) is St THOMAS THE APOSTLE's Mass (21 December, + "doubting Thomas") -- a real office, just not this one. + - [ef-september-ember-sat] ("Sabbato Quatuor Temporum septembris, II + classis"): Heb 9:2-12 / Luke 13:6-17 -- scan1.txt "Lectio Epistolae + beati Pauli Apostoli ad Hebraeos. Hebr. 9, 2-12" + "Sequentia sancti + Evangelii secundum Lucam. Luc. 13, 6-17"; scan2.txt corroborates both + word for word. lectio's own ini value (Ezek 1:10-14 / Matt 9:9-13) is + ST MATTHEW's Mass (21 September, the calling of Matthew) -- again a + real office, just not this one. + + Both genuinely observed offices (confirmed against the real resolver, + not assumed): 40 civil days each in the 2005-2050 window. The other + four Ember-day entries (Advent Wed/Fri, September Wed/Fri, and the + Pentecost/Lent sets already fixed above) were checked against the + Missal while investigating this and are correct as they already + stood -- this is not a wider pattern across the whole Ember-day + family, just these two Saturdays. *) +let ember_saturday_corrections = + [ (slug_or_die "ef-advent-ember-sat", pair ~first:"2 Thess 2:1-8" ~gospel:"Luke 3:1-6"); + (slug_or_die "ef-september-ember-sat", pair ~first:"Heb 9:2-12" ~gospel:"Luke 13:6-17") + ] + (* Important 3(a), fix round 1 (coordinator review): the fixed Nativity- Octave days (RG 91 entry 17, 29-31 December, colitur's own [ef-nativity-octave-day-{5,6,7}]) have a DIRECT formulary in the @@ -515,7 +574,7 @@ let () = let translated = List.concat_map convert secs in let entries = translated @ vigil_entries @ holy_week_entries @ passion_tuesday_entry - @ nativity_octave_entries @ derived_entries translated + @ ember_saturday_corrections @ nativity_octave_entries @ derived_entries translated in assert_reachable entries; let lect = @@ -542,17 +601,18 @@ let () = ; second source file [vigil_entries]; %d hand-authored directly from\n\ ; the Missal [holy_week_entries]; %d hand-authored directly from the\n\ ; Missal, one entry [passion_tuesday_entry]; %d hand-authored directly\n\ - ; from the Missal [nativity_octave_entries]; %d derived from an\n\ - ; already-translated entry above rather than re-typed\n\ - ; [derived_entries] -- see this generator's own comments on all six).\n\ - ; Regenerate with:\n\ + ; from the Missal, two entries [ember_saturday_corrections]; %d\n\ + ; hand-authored directly from the Missal [nativity_octave_entries];\n\ + ; %d derived from an already-translated entry above rather than\n\ + ; re-typed [derived_entries] -- see this generator's own comments on\n\ + ; all seven). Regenerate with:\n\ ; eval $(opam env) && dune exec tools/bootstrap_lectionary.exe -- %s %s\n" src (sha256 src) (List.length entries) (List.length secs) (List.length vigil_entries) (List.length holy_week_entries) (List.length passion_tuesday_entry) - (List.length nativity_octave_entries) + (List.length ember_saturday_corrections) (List.length nativity_octave_entries) (List.length entries - List.length translated - List.length vigil_entries - List.length holy_week_entries - List.length passion_tuesday_entry - - List.length nativity_octave_entries) + - List.length ember_saturday_corrections - List.length nativity_octave_entries) src dst; Sexplib.Sexp.output_hum oc (Lectionary.sexp_of_t lect); output_char oc '\n'; -- cgit v1.3