aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-15 04:48:59 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-15 04:48:59 +0200
commit9947a28f3a40bd8ac36892dcf5aad59d9e6f847c (patch)
tree0367842a8862a9bd7476bc06197276ab3cef9c54
parent96bf100a4de32bd5f3887ffdb15b59b8bbd0376b (diff)
downloadcolitur-9947a28f3a40bd8ac36892dcf5aad59d9e6f847c.tar.gz
colitur-9947a28f3a40bd8ac36892dcf5aad59d9e6f847c.zip
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.
-rw-r--r--data/ef/expected-divergences.sexp16
-rw-r--r--data/ef/lectionary.sexp19
-rw-r--r--test/test_differential.ml65
-rw-r--r--test/test_lectionary.ml21
-rw-r--r--tools/bootstrap_lectionary.ml74
5 files changed, 171 insertions, 24 deletions
diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp
index c3c5f00..da80dbe 100644
--- a/data/ef/expected-divergences.sexp
+++ b/data/ef/expected-divergences.sexp
@@ -160,10 +160,22 @@ lectio, still conflating Holy Week with Passion week on all six days, keeps show
(verdict open)
(note "task 8 fix round 1 (coordinator review, Important 3(b)): colitur's `ef-christmas-1-{wednesday,thursday,friday,saturday}` (Holy Name week ferias with no proper of their own) resume, via Lectionary_ef.readings' step 3, the preceding Sunday's temporal identity -- which, on these specific dates, is one of the Nativity-Octave Sundays C6 above already names as RG-69-QUESTIONED (a Sunday landing 29-31 December, where colitur wrongly emits the fixed weekday formulary \"Titus 3:4-7\"/\"Luke 2:15-20\" instead of the Sunday's own distinct Office). Confirmed, not merely inferred: every single one of these 57 rows' colitur-side citation is exactly \"Titus 3:4-7\" -- the SAME wrong value C6's own 19 Sunday-landing rows carry, propagated one civil-date hop later, not a second, independent cause. A genuine [Temporal_ef] defect, out of this task's own scope (the same shared, multi-round-reviewed kernel-adjacent function C6's own note names) -- recorded here per the coordinator's own explicit instruction (\"record it prominently... for a follow-up task\"), not fixed and not left silently failing.
-CORRECTED, fix round 2 (coordinator review, Minor): 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). Replaced with the directly OBSERVED fact, from an exhaustive sweep of every such occurrence 2004-2051 against the real resolver (not merely the slug, the resolved citation): `ef-christmas-1-monday` occurs 21 times 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. 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 that the same walk can reach past 2 January into December when Holy Name Sunday does not exist that year, landing on this entry's own wrong Sunday instead -- the general shape, not re-asserted as a proven arithmetic rule (a first attempted derivation was itself found wrong on a second reading and is not repeated). Gated on the literal 4-slug family and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- this is a pure content consequence one hop removed). 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).")
+CORRECTED, fix round 2 (coordinator review, Minor): 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). Replaced with the directly OBSERVED fact, from an exhaustive sweep of every such occurrence 2004-2051 against the real resolver (not merely the slug, the resolved citation): `ef-christmas-1-monday` occurs 21 times 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. 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 that the same walk can reach past 2 January into December when Holy Name Sunday does not exist that year, landing on this entry's own wrong Sunday instead -- the general shape, not re-asserted as a proven arithmetic rule (a first attempted derivation was itself found wrong on a second reading and is not repeated). Gated on the literal 4-slug family and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- this is a pure content consequence one hop removed).
+
+CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly from the OCaml comparator's own failure output (its own `expected_rows` pin, cross-checked against a real test run) -- that part was accurate. The PER-WEEKDAY split is NOT: the comparator reports per-id totals only, never a per-weekday breakdown, so that finer split came from a separate pass over the raw per-slug failure list, and a prior version of this note wrongly implied it came from the comparator directly. That prior version also rotated the labels: it read \"19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively\" -- the right four numbers, each attached to the wrong weekday. Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = 57, no residue).")
(expected_rows 57))
((id C26)
- (citation "Passion Tuesday's real Mass (\"Feria tertia, III classis, Statio ad S. Cyriacum\"): Dan 14:27, 28-42 / John 7:1-13 -- docs/research/scan1.txt:11085-11121, corroborated scan2.txt:12063-12104, word for word both scans")
+ (citation "Passion Tuesday's real Mass (\"Feria tertia, III classis, Statio ad S. Cyriacum\"): Dan 14:27, 28-42 / John 7:1-13 -- docs/research/scan1.txt:11085-11121, corroborated scan2.txt:12063-12120 (CORRECTED, fix round 3, coordinator review: the scan2 endpoint previously read 12104, which stops after the Epistle -- \"Lectio Danielis Prophetae, Dan. 14,27 et 28-42\" -- and never reaches the Gospel heading/citation at all; \"Sequentia sancti Evangelii secundum Ioannem, Ioann. 7,1-13\" is at scan2.txt:12117-12120, so the range now extends to 12120, mirroring scan1's own convention of ending right at the Gospel's citation line rather than the full pericope text), word for word both scans")
(verdict colitur)
(note "task 8 fix round 2 (coordinator review, Important): lectio's own ini section for Passion Tuesday (`ef-passiontide-0-tuesday`) is not Passion Tuesday's Mass at all -- it is Holy Tuesday's (Jer 11:18-20 / the Passion according to Mark), confirmed independently against both scans; C23 above has the full account of that same confusion for the OTHER (Holy) Tuesday. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this one ini section from translation rather than using its (wrong) value, and [passion_tuesday_entry] hand-authors the real Missal citation instead. lectio's own COMPUTED reading for the civil date it labels \"Passion Tuesday\" is drawn from the same wrong source, so colitur's now-correct citation genuinely diverges from lectio's on every occurrence this office is actually the observed day -- 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. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly. 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/2024; the Annunciation, 25 March, in 2042), so colitur's own observed slug that day is the saint's, not this entry's slug at all -- those three rows already match independently, both engines agreeing on the saint's own citation. 43 + 3 = 46, the full domain, no residue.")
(expected_rows 43))
+ ((id C27)
+ (citation "The Advent Ember Saturday's real Mass (\"Sabbato Quatuor Temporum Adventus\"): 2 Thess 2:1-8 / Luke 3:1-6 -- docs/research/scan1.txt:5425 (Gospel heading \"Sequentia sancti Evangelii secundum Lucam, Luc. 3,1-6\") and 5433 (Epistle heading \"Lectio Epistolae beati Pauli Apostoli ad Thessalonicenses, 2 Thess. 2,1-8\"), independently re-verified against scan2.txt:5904 (Gospel citation) and 5911 (Epistle citation), word for word both scans")
+ (verdict colitur)
+ (note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-advent-ember-sat` is not the Advent Ember Saturday's Mass at all -- it is St Thomas the Apostle's (Eph 2:19-22 / John 20:24-29, \"doubting Thomas\", 21 December), the identical shape C26 above documents for Passion Tuesday: a wrong value inherited verbatim from lectio's own ini, invisible to the differential because both engines carried the same wrong source before this fix. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes 2 Thess 2:1-8, distinct from the prophecies before it), so this entry needed no \"last lesson before the Gospel\" convention judgement call the way Holy Wednesday/Good Friday (C23) did -- a textual fact, not an editorial choice. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- traced, not merely accepted: in 2013, 2019, 2024, 2030, 2041 and 2047, 21 December (St Thomas the Apostle) falls on a Saturday and coincides with the Advent Ember Saturday itself, so the SAINT wins outright (a real, correct occurrence result, both engines agreeing) and these six rows never reach this entry at all -- the same 6 civil years C28 below names, since 21 September and 21 December are always exactly 91 days (13 weeks) apart and so fall on the identical weekday every year, confirmed directly against `date -d`, not merely by arithmetic. This coincidence is also the likely origin of lectio's own wrong ini value in the first place: bootstrapped from a single calendar year that happened to be one of these six, generalising a real but year-specific coincidence into a permanent template value. 40 + 6 = 46, the full domain, no residue.")
+ (expected_rows 40))
+ ((id C28)
+ (citation "The September Ember Saturday's real Mass (\"Sabbato Quatuor Temporum septembris\"): Heb 9:2-12 / Luke 13:6-17 -- docs/research/scan1.txt:23493 (Epistle heading \"Lectio Epistolae beati Pauli Apostoli ad Hebraeos, Hebr. 9, 2-12\") and 23545 (Gospel heading \"Sequentia sancti Evangelii secundum Lucam\", Luc. 13, 6-17 follows), independently re-verified against scan2.txt:26007 (Epistle citation) and 26013 (Gospel citation), word for word both scans")
+ (verdict colitur)
+ (note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-september-ember-sat` is not the September Ember Saturday's Mass at all -- it is St Matthew's (Ezek 1:10-14 / Matt 9:9-13, the calling of Matthew, 21 September), the identical shape C26/C27 document. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes Heb 9:2-12), so this entry, like C27, needed no \"last lesson before the Gospel\" convention judgement call. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- the IDENTICAL 6 civil years C27 above names (2013, 2019, 2024, 2030, 2041, 2047), where 21 September (St Matthew) falls on a Saturday and coincides with the September Ember Saturday itself, so the SAINT wins outright and these six rows never reach this entry -- the same 91-day/13-week weekday coincidence between 21 September and 21 December that explains C27's own gap, confirmed against `date -d` for all six years, not merely by arithmetic. The other four Ember entries (Advent Wednesday/Friday, September Wednesday/Friday) were checked against both scans and are correct as lectio already had them -- these two Saturdays are the only Ember exceptions. 40 + 6 = 46, the full domain, no residue.")
+ (expected_rows 40))
diff --git a/data/ef/lectionary.sexp b/data/ef/lectionary.sexp
index 893f878..3ec61bd 100644
--- a/data/ef/lectionary.sexp
+++ b/data/ef/lectionary.sexp
@@ -14,11 +14,12 @@
; Temporal_ef vocabulary via [colitur_keys]; 1 hand-authored from a
; second source file [vigil_entries]; 6 hand-authored directly from
; the Missal [holy_week_entries]; 1 hand-authored directly from the
-; Missal, one entry [passion_tuesday_entry]; 3 hand-authored directly
-; from the Missal [nativity_octave_entries]; 1 derived from an
-; already-translated entry above rather than re-typed
-; [derived_entries] -- see this generator's own comments on all six).
-; Regenerate with:
+; Missal, one entry [passion_tuesday_entry]; 2 hand-authored directly
+; from the Missal, two entries [ember_saturday_corrections]; 3
+; hand-authored directly from the Missal [nativity_octave_entries];
+; 1 derived from an already-translated entry above rather than
+; re-typed [derived_entries] -- see this generator's own comments on
+; all seven). Regenerate with:
; eval $(opam env) && dune exec tools/bootstrap_lectionary.exe -- ../lectio/internal/caldata/tridentine-lectionary.ini data/ef/lectionary.sexp
((ef-advent-2-monday
(((part First) (reference "Rom 15:4-13"))
@@ -36,8 +37,8 @@
(((part First) (reference "Isa 11:1-5"))
((part Gospel) (reference "Luke 1:39-47"))))
(ef-advent-ember-sat
- (((part First) (reference "Eph 2:19-22"))
- ((part Gospel) (reference "John 20:24-29"))))
+ (((part First) (reference "2 Thess 2:1-8"))
+ ((part Gospel) (reference "Luke 3:1-6"))))
(ef-advent-ember-wed
(((part First) (reference "Isa 7:10-15"))
((part Gospel) (reference "Luke 1:26-38"))))
@@ -309,8 +310,8 @@
(((part First) (reference "Osee 14:2-10"))
((part Gospel) (reference "Luke 7:36-50"))))
(ef-september-ember-sat
- (((part First) (reference "Ezek 1:10-14"))
- ((part Gospel) (reference "Matt 9:9-13"))))
+ (((part First) (reference "Heb 9:2-12"))
+ ((part Gospel) (reference "Luke 13:6-17"))))
(ef-september-ember-wed
(((part First) (reference "2 Esd. 8:1-10"))
((part Gospel) (reference "Mark 9:16-28"))))
diff --git a/test/test_differential.ml b/test/test_differential.ml
index 998a8fa..655a054 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -840,6 +840,50 @@ let holy_week_slugs =
entry). 43 + 3 = 46, the full domain, with no residue. *)
let passion_tuesday_slug = "ef-passiontide-1-tuesday"
+(* C27/C28 (task 8, fix round 3, coordinator review, Important): two more
+ Ember Saturdays shipping a saint's Mass verbatim from lectio's ini --
+ the exact C26 shape, found by re-review after the fixes above had
+ already closed the shapes both this file's own reachability check and
+ the earlier rounds' fixes could catch. Both are multi-lesson Ember
+ Masses, but neither needed C23/C24's "last lesson before the Gospel"
+ CONVENTION: both readings are explicitly labelled "Lectio Epistolae" in
+ the Missal, exactly like Holy Saturday's own Epistle, distinct from the
+ several numbered prophecies that precede them -- a textual fact, not an
+ editorial choice (tools/bootstrap_lectionary.ml's own
+ [ember_saturday_corrections] comment has the full citations and both
+ scans' line references).
+
+ - C27, [ef-advent-ember-sat] ("Sabbato Quatuor Temporum Adventus"):
+ 2 Thess 2:1-8 / Luke 3:1-6. lectio's own ini value (Eph 2:19-22 /
+ John 20:24-29) is St Thomas the Apostle's Mass (21 December).
+ - C28, [ef-september-ember-sat] ("Sabbato Quatuor Temporum
+ septembris"): Heb 9:2-12 / Luke 13:6-17. lectio's own ini value
+ (Ezek 1:10-14 / Matt 9:9-13) is St Matthew's Mass (21 September, the
+ calling of Matthew).
+
+ Both genuinely observed offices, confirmed against the real resolver,
+ not assumed. Gated on the literal slug and [diffs] staying exactly
+ [First_f; Gospel_f] (identity already agrees -- season/slug/rank/colour
+ were never the problem, only the reading). Derived directly from the
+ OCaml comparator's own failure output, not hand-counted first and
+ cross-checked after: C27 40, C28 40 -- not 46, and both traced, not
+ merely accepted, to the IDENTICAL 6 civil years (2013, 2019, 2024,
+ 2030, 2041, 2047): 21 September and 21 December are always exactly 91
+ days apart, an exact multiple of 7, so they fall on the SAME weekday
+ every year -- confirmed directly, not merely arithmetic (`date -d`
+ agrees for all six). In precisely these 6 years both fall on a
+ Saturday, so Matthew's and Thomas's own FIXED feast days coincide with
+ their respective Ember Saturday, and the SAINT wins outright (a real,
+ correct occurrence result, RG 91's own table -- both engines agree, so
+ these rows never reach C27/C28 at all). This is also the likely origin
+ of lectio's own wrong ini values in the first place: bootstrapped from
+ whichever single calendar year lectio's own generator was run against,
+ which happened to be one of these coincidence years, generalising a
+ real but YEAR-SPECIFIC coincidence into a permanent template value. 40
+ + 6 = 46, the full domain, no residue. *)
+let advent_ember_sat_slug = "ef-advent-ember-sat"
+let september_ember_sat_slug = "ef-september-ember-sat"
+
(* 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.
RG 69 (docs/research/scan1.txt:625-631, word for word: "De dominica
@@ -892,10 +936,21 @@ let passion_tuesday_slug = "ef-passiontide-1-tuesday"
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).
+
+ CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, comes
+ directly from the OCaml comparator's own failure output (its own
+ [expected_rows] pin, cross-checked against a full test run). The
+ PER-WEEKDAY split does not -- the comparator reports per-id totals
+ only, never a per-weekday breakdown -- so that finer split was
+ produced by a separate pass over the raw per-slug failure list, not
+ the comparator itself, and a prior version of this note wrongly
+ implied otherwise. That prior version also rotated the labels: it
+ read "19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday
+ respectively" (the right four numbers, the wrong weekday each was
+ attached to). Re-measured directly against the real resolver:
+ Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 =
+ 57, no residue). *)
let rg69_one_hop_slugs =
[ "ef-christmas-1-wednesday"; "ef-christmas-1-thursday"; "ef-christmas-1-friday";
"ef-christmas-1-saturday" ]
@@ -1006,6 +1061,8 @@ let layer_c_reason (l : row) (c : row) diffs =
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_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 if String.equal c.slug advent_ember_sat_slug && diffs = [ First_f; Gospel_f ] then Some "C27"
+ else if String.equal c.slug september_ember_sat_slug && diffs = [ First_f; Gospel_f ] then Some "C28"
else None
(* ---------------------------------------------------------------------- *)
diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml
index e88f103..3fbf8c5 100644
--- a/test/test_lectionary.ml
+++ b/test/test_lectionary.ml
@@ -100,8 +100,14 @@ let test_ef_data_file_loads () =
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. *)
+ rather than re-typed ([ef-holy-name], +1); two ini sections
+ EXCLUDED, fix round 3 -- "ef-advent-ember-sat"/
+ "ef-september-ember-sat" carried a saint's Mass verbatim (Thomas
+ the Apostle's/Matthew's, the C26 shape), not the real Ember
+ Saturday (-2); two hand-authored directly from the Missal
+ replacing them, [ember_saturday_corrections] (+2, net 0 against
+ the -2 immediately above).
+ 119 + 1 - 1 + 1 + 6 + 1 + 3 + 1 - 2 + 2 = 131. *)
Alcotest.(check int) "entry count" 131
(List.length (Lectionary.entries l));
(match Lectionary.find l (slug "ef-lent-1-monday") with
@@ -173,6 +179,17 @@ let test_ef_data_file_loads () =
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";
+ (* Fix round 3 (coordinator review, Important): two more Ember
+ Saturdays that inherited a saint's Mass verbatim from lectio's
+ ini, the exact C26 shape -- pinned here so a future regeneration
+ that silently reverts to the wrong (saint's) value fails loudly
+ and locally, the same discipline the Lent Ember/Passion Tuesday
+ pins above already established for their own fix rounds. Both
+ readings are explicitly labelled "Lectio Epistolae" in the
+ Missal, so neither needed the "last lesson before the Gospel"
+ convention Holy Wednesday/Good Friday above rely on. *)
+ check_entry "ef-advent-ember-sat" "2 Thess 2:1-8" "Luke 3:1-6";
+ check_entry "ef-september-ember-sat" "Heb 9:2-12" "Luke 13:6-17";
(* 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 that decision, not
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';