summaryrefslogtreecommitdiff
path: root/data/ef/lectionary.sexp
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 12:28:03 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 12:28:03 +0200
commit8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7 (patch)
tree9c72d1c30f0f37ef7138325abb3ca26ebe68ff14 /data/ef/lectionary.sexp
parent9947a28f3a40bd8ac36892dcf5aad59d9e6f847c (diff)
downloadcolitur-8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7.tar.gz
colitur-8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7.zip
test(oracle): compare reading citations against missalemeum
Layer 4 (test_oracle.ml) now extracts and compares the Epistle/Gospel citation for every one of the 730 days in the 2026-2027 fixture, the same axis Task 8 already added to layer 3. tools/ extract_missalemeum_oracle.py gained a structural citation-span detector (the first "*...*"-wrapped span under 40 chars containing a chapter:verse-shaped digit pair), verified exhaustively over all 1 458 Lectio/Evangelium sections. 728 of 730 days are comparable; the 2 that are not (Good Friday, both years) have no such section in missalemeum's own JSON at all -- a structural limit on the oracle's own side (M23), not a colitur gap. 451 of 730 days differ and are all explained across 19 cited entries; 0 unexplained. Chain step 4 (the Commons) has no layer-4 witness: confirmed empirically (a scratch sweep, not merely re-asserted from Task 6's own report) that none of the 15 Commons/proper saints is ever the observed office in this window. The comparison surfaced three genuine colitur bugs in data/ef/lectionary.sexp, all fixed at the source in tools/bootstrap_lectionary.ml: 1. Holy Name of Jesus (ef-holy-name-sunday/ef-holy-name) carried a mis-derived citation, borrowed by analogy from an unrelated ini section ("ef-christmas-sunday-0", the Sunday-within-the-Octave's own Mass) on the wrong assumption the two share a Mass. Disproved by missalemeum's own extraction for both real Holy Name Sundays in its window, confirmed against the Missal itself, twice, both scans (Acts 4:8-12/Luke 2:21, not Gal 4:1-7/Luke 2:33-40). 2. RG 17(a)'s own "diebus ferialibus" rubric (immediately following the Holy Name heading, both scans) was never implemented: 2-5 January ferias repeat 1 January's Mass, 7-12 January ferias before Holy Family Sunday repeat Epiphany's, and Holy Family's own week has a named formula ("Missa Dominicae Primae post Epiphaniam"). All three fell to step 3's undifferentiated Sunday walkback instead. Fixed for three 5-weekday families, deliberately excluding Saturday from all three -- RG 78's BVM Saturday Office wins there unconditionally, confirmed against missalemeum's own title on this window's own such Saturdays. 3. Corpus Christi and Sacred Heart (both real, never-impeded I-class movable feasts) had no lectionary entry at all. Both engines independently fell back to Trinity Sunday's own citation and silently agreed on the wrong answer -- the "Holy Thursday violet in both" shape CLAUDE.md names for exactly this reason. Because lectionary.sexp is shared with layer 3 (the lectio differential, 2005-2050), these fixes changed colitur's output for the whole domain, not only 2026-2027. data/ef/expected-divergences.sexp and test_differential.ml needed matching updates: C1 narrowed 361->173 and C25 narrowed 57->13 (rows that now resolve correctly moved to new entries), C16's note corrected (count unchanged), and six new entries added (C29-C34, 397 rows total, all verdict colitur). test_lectionary.ml and test_lectionary_ef.ml's own pins were updated to match (entry count 131->148; one step-3 regression test re-pointed to a date that still genuinely exercises that step). One entry, M26 (30 rows, verdict open), is a genuine unfixed gap: colitur's step-3 "resume the preceding Sunday" fallback is its only ferial-Mass mechanism, and missalemeum's own selection is more granular in three confirmed ways (a rotating votive Mass of the BVM, a named weekly formula for at least one week, and later Time-after-Pentecost weeks this task's own investigation did not narrow to a single rule) -- the same "needs a season-keyed selection mechanism, new behaviour not new data" shape data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own residual concern already name, out of this task's own scope to build. dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359 tests green, 89.5s.
Diffstat (limited to 'data/ef/lectionary.sexp')
-rw-r--r--data/ef/lectionary.sexp71
1 files changed, 62 insertions, 9 deletions
diff --git a/data/ef/lectionary.sexp b/data/ef/lectionary.sexp
index 3ec61bd..ccb2214 100644
--- a/data/ef/lectionary.sexp
+++ b/data/ef/lectionary.sexp
@@ -9,17 +9,19 @@
; says why this check cannot be widened to catch that).
;
; Source: ../lectio/internal/caldata/tridentine-lectionary.ini
-; SHA-256: fde533289fb620fea33386b0a3e733ada3c1d01f10a36d8a7f5a2b500c92740e
-; 131 entries (119 ini sections translated/widened into colitur's own
+; SHA-256: ccd6640e8c2ae4d260e62c55cfe2b3ea14ab996e8e5a82cc1b9a37bc65ac8591
+; 148 entries (119 ini sections translated/widened into colitur's own
; 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]; 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:
+; 2 hand-authored directly from the Missal, two entries
+; [holy_name_entries]; 15 hand-authored directly from the Missal
+; [epiphanytide_opening_entries]; 2 hand-authored directly from the
+; Missal, two entries [movable_feast_entries] -- see this generator's
+; own comments on all nine). 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"))
@@ -66,12 +68,45 @@
(ef-christ-the-king
(((part First) (reference "Col 1:12-20."))
((part Gospel) (reference "John 18:33-37"))))
+ (ef-christmas-1-friday
+ (((part First) (reference "Titus 2:11-15"))
+ ((part Gospel) (reference "Luke 2:21"))))
+ (ef-christmas-1-monday
+ (((part First) (reference "Titus 2:11-15"))
+ ((part Gospel) (reference "Luke 2:21"))))
+ (ef-christmas-1-thursday
+ (((part First) (reference "Titus 2:11-15"))
+ ((part Gospel) (reference "Luke 2:21"))))
+ (ef-christmas-1-tuesday
+ (((part First) (reference "Titus 2:11-15"))
+ ((part Gospel) (reference "Luke 2:21"))))
+ (ef-christmas-1-wednesday
+ (((part First) (reference "Titus 2:11-15"))
+ ((part Gospel) (reference "Luke 2:21"))))
+ (ef-christmas-2-friday
+ (((part First) (reference "Isa 60:1-6"))
+ ((part Gospel) (reference "Matt 2:1-12"))))
+ (ef-christmas-2-monday
+ (((part First) (reference "Isa 60:1-6"))
+ ((part Gospel) (reference "Matt 2:1-12"))))
+ (ef-christmas-2-thursday
+ (((part First) (reference "Isa 60:1-6"))
+ ((part Gospel) (reference "Matt 2:1-12"))))
+ (ef-christmas-2-tuesday
+ (((part First) (reference "Isa 60:1-6"))
+ ((part Gospel) (reference "Matt 2:1-12"))))
+ (ef-christmas-2-wednesday
+ (((part First) (reference "Isa 60:1-6"))
+ ((part Gospel) (reference "Matt 2:1-12"))))
(ef-christmas-sunday-0
(((part First) (reference "Gal 4:1-7"))
((part Gospel) (reference "Luke 2:33-40"))))
(ef-circumcision
(((part First) (reference "Titus 2:11-15"))
((part Gospel) (reference "Luke 2:21"))))
+ (ef-corpus-christi
+ (((part First) (reference "1 Cor 11:23-29"))
+ ((part Gospel) (reference "John 6:56-59"))))
(ef-easter-1-friday
(((part First) (reference "1 Pet 3:18-22"))
((part Gospel) (reference "Matt 28:16-20"))))
@@ -133,11 +168,11 @@
(((part First) (reference "Isa 60:1-6"))
((part Gospel) (reference "Matt 2:1-12"))))
(ef-holy-name
- (((part First) (reference "Gal 4:1-7"))
- ((part Gospel) (reference "Luke 2:33-40"))))
+ (((part First) (reference "Acts 4:8-12"))
+ ((part Gospel) (reference "Luke 2:21"))))
(ef-holy-name-sunday
- (((part First) (reference "Gal 4:1-7"))
- ((part Gospel) (reference "Luke 2:33-40"))))
+ (((part First) (reference "Acts 4:8-12"))
+ ((part Gospel) (reference "Luke 2:21"))))
(ef-lent-1-monday
(((part First) (reference "Ezech 34:11-16"))
((part Gospel) (reference "Matt 25:31-46"))))
@@ -306,6 +341,9 @@
(ef-pentecost-vigil
(((part First) (reference "Acts 19:1-8."))
((part Gospel) (reference "John 14:15-21."))))
+ (ef-sacred-heart
+ (((part First) (reference "Eph 3:8-12, 14-19"))
+ ((part Gospel) (reference "John 19:31-37"))))
(ef-september-ember-fri
(((part First) (reference "Osee 14:2-10"))
((part Gospel) (reference "Luke 7:36-50"))))
@@ -324,6 +362,21 @@
(ef-septuagesima-sunday-3
(((part First) (reference "1 Cor. 13:1-13"))
((part Gospel) (reference "Luke 18:31-43"))))
+ (ef-time-after-epiphany-1-friday
+ (((part First) (reference "Rom 12:1-5"))
+ ((part Gospel) (reference "Luke 2:42-52"))))
+ (ef-time-after-epiphany-1-monday
+ (((part First) (reference "Rom 12:1-5"))
+ ((part Gospel) (reference "Luke 2:42-52"))))
+ (ef-time-after-epiphany-1-thursday
+ (((part First) (reference "Rom 12:1-5"))
+ ((part Gospel) (reference "Luke 2:42-52"))))
+ (ef-time-after-epiphany-1-tuesday
+ (((part First) (reference "Rom 12:1-5"))
+ ((part Gospel) (reference "Luke 2:42-52"))))
+ (ef-time-after-epiphany-1-wednesday
+ (((part First) (reference "Rom 12:1-5"))
+ ((part Gospel) (reference "Luke 2:42-52"))))
(ef-time-after-epiphany-sunday-1
(((part First) (reference "Col 3:12-17"))
((part Gospel) (reference "Luke 2:42-52"))))