aboutsummaryrefslogtreecommitdiff
path: root/lib/kernel
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 12:01:48 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 12:02:01 +0200
commitd4682c13161b62bc83eaae37790493f670d39c01 (patch)
tree84cf7e536b5bd73cd6c93d7426fa2003cd02abdc /lib/kernel
parentfd8a4f115d3c62450368cf9b3fed5705ce78e805 (diff)
downloadcolitur-d4682c13161b62bc83eaae37790493f670d39c01.tar.gz
colitur-d4682c13161b62bc83eaae37790493f670d39c01.zip
feat(ef): the Creed, RG 475-476
Whether the Creed is said at Mass. New Rubrics_ef.creed, reached through a new Rite.t.creed field and a new Liturgical_day.t.creed bool (false, not an option, for a rite that has not implemented the rule); colitur rubrics gains a fourth TAB-separated column. 475(a) reads the TEMPORAL cycle's own weekday, not the observed day: a Sunday impeded by a Feast of the Lord (RG 16a) still says the Creed. 475(d)'s three octaves (Nativity, Easter, Pentecost) are pure date/ Easter-offset windows, checked first, since a saint's feast winning the day inside one of them still says the Creed ("etiam in festis occurrentibus") -- St Stephen, 26 December, is the live witness. RG 23 classifies Ash Wednesday and every feria of Holy Week (including the Sacred Triduum) as feriae, not festa, however high their rank, so 475(b)/(c)'s "in festis" never reaches them; this single check subsumes 476(a)'s own naming of the Chrism/Lord's-Supper Mass and the Easter Vigil. RG 28-34 vigils are a third liturgical-day category, also excluded from "in festis" regardless of rank -- reuses the already- exported Precedence_ef.is_vigil rather than a new list. 475(e)'s Apostle/Evangelist natalicia list (creed_apostle_slugs) was derived by grepping data/ef/sanctoral.sexp directly and checking each candidate's own date against whether it is that saint's dies natalis -- not copied from any list supplied with the task. The Conversion of St Paul and the 30 June Commemoration of St Paul are excluded (neither is a natalicium); the Chair of St Peter and St Barnabas are included only because the clause names them explicitly, which is exactly why it has to: neither is a natalicium either. 475(c)'s BVM half reuses Precedence_ef.marian_slugs (newly exported) rather than the subject field alone: checked against the shipped data, almost every Marian sanctoral entry ships subject=Saint, not Bvm. man/colitur.1's rubrics section is updated to match the new column; test/cli.t repinned via dune promote for the same reason. Verified day/readings output byte-identical to v0.10.1 across the whole 1583-9999 domain (both binaries' concatenated day+readings output, 6,148,492 lines each, zero diff). Domain-wide: 882,996 days say the Creed, 2,191,250 do not; every one of the domain's 439,178 Sundays says it, zero exceptions.
Diffstat (limited to 'lib/kernel')
-rw-r--r--lib/kernel/calendar.ml4
-rw-r--r--lib/kernel/liturgical_day.ml1
-rw-r--r--lib/kernel/liturgical_day.mli4
-rw-r--r--lib/kernel/rite.ml1
-rw-r--r--lib/kernel/rite.mli15
5 files changed, 25 insertions, 0 deletions
diff --git a/lib/kernel/calendar.ml b/lib/kernel/calendar.ml
index 7fe9f67..d55e38d 100644
--- a/lib/kernel/calendar.ml
+++ b/lib/kernel/calendar.ml
@@ -547,6 +547,9 @@ let build_day (rite : ('s, 'r) Rite.t) (idx : 'r Layer.index)
rite.Rite.readings ~observed:resolution.Precedence.observed.Precedence.cel ~temporal ~date
~temporal_at:rite.Rite.temporal
in
+ let creed =
+ rite.Rite.creed ~temporal ~observed:resolution.Precedence.observed.Precedence.cel ~date
+ in
{
Liturgical_day.date;
rite = rite.Rite.id;
@@ -559,6 +562,7 @@ let build_day (rite : ('s, 'r) Rite.t) (idx : 'r Layer.index)
omitted;
citations;
formulary;
+ creed;
}
let year (rite : ('s, 'r) Rite.t) (layer : 'r Layer.t) (y : int) :
diff --git a/lib/kernel/liturgical_day.ml b/lib/kernel/liturgical_day.ml
index 709f878..09ac0a1 100644
--- a/lib/kernel/liturgical_day.ml
+++ b/lib/kernel/liturgical_day.ml
@@ -26,5 +26,6 @@ type ('s, 'r) t = {
formulary : Mass_formulary.t option;
(** which Mass the day says, and how that was decided; [None] only for
a rite with no lectionary -- see {!Mass_formulary} *)
+ creed : bool; (** whether the Creed is said at this day's Mass; see {!Rite.t.creed} *)
}
[@@deriving sexp]
diff --git a/lib/kernel/liturgical_day.mli b/lib/kernel/liturgical_day.mli
index 4a71d6d..eb45e61 100644
--- a/lib/kernel/liturgical_day.mli
+++ b/lib/kernel/liturgical_day.mli
@@ -33,5 +33,9 @@ type ('s, 'r) t = {
{!Mass_formulary}. [None] only for a rite with no lectionary; for
EF it is [Some] on every day of every year 1583..9999, asserted by
{!Validate}. *)
+ creed : bool;
+ (** Whether the Creed is said at this day's Mass -- {!Rite.t.creed},
+ EF: RG 475-476. A decision, not an [option]: [false] for a rite
+ that has not implemented the rule, same as [creed] itself. *)
}
[@@deriving sexp]
diff --git a/lib/kernel/rite.ml b/lib/kernel/rite.ml
index a7d21d3..4999fc2 100644
--- a/lib/kernel/rite.ml
+++ b/lib/kernel/rite.ml
@@ -18,4 +18,5 @@ type ('s, 'r) t = {
date:Date.t ->
temporal_at:(Date.t -> ('s, 'r) Temporal.t) ->
Mass_formulary.t option * Citation.t list;
+ creed : temporal:('s, 'r) Temporal.t -> observed:'r Celebration.t -> date:Date.t -> bool;
}
diff --git a/lib/kernel/rite.mli b/lib/kernel/rite.mli
index 45f3ed6..39538d0 100644
--- a/lib/kernel/rite.mli
+++ b/lib/kernel/rite.mli
@@ -92,4 +92,19 @@ type ('s, 'r) t = {
temporal identity (the preceding Sunday's, for the ferial rule)
without re-implementing the temporal cycle -- the same shape
[transfer_target]'s own [occupant] callback established. *)
+ creed : temporal:('s, 'r) Temporal.t -> observed:'r Celebration.t -> date:Date.t -> bool;
+ (** Whether the Creed is said, post-Gospel/homily, at this day's Mass
+ (EF: RG 475-476). A [bool], not an [option]: this is a decision,
+ and a rite that has not implemented the rule returns [false]
+ explicitly rather than leaving the question unanswered.
+
+ [temporal] and [observed] are supplied for the same reason
+ [readings] gets both: a rubric like this one can turn on either
+ the day's TEMPORAL-cycle identity (e.g. "is this a Sunday, even
+ one a feast has displaced") or on the celebration actually
+ observed, and only the rite knows which. [date] is supplied for
+ the same reason [readings] gets it too -- a rubric keyed to an
+ Easter-relative window (e.g. "within the octave of Easter") needs
+ the civil date and the rite's own Easter to test it, and neither
+ [temporal] nor [observed] alone carries that arithmetic. *)
}