diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-22 14:51:07 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-22 14:51:07 +0200 |
| commit | 72dd2426f020f83a392158ead7bd15b36088fd08 (patch) | |
| tree | b5123d2abc922449ff457d2e4cba4ce7fa61adf2 /data | |
| parent | 1ee397c5a09bb5c999e1681f0a6a5d884f2f9ff4 (diff) | |
| download | colitur-72dd2426f020f83a392158ead7bd15b36088fd08.tar.gz colitur-72dd2426f020f83a392158ead7bd15b36088fd08.zip | |
test(lms-ordo): extend the LMS witness layer from one year to three
Generalises tools/extract_lms_ordo.ml's start-of-body detection: the
hardcoded "End of November 2024" sentinel assumed every edition opens
with an "End of November" stub section. The 2023-2024 edition has none
(Advent Sunday 2023 fell on 3 December, so the compiler folded the two
tail days into the "December 2023" header directly) -- the generalised
detector anchors on the body's own "ORDO" title line instead, verified
unique in all three known editions and distinct from the Table of
Contents' lowercase "Ordo" entries.
Extracts test/fixtures/lms-ordo-2023-2024.sexp (397 rows) and
lms-ordo-2025-2026.sexp (399 rows), each with a provenance header
carrying its own SHA-256, source citation, and a per-edition
characterisation record: five opposite-prediction Creed probes,
independently re-verified against this run's own extracted rows (a
failed probe is now a hard die, not a printed claim). The 2025-2026
edition needed a different sharp II-class pairing than 2024-2025's
Joachim/Stephen one, because Joachim (16 August) is impeded by a Sunday
that year -- recorded in the fixture header, not silently swapped.
test/test_lms_ordo.ml is refactored into a parameterised make_suite,
instantiated once per edition; every count Task 6 hardcoded against the
single 2024-2025 window is now a per-edition parameter, several of which
turned out to differ once measured (BVM-Saturday population 12/14/13,
Ascension-week exclusion 1/3/2). Two mapping gaps surfaced only by the
new windows and fixed here (test-side, not colitur): Low Sunday reached
via Preceding_sunday for the first time (absent from 2024-2025's own
window), and the Ascension-week exclusion was wrongly keyed off week
number alone -- Rogation Monday also resumes week 6's Sunday but falls
BEFORE Ascension, not after, and the Ordo prints the ordinary Sunday
text there. Re-bounded by date, against Ascension and Pentecost.
Two genuine divergences surfaced in the 2023-2024 window and are
allow-listed (L3, L4) rather than fixed, per this task's no-lib-changes
scope:
- L3 (verdict ordo): colitur has no bissextile calendar rule. The 1962
Missal's own calendarium moves St Matthias from 24 to 25 February in
leap years (docs/research/LT.txt:5011); colitur keeps him on the 24th
every year. Domain-wide upper bound measured with a throwaway sweep:
1,650 of 2,041 leap years in 1583-9999 currently observe him there.
- L4 (verdict open): Christmas Eve falling on the 4th Sunday of Advent
(2023-12-24, roughly 1 year in 7). colitur says the Creed is said,
reading RG 475(a)'s Sunday clause; the Ordo says it is not. RG 30(a)'s
own "locum tenet ... nulla fit commemoratio" for this exact vigil
reads like RG 16(a)'s Feast-of-the-Lord-on-Sunday shape, which colitur
already treats as Creed-preserving -- but RG 475(a) names "festo"
specifically, and a vigil is its own liturgical-day category (RG 35),
so the counter-reading is real too. Left open rather than adjudicated.
All 630 tests green (dune test), 631 with the exhaustive sweep.
Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9
Diffstat (limited to 'data')
| -rw-r--r-- | data/ef/expected-divergences-lms.sexp | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/data/ef/expected-divergences-lms.sexp b/data/ef/expected-divergences-lms.sexp index e327419..3850fd5 100644 --- a/data/ef/expected-divergences-lms.sexp +++ b/data/ef/expected-divergences-lms.sexp @@ -1,6 +1,11 @@ ; data/ef/expected-divergences-lms.sexp -- Task 6 (2026-08-21-colitur- ; celebrant-rubrics-phase1)'s cited allow-list for the LMS Ordo comparison -; (test/test_lms_ordo.ml), fixture window 2024-11-27..2025-12-31. +; (test/test_lms_ordo.ml). Extended by the Witnesses task (2026-08-22, +; same phase) from the single 2024-2025 window (2024-11-27..2025-12-31) +; to three: 2023-2024 (2023-12-01..2024-12-31) and 2025-2026 +; (2025-11-28..2026-12-31) joined it. L3/L4 below fired only in the +; 2023-2024 window -- neither recurs in the other two, a fact worth +; keeping visible rather than merging away (see [expected_rows] on each). ; ; A SEPARATE file from data/ef/expected-divergences.sexp (the lectio ; allow-list) and data/ef/expected-divergences-missalemeum.sexp (the @@ -96,15 +101,44 @@ ; shape as the Christmastide "infra octavam Nativitatis" entries ; data/ef/lectionary.sexp already carries directly rather than resolving ; through this fallback -- a lectionary-data change out of a fix round's -; own scope. test/test_lms_ordo.ml's own -; [expected_preceding_sunday_override] excludes exactly these two -; (season, week) pairs from its general mapping, and -; [test_formulary_override_matches] asserts the excluded population is -; exactly 3 real days, all showing "Mass of the Ascension", so a change -; to this population (a fourth day, a different Ordo string) would be -; caught rather than silently absorbed. +; own scope. test/test_lms_ordo.ml's own [is_after_ascension] excludes +; this population from the general mapping (bounded ABOVE by Pentecost, +; not merely "later than Ascension" -- see its own citation, corrected +; during the Witnesses task after a first version manufactured 8 false +; failures by matching any later date in the same civil year), and +; [test_formulary_override_matches] asserts its exact size per window. +; +; CORRECTED (Witnesses task, 2026-08-22): this note previously said "exactly +; 3 real days" as though that were a universal count. Extending the +; comparison to 2023-2024 and 2025-2026 showed it is not -- the population +; depends on which OTHER days that particular year's Ascension-adjacent +; week happen to have their own competing propers (a saint, a vigil), so +; it varies year to year: 3 in 2024-2025, 1 in 2023-2024 (only 30 May 2024 +; -- Rogation Monday, 6 May 2024, is BEFORE Ascension and correctly resumes +; the ordinary "5th Sunday after Easter" instead, once the exclusion's own +; date comparison was corrected to test "after Ascension AND before +; Pentecost" rather than "week 6 or 7"), 2 in 2025-2026. All three counts +; measured directly, all showing "Mass of the Ascension", none unexplained. ; ; Domain-wide count: unmeasured -- "which feria is inside Ascension's own ; after-feast period" is not a distinct predicate anywhere in this -; codebase to sweep on. Structurally recurs every year, so on the order -; of 3 days/year x domain years, not merely 3 total. +; codebase to sweep on. Structurally recurs every year, though the exact +; per-year count is now known to vary (1-3 in the three years measured), +; not a flat "3 days/year". + +; L3 -- OPEN, colitur's OWN genuine gap, found extending this suite to the +; 2023-2024 window (Witnesses task, 2026-08-22). Fired once: 2024-02-24. +((id L3) + (citation "The Missale Romanum's own CALENDARIUM table, February, footnote (docs/research/LT.txt:5011-5013, the Missal's printed calendar pages, not the numbered Rubricae Generales chapters): \"In anno bissextili mensis februarius est dierum 29, et festum S. Matthiae celebratur die 25 februarii, ac festum S. Gabrielis a Virgine perdolente 28 februarii, et bis dicitur sexto calendas, id est die 24 et die 25\" -- in a leap year February has 29 days, and the feast of St Matthias is kept on 25 February (not 24), with 24 and 25 February BOTH called \"the 6th kalends\"; St Gabriel of Our Lady of Sorrows (ordinarily 27 February) shifts to 28 February by the same rule. This bissextile shift is not RG-numbered (it is a calendarium footnote, not a Rubricae Generales paragraph) and is NOT scan-verified in this session -- only the LT.txt transcription was checked; scan1.txt/scan2.txt were searched for \"bissext\"/\"Matth\" and turned up only the unrelated Golden-Number/dominical-letter passage, not this specific calendarium footnote, so this citation rests on the transcription alone.") + (verdict ordo) + (note "colitur has NO bissextile-shift rule anywhere (grepped lib/rites/rite_ef/*.ml and data/ef/*.sexp for \"bissext\"/\"leap\": zero hits outside a code comment naming the saint, and the rules-register.md itself is silent on it too) -- St Matthias stays fixed at 24 February every year, leap or not. 2024 is a leap year: colitur's own [matthias] entry (Class2, an Apostle, RG91 entry 16 -- verified from the table itself to genuinely OUTRANK entry 18's privileged Ember-Saturday-of-Lent feria, so colitur's RANKING logic is not at fault here) WINS 24 February 2024 outright in colitur's output, correctly saying the Creed per RG475(e)'s Apostle clause. The Ordo shows no St Matthias anywhere near this date at all: 24 February 2024 is titled plainly \"EMBER SATURDAY of LENT\" (No Cr) and 25 February 2024 (a Sunday, 2nd Sunday in Lent, I class) is titled plainly \"2nd SUNDAY in LENT\" (Cr, but via RG475(a)'s own Sunday clause, not RG475(e)) -- consistent with Matthias having correctly MOVED to the 25th and then lost outright to the I-class Sunday there (RG91 entry 6 over entry 16), never even surviving as a commemoration (an I-class Sunday's own admission cap, RG111, is tight enough to exclude an ordinary II-class saint entirely -- the same shape already established for RG16(a)-adjacent cases elsewhere in this project). Both the 24th and 25th sides of the Ordo's silence are explained by ONE root cause (the missing shift), not two independent gaps -- a coherent, single-cause account, not a coincidence. BLAST RADIUS, roughly measured (a throwaway domain sweep, tools/probe_matthias.ml, run once for this task and not committed): of 2 041 leap years in 1583-9999, colitur observes [matthias] on 24 February in 1 650 of them -- an UPPER BOUND on how many years this gap could affect (some of those 1 650 years may see IDENTICAL final output either way, e.g. if Matthias would also win on the 25th against whatever competes there that year; a precise count needs the shift actually implemented, which is out of this task's own no-lib-changes scope). The Gabriel/27-28 February sibling shift is not witnessed by this fixture at all (no divergence on either date in this window) but is the same root cause and would need the same fix.") + (expected_rows 1)) + +; L4 -- OPEN, adjudicated FOR colitur (a defensible primary-source reading, +; not a fix confirmed against the Ordo -- the Ordo's own contrary reading is +; also textually arguable, see below). Fired once: 2023-12-24. +((id L4) + (citation "RG 30(a) (Caput V, De Vigiliis, docs/research/LT.txt:959-961): \"vigilia Nativitatis Domini quae, IN OCCURRENTIA, locum tenet dominicae IV Adventus, de qua, proinde, NULLA FIT COMMEMORATIO\" -- the Vigil of the Nativity, when it occurs [on a Sunday], TAKES THE PLACE of the 4th Sunday of Advent, of which, accordingly, no commemoration is made -- the identical \"locum tenet ... nulla fit commemoratio\" shape RG16(a) uses for a Feast of the Lord occurring on a II-class Sunday, which colitur already implements and which RG475(a) explicitly extends the Creed to (\"in qualibet dominica, etsi eius Officium alicui festo locum cedat\").") + (verdict open) + (note "2023-12-24 (the 4th Sunday of Advent AND Christmas Eve, a genuinely rare coincidence -- roughly 1 year in 7 -- absent from both the 2024-2025 and 2025-2026 windows, where Christmas Eve falls on a Tuesday and a Wednesday respectively). colitur says the Creed IS said (true), reading [temporal]'s own weekday (Sunday) per RG475(a)'s clause, positioned ahead of the vigil-exclusion check in {!Rite_ef.Rubrics_ef.creed} -- unconditionally, the same way it already does for RG16(a)'s Feast-of-the-Lord case. The Ordo says \"No Gl No Cr\" for this date. ADJUDICATED FOR COLITUR, not merely left open by default: RG30(a)'s own \"locum tenet ... nulla fit commemoratio\" language is textually closer to RG16(a) (which colitur already treats as Creed-preserving) than to an ordinary vigil superseding a Sunday -- the Vigil does not merely WIN THE DAY, it takes the SUNDAY'S OWN IDENTITY, the same shape RG475(a) was written to reach. The COUNTER-reading is real and not dismissed here: RG475(a)'s own text says \"locum cedat ... festo\" (gives way to a FEAST), and RG35 (Caput VI) classifies feria/vigilia/festum as three distinct liturgical-day categories -- a strict textual reading could confine 475(a)'s override to FEAST-displacement only, leaving a VIGIL-displaced Sunday to fall through to the general vigil exclusion (476, via RG33's own \"a vigil is a distinct category\" reasoning already coded elsewhere in {!Rite_ef.Rubrics_ef.creed}). Left OPEN rather than closed on this task's own authority: adjudicating scripture-grade primary-source questions is out of scope for a witness-wiring task, and the two readings are both defensible. Not fixable inside this task's own no-lib-changes constraint regardless of which reading eventually wins.") + (expected_rows 1)) |
