diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-23 23:01:56 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-23 23:01:56 +0200 |
| commit | 1252ffa57778331a67d75c2f69722b8ec1a7dbcc (patch) | |
| tree | 99040b4537f79296b9d105960b3decb944350161 | |
| parent | 8faf89f89bd6783a518b6fc0b48c6ee452ba2e94 (diff) | |
| download | colitur-1252ffa57778331a67d75c2f69722b8ec1a7dbcc.tar.gz colitur-1252ffa57778331a67d75c2f69722b8ec1a7dbcc.zip | |
feat(ef): RG 497, the Conversion of St Paul takes the Apostles preface
RG 497 ("in Missis festivis et votivis Apostolorum et Evangelistarum")
carries no natalicium restriction, unlike RG 475(e)'s Creed clause --
preface_apostle_slugs already includes one non-natalicium sibling (In
Commemoratione S. Pauli, 30 June) on this exact reasoning.
conversion-of-st-paul (25 January) was left off pending a witness: the
FIUV Ordo's own single window has 25 January impeded by a Sunday.
Now witnessed four times, two independent publishers, four civil
years: the Latin Mass Society Ordo's 2023-2024 and 2024-2025 editions
both read "Pr of the Apostles" on their own unimpeded 25 January
(2024, 2025); extraordinaryform.org's 2024-2025Ordo.pdf and
2026-2027Ordo.pdf independently agree on their own unimpeded years
(2025, 2027, spot-checked, not wired in as a fixture). Every source's
2026 edition agrees 25 January is impeded that year and produces no
data point at all. No source disagreed with the textual reading.
Surveyed every other Apostle/Evangelist-named slug in
data/ef/sanctoral.sexp before concluding the list needed exactly this
one addition: the Dedication of the Basilicas of Sts Peter & Paul (18
November) is confirmed NOT an RG 497 trigger (all three LMS editions
read "Pr of the Dedication of a Church", not "Apostles" -- it is about
the buildings, not the Apostles in person); the Vigil of Sts Peter &
Paul (28 June) is confirmed "Common Pr", corroborating the pre-existing
"no vigil ever reaches this branch" comment.
Blast radius, measured exhaustively (1583-9999, new permanent sweep in
test_rubrics_ef.ml): 7217 domain years have 25 January unimpeded and
observed; all 7217 now read Apostles, zero exceptions.
Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9
| -rw-r--r-- | lib/rites/rite_ef/rubrics_ef.ml | 65 | ||||
| -rw-r--r-- | lib/rites/rite_ef/rubrics_ef.mli | 8 | ||||
| -rw-r--r-- | test/test_rubrics_ef.ml | 71 |
3 files changed, 132 insertions, 12 deletions
diff --git a/lib/rites/rite_ef/rubrics_ef.ml b/lib/rites/rite_ef/rubrics_ef.ml index eea92a9..ce2cfcc 100644 --- a/lib/rites/rite_ef/rubrics_ef.ml +++ b/lib/rites/rite_ef/rubrics_ef.ml @@ -884,14 +884,63 @@ let preface_st_joseph_slugs = [ "joseph-spouse-of-the-bl-virgin-mary"; "joseph-t "conversion-of-st-paul" (25 January, Class3, the SAME "not a natalicium" shape {!creed_apostle_slugs}'s own citation excludes it - for) is a plausible SECOND candidate by the identical RG 497 reasoning - -- deliberately NOT added: it is UNWITNESSED (25 January falls on a - Sunday, hence impeded, in the one fixture year this engine's Ordo - evidence covers, {!test_fiuv_ordo.ml}'s own window), and "a wrong - citation is worse than a missing one" ({!Precedence_ef.marian_slugs}'s - own citation, the precedent this follows). Left for a future fixture - year to confirm or refute. *) -let preface_apostle_slugs = "in-commemoratione-sancti-pauli-apostoli" :: creed_apostle_slugs + for) is a SECOND member, by the identical RG 497 reasoning -- + NOW WITNESSED (Preface-witnesses task, 2026-08-23): unlike + {!test_fiuv_ordo.ml}'s own single-year window (where 25 January falls + on a Sunday, hence impeded), the Latin Mass Society Ordo's own THREE + editions (test/test_lms_ordo.ml) each carry an UNIMPEDED 25 January -- + two of them fall outside a Sunday (2024, 2025) and both read "Pr of + the Apostles" for the Conversion of St Paul, confirmed directly + against two INDEPENDENT civil years, not merely two printings of the + same one (the third, 2026, is impeded by a Sunday exactly like FIUV's + own witness year -- the same date, the same reason, an entirely + different underlying calendar fact confirmed twice over, not a + coincidence). Added on this evidence. + + A FOURTH and FIFTH informal confirmation, from a SECOND, independent + publisher (extraordinaryform.org's own three annual PDFs, + docs/research/ordo/2024-2025Ordo.pdf / 2025-2026Ordo.pdf / + 2026-2027Ordo.pdf -- characterised, not wired in as an automated layer; + see the Preface-witnesses task's own report for why): its own per-day + PREFACE table column reads "Apostles" for the Conversion of St Paul on + BOTH of its own unimpeded years, 2025-01-25 and 2027-01-25 (its middle + edition's 2026-01-25 is impeded by a Sunday, the identical fact the + other two sources already independently establish) -- a spot check, + not a fixture, but a real cross-publisher agreement on the exact + question this list answers. + + SURVEYED, not merely patched: every other Apostle/Evangelist-named + slug in data/ef/sanctoral.sexp was checked against this same + three-edition LMS witness before deciding this list needed exactly + one addition, not more: + - "dedication-of-the-basilicas-of-sts-peter-paul" (18 November, + Class3) is Peter and Paul's own BASILICAS, not the Apostles + themselves -- confirmed NOT an RG 497 trigger in all three LMS + editions, identical across all three ("Pr of the Dedication of a + Church or Common Pr"), corroborating {!preface_bvm_slugs}'s own + "Dedication of a Church" finding rather than RG 497: this feast's + own subject is the building, governed by the SAME non-RG-482 + "extra" preface every other church dedication uses (RG 91 entry + 27's own header has the fuller account of this Ordo's option-list + shape). + - "vigil-of-sts-peter-paul" (28 June) reads "Common Pr" in the LMS + Ordo (2024-2025 edition, checked directly) -- confirming, not + merely assuming, this branch's own long-standing "no [is_vigil] + guard needed, no entry here is ever a vigil slug" comment below: + a vigil is not a "festum... votiva" either, the identical RG 21/35 + taxonomy {!preface_bvm_slugs}'s own [is_vigil] guard already + states for the BVM branch above. + - No other Peter/Paul/John/Andrew/James/Philip/Bartholomew/Thomas/ + Matthew/Jude/Simon/Matthias/Mark/Luke/Barnabas-named slug in the + shipped data names an Apostle or Evangelist at all (checked by + grepping every slug in data/ef/sanctoral.sexp against those ten + names): the rest are unrelated same-named saints (e.g. "mark-i", a + Pope, {!creed_apostle_slugs}'s own citation; "sts-john-paul", two + Roman martyrs unrelated to the Evangelist and the Apostle) or + genuinely unreachable RG 110 companions ("peter"/"paul", + [Commemoration_only], {!creed_apostle_slugs}'s own citation). *) +let preface_apostle_slugs = + "in-commemoratione-sancti-pauli-apostoli" :: "conversion-of-st-paul" :: creed_apostle_slugs (* RG 495's own [beatae Mariae Virginis] population is also WIDER than {!Precedence_ef.marian_slugs}: that list was built for a DIFFERENT diff --git a/lib/rites/rite_ef/rubrics_ef.mli b/lib/rites/rite_ef/rubrics_ef.mli index befbf72..c005aaf 100644 --- a/lib/rites/rite_ef/rubrics_ef.mli +++ b/lib/rites/rite_ef/rubrics_ef.mli @@ -80,9 +80,11 @@ val preface_holy_cross_slugs : string list val preface_st_joseph_slugs : string list (** RG 497's own [Apostolorum et Evangelistarum] population -- WIDER than - {!creed_apostle_slugs} (no natalicium restriction); see the .ml's own - citation for the FIUV Ordo evidence and what was deliberately left - off, unwitnessed. *) + {!creed_apostle_slugs} (no natalicium restriction); includes + "conversion-of-st-paul" (Preface-witnesses task, 2026-08-23, four + independent unimpeded-year confirmations across two publishers -- see + the .ml's own citation for the full evidence and the survey of every + other Apostle/Evangelist-named slug that was checked and NOT added. *) val preface_apostle_slugs : string list (** RG 495's own [beatae Mariae Virginis] population -- WIDER than diff --git a/test/test_rubrics_ef.ml b/test/test_rubrics_ef.ml index bb3bfed..77654c0 100644 --- a/test/test_rubrics_ef.ml +++ b/test/test_rubrics_ef.ml @@ -859,6 +859,22 @@ let test_preface_497_peter_paul () = check_preface "RG 497: Sts Peter & Paul" Pr let test_preface_497_philip_james_inside_easter_window () = check_preface "RG 497: Sts Philip & James, inside the Easter window, still [Apostles]" Pref.Apostles 2026 5 11 +(* ---- RG 497 also covers "conversion-of-st-paul" (25 January, Class3, + NOT his own natalicium -- {!creed_apostle_slugs} deliberately excludes + it from the CREED for exactly that reason, RG 475(e)'s own natalicium + restriction). RG 497 carries no such restriction, and unlike + {!test_fiuv_ordo.ml}'s own single window (where 25 January falls on a + Sunday, hence impeded), the Latin Mass Society Ordo's three editions + (test/test_lms_ordo.ml, Preface-witnesses task, 2026-08-23) each carry + an unimpeded 25 January in two of their three civil years, 2024 and + 2025, and BOTH independently read "Pr of the Apostles" -- 2024-01-25 is + the date pinned here, matching the FIRST of those two witnessed + years directly (day names elsewhere in this file default to 2026 for + uniformity with the FIUV Ordo's own window, but 2026-01-25 is itself + impeded by a Sunday, so it cannot witness this branch at all). ---- *) +let test_preface_497_conversion_of_st_paul () = + check_preface "RG 497: the Conversion of St Paul, not his own natalicium, still [Apostles]" Pref.Apostles 2024 1 25 + (* ---- RG 485(a)/(b): Epiphany itself and its own Baptism commemoration (a), the wider 7-13 January window (b) -- Holy Family Sunday (11 January 2026) is the live witness that a temporal-origin Sunday inside @@ -1073,6 +1089,53 @@ let test_exhaustive_preface_season_domain_sweep () = passiontide_easter end +(* ---- BLAST RADIUS, Preface-witnesses task (2026-08-23): adding + "conversion-of-st-paul" to {!Rite_ef.Rubrics_ef.preface_apostle_slugs} + changes exactly one thing -- the preface on every year's own 25 January + WHEN [conversion-of-st-paul] is the day actually observed (impeded, most + often by a Sunday, in every other year). Measured directly rather than + estimated: every observed occurrence must now read [Apostles], never + anything else, and the domain total is printed so the SIZE of this + change is on the record, not only its correctness. *) +let check_conversion_of_st_paul_for_year y (counts : (int * int) ref) = + let days = Cal.year ctx layer y in + let observed0, wrong0 = !counts in + let observed = ref observed0 and wrong = ref wrong0 in + Array.iter + (fun (d : (V.season, V.rank) LD.t) -> + if String.equal (Slug.to_string d.LD.observed.Cel.slug) "conversion-of-st-paul" then begin + incr observed; + if d.LD.preface <> Some Pref.Apostles then begin + incr wrong; + Alcotest.failf "%s: conversion-of-st-paul is observed but preface=%s, not Apostles" + (Date.to_iso8601 d.LD.date) + (match d.LD.preface with Some p -> Pref.to_string p | None -> "NONE") + end + end) + days; + counts := (!observed, !wrong) + +let test_conversion_of_st_paul_preface_sample () = + let counts = ref (0, 0) in + for y = 1583 to 1782 do + check_conversion_of_st_paul_for_year y counts + done; + let observed, wrong = !counts in + Alcotest.(check int) "zero wrong-preface days in the 200-year sample" 0 wrong; + Alcotest.(check bool) "the 200-year sample found real conversion-of-st-paul occurrences" true (observed > 100) + +let test_exhaustive_conversion_of_st_paul_preface_sweep () = + if Sys.getenv_opt colitur_exhaustive_sweep_env = None then Alcotest.skip () + else begin + let counts = ref (0, 0) in + for y = 1583 to 9999 do + check_conversion_of_st_paul_for_year y counts + done; + let observed, wrong = !counts in + Printf.printf "conversion-of-st-paul preface blast radius 1583..9999: observed=%d wrong=%d\n%!" observed wrong; + Alcotest.(check int) "zero wrong-preface days anywhere in the domain" 0 wrong + end + (* ---- ITEM 1: RG 111(a), the sung-Mass commemoration cap ({!Colitur_kernel.Precedence.sung_mass_commemorations}) -- two real calendar days, one of each shape, resolved through the identical @@ -1208,6 +1271,8 @@ let suite = Alcotest.test_case "RG 497: Sts Peter & Paul" `Quick test_preface_497_peter_paul; Alcotest.test_case "RG 497: Sts Philip & James, inside the Easter window" `Quick test_preface_497_philip_james_inside_easter_window; + Alcotest.test_case "RG 497: the Conversion of St Paul, not his own natalicium" `Quick + test_preface_497_conversion_of_st_paul; Alcotest.test_case "RG 485(a): Epiphany Day" `Quick test_preface_485a_epiphany_day; Alcotest.test_case "RG 485(a): the Commemoration of the Baptism of the Lord" `Quick test_preface_485a_baptism_commemoration; @@ -1240,4 +1305,8 @@ let suite = `Quick test_preface_season_invariants_sample; Alcotest.test_case "preface domain sweep 1583..9999: window invariants, committed not sampled" `Slow - test_exhaustive_preface_season_domain_sweep ] ) + test_exhaustive_preface_season_domain_sweep; + Alcotest.test_case "conversion-of-st-paul preface blast radius (sample)" `Quick + test_conversion_of_st_paul_preface_sample; + Alcotest.test_case "conversion-of-st-paul preface blast radius 1583..9999, committed not sampled" `Slow + test_exhaustive_conversion_of_st_paul_preface_sweep ] ) |
