summaryrefslogtreecommitdiff
path: root/data/of
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 10:11:47 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 10:11:47 +0200
commitb6d0eba04d1da51515dad70127112898b500c1bc (patch)
treea82263c3d436d94b6208b14c61295b0e550fbe93 /data/of
parent8fa9db25f55f4ae92ad6a28115484dd981593a3c (diff)
downloadcolitur-b6d0eba04d1da51515dad70127112898b500c1bc.tar.gz
colitur-b6d0eba04d1da51515dad70127112898b500c1bc.zip
fix(of-lectionary): stop serving drifting readings for O-Antiphon and Christmas-season dates
The bootstrap excluded 19 lectio bases as "date-keyed duplicates", but 17 of them were not duplicates at all: the 8 O-Antiphon days (17-24 December) and 8 further Christmas-season dates (29-31 December, 2-5 and 7 January) each carry unique per-date content found nowhere else among the emitted entries, verified against lectio's own ini directly. 17 December is Gen 49:2,8-10 / Matthew 1:1-17, but colitur was falling through to that year's unrelated weekday-keyed "advent-3-mon" content instead. OLM n. 69.3 explains why: those ferias are fixed by civil date, unlike every other Advent/Christmastide/Paschaltide feria, which is merely non-alternating within a weekday slot. Temporal_of's own ferial slugs for these dates are weekday-keyed, so looking one of those up served whichever OTHER date happened to share that year's weekday alignment -- a citation that silently drifted year to year on ~16 real civil dates (6 January stays excluded: Temporal_of fixes Epiphany there unconditionally, so that date can never reach the ferial path at all; two more, easter-6-thu and advent-4-sat, stay excluded for their own, different structural reasons). Fixed with a date-keyed lookup route (Lectionary_of.date_keyed_slug), tried before the weekday-keyed one in readings' own step 3. Temporal_of's slugs are unchanged -- only which lectionary key resolves a day's citations. tools/bootstrap_lectionary_of.ml now maps the 17 bases to synthetic date-keyed slugs instead of excluding them, and its own reachability sweep calls date_keyed_slug directly so the two can never drift apart. Re-emitted data/of/lectionary.sexp (754 -> 770 entries) and corrected its provenance header, which previously described these dates as excluded duplicates. Also states, for the first time, a Minor finding from the same review: 190 of 222 shipped sanctoral slugs have no dedicated lectionary entry and correctly fall through to the ferial per OLM norms -- expected behaviour, not a gap, but never said in the coverage report before. New tests pin 17 December (Gen 49:2,8-10 / Matthew 1:1-17) and 2 January (1 John 2:22-28 / John 1:19-28) in two years with different weekday alignments, proving neither reading drifts, plus direct boundary coverage of date_keyed_slug itself (both windows, the 6 January exclusion, and the Sunday guard).
Diffstat (limited to 'data/of')
-rw-r--r--data/of/lectionary.sexp98
1 files changed, 87 insertions, 11 deletions
diff --git a/data/of/lectionary.sexp b/data/of/lectionary.sexp
index 4f43f12..167a7c7 100644
--- a/data/of/lectionary.sexp
+++ b/data/of/lectionary.sexp
@@ -25,28 +25,56 @@
; a MISSING source file is fatal, checked before any read is attempted --
; see this generator's own [parse_ini]) and commit the diff instead.
; Every emitted key is asserted, at generation time, to be a slug
-; Rite_of.Temporal_of actually computes OR a slug the real merged
+; Rite_of.Temporal_of actually computes, OR a slug the real merged
; sanctoral layer (data/of/calendar-2002.sexp + all 13 decree overlays)
-; actually carries -- see [assert_reachable].
+; actually carries, OR a date Rite_of.Lectionary_of.date_keyed_slug
+; actually reaches -- see [assert_reachable].
+;
+; CORRECTED 2026-08-26 (review): this file used to exclude 16 lectio
+; bases -- the 8 O-Antiphon days (17-24 December) and 8 further
+; Christmas-season dates (29-31 December, 2-5 and 7 January) -- as
+; "date-keyed duplicates" of the weekday-keyed ferial families mapped
+; above. That was false: each carries content found nowhere else among
+; the emitted entries (17 December: Gen 49:2,8-10/Matt 1:1-17), which
+; OLM n. 69.3 explains -- these ferias are fixed by CIVIL DATE, not
+; merely non-alternating within a weekday slot like every other Advent/
+; Christmastide feria. Every day in 2005-2050 previously served a
+; DRIFTING citation there (whichever weekday-keyed family that year's
+; own alignment happened to land on) instead of the Missal's fixed one.
+; Fixed via a new date-keyed lookup route, tried BEFORE the weekday-
+; keyed one (Rite_of.Lectionary_of.date_keyed_slug, readings' own step
+; 3) -- Temporal_of's slugs are UNCHANGED, only which lectionary key
+; resolves the day's citations. 3 lectio bases remain excluded, for
+; three genuinely different structural-unreachability reasons, none of
+; them "duplicate" -- see [excluded_bases]'s own comment.
;
; Source: ../lectio/internal/caldata/of-lectionary.ini
; SHA-256: f0b527aef58b93e6ccdfbeafe52b340ed2a9d7d72805bf5083e3da04b080123c
-; 988 ini sections (988 expected) -> 438 resolved (base, cycle-shape) pairs -> 419 colitur slugs mapped, 19 ini bases deliberately excluded (date-
-; keyed duplicates/late-Advent, no colitur date-keyed lookup exists --
-; see [excluded_bases]), 0 ini bases genuinely unmapped (no pattern, no
-; override, no matching sanctoral slug) -> 754 emitted lectionary entries.
+; 988 ini sections (988 expected) -> 438 resolved (base, cycle-shape) pairs -> 435 colitur slugs mapped, 3 ini bases genuinely excluded (structurally
+; unreachable -- see [excluded_bases]), 0 ini bases genuinely unmapped
+; (no pattern, no override, no matching sanctoral slug) -> 770 emitted
+; lectionary entries.
;
; COVERAGE, BOTH DIRECTIONS (Step 1 of this task's own brief):
; (1) Temporal-day gap: of the 365 days of civil year 2026, 1 produce a
-; Rite_of.Temporal_of slug with NO entry in this file (tried flat,
-; then both the Sunday- and weekday-cycle letter suffixes -- the
-; same order Lectionary_of.readings itself tries). Those are days
-; with no readings via the temporal-slug path (a sanctoral proper
-; on the same civil day, where one exists, is Lectionary_of's own
+; Rite_of.Temporal_of slug with NO entry in this file (tried the
+; date-keyed route first, then flat, then both the Sunday- and
+; weekday-cycle letter suffixes -- the same order
+; Lectionary_of.readings itself tries). Those are days with no
+; readings via the temporal-slug path (a sanctoral proper on the
+; same civil day, where one exists, is Lectionary_of's own
; separate first chance). Named set below.
; (2) Unmapped lectio keys: 0 ini base names (of 988 sections, 438
; distinct bases) map to no colitur slug at all -- data being
; silently dropped if unreported. Named below.
+; (3) Sanctoral coverage (Minor, 2026-08-26 review): of the 222 shipped
+; sanctoral slugs (data/of/calendar-2002.sexp + all 13 decree
+; overlays), 32 have a DEDICATED entry in this file (a lectio base
+; name this generator recognised verbatim as one of them). The
+; other 190 have none and correctly fall through to the day's own
+; ferial (Lectionary_of.readings' own step 2 -> step 3) -- this is
+; OLM norms working as designed for a saint with no proper of
+; their own, not a gap in this data.
; Regenerate with:
; eval $(opam env) && dune exec tools/bootstrap_lectionary_of.exe -- ../lectio/internal/caldata/of-lectionary.ini data/of/lectionary.sexp
; Unmapped lectio bases (0):
@@ -203,6 +231,30 @@
(of-advent-4-wednesday-ii
(((part First) (reference "1 Samuel 1:24-28"))
((part Gospel) (reference "Luke 1:46-56"))))
+ (of-advent-dec-17
+ (((part First) (reference "Genesis 49:2,8-10"))
+ ((part Gospel) (reference "Matthew 1:1-17"))))
+ (of-advent-dec-18
+ (((part First) (reference "Jeremiah 23:5-8"))
+ ((part Gospel) (reference "Matthew 1:18-24"))))
+ (of-advent-dec-19
+ (((part First) (reference "Judges 13:2-7,24-25a"))
+ ((part Gospel) (reference "Luke 1:5-25"))))
+ (of-advent-dec-20
+ (((part First) (reference "Isaiah 7:10-14"))
+ ((part Gospel) (reference "Luke 1:26-38"))))
+ (of-advent-dec-21
+ (((part First) (reference "Song of Solomon 2:8-14"))
+ ((part Gospel) (reference "Luke 1:39-45"))))
+ (of-advent-dec-22
+ (((part First) (reference "1 Samuel 1:24-28"))
+ ((part Gospel) (reference "Luke 1:46-56"))))
+ (of-advent-dec-23
+ (((part First) (reference "Malachi 3:1-4;4:5-6"))
+ ((part Gospel) (reference "Luke 1:57-66"))))
+ (of-advent-dec-24
+ (((part First) (reference "2 Samuel 7:1-5,8b-12,14a,16"))
+ ((part Gospel) (reference "Luke 1:67-79"))))
(of-advent-sunday-1-a
(((part First) (reference "Isaiah 2:1-5"))
((part Gospel) (reference "Matthew 24:37-44"))))
@@ -356,6 +408,30 @@
(of-christmas-2-wednesday
(((part First) (reference "1 John 4:11-18"))
((part Gospel) (reference "Mark 6:45-52"))))
+ (of-christmas-dec-29
+ (((part First) (reference "1 John 2:3-11"))
+ ((part Gospel) (reference "Luke 2:22-35"))))
+ (of-christmas-dec-30
+ (((part First) (reference "1 John 2:12-17"))
+ ((part Gospel) (reference "Luke 2:36-40"))))
+ (of-christmas-dec-31
+ (((part First) (reference "1 John 2:18-21"))
+ ((part Gospel) (reference "John 1:1-18"))))
+ (of-christmas-jan-2
+ (((part First) (reference "1 John 2:22-28"))
+ ((part Gospel) (reference "John 1:19-28"))))
+ (of-christmas-jan-3
+ (((part First) (reference "1 John 2:29-3:6"))
+ ((part Gospel) (reference "John 1:29-34"))))
+ (of-christmas-jan-4
+ (((part First) (reference "1 John 3:7-10"))
+ ((part Gospel) (reference "John 1:35-42"))))
+ (of-christmas-jan-5
+ (((part First) (reference "1 John 3:11-21"))
+ ((part Gospel) (reference "John 1:43-51"))))
+ (of-christmas-jan-7
+ (((part First) (reference "1 John 5:14-21"))
+ ((part Gospel) (reference "John 2:1-11"))))
(of-christmas-sunday-2
(((part First) (reference "Sirach 24:1-4,12-16"))
((part Gospel) (reference "John 1:1-18"))))