summaryrefslogtreecommitdiff
path: root/lib/kernel
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-21 22:54:13 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-21 22:54:13 +0200
commit28dc226a31fa0cc72432f5607ab5cd74503ef43d (patch)
tree35dc78657b108a5b8e5d20092a9db4c00d609284 /lib/kernel
parent384b0789c0f4d9beb936080a5592bb4aa6134295 (diff)
downloadcolitur-28dc226a31fa0cc72432f5607ab5cd74503ef43d.tar.gz
colitur-28dc226a31fa0cc72432f5607ab5cd74503ef43d.zip
fix(kernel,ef): a votive Mass is not the day's own -- add Mass_formulary.Votive
Mass_formulary.source was missing a case for a Mass said IN PLACE of the day's own office's Mass while that office is itself kept unchanged -- RG 309(a) and RG 431(e) both classify the RG 78 Saturday Mass of Our Lady this way, in the Missal's own words, as a "Missa votiva IV classis... de B. Maria Virg.", not as the day's own office's Mass. The Latin Mass Society Ordo (docs/research/ordo/lms-ordo-2024-2025.pdf) witnesses it directly, printing that day as "V Mass of BVM". The BVM-Saturday branch in Lectionary_ef.readings was tagged Own_slug for lack of a better constructor when Task 2 landed, flagged there as a judgement call rather than a specified answer. That call was wrong: left as Own_slug, a future comparison against the LMS Ordo (a later task in this plan) would read every BVM Saturday as a manufactured divergence between colitur's "own" Mass and the Ordo's votive one. Retagged to Votive; said is unchanged (still the day's own, reused ferial, temporal slug) since the office itself is unaffected, only the Mass said for it. Added the new constructor's source_to_string case ("votive") and its own test row, and pinned the branch itself in test_lectionary_ef.ml's formulary cases at 1 August 2026, verified directly against the resolver rather than assumed. Both this session's own drifted pins that the earlier commit inherited from the task brief are unaffected by this change, and both are re-confirmed independently correct in this round: dune test and the exhaustive sweep are green, and colitur day stays byte-identical against the pre-fix-round binary.
Diffstat (limited to 'lib/kernel')
-rw-r--r--lib/kernel/mass_formulary.ml3
-rw-r--r--lib/kernel/mass_formulary.mli16
2 files changed, 15 insertions, 4 deletions
diff --git a/lib/kernel/mass_formulary.ml b/lib/kernel/mass_formulary.ml
index 8151720..cb3532b 100644
--- a/lib/kernel/mass_formulary.ml
+++ b/lib/kernel/mass_formulary.ml
@@ -1,4 +1,4 @@
-type source = Proper | Own_slug | Preceding_sunday | Common [@@deriving sexp]
+type source = Proper | Own_slug | Preceding_sunday | Common | Votive [@@deriving sexp]
type t = { said : Slug.t; via : source } [@@deriving sexp]
let source_to_string = function
@@ -6,3 +6,4 @@ let source_to_string = function
| Own_slug -> "own"
| Preceding_sunday -> "preceding-sunday"
| Common -> "common"
+ | Votive -> "votive"
diff --git a/lib/kernel/mass_formulary.mli b/lib/kernel/mass_formulary.mli
index caea3eb..a2faf64 100644
--- a/lib/kernel/mass_formulary.mli
+++ b/lib/kernel/mass_formulary.mli
@@ -15,12 +15,22 @@ type source =
| Own_slug (** the lectionary's entry for the day's own slug *)
| Preceding_sunday (** a weekday with no proper resumes the preceding Sunday *)
| Common (** a saint's assigned Common *)
+ | Votive
+ (** a Mass said IN PLACE of the day's own office's Mass, the office
+ itself being kept unchanged -- RG 309(a): "in Ecclesia universa,
+ Missae quae pro sancta Maria in sabbato, iuxta temporum
+ diversitatem, in Missali assignantur", corroborated by RG 431(e)'s
+ own classification of that Mass as "Missa votiva IV classis ...
+ de B. Maria Virg." The office/Mass split this constructor exists
+ to name is general (any rite may say a votive Mass on a day whose
+ OFFICE is not itself votive), even though EF's only witness today
+ is the RG 78/309(a) Saturday Mass of Our Lady. *)
[@@deriving sexp]
type t = { said : Slug.t; via : source } [@@deriving sexp]
-(** The slug whose Mass is said. For {!Proper} and {!Own_slug} this is the day's
- own; for {!Preceding_sunday} it is that Sunday's TEMPORAL slug; for
- {!Common} it is the Common's own id. *)
+(** The slug whose Mass is said. For {!Proper}, {!Own_slug} and {!Votive}
+ this is the day's own; for {!Preceding_sunday} it is that Sunday's
+ TEMPORAL slug; for {!Common} it is the Common's own id. *)
val source_to_string : source -> string