diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 17:09:27 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 17:09:27 +0200 |
| commit | dce208f57cfeeee0715cf35389d37e7ce98227ae (patch) | |
| tree | 9870e58df161646d71c2f08e5de7f4eefda1434e /lib | |
| parent | d5df5e79c731ac7f7f89969c0cafe564fdc6e8ab (diff) | |
| download | colitur-dce208f57cfeeee0715cf35389d37e7ce98227ae.tar.gz colitur-dce208f57cfeeee0715cf35389d37e7ce98227ae.zip | |
fix(ef): RG 112(d) excludes a same-BVM commemoration (fix round 1, F1)
The BVM Saturday Office is itself "de B. Maria Virg."; RG 112(d) (Caput
XVI, "De Commemorationibus") excludes another commemoration whose own
oration invokes the SAME BVM's intercession. our-lady-of-mt-carmel (16
July, Commemoration_only) was wrongly admitted as an ordinary
commemoration alongside the Office on every 16-July-Saturday -- its own
collect explicitly invokes "her" (eius) patronage, and both photographic
scans print a rubric anticipating exactly this collision (an either/or
of Mass texts, not a joint commemoration).
Precedence_ef gains marian_slugs (a closed, hand-verified list of
sanctoral slugs that are themselves feasts of the BVM) and is_bvm_office
(true for subject = Bvm OR a marian_slugs member -- the disjunction is
load-bearing: the Office is identified only by subject, since its own
slug is deliberately reused from the ordinary ferial fallback; Mt Carmel
is identified only by the list, since its own subject tag is Saint, not
Bvm). disposition gains a new branch, checked before the pre-existing
Commemoration_only catch-all, since the one live witness is
Commemoration_only and that branch's own "always Commemorate" had no
exception for this shape.
Checked exhaustively against every Marian-named sanctoral entry: only
Commemoration_only-status entries can ever reach this branch live (a
Feast-status one always wins outright instead of losing). Of the two
such entries in the data, only Mt Carmel is reachable --
our-lady-of-ransom (24 September) is provably unreachable: 24 September
falling on a Saturday forces 1 September to a Thursday, which by
construction makes 24 September the September Ember Saturday, Class2,
every time, not a sampled coincidence.
Re-measured against the full pre-change binary: the original 75,853-day
blast radius is unchanged in total, splitting into 74,633 colour-only +
1,220 colour+comms (16-July Saturdays). Mutation-tested: exactly 3 new
tests redden, nothing else.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rites/rite_ef/precedence_ef.ml | 176 |
1 files changed, 167 insertions, 9 deletions
diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml index 5a2d307..302df98 100644 --- a/lib/rites/rite_ef/precedence_ef.ml +++ b/lib/rites/rite_ef/precedence_ef.ml @@ -364,14 +364,21 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc else if is_temporal && rank = Class3 && season = Advent then 250 (* 26: III-class vigils (St Lawrence). *) else if rank = Class3 && is_vigil then 260 - (* 27: Office of the BVM on Saturday -- every otherwise-unoccupied IV-class - Saturday, per the historical default that fills it; ordinary Mass - propers still make Rogation Mon/Tue/Wed proper without changing the - Office (RG 88, see temporal_ef.ml's [temporal]), so those never carry - this entry unless they happen to fall on the Saturday itself. Excludes - vigils for the same reason 11-13/14/16/19/20/23/24 do: RG 91 has no - IV-class vigil at all (RG 91's own vigil list, §4 "Vigils", - stops at III class), so one would be an anomaly, not this entry. *) + (* 27: Office of the BVM on Saturday -- RG 78 (Caput IX, "De sancta Maria + in sabbato"), both photographic scans and the electronic + transcription, word for word (docs/research/rules-register.md §4/§6.4; + Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full + argument): "78. In sabbatis, in quibus occurrit Officium de feria IV + classis, fit de sancta Maria in sabbato" -- on Saturdays on which the + Office of a IV-class feria occurs, [the Office] is made of Holy Mary + on Saturday instead. Every otherwise-unoccupied IV-class Saturday + reaches this branch; ordinary Mass propers still make Rogation + Mon/Tue/Wed proper without changing the Office (RG 88, see + temporal_ef.ml's [temporal]), so those never carry this entry unless + they happen to fall on the Saturday itself. Excludes vigils for the + same reason 11-13/14/16/19/20/23/24 do: RG 91 has no IV-class vigil at + all (RG 91's own vigil list, §4 "Vigils", stops at III class), so one + would be an anomaly, not this entry. *) else if is_temporal && (not is_vigil) && rank = Class4 && weekday = Date.Sat then 270 (* 28: IV-class ferias -- the unqualified catch-all (temporal_ef.ml's own comment on [ferial_rank] cites the same primary text, "Feriae IV @@ -380,6 +387,148 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc else if (not is_vigil) && rank = Class4 then 280 else unclassified +(* RG 112(d) (Caput XVI, "De Commemorationibus"), the BVM half, fix round 1 + of the ef-bvm-saturday task (coordinator finding F1) -- both photographic + scans, word for word (docs/research/rules-register.md §4's own RG 112 + entry already carries this sub-clause, unbuilt until this fix): *"item, + Officium, Missa aut commemoratio de B. Maria Virg. aut de aliquo Sancto + vel Beato excludit aliam commemorationem aut orationem in qua eiusdem B. + Mariae Virg., vel Sancti aut Beati intercessio imploretur: quod tamen non + valet de oratione dominicae vel feriae, in qua fit invocatio eiusdem + Sancti."* -- the Office, Mass or commemoration OF the Blessed Virgin Mary + (or of some Saint or Blessed) excludes ANOTHER commemoration or oration + in which the intercession OF THE SAME BVM (or Saint or Blessed) is + invoked -- which however does not hold of the oration of a Sunday or + feria, in which invocation of the same Saint occurs. + + Found live by the fix-round review: the BVM Saturday Office (RG 91 entry + 27, [temporal_ef.ml]'s own [bvm_saturday_names]) is itself "de B. Maria + Virg." -- so when it is observed, RG 112(d) excludes any OTHER admitted + candidate whose own oration invokes the SAME BVM's intercession, not + merely commemorates her in passing. Real live witness: 16 July, + "our-lady-of-mt-carmel" (data/ef/sanctoral.sexp, Class3, + [Commemoration_only]) falls on a Saturday 8 times in the 2005-2050 + fixture alone; its own collect, both photographic scans, word for word + (Caput "Die 16 iulii, Beatae Mariae Virginis de Monte Carmelo, + Commemoratio"): *"...concede propitius; ut, cuius hodie Commemorationem + solemni celebramus officio, EIUS muniti praesidiis, ad gaudia sempiterna + pervenire mereamur"* -- "her" ("eius") -- grant, we beseech Thee, that we, + fortified by HER patronage, whose Commemoration we solemnly celebrate + today, may be permitted to arrive at everlasting joys -- an explicit + invocation of the SAME BVM's own intercession/patronage, precisely RG + 112(d)'s own trigger. + + The exception clause ("non valet de oratione dominicae vel feriae") does + NOT rescue this: RG 91 lists entry 27 as its own table row, separate from + entry 28's "feriae IV classis" -- this Office is neither a Sunday nor, + once RG 78 has substituted it in, a plain "feria" in Caput IV's own + sense (RG 21: "Nomine feriae intelleguntur singuli dies hebdomadae" -- + an ordinary weekday's OWN office, which RG 78 replaces, not merely + supplements). + + ALSO found on the very same page, both photographic scans, word for + word, confirming the collision is real and rubric-anticipated (not + merely this codebase's own inference): *"Si Commemoratio B. Mariae + Virg. de Monte Carmelo venerit in sabbato, Missa dici potest aut de + sancta Maria in sabbato, aut propria de Commemoratione B. Mariae Virg. + de Monte Carmelo."* -- if the Commemoration of the BVM of Mount Carmel + falls on a Saturday, the Mass MAY be said EITHER of Holy Mary on + Saturday OR properly of the Commemoration of the BVM of Mount Carmel -- + an explicit EITHER/OR between two MASS TEXTS, not an instruction to + commemorate one in the other's Office. Read together with RG 112(d): + the OFFICE question (is Mt Carmel commemorated at all) and the MASS + question (which of the two propers is said that day) are two different + questions -- RG 112(d) answers the first (excluded); this rubric answers + the second, and is a Mass-propers selection detail of exactly the same + kind as the I-V numbered cycle (RG 309(a)) [bvm_saturday_names]'s own + citation already puts out of scope for the SAME reason (colitur computes + no citations/readings at all yet, Plan 4) -- not modelled here either. + + [marian_slugs] is a CLOSED, HAND-VERIFIED list, not a claim to have read + every one of these entries' own Latin orations on the scan (only + Mt Carmel's, quoted above, was actually verified against the primary + text for this fix) -- built from data/ef/sanctoral.sexp's own [names.en] + field, restricted to entries that are themselves a feast/commemoration + OF the Blessed Virgin Mary in her own right (never merely a feast of + someone else that happens to mention her -- "St. Anne, Mother of the + Blessed Virgin", "St. Joseph, Spouse of the Bl. Virgin Mary", "St. + Anthony Mary Claret" and similarly-named entries are deliberately + EXCLUDED, checked one by one). This is the SAME modelling simplification + {!disposition}'s own pre-existing RG 112(a) branch already makes for + "eiusdem Divinae Personae" (read as simply "both [subject = Lord]", + that branch's own comment: "safe at today's data's own granularity") -- + here read as "titled a feast of the BVM", not verified oration-by- + oration, and said so explicitly rather than overclaimed. TWO entries + found and deliberately EXCLUDED after individual consideration, not + merely omitted: "dedication-of-the-basilica-of-st-mary-major" (5 + August, Class3, Feast) -- a DEDICATION feast (of the building, "In + Dedicatione S. Mariae ad Nives"), whose own oration could not be found + in either scan under this exact heading to confirm it invokes her + intercession the same way an ordinary Marian commemoration does, so left + out per this project's "a wrong citation is worse than a missing one" + rule; and "purification-of-the-blessed-virgin-mary" (2 February, + Class2), already deliberately tagged [subject = Lord] by an earlier + task's own ruling (register §6.0, following the oracle's Sunday- + displacing treatment) for an unrelated reason -- its own RG 112(a) + Lord-vs-Lord exclusion already covers it against another Lord-subject + winner, and at Class2 it can never lose to a Class4 candidate in the + first place (this or any other), so including or excluding it here has + no live consequence either way; excluded for consistency with the + earlier ruling rather than silently overriding it. + + What this rule COVERS: any admitted candidate on {!marian_slugs}' own + closed list, or tagged [subject = Bvm], losing to a WINNER that is + itself either {!marian_slugs}-listed or [subject = Bvm] -- currently + live only for the BVM Saturday Office (subject-tagged, its own slug + deliberately NOT on this list, {!bvm_saturday_names}'s own "Slug" + citation in temporal_ef.ml) as winner against Mt Carmel as loser, plus + (checked, not live: 24 September, "our-lady-of-ransom", the ONLY other + {!Celebration.status.Commemoration_only} Marian entry in the data) -- + PROVEN structurally unreachable: 24 September falling on a Saturday + forces 1 September to be a Thursday (23 days = 3 weeks 2 days earlier), + which by {!third_sunday_of_september}'s own construction makes 24 + September the September Ember Saturday EVERY time, RG 91 entry 18 + (Class2), always outranking entry 27 -- not a sampled coincidence, an + exact day-of-week identity, checked against several sample years above + before being generalised. What this rule does NOT cover, stated + plainly: a hypothetical non-Marian-titled saint whose own oration + happens to invoke the BVM's intercession in passing (RG 112(d)'s own + text does not restrict itself to Marian-TITLED commemorations) -- no + oration text is stored anywhere in this codebase to detect that, and + none is guessed at here. Also does not cover RG 112(d)'s OTHER half (two + commemorations of the SAME non-BVM saint) -- unbuilt, unaffected by this + fix, register §4/§6 already tracks it as open. + + Checked for what this fix does NOT change: {!Precedence.resolve} holds + [Commemoration_only] candidates out of the WINNER contest entirely, so + Mt Carmel could never have been [observed] either before or after this + fix -- only its own admission AS a commemoration changes. Verified live + against real 2033/2005 data (both years 16 July is a Saturday): before + this fix, [comms] included "our-lady-of-mt-carmel:ordinary"; after, + [comms] is empty and the omitted list carries it with reason "omitted: + yielded to a higher day", the same generic reason every other [Omit] + disposition in this function produces. *) +let marian_slugs = + [ "annunciation-of-the-blessed-virgin-mary"; + "assumption-of-the-blessed-virgin-mary"; + "immaculate-conception-of-the-blessed-virgin-mary"; + "immaculate-heart-of-mary"; + "maternity-of-the-blessed-virgin-mary"; + "most-holy-name-of-mary"; + "nativity-of-the-blessed-virgin-mary"; + "our-lady-of-lourdes"; + "our-lady-of-mt-carmel"; + "our-lady-of-ransom"; + "our-lady-of-the-rosary"; + "presentation-of-the-blessed-virgin-mary"; + "queenship-of-the-blessed-virgin-mary"; + "seven-sorrows-of-the-blessed-virgin-mary"; + "visitation-of-the-blessed-virgin-mary" ] + +let is_bvm_office (c : Vocab_ef.rank Precedence.candidate) = + c.Precedence.cel.Celebration.subject = Subject.Bvm + || List.mem (Slug.to_string c.Precedence.cel.Celebration.slug) marian_slugs + (* Task 8: what happens to the day's LOSING candidate (docs/research/ rules-register.md §4, "Occurrence" RG 92-95 and "Vigils" RG 33, plus RG 94; also §6.0/Caput III "De Dominicis" RG 16(a), below). [band] above @@ -602,7 +751,16 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) let open Vocab_ef in let cel = loser.Precedence.cel in let is_temporal = loser.Precedence.origin = Precedence.Temporal in - if cel.Celebration.status = Celebration.Commemoration_only then + if is_bvm_office winner && is_bvm_office loser then + (* RG 112(d) -- see [marian_slugs]'s own citation above for the full + argument. Checked FIRST, even ahead of the [Commemoration_only] + branch immediately below, because the one live witness + (Mt Carmel, 16 July) IS [Commemoration_only] -- that branch's own + "always Commemorate, nothing overrides it" previously had no + exception for two commemorations invoking the identical BVM, the + exact gap this fix closes. *) + Precedence.Omit + else if cel.Celebration.status = Celebration.Commemoration_only then (* Always -- checked before RG 33's omission and RG 95's transfer so neither can override it: a Commemoration_only entry can never win (Precedence.resolve holds it out of the band contest entirely, see |
