From 4df03d2f2e0e1da70ffc3d069c6e49a7edd21b31 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 12 Aug 2026 17:49:24 +0200 Subject: data(ef): document why adjustments.sexp's directives survive the re-bootstrap Neither of adjustments.sexp's two directives is a no-op after the regeneration, and neither is removed -- reasoned through deliberately rather than deleted on sight, per Overlay.apply's own documented diagnostic behaviour (Edit has no "already correct" case; it unconditionally folds every field_edit over the current value when the slug is present, no diagnostic either way). `Edit most-holy-name-of-mary (Set_subject Bvm)`: the base bootstrap no longer needs this correction (the source dropped `class = lord` for this slug, so the default is already Subject.Saint), but the overlay still forces `Saint -> Bvm`. Kept for two reasons: data precision (the calendarium's "Sanctissimi Nominis Mariae" title still argues for Bvm over the generic Saint default, independent of what lectio's class field says) and as a regression guard (Set_subject is unconditional, so it would also correct a future re-introduction of `class = lord` for this slug, the one subject value RG16(a) behaviourally reads). `Suppress vigil-of-christmas`: re-verified, not assumed -- the slug is still present, unchanged, in both the regenerated source and the regenerated sanctoral.sexp, so the directive still fires its ordinary slug-present path. test_rite_ef.ml's own comment on the overlay-in-effect test previously claimed the base file carries `subject Lord` for most-holy-name-of-mary, which the regeneration made false; corrected in place rather than left stale, per this project's own discipline around wrong claims. --- data/ef/adjustments.sexp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'data/ef/adjustments.sexp') diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp index 05ee401..68ab590 100644 --- a/data/ef/adjustments.sexp +++ b/data/ef/adjustments.sexp @@ -50,6 +50,50 @@ ; the user's ruling resolves that disagreement in the oracle's favour for ; this codebase's own purposes, not by declaring the calendarium argument ; wrong. See register ยง6.0 for the full account of both sides. +; +; ef-rebootstrap (2026-08-12): both directives re-examined against the +; regenerated source (tridentine-calendar.ini, SHA-256 1b303ef2...), which +; independently fixed several of the same defects this file was written to +; patch. Neither directive was removed -- reasoning below, per the task's +; own instruction to decide deliberately rather than delete on sight. +; +; `Edit most-holy-name-of-mary` -- the base bootstrap no longer needs this +; correction: the regenerated INI's own `[most-holy-name-of-mary]` section +; has DROPPED its `class = lord` field entirely (confirmed by direct grep +; against the source), so `tools/bootstrap_sanctoral.ml`'s `parse_subject` +; now falls through to its own default, `Subject.Saint` -- not `Lord` -- +; before this overlay ever runs. Checked what {!Overlay.apply}'s [Edit] +; actually does with a directive whose target slug is present but whose +; field is no longer wrong, rather than assuming: [Edit] has no notion of +; "already correct" -- it looks up the slug, and if found (as this one +; still is) unconditionally folds every field_edit over the current value, +; firing NO diagnostic either way (overlay.ml's [apply_directive], the +; [Edit] branch: the only diagnostic is "slug not present", never "already +; matches"). So this is not a no-op: it still forces `Saint -> Bvm` on +; every run, identically to before, just starting from a different base +; value than it used to. Decision: KEEP, for two independent reasons, not +; one -- (1) DATA PRECISION, unaffected by the base bootstrap's own fix: +; the calendarium's "Sanctissimi Nominis Mariae" title names Mary +; specifically, so [Bvm] remains the more accurate tag than the generic +; [Saint] default, on the same textual grounds as the original entry +; above, regardless of what lectio's own `class` field happens to say this +; week. (2) REGRESSION DEFENCE: because [Set_subject] is unconditional, it +; also now stands as a guard against `class = lord` ever being +; RE-introduced for this slug by a future lectio regeneration -- the +; overlay would still force the result away from [Lord] (the one subject +; value {!Precedence_ef.band}'s RG 16(a) branch behaviourally reads), +; rather than silently letting a re-introduced bootstrap defect through. +; Removing the directive now would trade a currently-harmless redundancy +; for the loss of that guard. +; +; `Suppress vigil-of-christmas` -- re-verified, not assumed: `[vigil-of- +; christmas]` (24 Dec) is still present, unchanged, in both the +; regenerated INI and the regenerated `data/ef/sanctoral.sexp` (still the +; same duplicate of `rite_ef/temporal_ef.ml`'s own `ef-nativity-vigil` +; this directive was written to remove), so `Layer.mem` still finds it and +; {!Overlay.apply}'s [Suppress] branch still fires its ordinary +; slug-present path (no diagnostic) exactly as before. Nothing about this +; regeneration touched the reason this directive exists; kept unchanged. ((id ef-adjustments) (directives ((Suppress vigil-of-christmas) -- cgit v1.3 From d6968a3f380a32e7aeba2b7b658ae69df675da29 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 12 Aug 2026 18:26:01 +0200 Subject: data(ef): fix round 1 (F3) -- eusebius-confessor is white, not lectio's red data/ef/sanctoral.sexp bootstraps colour=red for this new entry (14 Aug), inherited from lectio's own ini; missalemeum's fixture independently tags it :r too -- two non-primary witnesses agreeing with each other, not with the Missal, the exact "trap" this project's own transcription-audit task already named once. Checked directly against the scan (missale-romanum-1962.pdf), not taken on a reviewer's transcription: the 14 August proper reads "S. Eusebii Conf. / Commemoratio / Missa Iustus, ut in festo S. Pauli primi Eremitae, die 15 ianuarii" -- Conf. (Confessor, not Martyr), borrowing the SAME Mass 15 January's own Paul the First Hermit uses, a Confessor's Common, white in both engines' own data for THAT entry. Every other Confessor/Abbot commemoration in lectio's own data is white (maur-abbot, giles, remigius, didacus, ubaldus, hilarion, sabbas, silvester, alexis); Eusebius Confessor is the one exception, with no textual support found for it. No behavioural impact today (Commemoration_only entries are never the printed observed colour under the current pipeline), fixed via the overlay mechanism since sanctoral.sexp is generated and the source is upstream. New test proves it through the real pipeline, the same discipline already applied to the subject retags. --- data/ef/adjustments.sexp | 29 ++++++++++++++++++++++++++++- test/test_rite_ef.ml | 26 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) (limited to 'data/ef/adjustments.sexp') diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp index 68ab590..e33b4eb 100644 --- a/data/ef/adjustments.sexp +++ b/data/ef/adjustments.sexp @@ -94,7 +94,34 @@ ; {!Overlay.apply}'s [Suppress] branch still fires its ordinary ; slug-present path (no diagnostic) exactly as before. Nothing about this ; regeneration touched the reason this directive exists; kept unchanged. +; +; `Edit eusebius-confessor` -- NEW (ef-rebootstrap fix round 1, F3): this +; new entry's own bootstrapped colour, `Red`, is a LECTIO DATA DEFECT, +; found by checking the primary scan directly rather than trusting lectio's +; ini or missalemeum's own `:r` colour tag, which agree with each other but +; not with the Missal -- exactly the "two non-primary witnesses agreeing +; against the primary text" trap this project's own transcription-audit +; task already named once. `missale-romanum-1962.pdf`, 14 August, the +; commemoration's own proper: *"Eodem die 14 augusti / S. Eusebii Conf. / +; Commemoratio / Missa Iustus, ut in festo S. Pauli primi Eremitae, die 15 +; ianuarii..."* -- "Conf." (Confessor, not Martyr), and the borrowed Mass +; "Iustus" is the SAME Mass 15 January's own St Paul the First Hermit uses +; -- a Confessor, white in both lectio's own data and colitur's +; (`paul-the-first-hermit`, `data/ef/sanctoral.sexp`) -- for the Common of +; Confessors. Corroborated negatively: lectio gives WHITE to every other +; Confessor/Abbot commemoration in its own data (`maur-abbot`, `giles`, +; `remigius`, `didacus`, `ubaldus`, `hilarion`, `sabbas`, `silvester`, +; `alexis`) -- Eusebius Confessor is the one exception, with no textual +; support found for it. No behavioural impact today (`Commemoration_only` +; entries are never the OBSERVED celebration, so this colour is never +; printed by the current pipeline -- but `Record`/rendering will read it +; the moment a template does), fixed for the data's own accuracy via the +; SAME overlay mechanism as the other two directives, since +; `data/ef/sanctoral.sexp` is generated and the source is upstream. Logged +; as a lectio-side generator/data defect in docs/research/rules-register.md +; for a future generator fix, not merely patched here silently. ((id ef-adjustments) (directives ((Suppress vigil-of-christmas) - (Edit most-holy-name-of-mary ((Set_subject Bvm)))))) + (Edit most-holy-name-of-mary ((Set_subject Bvm))) + (Edit eusebius-confessor ((Set_colour White)))))) diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml index 45aa918..9a1e6d5 100644 --- a/test/test_rite_ef.ml +++ b/test/test_rite_ef.ml @@ -142,6 +142,30 @@ let test_rg16a_subject_retag_in_effect () = "Dedication of the Archbasilica of the Most Holy Saviour stays Lord -- audit, not touched" true (subject_of "dedication-of-the-archbasilica-of-our-holy-savior" = Subject.Lord) +(* ef-rebootstrap fix round 1, F3: eusebius-confessor (14 Aug, one of the 5 + entries this re-bootstrap added) is bootstrapped `Red` -- a lectio data + defect (both lectio's own ini and missalemeum's `:r` colour tag agree + with each other, not with the Missal). `missale-romanum-1962.pdf`'s own + proper for the day, verified directly against the scan (not transcribed + from a reviewer's reading): "S. Eusebii Conf. / Commemoratio / Missa + Iustus, ut in festo S. Pauli primi Eremitae..." -- a CONFESSOR ("Conf."), + borrowing the SAME Mass 15 January's own Paul the First Hermit uses, a + white Confessor's Common in both engines' own data. Fixed via + adjustments.sexp's new Edit directive -- proven here through the real + pipeline, the same discipline [test_rg16a_subject_retag_in_effect] above + already applies to the subject retags, so a typo'd slug or a reverted + directive fails a test rather than only silently changing unread data. *) +let test_eusebius_confessor_colour_corrected () = + let layer = real_layer () in + match Layer.find layer (Slug.of_string_exn "eusebius-confessor") with + | None -> Alcotest.fail "slug eusebius-confessor not found in the overlaid layer" + | Some e -> + Alcotest.(check bool) + "Eusebius Confessor is White (RG's own Common of Confessors, via the borrowed Mass \"Iustus\"), not \ + lectio's bootstrapped Red" + true + (e.Layer.cel.Cel.colour = Colour.White) + (* Coordinator review, finding 2, reproduced through the project's OWN extension path (an overlay), the same way the reviewer found it: adding an I-class feast on 25 December (competing against, and losing to, the @@ -351,6 +375,8 @@ let suite = test_vigil_of_christmas_suppressed; Alcotest.test_case "RG16(a) task: the two subject retags are in effect, the other four untouched" `Quick test_rg16a_subject_retag_in_effect; + Alcotest.test_case "ef-rebootstrap fix round 1 (F3): eusebius-confessor is White, not lectio's Red" `Quick + test_eusebius_confessor_colour_corrected; Alcotest.test_case "RG96 search does not raise at the domain ceiling (real data)" `Quick test_transfer_search_does_not_raise_at_domain_ceiling; Alcotest.test_case "no transfer ever lands inside [Easter, Easter+7], 2005-2050" `Quick -- cgit v1.3