(** RG 475-476 (docs/research/LT.txt, grep "dicitur symbolum") -- whether the Creed is said at Mass. The first rubric in this phase governing a PART OF MASS rather than occurrence/precedence, hence its own module: see the .ml's own header for the rubric quoted in full and every branch's citation. *) open Colitur_kernel (** RG 475(e)'s "festis nataliciis Apostolorum et Evangelistarum, necnon in festis Cathedrae S. Petri et S. Barnabae Ap." -- see the .ml's own citation for how each entry was derived from and verified against data/ef/sanctoral.sexp, and for what was deliberately excluded. Exposed so the test suite can assert completeness against the shipped data the same way {!Precedence_ef.vigil_feast_table} already lets it. *) val creed_apostle_slugs : string list (** Whether the Creed is said, post-Gospel/homily, at the Mass this day resolves to. [temporal] is read for exactly one fact -- RG 475(a)'s own "in qualibet dominica, ETSI EIUS OFFICIUM ALICUI FESTO LOCUM CEDAT" ("on any Sunday, EVEN WHEN a feast displaces its own Office"): a Sunday impeded by a Feast of the Lord (RG 16(a)) still says the Creed, so this reads the TEMPORAL cycle's own weekday, never [observed]'s. Every other clause reads [observed] -- the celebration whose Mass is actually said -- and [date], read once against the rite's own (Gregorian) Easter for the two Easter-relative window questions (RG 475(d)'s three octaves, RG 23's Ash-Wednesday-and-Holy-Week feriae). [creed] never reads {!Liturgical_day.t.commemorations}: RG 476(e), "ratione alicuius commemorationis in Missa occurrentis" [never say the Creed merely because of a commemoration], holds by construction rather than by a checked branch. RG 476(f) ("in Missis defunctorum") reads [observed]'s [colour]: see the .ml's own header for why [Colour.Black] is a sound proxy for "this Mass is a Requiem" on the shipped data, and what would have to be re-checked if that ever stops being true. *) val creed : temporal:(Vocab_ef.season, Vocab_ef.rank) Temporal.t -> observed:Vocab_ef.rank Celebration.t -> date:Date.t -> bool (** Whether the Te Deum was said at Matins (Breviary 1961 Codex Rubricarum nn. 237-238) -- NOT the Divine Office arriving in scope, but a single Breviary fact {!gloria}'s own RG 431(a) defers a Mass question to. See the .ml's own header for the rubric quoted in full, every branch's own citation, and this source's own stated weakness (a single, not yet scan-verified, web transcription -- docs/research/breviary/PROVENANCE.md). Same three parameters as {!creed}, for the same reasons: [temporal] for the day's own weekday/season, [observed] for the celebration whose Office is actually kept, [date] for the Easter-relative window questions. *) val te_deum : temporal:(Vocab_ef.season, Vocab_ef.rank) Temporal.t -> observed:Vocab_ef.rank Celebration.t -> date:Date.t -> bool (** Whether the Gloria in excelsis is said at this day's Mass (RG 431-432). 431(a)/432(a) defer to {!te_deum}; 431(c) (Holy Thursday, the Easter Vigil Mass) and 432(b)/(d) (violet vestments; a Requiem) are independent overrides, checked ahead of the Te Deum-derived answer -- see the .ml's own header for the full account, including which of 431/432's own clauses this engine has no votive-Mass-class dimension to implement and are therefore marked not-applicable rather than silently skipped. *) val gloria : temporal:(Vocab_ef.season, Vocab_ef.rank) Temporal.t -> observed:Vocab_ef.rank Celebration.t -> date:Date.t -> bool (** RG 487(a)'s own two fixed-feast triggers for the Holy Cross preference (the Exaltation of the Holy Cross, the Most Precious Blood) -- see the .ml's own citation for what RG 487(a)'s further-named categories (the Passion/Instruments of the Passion, the Most Holy Redeemer) are absent from the shipped calendar entirely, not merely from this list. *) val preface_holy_cross_slugs : string list (** RG 496's own two St Joseph feasts in the shipped calendar. *) val preface_st_joseph_slugs : string list (** RG 497's own [Apostolorum et Evangelistarum] population -- WIDER than {!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 {!Precedence_ef.marian_slugs} (a different, looser standard than that list's own RG 112(d) oration-level one); see the .ml's own citation for the FIUV Ordo evidence. *) val preface_bvm_slugs : string list (** Which preface is said at this day's Mass (RG 482-499). [None] both when this engine resolves a day with no Mass at all (Good Friday) and -- for a rite that has not implemented this function at all -- as the type's own neutral value; see the .ml's own header for the rubric quoted in full, the priority order every branch follows and why, and the FIUV Ordo evidence that order rests on. Same three parameters as {!creed}/ {!te_deum}/{!gloria}, for the same reasons. *) val preface : temporal:(Vocab_ef.season, Vocab_ef.rank) Temporal.t -> observed:Vocab_ef.rank Celebration.t -> date:Date.t -> Preface.t option