diff options
| -rw-r--r-- | data/ef/adjustments.sexp | 40 | ||||
| -rw-r--r-- | data/ef/expected-divergences.sexp | 5 | ||||
| -rw-r--r-- | test/test_differential.ml | 13 | ||||
| -rw-r--r-- | test/test_rite_ef.ml | 40 |
4 files changed, 97 insertions, 1 deletions
diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp index 85d7fa1..7d61170 100644 --- a/data/ef/adjustments.sexp +++ b/data/ef/adjustments.sexp @@ -10,4 +10,42 @@ ; or special-cased in code, per the task brief -- an auditable, diagnosable ; removal (Overlay.apply's own diagnostic fires if this slug is ever absent, ; e.g. after a re-bootstrap that renames it), not a silent drop. -((id ef-adjustments) (directives ((Suppress vigil-of-christmas)))) +; +; RG16(a) task (docs/research/rules-register.md §6.0): corrects two of +; data/ef/sanctoral.sexp's six `(subject Lord)` entries, both inherited +; unchecked from lectio's own `class = lord` field (tridentine-calendar.ini) +; -- confirmed WRONG against the calendarium itself, which names both a +; feast of the BLESSED VIRGIN, not of the Lord: +; - `purification-of-the-blessed-virgin-mary` (2 Feb): calendarium line +; "IN PURIFICATIONE B. MARIAE VIRG., II classis" -- "B. Mariae Virg." is +; the Missal's own Purification-of-Mary title, not "D. N. I. C." (the +; formula the genuinely Lord-tagged entries carry, e.g. 6 Aug +; "IN TRANSFIGURATIONE D. N. I. C." or 1 Jul "PRETIOSISSIMI SANGUINIS +; D. N. I. C."). +; - `most-holy-name-of-mary` (12 Sep): calendarium line "Sanctissimi +; Nominis Mariae, III classis" -- "Nominis Mariae", the Name of MARY, +; not of the Lord. +; Corrected as an Edit directive, not a hand-edit of data/ef/sanctoral.sexp +; itself: that file's own header says "do not hand-edit... re-run the +; generator and commit the diff instead", and its provenance SHA-256 covers +; a straight, byte-faithful conversion of lectio's INI -- an edit belongs in +; THIS file, the project's own existing mechanism for a correction over the +; bootstrap (the [Suppress] directive above sets exactly this precedent). +; The base sanctoral.sexp stays a faithful mirror of lectio (so a future +; re-bootstrap cannot silently re-introduce the error unnoticed: this Edit +; keeps applying regardless, and [Overlay.apply]'s own diagnostic fires +; loudly if the slug it targets is ever renamed or removed upstream). +; +; The other four `(subject Lord)` entries were verified against the same +; calendarium and left untouched (all task-report-cited): 1 Jul "PRETIOSISSIMI +; SANGUINIS D. N. I. C., I classis"; 6 Aug "IN TRANSFIGURATIONE D. N. I. C., +; II classis"; 14 Sep "IN EXALTATIONE S. CRUCIS, II classis" (the Cross as +; the instrument of Christ's own Passion, not a canonised person -- the +; traditional "feast of the Lord" reading, {!Subject.t} having no separate +; category for it); 9 Nov "IN DEDICATIONE ARCHIBASILICAE SANCTISSIMI +; SALVATORIS, II classis" ("of the Most Holy SAVIOUR", i.e. Christ). +((id ef-adjustments) + (directives + ((Suppress vigil-of-christmas) + (Edit purification-of-the-blessed-virgin-mary ((Set_subject Bvm))) + (Edit most-holy-name-of-mary ((Set_subject Bvm)))))) diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index c8d863d..d6161c2 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -72,3 +72,8 @@ (verdict colitur) (note "Holy Thursday (\"ef-passiontide-2-thursday\") is white in colitur, per RG 128(b)'s explicit exception -- independently confirmed by the missalemeum oracle (Task 16 report), whose colour set for that day is white alone, unlike the surrounding Triduum days which include violet as an option. lectio has no such exception and prints Passiontide's base violet straight through Holy Thursday. Found via Task 16's oracle comparison, not the original lectio differential (lectio's own colour did not previously disagree, because colitur's own bug matched it) -- fixed in colitur, so this row records a NEW divergence from lectio's still-uncorrected violet, not a pre-existing one.") (expected_rows 46)) + ((id C12) + (citation "Calendarium (docs/research/1962-06-23,_SS_Ioannes_XXIII,_Missale_Romanum,_LT.pdf), 2 February row: \"IN PURIFICATIONE B. MARIAE VIRG., II classis\" -- \"of the Purification of the Blessed VIRGIN MARY\", not \"D. N. I. C.\" (the formula the calendarium uses for the project's other five genuine Lord-subject entries, e.g. 6 Aug \"IN TRANSFIGURATIONE D. N. I. C.\"); combined with RG 16(a) (register §6.0, Caput III \"De Dominicis\": a Feast of the LORD, I or II class, takes an occurring II-class Sunday's own place -- a BVM feast does not)") + (verdict colitur) + (note "The Purification (2 February) is a feast of the Blessed Virgin Mary, not of the Lord -- data/ef/sanctoral.sexp inherited lectio's own unchecked `class = lord` field; data/ef/adjustments.sexp retags it `Bvm` (RG16(a) task, this task's own report), so it no longer bands at RG 91 entry 14 (Feasts of the Lord, II class) and no longer outranks an occurring II-class Sunday. On the six 2 Februaries in this fixture's 2005-2050 span that fall on a Sunday, colitur now observes the Sunday and commemorates the Purification (RG 109(a)/RG 111(b), an ordinary II-class-Sunday commemoration); lectio still tags the entry `lord` and so still observes the Purification outright, displacing the Sunday. expected_rows is not transcribed from a comparator run: 2 February falls on a Sunday in exactly six years of 2005-2050 -- 2014, 2020, 2025, 2031, 2042, 2048 -- independently verified with `date -d <year>-02-02 +%A` (glibc, the same cross-check discipline test_golden.ml's own header requires), one row each.") + (expected_rows 6)) diff --git a/test/test_differential.ml b/test/test_differential.ml index a9bdb91..aa75737 100644 --- a/test/test_differential.ml +++ b/test/test_differential.ml @@ -450,6 +450,19 @@ let layer_c_reason (l : row) (c : row) diffs = && subset diffs [ Slug_f; Rank; Colour_f ] then Some "C10" else if String.equal c.slug "ef-passiontide-2-thursday" && diffs = [ Colour_f ] then Some "C11" + (* RG16(a) task (register §6.0 + the sanctoral subject audit, this task's + own report): 2 February on a Sunday. colitur now observes the Sunday + (data/ef/adjustments.sexp retags the Purification `Bvm`, so it no + longer bands at RG 91 entry 14 -- only a Feast of the LORD does); the + Purification survives as its own commemoration, matching the register's + ruling, just not as [c]'s OBSERVED slug here. lectio still tags it + `class = lord` (unretagged upstream) and so still observes it outright. + Matched on [l.slug] (lectio's side), the only side that can show this + literal now -- colitur's own [c.slug] is whichever Sunday family the + date falls in (time-after-epiphany or Septuagesima), not one fixed + literal, unlike [c7]/[c11]'s single-slug tests above. *) + else if String.equal l.slug "purification-of-the-blessed-virgin-mary" && subset diffs [ Slug_f; Colour_f ] + then Some "C12" else None (* ---------------------------------------------------------------------- *) diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml index c150a6d..ad9057b 100644 --- a/test/test_rite_ef.ml +++ b/test/test_rite_ef.ml @@ -87,6 +87,44 @@ let test_vigil_of_christmas_suppressed () = Alcotest.(check bool) "vigil-of-christmas appears NOWHERE in the resolved year" false appears_anywhere +(* RG16(a) task (register §6.0 + the sanctoral subject audit, this task's + own report): data/ef/sanctoral.sexp is left untouched (still a faithful + mirror of lectio, subject `Lord` for both entries below -- see + test_sanctoral_ef.ml's own "explicit class = lord" spot-check, which + loads that file WITHOUT applying this overlay and still passes); the + correction lives entirely in data/ef/adjustments.sexp's two [Edit] + directives, the same mechanism [test_vigil_of_christmas_suppressed] + above already proves for a sibling bootstrap defect. This is the ONE + test in the suite that observes the two retags actually take effect + through the real pipeline -- without it, a typo in either directive's + slug (silently a no-op diagnostic, not a hard failure -- Overlay.apply's + own contract) or a reverted adjustments.sexp would leave every other + test green (2 February isn't a Sunday in any golden-pinned year, and + [test_sanctoral_ef.ml] deliberately never applies the overlay). Also + re-verifies the four entries the audit confirmed correct and left + untouched, so a future accidental retag of one of THEM would be caught + here too, not just the two that changed. *) +let test_rg16a_subject_retag_in_effect () = + let layer = real_layer () in + let subject_of slug = + match Layer.find layer (Slug.of_string_exn slug) with + | Some e -> e.Layer.cel.Cel.subject + | None -> Alcotest.failf "slug %s not found in the overlaid layer" slug + in + Alcotest.(check bool) "Purification retagged Bvm (calendarium: \"B. MARIAE VIRG.\")" true + (subject_of "purification-of-the-blessed-virgin-mary" = Subject.Bvm); + Alcotest.(check bool) "Most Holy Name of Mary retagged Bvm (calendarium: \"Nominis Mariae\")" true + (subject_of "most-holy-name-of-mary" = Subject.Bvm); + Alcotest.(check bool) "Precious Blood stays Lord (calendarium: \"D. N. I. C.\") -- audit, not touched" true + (subject_of "precious-blood-of-our-lord-jesus-christ" = Subject.Lord); + Alcotest.(check bool) "Transfiguration stays Lord (calendarium: \"D. N. I. C.\") -- audit, not touched" true + (subject_of "transfiguration-of-our-lord" = Subject.Lord); + Alcotest.(check bool) "Exaltation of the Holy Cross stays Lord -- audit, not touched" true + (subject_of "exaltation-of-the-holy-cross" = Subject.Lord); + Alcotest.(check bool) + "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) + (* 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 @@ -255,6 +293,8 @@ let suite = ( "Rite_ef (real data: overlay-in-effect, domain-ceiling)", [ Alcotest.test_case "the overlay suppression is observably in effect" `Quick 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 "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 |
