aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_of/rubrics_of.mli
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 08:23:38 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 08:23:38 +0200
commit1a1479fd60e192c48789b3b065a3033702e4eeda (patch)
tree283a5fca36c942a6d7fbf287d8d21d57e1b8c1f8 /lib/rites/rite_of/rubrics_of.mli
parent85c1f194c03634eaa905f0bfd630fe23b5f53e59 (diff)
downloadcolitur-1a1479fd60e192c48789b3b065a3033702e4eeda.tar.gz
colitur-1a1479fd60e192c48789b3b065a3033702e4eeda.zip
feat(of): Rubrics_of -- Gloria, Credo, and an all-None Preface verdict
Task 3 of OF Phases 3-5: the celebrant-rubrics module for the OF rite, supplying three of Rite.t's four remaining fields. creed/gloria implement IGMR n. 53 (Gloria) and n. 67-68 (Symbolum), both quoted in full in the module header. temporal is read, not observed, for both Sunday clauses: Temporal_of.temporal tags every Sunday of Advent/Lent/Easter Sollemnitas (the privileged-season convention), so an observed.rank test alone would wrongly grant Gloria on an Advent or Lent Sunday, which n. 53's own "extra tempus Adventus et Quadragesimae" explicitly withholds. Credo is deliberately narrower than Gloria: n. 68 has no "et festis" clause, so an ordinary Festum does not get the Creed, unlike EF's RG 475(b)/(c). Two Missale-proper exceptions (Holy Thursday evening Mass, the Easter Vigil Mass) are cited from the Missal's own "Dicitur Gloria in excelsis" rubric, not the IGMR, which is silent on both. The Requiem question is likewise IGMR-silent (nn. 379-385 say nothing about Gloria/Credo); flagged as an inference from the Missal's own consistent marker pattern, applied only to the one Requiem-shaped slug the shipped OF data can construct (all-souls), the same closed-population discipline Rubrics_ef's own Colour.Black proxy uses. preface returns None unconditionally, a measured verdict rather than a stub. The module header transcribes the 2002 Missal's own "INDEX PRAEFATIONUM" in full: nine of Preface.t's 15 EF-cited constructors name an OF occasion with multiple distinct texts (Nativity x3, Lent x4-9, Easter x5, Ascension x2, Holy_spirit x2, Bvm x5, Apostles x2, Common split across two independent 7/8-member families, Requiem x5) -- structurally lossy to collapse into one constructor. The other six (Epiphany, Trinity, Sacred_heart, Christ_the_king, St_joseph, Holy_cross) match cardinality with a single OF text apiece, and were checked and rejected anyway: Preface.t's own constructors are RG-cited by construction, and IGMR n. 364's own "quibus Missale Romanum ditatur" (prefaces the Missal is ENRICHED with) is direct textual evidence the 2002 collection is not a bare carry-over -- corroborated directly for Sacred Heart, whose OF text was read and found to be a different composition from its RG 491 namesake. Reusing any of the six on cardinality and theme alone would be the exact "sounds similar" trap the task brief warns against. test/test_rubrics_of.ml: 26 table-driven cases. Every temporal-origin row builds observed via Temporal_of.temporal on a real date; every sanctoral-origin row (a solemnity in Lent, an ordinary Festum, a weekday obligatory memorial, All Souls) pairs a real Temporal_of.temporal result with an observed record copied verbatim from data/of/calendar-2002.sexp, since no full OF Rite.t/Calendar pipeline exists yet to derive one. Includes same-date Gloria/Credo pairs that prove the two rules genuinely diverge (a Sunday of Advent, an ordinary Festum) rather than one silently mirroring the other. dune test: exit 0, 845 tests. make check (COLITUR_EXHAUSTIVE_SWEEP=1, full 1583-9999 sweep): exit 0, 851 tests, 303.6s, both run unpiped in the foreground. git diff --stat v1.0.0..HEAD -- lib/rites/rite_ef/ lib/kernel/ data/ef/ is empty.
Diffstat (limited to 'lib/rites/rite_of/rubrics_of.mli')
-rw-r--r--lib/rites/rite_of/rubrics_of.mli78
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/rites/rite_of/rubrics_of.mli b/lib/rites/rite_of/rubrics_of.mli
new file mode 100644
index 0000000..5325f12
--- /dev/null
+++ b/lib/rites/rite_of/rubrics_of.mli
@@ -0,0 +1,78 @@
+(** IGMR n. 53 (Gloria), n. 67-68 (Symbolum/Credo), n. 364-365 and the
+ Missale Romanum editio typica tertia (2002)'s own printed "INDEX
+ PRAEFATIONUM" (preface choice) -- see the .ml's own header for every
+ paragraph quoted in full and every branch's own citation. The OF
+ counterpart of {!Rite_ef.Rubrics_ef}; same shape, same three functions,
+ same [Rite.t] signatures -- but see [preface]'s own citation for why
+ this file's verdict on {!Colitur_kernel.Preface.t} differs sharply from
+ what {!Rite_ef.Rubrics_ef.preface} was able to build. *)
+
+open Colitur_kernel
+
+(** The one Requiem-shaped entity the shipped OF calendar can ever construct
+ as [observed] (All Souls, 2 November) -- see the .ml's own header for
+ why colour cannot serve as the Requiem proxy here the way
+ {!Colour.Black} does for {!Rite_ef.Rubrics_ef} (OF permits, but never
+ requires, black vestments for the dead -- IGMR n. 346 e -- and the
+ shipped data uses violet), so a closed slug list, checked against
+ [data/of/calendar-2002.sexp] directly, is the only signal available.
+ Exposed so the test suite can assert this population stays exactly
+ what it was measured to be, the same discipline
+ {!Rite_ef.Rubrics_ef.creed_apostle_slugs} already establishes. *)
+val requiem_slugs : string list
+
+(** Whether the Gloria in excelsis is said at this day's Mass (IGMR n. 53).
+ [temporal] is read for exactly one fact -- n. 53's own "diebus dominicis
+ EXTRA TEMPUS ADVENTUS ET QUADRAGESIMAE": {!Rite_of.Temporal_of.temporal}
+ tags every Sunday of Advent/Lent/Easter [Sollemnitas] (the same rank a
+ genuine solemnity carries), so testing [observed.rank] alone would
+ wrongly grant an Advent or Lent Sunday the Gloria n. 53 explicitly
+ denies it -- the identical "read temporal, not observed, for a day-of-
+ week/season fact" discipline {!Rite_ef.Rubrics_ef.creed}'s own RG 475(a)
+ citation already establishes. [date] is read once, against the rite's
+ own (Gregorian) Easter, for the two Missale-Romanum-own-rubric
+ exceptions (Holy Thursday evening Mass, the Easter Vigil Mass) -- see
+ the .ml's own citation for the primary text, found in the Missal's
+ Proper of Time rather than the IGMR itself. [observed]'s [slug] is
+ checked once against {!requiem_slugs} -- see that value's own citation
+ for why this is an INFERENCE, not an IGMR paragraph, and exactly how
+ narrowly it is applied. *)
+val gloria :
+ temporal:(Vocab_of.season, Vocab_of.rank) Temporal.t ->
+ observed:Vocab_of.rank Celebration.t ->
+ date:Date.t ->
+ bool
+
+(** Whether the Symbolum (Credo) is said, post-homily, at this day's Mass
+ (IGMR n. 67-68). Reads [temporal] for the identical reason [gloria]
+ does -- n. 68's own "diebus dominicis" is a plain, weekday-only fact,
+ unlike n. 53's Advent/Lent carve-out, so every Sunday qualifies
+ (Advent/Lent Sundays INCLUDED, unlike [gloria]) -- and [observed]'s
+ [rank] for n. 68's own "in sollemnitatibus", and [slug] against
+ {!requiem_slugs} for the identical reason [gloria] checks it. Narrower
+ than [gloria] on purpose: n. 68 has no "et festis" clause at all, so a
+ [Festum]-rank day (an ordinary feast) does NOT get the Credo -- the one
+ place this function's shape most visibly parts from EF's own RG
+ 475(b)/(c). [date] is accepted, for signature symmetry with [gloria]/
+ [preface] and {!Rite.t}'s own shared shape, but genuinely unread: n.
+ 67-68 carries no Easter-relative window of its own, unlike RG 475(d)'s
+ three EF octaves -- checked, not assumed (see the .ml's own citation). *)
+val credo :
+ temporal:(Vocab_of.season, Vocab_of.rank) Temporal.t ->
+ observed:Vocab_of.rank Celebration.t ->
+ date:Date.t ->
+ bool
+
+(** Which preface is said at this day's Mass (IGMR n. 364-365; the Missale's
+ own "INDEX PRAEFATIONUM"). ALWAYS [None] -- not a stub, a measured
+ verdict: see the .ml's own header for the full census of the 2002
+ Missal's preface collection (over 50 individual texts across ~30 named
+ occasions) against {!Preface.t}'s 15 EF-cited constructors, and why
+ none of them is safe to reuse. Same three parameters as [gloria]/
+ [credo], all three genuinely unread -- kept only for {!Rite.t}'s shared
+ shape. *)
+val preface :
+ temporal:(Vocab_of.season, Vocab_of.rank) Temporal.t ->
+ observed:Vocab_of.rank Celebration.t ->
+ date:Date.t ->
+ Preface.t option