From 71e8d83a094b90b7aa4a30fcc7e719d6399b85f4 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 12 Aug 2026 17:49:01 +0200 Subject: tools(bootstrap_sanctoral): name.pl is optional, not required lectio's regenerated tridentine-calendar.ini (the fix that corrects the 15-entry rank cluster and adds the 5 missing entries this branch re-bootstraps from) has 5 entries with no name.pl field at all (agnes-secundo, boniface-martyr, eusebius-confessor, evaristus, theodore -- all either newly added or newly un-hidden). parse_names previously required name.pl unconditionally (`field sec "name.pl"`, which dies on absence) -- correct for a source that always had it, wrong now that it legitimately does not. Names.t is an open, per-language assoc list (names.mli) with no rule that every entry must carry every language colitur happens to know about, so requiring pl here was this tool's own invented constraint, not a kernel one. Falls back to an en-only Names.t when pl is absent, never a placeholder string. --- tools/bootstrap_sanctoral.ml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'tools') diff --git a/tools/bootstrap_sanctoral.ml b/tools/bootstrap_sanctoral.ml index 19adc0b..4135518 100644 --- a/tools/bootstrap_sanctoral.ml +++ b/tools/bootstrap_sanctoral.ml @@ -155,10 +155,25 @@ let parse_subject sec = | Some s -> s | None -> die "section [%s]: unknown class %S" sec.name raw) +(* name.en is always required; name.pl is not -- the 2026-08-12 re-bootstrap + (RG16(a) blast-radius task) found 5 of the source's 322 entries missing it + outright (agnes-secundo, boniface-martyr, eusebius-confessor, evaristus, + theodore -- all 5 either newly added or newly un-hidden by lectio's own + generator fix, never previously reachable through this tool at all, since + every entry the OLD ini shipped happened to carry both languages). Prior + to this the field was unconditionally required (`field sec "name.pl"`, + which `die`s on absence) -- correct for a byte-faithful mirror of a + source that always had it, wrong once the source legitimately does not: + Names.t itself is an open, per-language assoc list (names.mli) with no + rule that every entry must carry every language colitur happens to know + about, so requiring pl here was this tool's own invented constraint, not + a kernel one. Falling back to en-only (never a placeholder string) is the + same posture the kernel takes elsewhere for a genuinely absent field. *) let parse_names sec = let en = field sec "name.en" in - let pl = field sec "name.pl" in - Names.of_list [ (Lang.of_string_exn "en", en); (Lang.of_string_exn "pl", pl) ] + match field_opt sec "name.pl" with + | Some pl -> Names.of_list [ (Lang.of_string_exn "en", en); (Lang.of_string_exn "pl", pl) ] + | None -> Names.of_list [ (Lang.of_string_exn "en", en) ] (* reading.* is deliberately ignored -- Plan 4's lectionary bootstrap. *) let convert_entry sec : V.rank Layer.entry = -- cgit v1.3 From 4c0277ef2a848e355224812db15c8bca921daf75 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 12 Aug 2026 18:26:05 +0200 Subject: tools(bootstrap_sanctoral): fix round 1 (F6) -- stale entry-count comments Three comments still said "322" after the previous commit's regeneration moved the total to 327: the date-form comment (rewritten to not carry a count at all, since it is about a FORM, not a quantity); the explicit-class comment (327, plus recorded that the 6 entries carrying it changed membership -- 12 September dropped it, 13 January gained it -- even though the count of 6 itself did not move); the name.pl comment (327 total, 5 missing it, 322 carrying it -- was "5 of the source's 322 entries", conflating the new total with the old one). --- tools/bootstrap_sanctoral.ml | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'tools') diff --git a/tools/bootstrap_sanctoral.ml b/tools/bootstrap_sanctoral.ml index 4135518..4868c6c 100644 --- a/tools/bootstrap_sanctoral.ml +++ b/tools/bootstrap_sanctoral.ml @@ -94,8 +94,10 @@ let parse_slug sec = | Ok s -> s | Error e -> die "section [%s]: invalid slug: %s" sec.name e -(* All 322 entries use plain MM-DD (spec §4.1); anything else is a date form - the mapping does not cover. *) +(* Every entry uses plain MM-DD (spec §4.1; 327 of them as of the + 2026-08-12 ef-rebootstrap, up from 322 -- this rule itself is about the + date FORM, not a count, so it does not go stale as entries are added or + removed); anything else is a date form the mapping does not cover. *) let parse_date sec = let raw = field sec "date" in match String.split_on_char '-' raw with @@ -140,10 +142,15 @@ let parse_colour sec = (* class = lord|bvm|saint -> Subject.t; absent -> Subject.Saint (decision 1: Celebration.make's kernel default is Subject.Temporal, correct for the temporal cycle and wrong for every sanctoral entry -- overridden here, - never left to the default). Only 6 of 322 entries carry an explicit - class in the source, and all 6 are "lord" as of this bootstrap; bvm/saint - are mapped in case a future lectio update adds one, but "temporal" is - rejected -- no sanctoral entry is the temporal cycle's own office. *) + never left to the default). Only 6 of 327 entries carry an explicit + class in the source (STALE DENOMINATOR CORRECTED, ef-rebootstrap fix + round 1, F6 -- was "6 of 322"; the count of 6 itself did not move, but + WHICH six did: the 2026-08-12 re-bootstrap dropped `class = lord` from + `most-holy-name-of-mary` and added it to + `commemoration-of-the-baptism-of-the-lord`, a straight swap, net zero), + and all 6 are "lord" as of this bootstrap; bvm/saint are mapped in case + a future lectio update adds one, but "temporal" is rejected -- no + sanctoral entry is the temporal cycle's own office. *) let parse_subject sec = match field_opt sec "class" with | None -> Subject.Saint @@ -156,8 +163,11 @@ let parse_subject sec = | None -> die "section [%s]: unknown class %S" sec.name raw) (* name.en is always required; name.pl is not -- the 2026-08-12 re-bootstrap - (RG16(a) blast-radius task) found 5 of the source's 322 entries missing it - outright (agnes-secundo, boniface-martyr, eusebius-confessor, evaristus, + (RG16(a) blast-radius task) found 5 of the source's 327 entries missing + it outright, 322 still carrying it (CORRECTED, fix round 1, F6: was "5 + of the source's 322 entries" -- the source has 327, of which 5 lack + name.pl and 322 have it; the 322 is a coincidence of the OLD total, not + the new one) (agnes-secundo, boniface-martyr, eusebius-confessor, evaristus, theodore -- all 5 either newly added or newly un-hidden by lectio's own generator fix, never previously reachable through this tool at all, since every entry the OLD ini shipped happened to carry both languages). Prior -- cgit v1.3