From 044aa0dccbfe76ac9afd299af6074296eeb2cca3 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 13 Aug 2026 15:57:00 +0200 Subject: temporal(ef): the votive Office of the BVM on Saturday, RG 91 entry 27 RG 91 entry 27, "Officium sanctae Mariae in sabbato", sits in the Table of Precedence between entry 26 (III-class vigils) and entry 28 (IV-class ferias). Precedence_ef.band already routed a plain IV-class Saturday feria to entry 27's own band value, but nothing in Temporal_ef.temporal ever constructed the office itself, so an otherwise-unoccupied Saturday still surfaced with a bare ferial slug and its season's ordinary colour. Established from Caput IX of the Rubricae Generales, both photographic scans and the electronic transcription, word for word (no scan-vs-transcription conflict: RG 78/79 are General Rubrics prose, not the Mass-propers body text the transcription is documented elsewhere as missing almost all of): "78. In sabbatis, in quibus occurrit Officium de feria IV classis, fit de sancta Maria in sabbato. 79. Officium sanctae Mariae in sabbato incipit a Matutino et explicit post Nonam." RG 78's own protasis IS "otherwise unoccupied IV-class Saturday" -- every Saturday whose temporal candidate would otherwise be Class4, across every season that rank reaches (Christmastide, Septuagesima, Time after Epiphany, Time after Pentecost, ordinary Paschaltide). Nothing else was needed to decide "otherwise unoccupied": band's own entry-27 branch already reads rank/weekday on the temporal candidate unconditionally and only wins the day when nothing outranks it -- RG 78's own condition, decided by the existing occurrence machinery. Colour is white, unconditionally, per RG 120(b) ("Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg."), not RG 119/127/ 128's seasonal rules -- this office is never "de Tempore" for colour purposes, so it overrides the season's own violet/green. The slug is deliberately left UNCHANGED (reused from whatever the generic -- ferial fallback would already have produced), for two independent reasons: it matches the Sacred Triduum's own precedent (identified structurally, off rank/weekday, never off the slug), and a bespoke uniform slug would have broken Colitur_kernel.Validate's own slug-uniqueness-per-liturgical-year invariant, sighted zero times before this task -- confirmed directly by writing it that way first and watching the landmark-years test fail. Subject is tagged Bvm (currently inert for precedence -- only Lord is ever read by band/disposition/admit) and the name is the Latin "Officium sanctae Mariae in sabbato" (RG 91 entry 27's own table title and RG 79's own heading), deliberately not English, the same zero-circularity discipline Holy Family/Holy Name/the Sacred Triduum already established. The I-V numbered "Missae de sancta Maria in sabbato" (both scans) are a Mass-propers selection detail (RG 309(a): "iuxta temporum diversitatem") governing which readings/texts are said, not which office is kept -- colitur computes no citations yet (Plan 4), so this is deliberately not modelled here. Two pre-existing tests needed correction, not because they were wrong before, but because RG 78 genuinely changes their dates' own facts: a Saturday inside the Holy Name of Jesus window (3 January) and two Saturdays inside christmastide_feria_slug's own "-0-"/"-2-" stretches (26 December, 10 January) are all otherwise-unoccupied Class4 Saturdays, so they now legitimately carry the BVM office instead of staying a bare Temporal-subject feria. --- lib/rites/rite_ef/temporal_ef.ml | 180 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 173 insertions(+), 7 deletions(-) (limited to 'lib/rites/rite_ef/temporal_ef.ml') diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index 4b59ff4..2188ce3 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -580,6 +580,143 @@ let ferial_rank d s = let weekday_word d = Date.weekday_to_string (Date.weekday d) +(* RG 91 entry 27, "Officium sanctae Mariae in sabbato" -- the votive Office of + the BVM on Saturday. Caput IX of the Rubricae Generales, both photographic + scans and the electronic transcription, word for word (docs/research/ + rules-register.md §4/§6; no scan-vs-transcription conflict -- RG 78/79 are + General Rubrics prose, not the Mass-propers body text the transcription is + documented elsewhere as missing almost all of): + + "78. In sabbatis, in quibus occurrit Officium de feria IV classis, fit + de sancta Maria in sabbato. + 79. Officium sanctae Mariae in sabbato incipit a Matutino et explicit + post Nonam." + + -- "On Saturdays on which the Office of a IV-class feria occurs, [the + Office] is made of Holy Mary on Saturday [instead]. The Office of Holy + Mary on Saturday begins at Matins and ends after None." RG 78's own + protasis is exactly "otherwise unoccupied IV-class Saturday": WHICH + Saturdays qualify is not a season list to hand-maintain -- it is simply + every Saturday whose temporal candidate would otherwise be + {!Vocab_ef.Class4} (RG 91 entry 28's own unqualified ferial catch-all, + [ferial_rank] above), from ANY season that ferial rank reaches + (Septuagesima, Time after Epiphany, Time after Pentecost, and ordinary + Paschaltide Saturdays outside the privileged Easter/Pentecost octaves, and + the Christmastide ferial stretches [christmastide_feria_slug] builds -- + Advent/Lent/Passiontide Saturdays are already Class2/Class3, higher than + IV class, so RG 78's protasis never fires there, and Ember/Rogation/ + privileged-octave Saturdays are excluded the same way). Nothing else is + needed to decide "otherwise unoccupied": {!Precedence_ef.band}'s own + entry-27 branch already reads [rank = Class4 && weekday = Sat] on the + TEMPORAL candidate unconditionally (312 966 times across the domain, per + the task report) and only ever WINS the day (becomes [observed]) when + nothing of better table position contests it -- exactly RG 78's own + condition, decided by the existing occurrence machinery, not re-derived + here. When a real sanctoral feast DOES win such a Saturday outright, RG + 78's protasis is false for that day (the IV-class Office never "occurs" + there to begin with), and this candidate simply loses/omits exactly as + the plain ferial candidate it replaces already did (RG 26, {!disposition} + in precedence_ef.ml) -- verified: no change to {!Precedence_ef.band}, + {!Precedence_ef.disposition} or {!Precedence_ef.admit} was needed for + this, since RANK stays {!Vocab_ef.Class4} either way and none of those + three functions reads slug/colour/name to decide who wins, what a loser's + fate is, or how many commemorations are admitted. + + Rank: IV class, RG 91's own table position, unconditional ("Dies + liturgici IV classis: 27. Officium sanctae Mariae in sabbato. 28. Feriae + IV classis." -- both scans, register §4). + + Colour: white, ALWAYS, regardless of season -- RG 120(b) (Caput XVIII, + "De coloribus paramentorum", "B) De colore albo"), both photographic + scans: "120. Adhibetur color albus in Officio et Missa de festis: ... b) + B. Mariae Virg." -- white is used in the Office and Mass of feasts ... of + the Blessed Virgin Mary. NOT RG 119 (the "de Tempore" white rule for + Christmastide/Paschaltide) or RG 127/128 (season green/violet): this + Office is never "de Tempore" for colour purposes, so it overrides + [season_colour] unconditionally, including on Septuagesima (violet) and + Time-after-Epiphany/-Pentecost (green) Saturdays -- confirmed against the + oracle (missalemeum, 1 August 2026, a Time-after-Pentecost Saturday: + white, not the season's green). The Missal's own "Missae de sancta Maria + in sabbato" section (both scans) carries no per-Mass colour override the + way some other votive Masses do elsewhere in the same scan ("In hac Missa + adhibetur color albus") -- it needs none, RG 120(b) already settles it + unconditionally for every occurrence. + + Name: "Officium sanctae Mariae in sabbato" -- RG 91 entry 27's own table + title AND RG 79's own heading, both photographic scans and the electronic + transcription, word for word. Latin only, not English -- the same + zero-circularity discipline {!holy_family_sunday}/{!holy_name_names}/ + {!triduum_names} already established: an English name would mean reading + missalemeum's own title text, the oracle this axis is compared against, + to decide colitur's own "ground truth" name. + + Subject: [Bvm] -- simply true (RG 91 entry 27's own title names the BVM + directly) and currently inert for precedence purposes: neither + {!Precedence_ef.band}, {!Precedence_ef.disposition} nor + {!Precedence_ef.admit} tests [subject = Bvm] anywhere today (only [= + Lord] is ever read) -- the same "tagged anyway because it is simply true" + reasoning {!triduum_names}'s own [subject = Lord] tag already used for + the identical shape. Checked for a live interaction with the one other + [Bvm]-tagged entry this codebase's data carries + (data/ef/adjustments.sexp's `most-holy-name-of-mary`, 12 September, + Class3 Feast, not Commemoration_only): whenever 12 September falls on a + Saturday it wins outright over any Class4 candidate ({!Precedence_ef.band} + entry 24 beats entry 27 on table order alone), so this Office and that + entry can never coexist as a winner/commemorated-loser pair -- no live + RG 112(d) witness is created by this tag. + + Slug: UNCHANGED -- deliberately reuses whatever + [christmastide_feria_slug]/the generic -- ferial + fallback would already have produced for this date (e.g. + "ef-septuagesima-2-saturday", "ef-time-after-pentecost-8-saturday"), not + a new bespoke key. Two independent reasons, not one: + (1) PRECEDENT: the SAME shape as the Sacred Triduum ({!triduum_names}'s + own citation above) -- "the slug deliberately STAYS the generic ... + key... identified structurally... never off the slug" -- and + {!Precedence_ef.band}'s own entry-27 branch already reads [rank = Class4 + && weekday = Sat] on the temporal candidate structurally, never its slug, + so nothing needs a bespoke key to find this office. + (2) A bespoke season-independent slug would have been actively WRONG: + [Colitur_kernel.Validate]'s own ["slugs"] check (validate.ml) asserts + every OBSERVED slug is sighted at most once per liturgical year, verified + with ZERO exceptions across the whole 1583-9999 domain before this task + (register/CLAUDE.md's own carried item 4) -- a single uniform + "ef-bvm-saturday" would be sighted 4-9 times in most liturgical years + (every otherwise-unoccupied Saturday), breaking that invariant for real, + not merely in theory (confirmed by writing it that way first: [Validate]'s + own landmark-years test failed immediately, 1583 alone sighting it on 5 + dates). Reusing the season-keyed ferial slug keeps the invariant intact + with no change to [Validate] at all, since season+week+weekday is already + guaranteed unique within a liturgical year by construction. It also + dovetails with the FIVE numbered "Missae de sancta Maria in sabbato" the + Missal's own Common of the BVM prints immediately afterward ("MISSAE DE + S. MARIA IN SABBATO QUAE DICI ETIAM POSSUNT ALIIS DIEBUS UT VOTIVAE DE B. + MARIA VIRGINE, IUXTA RUBRICAS VEL, EX INDULTO, PRO TEMPORUM DIVERSITATE": + I "Tempore Adventus", II "A Nativitate Domini usque ad Purificationem", + III "A die 3 Februarii usque ad feriam IV Hebdomadae sanctae", IV + "Tempore Paschali", V "A festo Ss. Trinitatis usque ad sabbatum ante + dominicam I Adventus" -- both photographic scans, word for word, matching + the oracle's own "V Mass of the B. V. M." title on a Time-after-Pentecost + Saturday): a season-keyed slug leaves room for a future lectionary + bootstrap (Plan 4) to map each one onto its corresponding numbered Mass's + propers, the same way [sunday_slug]'s own season-keyed Sunday slugs + already anchor the ordinary lectionary. RG 309(a)'s own words -- "Missae + quae pro sancta Maria in sabbato, IUXTA TEMPORUM DIVERSITATEM, in Missali + assignantur" -- confirm this is a MASS-TEXT selection detail (which + PROPERS are said), not an OFFICE-identity one; colitur computes no + citations/readings at all yet ([citations] is empty on every day) -- + deliberately not modelled further here, recorded per the task report. The + Missal's own five-season partition for the Mass numbering does not even + align with this rite's own RG 71-77 season boundaries (its own "III" + spans Septuagesima, all of Lent and most of Passiontide as ONE bracket), + one further reason not to try to derive a "Mass number" field from + [Vocab_ef.season] here. *) +let bvm_saturday_names = + Colitur_kernel.Names.of_list + [ (Colitur_kernel.Lang.of_string_exn "la", "Officium sanctae Mariae in sabbato") ] + +let is_bvm_saturday d (rank : Vocab_ef.rank) = Date.weekday d = Date.Sat && rank = Class4 + let temporal d = let y = Date.year d in let easter = Computus.gregorian_easter y in @@ -773,8 +910,22 @@ let temporal d = else ( match christmastide_feria_slug d with | Some slug -> - build ~season:s ~slug ~colour:(season_colour s) ~rank:(ferial_rank d s) - ~week:(week d) () + (* Every Christmastide feria this branch builds is + Class4 ([ferial_rank]'s own catch-all -- Christmastide + is never Advent/Lent/Passiontide), so + [is_bvm_saturday]'s rank test is always true here; the + weekday is the only real condition. See + [bvm_saturday_names]'s own citation above for the full + argument (rank/colour/name/subject) -- the SLUG stays + [slug], the same one this branch would otherwise have + built, per that same citation's own "Slug" paragraph + (not re-quoted at this function's two call sites). *) + if is_bvm_saturday d Class4 then + build ~subject:Colitur_kernel.Subject.Bvm ~names:bvm_saturday_names ~season:s ~slug + ~colour:Colour.White ~rank:Class4 ~week:(week d) () + else + build ~season:s ~slug ~colour:(season_colour s) ~rank:(ferial_rank d s) + ~week:(week d) () | None -> (* The days between Ash Wednesday and Lent I have proper Masses and belong to no numbered week. *) @@ -784,6 +935,26 @@ let temporal d = ~slug:(Printf.sprintf "ef-lent-after-ashes-%s" (weekday_word d)) ~colour:Colour.Violet ~rank:Class3 ~week:None () else + let week_n = week d in + let slug = + Printf.sprintf "ef-%s-%d-%s" (season_slug_word s) + (Option.value week_n ~default:0) (weekday_word d) + in + if is_bvm_saturday d (ferial_rank d s) then + (* RG 78 (Caput IX, "De sancta Maria in sabbato") -- + see [bvm_saturday_names]'s own citation above for + the full argument. This is the ordinary-season + half of the two call sites: Septuagesima, Time + after Epiphany, Time after Pentecost, and + ordinary Paschaltide Saturdays outside the + privileged Easter/Pentecost octaves are exactly + the seasons [ferial_rank] gives Class4 outside + Christmastide (the other call site, above). The + SLUG stays [slug], just computed above, the same + one this branch would otherwise have built. *) + build ~subject:Colitur_kernel.Subject.Bvm ~names:bvm_saturday_names ~season:s ~slug + ~colour:Colour.White ~rank:Class4 ~week:week_n () + else let colour = (* The Pentecost octave weekdays are red, not Paschaltide's white. *) if days_between easter d >= 50 && days_between easter d <= 55 then Colour.Red @@ -817,11 +988,6 @@ let temporal d = else if days_between easter d = -3 then Colour.White else season_colour s in - let week_n = week d in - let slug = - Printf.sprintf "ef-%s-%d-%s" (season_slug_word s) - (Option.value week_n ~default:0) (weekday_word d) - in (* [triduum_names]'s own citation above: identity only, for the three days of the Sacred Triduum -- every other ferial day here stays unnamed, subject -- cgit v1.3 From f389e57e965e7bc7ea46ad1f37203d00f22e25a7 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 13 Aug 2026 17:10:00 +0200 Subject: docs(ef): fix round 1 citation corrections in temporal_ef.ml (F5b, F6) bvm_saturday_names's own comment: the "Missae de S. Maria in sabbato" heading quote corrected from an overclaimed "both scans, word for word" to showing both scans' own raw OCR (noisy, and genuinely differing in abbreviation from each other) side by side, with the substance-only corroboration stated plainly. Colour citation tightened: RG 431(e) (the Missal's own classification of this Mass as a "Missa votiva IV classis... de B. Maria Virg.") -> RG 121(a) (votive Masses take the colour of the feast-type they correspond to) -> RG 120(b) (BVM feasts are white), replacing RG 120(b) alone as the primary citation -- this Office is not itself a festum, so RG 120(b)'s own "in Officio et Missa de festis" was a stretch as the sole basis. Conclusion (white) unchanged. --- lib/rites/rite_ef/temporal_ef.ml | 77 +++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 24 deletions(-) (limited to 'lib/rites/rite_ef/temporal_ef.ml') diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index 2188ce3..cf0d22c 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -626,21 +626,42 @@ let weekday_word d = Date.weekday_to_string (Date.weekday d) liturgici IV classis: 27. Officium sanctae Mariae in sabbato. 28. Feriae IV classis." -- both scans, register §4). - Colour: white, ALWAYS, regardless of season -- RG 120(b) (Caput XVIII, - "De coloribus paramentorum", "B) De colore albo"), both photographic - scans: "120. Adhibetur color albus in Officio et Missa de festis: ... b) - B. Mariae Virg." -- white is used in the Office and Mass of feasts ... of - the Blessed Virgin Mary. NOT RG 119 (the "de Tempore" white rule for - Christmastide/Paschaltide) or RG 127/128 (season green/violet): this - Office is never "de Tempore" for colour purposes, so it overrides - [season_colour] unconditionally, including on Septuagesima (violet) and - Time-after-Epiphany/-Pentecost (green) Saturdays -- confirmed against the - oracle (missalemeum, 1 August 2026, a Time-after-Pentecost Saturday: - white, not the season's green). The Missal's own "Missae de sancta Maria - in sabbato" section (both scans) carries no per-Mass colour override the - way some other votive Masses do elsewhere in the same scan ("In hac Missa - adhibetur color albus") -- it needs none, RG 120(b) already settles it - unconditionally for every occurrence. + Colour: white, ALWAYS, regardless of season. CORRECTED, fix round 1 + (coordinator finding F6): RG 120(b) alone is a stretch as the PRIMARY + citation -- its own text reads "in Officio et Missa DE FESTIS" (of + FEASTS), and this Office is not itself a festum (RG 91's own table + position, entry 27, sits outside the Festa rows 11-13/16/19/20/23/24 + entirely). The tighter chain, found on the same scan: RG 431(e) (Caput + XX, "De hymno Gloria in excelsis") is the Missal's OWN classification of + this exact Mass, word for word: "431. Hymnus Gloria in excelsis + dicitur: ... e) in Missis votivis IV classis de Angelis, quocumque die, + et de B. Maria Virg. QUAE IN SABBATO CELEBRANTUR" -- the Gloria is said + "in IV-class VOTIVE MASSES of the Angels, on any day, and OF THE BVM + WHICH ARE CELEBRATED ON SATURDAY" -- the Missal's own words classify + this Mass as a "Missa votiva IV classis... de B. Maria Virg.", not a + festum. RG 121(a) (immediately after RG 120, same "De colore albo" + section), both photographic scans: "121. Colorem album requirunt + Missae votivae: a) quae respondent festis, de quibus numero + praecedenti" -- white colour is required by VOTIVE MASSES which + "correspond to" (respondent) the feasts named in the preceding + paragraph [120] -- 120(b)'s own "B. Mariae Virg." among them. The chain + -- RG 431(e) (this Mass IS a IV-class votive Mass of the BVM) -> RG + 121(a) (a votive Mass corresponding to a 120-listed feast-type takes + that colour) -> RG 120(b) (BVM feasts are white) -- reaches the + identical conclusion (white) through the category the Missal's own text + actually places this Mass in (votive), not by treating it as a festum + RG 91's own table structure says it is not. NOT RG 119 (the "de + Tempore" white rule for Christmastide/Paschaltide) or RG 127/128 + (season green/violet) either way: this Office is never "de Tempore" for + colour purposes, so it overrides [season_colour] unconditionally, + including on Septuagesima (violet) and Time-after-Epiphany/-Pentecost + (green) Saturdays -- confirmed against the oracle (missalemeum, 1 + August 2026, a Time-after-Pentecost Saturday: white, not the season's + green). The Missal's own "Missae de sancta Maria in sabbato" section + (both scans) carries no further per-Mass colour override the way some + OTHER votive Masses do elsewhere in the same scan ("In hac Missa + adhibetur color albus") -- it needs none, the chain above already + settles it unconditionally for every occurrence. Name: "Officium sanctae Mariae in sabbato" -- RG 91 entry 27's own table title AND RG 79's own heading, both photographic scans and the electronic @@ -689,15 +710,23 @@ let weekday_word d = Date.weekday_to_string (Date.weekday d) with no change to [Validate] at all, since season+week+weekday is already guaranteed unique within a liturgical year by construction. It also dovetails with the FIVE numbered "Missae de sancta Maria in sabbato" the - Missal's own Common of the BVM prints immediately afterward ("MISSAE DE - S. MARIA IN SABBATO QUAE DICI ETIAM POSSUNT ALIIS DIEBUS UT VOTIVAE DE B. - MARIA VIRGINE, IUXTA RUBRICAS VEL, EX INDULTO, PRO TEMPORUM DIVERSITATE": - I "Tempore Adventus", II "A Nativitate Domini usque ad Purificationem", - III "A die 3 Februarii usque ad feriam IV Hebdomadae sanctae", IV - "Tempore Paschali", V "A festo Ss. Trinitatis usque ad sabbatum ante - dominicam I Adventus" -- both photographic scans, word for word, matching - the oracle's own "V Mass of the B. V. M." title on a Time-after-Pentecost - Saturday): a season-keyed slug leaves room for a future lectionary + Missal's own Common of the BVM prints immediately afterward -- a heading + ("MISSAE DE S. MARIA IN SABBATO QUAE DICI ETIAM POSSUNT ALIIS DIEBUS UT + VOTIVAE DE B. MARIA VIRGINE, IUXTA RUBRICAS VEL, EX INDULTO, PRO TEMPORUM + DIVERSITATE") whose SUBSTANCE both scans corroborate but whose exact + wording is NOT "word for word" identical on both -- CORRECTED, fix round + 1 (coordinator finding F5b): both scans' own OCR is noisy here, and the + two additionally use different abbreviations for each other ("S. MARIA" + vs "SANCTA MARIA", "B. MARIA VIRGINE" vs "BEATA MARIA VIRGINE"), not + merely different OCR artifacts of one underlying text -- the task + report has the full raw-OCR comparison. Followed by five numbered + Masses, each with its own season heading, clean and consistent on both + scans: I "Tempore Adventus", II "A Nativitate Domini usque ad + Purificationem", III "A die 3 Februarii usque ad feriam IV Hebdomadae + sanctae", IV "Tempore Paschali", V "A festo Ss. Trinitatis usque ad + sabbatum ante dominicam I Adventus" -- matching the oracle's own "V Mass + of the B. V. M." title on a Time-after-Pentecost Saturday: a + season-keyed slug leaves room for a future lectionary bootstrap (Plan 4) to map each one onto its corresponding numbered Mass's propers, the same way [sunday_slug]'s own season-keyed Sunday slugs already anchor the ordinary lectionary. RG 309(a)'s own words -- "Missae -- cgit v1.3 From c63e37b8cbef1480b6f5677420425d22fe7061d9 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 13 Aug 2026 17:37:40 +0200 Subject: docs: an invented Caput, a list that was not closed, and a blind spot Three corrections from the fix-round re-review, none changing behaviour. RG 431(e) was attributed to "Caput XX, De hymno Gloria in excelsis". There is no Caput XX -- the Rubricae Generales' Caput series ends at XIX. The paragraph number, letter and subsection title were all right; only the containing division was invented. It sits under "VIII -- De diversis Missae partibus", subsection "C) De hymno Gloria in excelsis". Shipping a new invented structural citation in the very round that corrected a source-fidelity overclaim is what the gate exists to catch. marian_slugs claimed TWO entries found and deliberately excluded after individual consideration, "not merely omitted". There was a third: vigil-of-the-assumption, 14 August, which is de B. Maria Virg. and whose collect implores her protection. It was merely omitted. Added to the list -- behaviourally inert, verified: it wins 7196 times domain-wide, always with the non-Marian eusebius-confessor as its only commemoration, and never loses -- but a closed list's whole value is its enumeration claim, and that claim was false as written. And the new rule has no comparison-layer witness at all. Reverting it reddens three tests, none of them a comparison layer: the differential's row type carries no commemorations, and the oracle's window has no 16-July Saturday. Worse, lectio's fixture DOES carry commemorations and prints +our-lady-of-mt-carmel on all 8 in-window dates where colitur now prints nothing -- a real divergence, neither fixed nor cited, swallowed by a blind spot, which binding decision 1 forbids. Recorded, with the note that colitur's reading here has no reference confirmation anywhere and only extending the oracle fixture to 2033 or later would settle it. Also records the RG 112(d) branch's ordering constraint: it precedes RG 95's Transfer branch, which it does not need to, and must move below it if a Class1 Marian entry is ever added. --- data/ef/expected-divergences.sexp | 2 +- lib/rites/rite_ef/precedence_ef.ml | 41 ++++++++++++++++++++++++++++++++++---- lib/rites/rite_ef/temporal_ef.ml | 8 ++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) (limited to 'lib/rites/rite_ef/temporal_ef.ml') diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index 444f55e..f5d5381 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -75,5 +75,5 @@ ((id C17) (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") + RG 78 (Caput IX, \"De sancta Maria in sabbato\", both photographic scans and the electronic transcription word for word): \"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 + RG 120(b) (\"Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg.\") for the white colour, unconditional regardless of season") (verdict colitur) - (note "ef-bvm-saturday task: colitur now builds RG 91 entry 27's votive Office of the BVM on every otherwise-unoccupied IV-class Saturday (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full argument) -- white (RG 120(b)), unconditionally, overriding the season's own colour (violet in Septuagesima, green in Time after Epiphany/Time after Pentecost; Christmastide and ordinary Paschaltide already happened to be white). lectio builds no equivalent office at all -- checked directly against its own tridentine-calendar.ini/generator, no comparable rule exists there, the same genuine upstream gap C15/C16 above document for their own gaps, not a colitur bootstrap miss -- so it keeps showing the plain season colour on every one of these Saturdays. Season, slug and rank all still agree: temporal_ef.ml's own [bvm_saturday_names] citation (\"Slug\" paragraph) deliberately REUSES the ordinary --saturday ferial slug rather than minting a new one (partly BECAUSE a bespoke uniform slug would itself have broken Colitur_kernel.Validate's own slug-uniqueness invariant, sighted on every otherwise-unoccupied Saturday in a year), so [Colour_f] alone is the complete diff set every one of these rows carries -- never [Slug_f] too. Gated on colitur's own [rank]=class-4, [weekday]=saturday and [colour]=white (test_differential.ml's own [is_bvm_saturday_row]) rather than a date list, unlike C14/C15/C16 above: RG 78's own condition (\"otherwise unoccupied IV-class Saturday\") reduces exactly to this triple, and the population is large (a substantial fraction of all Saturdays in the 2005-2050 window) and entirely formulaic, not a short, individually-interesting list. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after.") + (note "ef-bvm-saturday task: colitur now builds RG 91 entry 27's votive Office of the BVM on every otherwise-unoccupied IV-class Saturday (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full argument) -- white (RG 431(e) -> RG 121(a) -> RG 120(b); RG 120(b) alone reads \"de festis\" and this Office is not a festum), unconditionally, overriding the season's own colour (violet in Septuagesima, green in Time after Epiphany/Time after Pentecost; Christmastide and ordinary Paschaltide already happened to be white). lectio builds no equivalent office at all -- checked directly against its own tridentine-calendar.ini/generator, no comparable rule exists there, the same genuine upstream gap C15/C16 above document for their own gaps, not a colitur bootstrap miss -- so it keeps showing the plain season colour on every one of these Saturdays. Season, slug and rank all still agree: temporal_ef.ml's own [bvm_saturday_names] citation (\"Slug\" paragraph) deliberately REUSES the ordinary --saturday ferial slug rather than minting a new one (partly BECAUSE a bespoke uniform slug would itself have broken Colitur_kernel.Validate's own slug-uniqueness invariant, sighted on every otherwise-unoccupied Saturday in a year), so [Colour_f] alone is the complete diff set every one of these rows carries -- never [Slug_f] too. Gated on colitur's own [rank]=class-4, [weekday]=saturday and [colour]=white (test_differential.ml's own [is_bvm_saturday_row]) rather than a date list, unlike C14/C15/C16 above: RG 78's own condition (\"otherwise unoccupied IV-class Saturday\") reduces exactly to this triple, and the population is large (a substantial fraction of all Saturdays in the 2005-2050 window) and entirely formulaic, not a short, individually-interesting list. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after.") (expected_rows 416)) diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml index 302df98..7b64b83 100644 --- a/lib/rites/rite_ef/precedence_ef.ml +++ b/lib/rites/rite_ef/precedence_ef.ml @@ -458,9 +458,18 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc "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 + oration, and said so explicitly rather than overclaimed. THREE entries found + and considered individually rather than merely omitted -- the third, + "vigil-of-the-assumption" (14 August, Class2, Feast), was MISSED by the + original enumeration and is recorded here by the fix-round re-review: it + is unambiguously de B. Maria Virg. and its collect implores her + protection ("sua nos defensione munitos"), so it BELONGS on the list on + the same reasoning as the rest. It is behaviourally inert either way -- + measured domain-wide, it wins 7196 times, always with the non-Marian + [eusebius-confessor] as its only commemoration, and never loses, since + no Class1 Marian falls on 14 August -- but a closed list's whole value is + its enumeration claim, and that claim was false as first written. The + other two were genuinely excluded after consideration: "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 @@ -517,6 +526,11 @@ let marian_slugs = "most-holy-name-of-mary"; "nativity-of-the-blessed-virgin-mary"; "our-lady-of-lourdes"; + (* Added by the fix-round re-review: missed by the original enumeration, + behaviourally inert (it never loses; no Class1 Marian falls 14 Aug), + but it is de B. Maria Virg. and its collect implores her protection, + so it belongs on the list by the same test as every other member. *) + "vigil-of-the-assumption"; "our-lady-of-mt-carmel"; "our-lady-of-ransom"; "our-lady-of-the-rosary"; @@ -753,7 +767,26 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) let is_temporal = loser.Precedence.origin = Precedence.Temporal in 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] + argument. + + ON THIS BRANCH'S POSITION (fix-round re-review, finding 5): it sits + ahead of RG 33's vigil branch and RG 95's Class1 Transfer branch as + well as ahead of [Commemoration_only], and only the last of those + three is a position it NEEDS. RG 112(d) governs commemorations, not + translations, so if a Class1 Marian celebration ever lost to a Marian + winner it would be silently [Omit]ed here instead of reaching RG 95 + and transferring. That is unreachable on shipped data -- the + re-review swept the whole domain and found ZERO Marian-winner / + Marian-loser pairs other than the 16 July case this branch exists + for, which is [Commemoration_only] and so could never transfer + anyway -- and it is left in place rather than moved, because + reordering a disposition branch is a behavioural change that deserves + its own measurement and review rather than a late edit. Recorded here + and in the register so the next task that touches this chain knows + the constraint: if a Class1 Marian entry is ever added, this branch + must move BELOW the Transfer branch. + + Checked FIRST, then, 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 diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index cf0d22c..4add824 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -631,8 +631,12 @@ let weekday_word d = Date.weekday_to_string (Date.weekday d) citation -- its own text reads "in Officio et Missa DE FESTIS" (of FEASTS), and this Office is not itself a festum (RG 91's own table position, entry 27, sits outside the Festa rows 11-13/16/19/20/23/24 - entirely). The tighter chain, found on the same scan: RG 431(e) (Caput - XX, "De hymno Gloria in excelsis") is the Missal's OWN classification of + entirely). The tighter chain, found on the same scan: RG 431(e) ("VIII -- De diversis + Missae partibus", subsection "C) De hymno Gloria in excelsis" -- NOT + "Caput XX", which does not exist: the Rubricae Generales' Caput series + ends at XIX. Corrected by the fix-round re-review; the paragraph number, + letter and subsection title were right, only the containing division was + invented) is the Missal's OWN classification of this exact Mass, word for word: "431. Hymnus Gloria in excelsis dicitur: ... e) in Missis votivis IV classis de Angelis, quocumque die, et de B. Maria Virg. QUAE IN SABBATO CELEBRANTUR" -- the Gloria is said -- cgit v1.3