summaryrefslogtreecommitdiff
path: root/test/test_differential.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-15 04:16:24 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-15 04:16:24 +0200
commit96bf100a4de32bd5f3887ffdb15b59b8bbd0376b (patch)
treeea3be84f551016a617adf50abdd34af5ae390546 /test/test_differential.ml
parentb0ff86ae552b90613be21c52433f4180deba7758 (diff)
downloadcolitur-96bf100a4de32bd5f3887ffdb15b59b8bbd0376b.tar.gz
colitur-96bf100a4de32bd5f3887ffdb15b59b8bbd0376b.zip
test(differential): fix round 2 -- Good Friday, Passion Tuesday, stale header
Critical, and worse than what it replaced: removing a lectionary key does not mean "no reading" to Lectionary_ef.readings -- it means step 3 silently resumes the preceding Sunday. Good Friday, which has no Mass at all, was emitting Palm Sunday's own Epistle and Passion narrative every year; Holy Wednesday had the same defect. Fixed by authoring both days fully: the Gospel was always unambiguous and is now always authored; the Epistle uses the same "last lesson before the Gospel" convention this file's own Lenten Ember Wednesday entry already established for an identical two-peer-lesson shape, applied for consistency rather than invented to close this gap. C24 is retired, folded into a widened C23 covering all six Holy Week days. Important: Passion Tuesday was shipping Holy Tuesday's Mass, a defect the previous round's own footnote had found and left unrecorded. Fixed at the source -- colitur_keys now excludes lectio's own (wrong) ini section for this one weekday rather than translating it; a new passion_tuesday_entry hand-authors the real Missal citation (Dan 14:27, 28-42 / John 7:1-13, both scans). New entry C26 records the resulting divergence, 43 of 46 years, traced (not merely counted) to three years where a competing I-class feast impedes the day entirely. Important: the allow-list header was stale one level up, still naming and restating the diagnosis of an id (C21) retired in the previous round. Rewritten in full rather than layered with another correction. Minors: all three Lent Ember values now pinned (only Wednesday was before); C22's citation corrected to attribute the date-anchor text and the rank text to their own separate sources; assert_reachable's own comment no longer overclaims what it can catch; C25's falsified reasoning replaced with the directly observed fact (a first replacement derivation was itself found wrong on a second reading and is recorded as rejected, not silently discarded); hand-authored citations standardised to English book names with a colon, matching this file's own dominant convention, with one stated exception where a value must stay byte-identical to lectio's own data rather than be reformatted. dune test: 358/358. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359/359.
Diffstat (limited to 'test/test_differential.ml')
-rw-r--r--test/test_differential.ml167
1 files changed, 119 insertions, 48 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
(* ---------------------------------------------------------------------- *)