(* 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 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