aboutsummaryrefslogtreecommitdiff
path: root/tools/bootstrap_sanctoral.ml
Commit message (Collapse)AuthorAgeFilesLines
* data(ef): carry sanctoral propers on the celebrationLukasz Kasprzak2026-08-151-2/+26
| | | | | | | | | | | | | | Celebration.citations has existed in the type, the .mli and the sexp schema since Plan 2 and has been emitted as () for every entry; the bootstrap now writes the real values for the 208 entries lectio has them for. On the celebration rather than in the lectionary table deliberately: a diocesan overlay adding a saint then carries his readings through the existing overlay algebra, with no second file to edit and no new directive. Asserted both ways -- the 13 January proper is present, and no Commemoration_only entry has readings, because in the EF a commemoration contributes an oration, not a reading.
* tools(bootstrap_sanctoral): fix round 1 (F6) -- stale entry-count commentsLukasz Kasprzak2026-08-121-8/+18
| | | | | | | | | | | 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): name.pl is optional, not requiredLukasz Kasprzak2026-08-121-2/+17
| | | | | | | | | | | | | | | | | 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.
* data(ef): bootstrap the 1962 sanctoral from lectioLukasz Kasprzak2026-08-121-0/+235
Convert lectio's tridentine-calendar.ini (322 entries) into data/ef/sanctoral.sexp via a validating OCaml converter, tools/ bootstrap_sanctoral.ml, rather than a hand-written script: every field is built through Slug.of_string, Colour.of_string and Vocab_ef.rank_of_string, so the emitted sexp is valid by construction. Two conversion decisions, both documented rather than buried: - subject defaults to Subject.Saint, overriding Celebration.make's kernel default of Subject.Temporal, for the 316 entries with no explicit class; - rank = commemoration maps to status = Commemoration_only with an inferred Class3 (not a citation -- it is what the 1960 reform reduced most simple feasts from), recorded as an open item in the rules register for the oracle to adjudicate. Every celebration is tagged layer = Precedence_ef.universal_layer, the provenance id RG 91's band classifier reads to tell the universal calendar from proper/indult data. The generated file carries a provenance header: source path, its SHA-256, and the UTC conversion date, so re-bootstrapping against a newer lectio is reproducible and diffable. Output is byte-identical across runs. test/test_sanctoral_ef.ml loads the file through Layer.load and checks the counts independently derived from the source INI (322 entries, 114 Commemoration_only, 12 Class1, no Subject.Temporal, every date resolves in a leap year), plus two named spot-checks against the INI's own text -- one entry with an explicit class field, one commemoration -- so a passing count cannot hide the wrong 322 entries having been converted.