diff options
Diffstat (limited to 'lib/rites/rite_of/rubrics_of.ml')
| -rw-r--r-- | lib/rites/rite_of/rubrics_of.ml | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/lib/rites/rite_of/rubrics_of.ml b/lib/rites/rite_of/rubrics_of.ml new file mode 100644 index 0000000..3fa59e9 --- /dev/null +++ b/lib/rites/rite_of/rubrics_of.ml @@ -0,0 +1,290 @@ +(* Institutio Generalis Missalis Romani, editio typica tertia (2002) + (docs/research/of/igmr-2002-latin.pdf; extracted with `pdftotext + docs/research/of/igmr-2002-latin.pdf`, line numbers below are that + extraction's own line numbers) -- CITATION DISCIPLINE, restated from + vocab_of.ml/temporal_of.ml: the Missale Romanum PDF (docs/research/of/ + missale-romanum-2002.pdf) carries BOTH the Normae universales and the + IGMR, each independently numbered from 1. Every citation below names + "IGMR n. N" for that reason, never a bare "n. N". Gloria and Credo are + IGMR questions (Ordo Missae structure); Normae has nothing to say about + either. + + GLORIA (IGMR n. 53, igmr.txt:456-460), quoted in full: + + "53. Gloria est antiquissimus et venerabilis hymnus, quo Ecclesia, in + Spiritu Sancto congregata, Deum Patrem atque Agnum glorificat eique + supplicat. Huius hymni textus cum alio commutari nequit. [...] + Cantatur autem vel dicitur diebus dominicis extra tempus Adventus et + Quadragesimae, necnon in sollemnitatibus et festis, et in peculiaribus + celebrationibus sollemnioribus." + + So: every Sunday OUTSIDE Advent and Lent; every Sollemnitas; every + Festum; and, permissively ("in peculiaribus celebrationibus + sollemnioribus" -- "in particular more solemn celebrations", "dicitur" + not "dicendum est" elsewhere in this paragraph's own register), certain + occasions this engine has no dimension to model at all -- the same + "votive Mass class" scope limit {!Rite_ef.Rubrics_ef}'s own header + states for RG 431(d)/(e)/432(c) -- genuinely N/A, not silently skipped. + + CREDO / SYMBOLUM (IGMR n. 67-68, igmr.txt:568-577), quoted in full: + + "67. Symbolum seu professio fidei eo tendit ut universus populus + congregatus verbo Dei in lectionibus e sacra Scriptura nuntiato et per + homiliam exposito respondeat [...] + 68. Symbolum cantandum vel dicendum est a sacerdote cum populo diebus + dominicis et in sollemnitatibus; dici potest etiam in peculiaribus + celebrationibus sollemnioribus." + + NARROWER than n. 53, on purpose, not by oversight: n. 68 names only + "dominicis et... sollemnitatibus" -- NO "et festis" clause at all, unlike + n. 53's explicit third member. An ordinary [Festum] (the Presentation, + the Transfiguration, the Exaltation of the Holy Cross...) therefore does + NOT get the Credo, exactly matching real practice (only Sundays and + solemnities carry it) and confirmed by the literal absence of the word + "festis" from n. 68 where n. 53 has it -- checked directly, not assumed. + The trailing "dici potest... peculiaribus... sollemnioribus" is the same + permissive, unmodelled N/A clause as n. 53's. + + Neither n. 53 nor n. 68 carries an Easter-relative WINDOW the way RG + 475(d)'s three EF octaves do (Nativity/Easter/Pentecost) -- checked by + reading both paragraphs in full above, not merely by their absence from + this file's own branches: nothing in IGMR nn. 52-69 (the whole "Actus + paenitentialis" through "Oratio universalis" span, igmr.txt:440-585) + mentions an octave at all. [credo]'s own [date] parameter is therefore + genuinely unread, kept only for {!Colitur_kernel.Rite.t}'s shared shape + -- an honest [None]-shaped fact about this rubric, not a gap. + + THE REQUIEM QUESTION -- IGMR IS GENUINELY SILENT, FLAGGED AS SUCH. RG + 476(f)/432(d) name "in Missis defunctorum" explicitly for EF; IGMR nn. + 379-385 ("II. DE MISSIS DEFUNCTORUM", igmr.txt:2327-2349), read in full, + say nothing at all about the Gloria or the Symbolum -- confirmed by + reading every line of that section, not by a failed grep. The Missale's + own printed propers corroborate the OMISSION reading only indirectly: + every OTHER Mass text in the extracted Proper of Time/Sanctoral carries + an explicit "Dicitur Gloria in excelsis."/"Non dicitur..." marker (over + 150 occurrences, docs/research/of/missale-romanum-2002.pdf via + `pdftotext -layout`), but the two "IN COMMEMORATIONE OMNIUM FIDELIUM + DEFUNCTORUM" (2 November) Mass-text blocks carry NEITHER marker -- + consistent with (not proof of) universal, uncontested funeral-liturgy + practice that a Requiem Mass never has either. Picked as the reading + with the better textual support, per this task's own brief, and applied + as narrowly as the evidence allows: {!requiem_slugs} is a CLOSED, + directly-checked list of the ONE slug in data/of/calendar-2002.sexp this + can ever apply to (grepped for "defunct"/"requiem"/"exsequial": zero + other hits), the same "checked, not assumed, closed population" + discipline {!Rite_ef.Rubrics_ef}'s own [Colour.Black] proxy uses for the + identical EF question. *) + +open Colitur_kernel + +let requiem_slugs = [ "all-souls" ] + +let is_requiem (observed : Vocab_of.rank Celebration.t) = + List.mem (Slug.to_string observed.Celebration.slug) requiem_slugs + +let gloria ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t) + ~(observed : Vocab_of.rank Celebration.t) ~(date : Date.t) : bool = + let easter = Computus.gregorian_easter (Date.year date) in + let n = Date.to_rata date - Date.to_rata easter in + if is_requiem observed then false + else if + (* Missale Romanum, "FERIA V IN CENA DOMINI", Ad Missam vespertinam, n. + 7 (docs/research/of/missale-romanum-2002.pdf, pdftotext -layout, + line ~8534): "Dicitur Gloria in excelsis. Dum cantatur hymnus, + pulsantur campanae, eoque expleto, silent usque ad Gloria in + excelsis Vigiliae paschalis..." -- the Missal's own PROPER-OF-TIME + rubric for the Mass of the Lord's Supper (Easter-3) explicitly + requires the Gloria despite the day sitting inside Lent (Tabula I.1 + territory once the evening Mass begins; Precedence_of.band's own + comment on WHY the civil day itself stays a Holy Week feria, not the + Triduum, is unaffected -- this rubric is keyed to the Mass, not the + day's own band), and the same sentence extends the silence "usque + ad" (UP TO) the Easter Vigil's own Gloria (Easter-1), confirming + that Mass also has one. Neither day is ever a Sunday (both are fixed + Easter-offsets within Holy Week), so this must be checked ahead of, + and independently of, the season/weekday branches below -- the + identical lex-specialis placement {!Rite_ef.Rubrics_ef.gloria}'s own + RG 431(c) branch uses for the same two days. *) + n = -3 || n = -1 + then true + else if + (* IGMR n. 53: "extra tempus Adventus et Quadragesimae" -- read off + [temporal], never [observed]: Temporal_of.temporal tags every Sunday + of Advent, Lent AND Easter [Sollemnitas] (temporal_of.ml, [build]'s + own [match s with Advent | Lent | Easter -> Sollemnitas | ...]), so + an [observed.rank] test alone would wrongly grant an Advent or Lent + Sunday the Gloria this clause explicitly withholds -- confirmed by + Palm Sunday specifically ([Vocab_of.Lent], [Sollemnitas], + [named]'s own entry): real, uncontested practice omits the Gloria + there, and only a temporal-read guard gets that right. *) + temporal.Temporal.weekday = Date.Sun + && (temporal.Temporal.season = Vocab_of.Advent || temporal.Temporal.season = Vocab_of.Lent) + then false + else if + (* IGMR n. 53: every remaining Sunday (Christmas time, Easter, Ordinary + Time -- outside Advent/Lent by the branch just above). Read off + [temporal.weekday], not [observed.rank]: an ordinary Sunday per + annum is [Festum]-ranked (temporal_of.ml, the same [build] match + above), not [Sollemnitas], and would otherwise only reach a [true] + answer via the [Festum] arm below -- redundant for it, but this + branch is what makes an Easter- or Christmas-season Sunday's [true] + answer trace to n. 53's OWN "diebus dominicis" clause rather than + accidentally to its "et festis" clause. *) + temporal.Temporal.weekday = Date.Sun + then true + else + (* IGMR n. 53: "in sollemnitatibus et festis" -- every remaining + Sollemnitas or Festum, whatever day of the week it falls on (a + solemnity transferred onto an ordinary weekday, or one that was + never a Sunday to begin with -- St Joseph 19 March, the Annunciation + 25 March, both always inside Lent by construction: Gregorian + Easter's earliest possible date is 22 March, so Ash Wednesday can + never fall later than 10 March and Easter itself can never fall + before 19 March, meaning neither date can ever fall outside Lent). + [Memoria_obligatoria], [Memoria_ad_libitum] and [Feria] are not + named by n. 53 at all and correctly fall through to [false]. *) + observed.Celebration.rank = Vocab_of.Sollemnitas || observed.Celebration.rank = Vocab_of.Festum + +let credo ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t) + ~(observed : Vocab_of.rank Celebration.t) ~(date : Date.t) : bool = + ignore date; + (* IGMR n. 67-68's own [date]-independence: see this file's own header. *) + if is_requiem observed then false + else if + (* IGMR n. 68: "diebus dominicis" -- EVERY Sunday, Advent and Lent + included (unlike [gloria]'s own n. 53 carve-out: n. 68 has no such + exception in its text, checked directly). Read off [temporal], not + [observed], for the same reason [gloria]'s own Sunday branch is: + an ordinary (non-privileged-season) Sunday per annum is [Festum]- + ranked, and n. 68's own [Sollemnitas] branch below would silently + miss it if this branch were dropped. *) + temporal.Temporal.weekday = Date.Sun + then true + else + (* IGMR n. 68: "in sollemnitatibus". NO "et festis" here -- the one + place this function's shape most visibly narrows on EF's RG + 475(b)/(c): a bare [Festum] (the Presentation, the Transfiguration, + a I-class-shaped feast of the Lord with no Sunday privilege) does + NOT get the Credo. [Memoria_obligatoria]/[Memoria_ad_libitum]/ + [Feria] fall through to [false], matching real practice (an + obligatory memorial on a weekday never carries the Creed). *) + observed.Celebration.rank = Vocab_of.Sollemnitas + +(* PREFACE CHOICE (IGMR n. 364-365, igmr.txt:2244-2263) -- quoted in full: + + "364. Plurimae praefationes, quibus Missale Romanum ditatur, eo + spectant ut argumenta gratiarum actionis in Prece eucharistica plenius + eniteant, et variae rationes mysterii salutis pleniore luce + proponantur. + 365. Electio inter Preces eucharisticas, quae in Ordine Missae + inveniuntur, his normis opportune regitur: [...]" + + n. 364-365 govern choosing among the FOUR EUCHARISTIC PRAYERS (I-IV), + NOT which preface accompanies whichever Mass is said -- a different + question this engine has no need to answer (colitur resolves a Mass's + readings/rubrics, never which of the interchangeable Canons a celebrant + picks). Genuinely N/A, cited here only because n. 364-365 is the + nearest thing to a "how is the Eucharistic Prayer/preface chosen" + numbered rubric in the whole IGMR, and this file should say plainly + that it is not the rule this function needs, rather than leave a reader + to wonder why it was not used. + + UNLIKE RG 482-499, the IGMR carries NO numbered rubric governing preface + ASSIGNMENT at all -- confirmed by reading nn. 1-386 in full, not merely + by a failed grep for "praefatio" (which itself found zero hits: the + word never appears with that spelling anywhere in + docs/research/of/igmr-2002-latin.pdf's extracted text; every occurrence + in the Missale PDF instead uses the ligature "praefationem"/"praefatio" + spelt with <ae> or the printed <æ>, confirming this is a genuine textual + absence, not an extraction artifact). Preface assignment in the 2002 + editio typica tertia is done PER MASS, inline throughout the Proper of + Time, Proper of Saints and Commons (each Mass's own rubric names its + preface directly, e.g. "Praefatio de Nativitate, pp. 520-522.") -- the + collection itself is indexed at the Missal's own back matter under + "INDEX PRAEFATIONUM" (missale-romanum-2002.pdf, pdftotext -layout, + extracted lines ~34107-34247), transcribed here in full because it is + the evidence the verdict below rests on: + + A. De Tempore: Advent I-II (2); Nativity I-III (3); Epiphany (1); + Lent ("de Quadragesima") I-IV plus five Sunday-specific variants + V-IX (9); Passion ("de Passione Domini") I-III, III being Palm + Sunday's own (3); Paschal (Easter) I-V (5); Ascension I-II, BOTH + titled "De mysterio Ascensionis" (2); Pentecost (1); Sundays "per + annum" I-VIII (8); Praefationes communes I-VII (7). + B. In festis et mysteriis Domini: Trinity (1); the Annunciation's own + "De mysterio Incarnationis" (1); the Baptism of the Lord (1); + Sacred Heart (1); "De victoria Crucis gloriosae", 14 September (1); + Corpus Christi ("de Ss.ma Eucharistia") I-II (2); the Presentation + (1); Christ the King (1); the Transfiguration (1); the Dedication + of a Church I-II (2); "de Spiritu Sancto" I-II (2). + C. In festis sanctorum: the BVM I-V (5); the Angels (1); the + Precursor/John the Baptist (1); St Joseph, "De missione S. + Ioseph", 19 March/1 May (1); Peter-and-Paul (1); Apostles I-II + (2); Saints I-III (3); Martyrs I-II (2); Pastors (1); Virgins and + Religious (1). + Pro defunctis (Requiem): I-V (5). + + AGAINST THIS CENSUS, {!Preface.t}'s 15 constructors split into two + failure shapes, and every single one fails one of them -- NONE is safe + to reuse: + + (1) NINE constructors name an OF occasion with MULTIPLE distinct texts: + [Nativity] (3 OF variants), [Lent] (4, or 9 counting the + Sunday-specific set), [Easter] (5), [Ascension] (2), [Holy_spirit] + (2), [Bvm] (5), [Apostles] (2), [Common] (15, split across two + independent numbered families -- "per annum" I-VIII and + "communes" I-VII, neither of which [Preface.t]'s single [Common] + constructor could ever pick between), [Requiem] (5). Returning any + one of them would silently pick ONE of several genuinely different + texts and call it "the" answer -- structurally lossy, independent + of any wording question. + + (2) SIX constructors name an OF occasion with exactly ONE text, the same + cardinality EF has for it -- [Epiphany], [Trinity], [Sacred_heart], + [Christ_the_king], [St_joseph], and [Holy_cross] (EF's RG 487 "de + sancta Cruce" against OF's single "De victoria Crucis gloriosae", + both keyed to 14 September). These are the genuinely tempting + cases -- same feast, same "exactly one" cardinality on both sides -- + and each was checked and rejected anyway, on TWO grounds: + (a) {!Preface.t}'s own header ties every constructor to an RG + paragraph ("Nativity RG 484", "Trinity RG 494", ...) -- it + denotes THAT SPECIFIC EF TEXT, not an abstract cross-rite + theme, by its own documented contract. + (b) IGMR n. 364's own opening word choice is direct evidence the + 2002 Missal does not consider its preface collection a bare + carry-over: "praefationes, QUIBUS Missale Romanum DITATUR" + ("the prefaces WITH WHICH the Missal is ENRICHED") -- language + describing an addition/expansion, not an inheritance, + corroborating the well-documented fact that the post-1970 + preface collection was substantially newly composed, the + Sacred Heart preface actually read while building this + module ("Qui, mira caritate, exaltatus in cruce... de + transfixo latere sanguinem fudit et aquam...", + missale-romanum-2002.pdf line ~30575) being the one + instance directly compared line-by-line against what its RG + 491 EF namesake is known to open with, and found to be a + different composition, not merely a different printing of + the same one. + Reusing any of the six on the strength of matching cardinality and + matching feast alone would be exactly the "sounds similar" trap + this task's own brief warns against -- confidently wrong output + every test in this suite would agree with, because nothing in this + codebase yet stores preface TEXT to catch the mismatch against. + + VERDICT: [preface] returns [None] unconditionally. This is not a stub + -- every branch above was checked and its failure mode recorded -- and + it is not a defect in {!Preface.t} either: that type was built for one + rite and correctly refuses to pretend it fits a second one it was never + shown. The finding worth carrying forward (task brief's own "spec §7" + framing): OF preface selection needs its own type, most plausibly one + with a per-occasion NUMBERED-VARIANT dimension ("Nativity of 1 | 2 | 3", + ...) rather than {!Preface.t}'s flat enumeration, plus its own IGMR/ + Missale-cited population census -- table-driven, the same shape as + {!requiem_slugs} above, once a task is actually chartered to build it. + Building that type is explicitly out of this task's own scope. *) +let preface ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t) + ~(observed : Vocab_of.rank Celebration.t) ~(date : Date.t) : Preface.t option = + ignore temporal; + ignore observed; + ignore date; + None |
