1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
(** 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
|