summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 13:02:39 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 13:02:39 +0200
commit5d236c75c557a7e9ed4a8a852b8089aca48b594e (patch)
tree59686baed56d78eff5255e31e0f677ebe32d044d /tools
parent8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7 (diff)
downloadcolitur-5d236c75c557a7e9ed4a8a852b8089aca48b594e.tar.gz
colitur-5d236c75c557a7e9ed4a8a852b8089aca48b594e.zip
test(oracle): fix round 1 -- C30 disclosure, RG 17(a) misattribution, M26 shapes
Three Important findings from coordinator review of 8d1eb25, all fixed. 1. C30's own note claimed its 91-row population "is C25's OWN former population, before this task narrowed it" -- false. Independently re-derived against the real resolver (pre-fix vs post-fix binary) and the lectio fixture: only 44 of the 91 rows were ever in C25 (Wed 6/ Thu 19/Fri 19, matching C25's own fix-round-3 breakdown exactly); the other 47 (all of Monday/Tuesday, plus part of Wednesday/Friday) previously matched lectio outright -- both engines independently landing on the same wrong value -- and are newly allow-listed only because colitur is now right. Rewritten to the same "both engines silently agreed on the wrong answer" pattern C33/C34 already used. 2. "Diebus ferialibus" is not RG 17(a) -- RG 17(a) states only the day-identity privilege; the ferial-Mass rubrics are Mass-propers rubrics, a distinction the register's own §6.3 already drew before this task's first pass blurred it in code/allow-list comments. A further slip: C31/C32 called their own rubric "RG 17(a)'s own next/ third sentence" when it is a different rubric block ~230 lines away, in Holy Family's (not Holy Name's) own feast propers. Fixed the attribution chain throughout tools/bootstrap_lectionary.ml, data/ef/expected-divergences.sexp's C29-C34, and (gitignored, outside this commit) docs/research/rules-register.md -- closed the §6.3 park, added §6.5 recording all four citations with corrected attribution. Quotes and line numbers were already right; only the chain of custody to RG 17(a) was wrong. 3. M26's own 30 rows classify into two nameable shapes, not "three confirmed shapes" with an unexplained 23-row residue that was in fact empty: 21 rows are RG 78's own already-documented BVM votive-Mass gap; 9 rows are a second, distinct gap -- a week whose own Sunday was displaced by a movable named feast (Trinity->Corpus Christi, "Missa Dominicae I post Pentecosten"; Christ the King), where the Missal requires the displaced Sunday's own Mass to keep informing that week's ferias but step 3 walks back to the displacing feast's citation instead -- proven directly by colitur's own citation on the Christ- the-King rows being literally that feast's own Gospel. verdict open unchanged (not fixed here); the shape is now named instead of buried. Minors: section count corrected 1458->1456 (four places); "exactly one candidate, zero ambiguous" corrected to "correctness rests on ordering, not uniqueness" (2 of 1456 sections genuinely yield two candidates, Holy Saturday's own Lectio, both years); the stale "nothing in layers 3-5 compares citations" claim corrected (only layer 5 still doesn't); M18's note corrected (five new entries not six; ~18 of its remaining 352 rows only agree now because of this task's own fixes, not "already" before it); "five" corrected to "six" otherwise-unoccupied Saturdays in bootstrap_lectionary.ml; scan2 quotes softened where OCR-garbled. Also done outside the git-tracked files: the step-4 (Commons) coverage gap is now recorded in data/ef/expected-divergences-missalemeum.sexp's own header, not only the commit body and the (gitignored) report. dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359 tests green, 95.7s.
Diffstat (limited to 'tools')
-rw-r--r--tools/bootstrap_lectionary.ml105
-rw-r--r--tools/extract_missalemeum_oracle.py19
2 files changed, 81 insertions, 43 deletions
diff --git a/tools/bootstrap_lectionary.ml b/tools/bootstrap_lectionary.ml
index 357cb81..7fb186d 100644
--- a/tools/bootstrap_lectionary.ml
+++ b/tools/bootstrap_lectionary.ml
@@ -479,25 +479,47 @@ let holy_name_entries =
generator relies on here; not re-derived, read directly from the code
that computes them).
+ NOT RG 17(a) -- CORRECTED, fix round 1 (coordinator review): RG 17(a)
+ itself (scan1.txt:396-402, "festum Ssmi Nominis Iesu, celebrandum
+ dominica quae occurrit a die 2 ad 5 ianuarii... secus die 2 ianuarii")
+ states only the day-identity PRIVILEGE (which day the feast falls on),
+ nothing about ferial Masses -- exactly the distinction docs/research/
+ rules-register.md's own account already draws ("a THIRD, more specific
+ primary text... the Mass propers' own rubric for this feast",
+ deliberately NOT folded into RG 17(a) there). All three rubrics below
+ are Mass-PROPERS rubrics, printed as part of a feast's own Mass
+ heading, not General Rubrics chapter text -- and the second and third
+ are a DIFFERENT feast's propers from the first, not a continuation of
+ it (see each bullet's own attribution).
+
- [ef-christmas-1-{monday,tuesday,wednesday,thursday,friday}] (2-5
- January, EXCLUDING Saturday -- see below): RG 17(a)'s OWN rubric,
- immediately following the Holy-Name-Sunday heading, both scans, word
- for word: "Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1
- ianuarii" (scan1.txt:6522-6526) / "Diebus ferialibus a 2 ad 6
- ianuarii Missa dicitur ut die 1 ianuarii" (scan2.txt, the "6" a
- one-digit OCR variant of scan1's "5" -- immaterial either way, since
- 6 January is always Epiphany, a fixed I-class feast outranking any
- ferial rubric outright) -- ON FERIAL DAYS from 2 to 5 January, THE
- SAME MASS AS 1 JANUARY (the Circumcision) IS SAID.
+ January, EXCLUDING Saturday -- see below): the Missal's own
+ Mass-propers rubric for the Most Holy Name of Jesus, printed
+ immediately BEFORE the Sunday-shape Mass heading (not after it),
+ both scans, word for word: "Diebus ferialibus a 2 ad 5 ianuarii
+ Missa dicitur ut die 1 ianuarii" (scan1.txt:6522-6526) / "Diebus
+ ferialibua a 2 ad fi ianuarii Missa dicitur ut die 1 ianuarii"
+ (scan2.txt:7213-7217 -- OCR-garbled there, "ferialibua"/"fi" for
+ "ferialibus"/"5"; scan1 is clean and missalemeum's own extraction
+ corroborates the citation this rubric produces, so the reading is
+ not in doubt) -- ON FERIAL DAYS from 2 to 5 January, THE SAME MASS
+ AS 1 JANUARY (the Circumcision) IS SAID.
- [ef-christmas-2-{monday,tuesday,wednesday,thursday,friday}] (7
January through the day before Holy Family Sunday's own civil date,
- EXCLUDING Saturday -- see below): the SAME rubric's own next
- sentence, both scans, word for word: "Diebus ferialibus a 7 ad 12
- ianuarii ANTE dominicam I post Epiphaniam occurrentibus, dicitur
- Missa de festo Epiphaniae" (scan1.txt:6753-6757, scan2.txt
- corroborates) -- ON FERIAL DAYS from 7 to 12 January occurring BEFORE
- the first Sunday after Epiphany (Holy Family), THE MASS OF THE FEAST
- OF EPIPHANY IS SAID.
+ EXCLUDING Saturday -- see below): a DIFFERENT Mass-propers rubric
+ block, ~230 scan1 lines after the one immediately above, sitting
+ within HOLY FAMILY'S OWN feast propers (RG 17(b)'s feast, page
+ header "Sanctae Familiae Iesu, Mariae, Ioseph", scan1.txt:6751/
+ scan2.txt:7412), printed immediately BEFORE the "DOMINICA PRIMA post
+ Epiphaniam / SANCTAE FAMILIAE" Mass heading -- the same structural
+ position the rubric above occupies relative to Holy Name's own
+ heading, but a different feast's propers, not a continuation of the
+ same rubric: "Diebus ferialibus a 7 ad 12 ianuarii ANTE dominicam I
+ post Epiphaniam occurrentibus, dicitur Missa de festo Epiphaniae"
+ (scan1.txt:6753-6757; scan2.txt:7413-7415 corroborates, OCR-garbled
+ -- "occurentibus"/"Epipbaniee" -- reading not in doubt) -- ON FERIAL
+ DAYS from 7 to 12 January occurring BEFORE the first Sunday after
+ Epiphany (Holy Family), THE MASS OF THE FEAST OF EPIPHANY IS SAID.
- [ef-time-after-epiphany-1-{monday,tuesday,wednesday,thursday,friday}]
(Holy Family Sunday's own week, EXCLUDING Saturday -- see below,
straddling the Christmastide/Time-after-Epiphany season boundary on
@@ -506,20 +528,22 @@ let holy_name_entries =
Time-after-Epiphany ferial fallback... will give the rest of that
same Sunday-to-Saturday week", so one hand-authored value covers the
whole week regardless of which code path computed the slug for a
- given civil day): the rubric's own THIRD sentence, same citation, a
- named formula rather than a second "repeat the Sunday" instruction:
- "post eandem dominicam vero Missa de eadem dominica In excelso
- throno, ut infra... Haec Missa dicenda est diebus ferialibus huius
- hebdomadae" (scan1.txt:6758-6851, the formula's own heading "MISSA
- DOMINICAE PRIMAE post Epiphaniam" immediately below) -- Epistle
- "Lectio Epistolae beati Pauli Apostoli ad Romanos. Rom. 12, 1-5"
- (scan1.txt:6875-6877), Gospel the SAME pericope as Holy Family's own
- Sunday Mass, Luke 2:42-52 (printed out in full immediately below the
- Epistle, scan1.txt:6885-6905) -- a DIFFERENT Epistle from Holy Family
- Sunday's own (Col 3:12-17), but the SAME Gospel, exactly as
- missalemeum's own fixture rows show (2026-01-12/2027-01-11/
- 2027-01-12: Gospel already agreed before this fix, only the Epistle
- diverged).
+ given civil day): the SAME Holy Family propers block immediately
+ above, its own next sentence, a named formula rather than a second
+ "repeat the Sunday" instruction: "post eandem dominicam vero Missa
+ de eadem dominica In excelso throno, ut infra... Haec Missa dicenda
+ est diebus ferialibus huius hebdomadae" (scan1.txt:6758-6851;
+ scan2.txt:7415-7434 corroborates "In excelso throno... ut infra",
+ OCR-garbled elsewhere in the same passage, reading not in doubt),
+ the formula's own heading "MISSA DOMINICAE PRIMAE post Epiphaniam"
+ immediately below -- Epistle "Lectio Epistolae beati Pauli Apostoli
+ ad Romanos. Rom. 12, 1-5" (scan1.txt:6875-6877), Gospel the SAME
+ pericope as Holy Family's own Sunday Mass, Luke 2:42-52 (printed out
+ in full immediately below the Epistle, scan1.txt:6885-6905) -- a
+ DIFFERENT Epistle from Holy Family Sunday's own (Col 3:12-17), but
+ the SAME Gospel, exactly as missalemeum's own fixture rows show
+ (2026-01-12/2027-01-11/2027-01-12: Gospel already agreed before this
+ fix, only the Epistle diverged).
- 13 January's OWN separate case, checked and found to need NO entry
here: when Holy Family does not fall there, 13 January carries a
II-class sanctoral commemoration of its own ("Commemoration of the
@@ -544,14 +568,19 @@ let holy_name_entries =
this ranking whenever the day's own office would otherwise be a plain
Class4 feria, checked in {!Rite_ef.Temporal_ef}'s own [bvm_saturday_names]
comment and confirmed against the real resolver here, not assumed).
- This window's own five otherwise-unoccupied Saturdays inside these
- three families (2026-01-03, 2026-01-10, 2027-01-09; 2026-01-17 and
- 2027-01-16 are won outright by a saint instead, Anthony and Marcellus I
- respectively, whose own citations are unaffected either way) genuinely
- ARE the BVM Office, missalemeum's own title confirming it on every one
- that reaches the office at all ("II Mass of the B. V. M. -- Vultum
- Tuum", never "Feria") -- so none of the three "repeat X" rubrics above
- ever actually apply on a Saturday. The three [-saturday] slugs are
+ This window's own SIX otherwise-unoccupied Saturdays inside these
+ three families (2026-01-03, 2026-01-10, 2027-01-02, 2027-01-09;
+ 2026-01-17 and 2027-01-16 are won outright by a saint instead, Anthony
+ and Marcellus I respectively, whose own citations are unaffected
+ either way) genuinely ARE the BVM Office, missalemeum's own title
+ confirming it on every one that reaches the office at all ("II Mass of
+ the B. V. M. -- Vultum Tuum", never "Feria") -- so none of the three
+ "repeat X" rubrics above ever actually apply on a Saturday. (CORRECTED,
+ fix round 1, coordinator review: this comment previously counted only
+ five, omitting 2027-01-02 -- `ef-christmas-2-saturday`, the same shape
+ as 2026-01-10 -- from its own list; no consequence for the code, which
+ already excludes every [-saturday] slug in all three families
+ unconditionally, not by enumerating dates.) The three [-saturday] slugs are
DELIBERATELY left unentered, all three: the BVM Saturday Office's own
citation is a genuine, ALREADY-DOCUMENTED open item (register, Task 6's
own residual concern 4, "the BVM Saturday Office still emits its
diff --git a/tools/extract_missalemeum_oracle.py b/tools/extract_missalemeum_oracle.py
index 4b010e2..1abc574 100644
--- a/tools/extract_missalemeum_oracle.py
+++ b/tools/extract_missalemeum_oracle.py
@@ -57,11 +57,20 @@
# under 40 characters that contains a chapter:verse-shaped digit pair
# (`\d+\s*[:,.]\s*\d+`, matching all three separators actually used in
# this source -- "Titus 2:11-15", "4 Kings, 5:1-15", "John 20. 19-31").
-# Verified exhaustively over the whole fixture (all 1 458 Lectio/
-# Evangelium sections across the 728 days that carry one): exactly one
-# candidate per section, zero ambiguous, zero false positives from a
-# longer rubric sentence. TWO days (Good Friday, both years -- the "Missa
-# Praesanctificatorum" liturgy) have no "Lectio"/"Evangelium" section at
+# Verified exhaustively over the whole fixture (all 1 456 Lectio/
+# Evangelium sections, 728 days x 2) -- CORRECTED, fix round 1
+# (coordinator review): this used to claim
+# "exactly one candidate per section, zero ambiguous". WRONG: 2 of the
+# 1 456 sections (Holy Saturday's own "Lectio", both years) yield TWO
+# candidates, ['Col 3:1-4', 'Ps 117, 1'] -- the second is the Tractus
+# verse that follows the real Epistle citation in the same paragraph,
+# also matching the verse-shaped regex. The fixture is still correct on
+# both rows (Col 3:1-4 IS the real citation) because [extract_citation]
+# below returns candidates[0] and the real citation happens to come
+# FIRST in the text -- correctness here rests on ORDERING, not
+# uniqueness, and this header previously overclaimed the latter. TWO
+# days (Good Friday, both years -- the "Missa Praesanctificatorum"
+# liturgy) have no "Lectio"/"Evangelium" section at
# all (a multi-lesson structure instead, "Lectiones"/"Passio", with no
# single reading occupying the Epistle/Gospel slot this schema assumes,
# the SAME shape colitur's own test_lectionary.ml records for its own