summaryrefslogtreecommitdiff
path: root/lib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel')
-rw-r--r--lib/kernel/celebration.mli13
-rw-r--r--lib/kernel/validate.ml18
2 files changed, 21 insertions, 10 deletions
diff --git a/lib/kernel/celebration.mli b/lib/kernel/celebration.mli
index a3c2960..85f7af4 100644
--- a/lib/kernel/celebration.mli
+++ b/lib/kernel/celebration.mli
@@ -1,7 +1,14 @@
(** Whether this celebration can be the observed day at all. The 1960 reform
- reduced many feasts to a bare commemoration; they retain a rank (RG 111
- orders admitted commemorations by dignity) but can never be observed. NOT
- a fifth rank: RG 8 fixes the classes at four. *)
+ reduced many feasts to a bare commemoration; they retain a rank but can
+ never be observed. NOT a fifth rank: RG 8 fixes the classes at four.
+
+ What the retained rank is FOR (corrected 2026-08-12): this line formerly
+ read "RG 111 orders admitted commemorations by dignity". Ordering is no
+ longer done by rank at all -- it moved to the rite's own table of
+ precedence (RG 113) in commit ea22ad2, and a bare commemoration has no
+ row in that table. The rank remains load-bearing for ADMISSION: RG 111(b)
+ reserves a II-class Sunday's single slot "de festo II classis", a floor
+ read off this rank directly. *)
type status = Feast | Commemoration_only [@@deriving sexp]
(** A celebration. Parameterised by the rite's rank type only. *)
diff --git a/lib/kernel/validate.ml b/lib/kernel/validate.ml
index 24adcd8..ffeb89e 100644
--- a/lib/kernel/validate.ml
+++ b/lib/kernel/validate.ml
@@ -293,13 +293,17 @@ let run (rite : ('s, 'r) Rite.t) (layer : 'r Layer.t) ~year =
"transfer placement did not reach a fixed point within the round guard (RG 96-98)";
(* "admission": re-offer this day's own admitted commemorations
back to [rite.rules.admit] and require the exact same set back.
- [origin] is reconstructed as [Sanctoral] uniformly:
- {!Liturgical_day.t} does not retain a commemoration's original
- origin, and the real EF [admit] (precedence_ef.ml) reads only
- rank and slug from a candidate, never [origin], so this
- reconstruction is exact for it; documented in validate.mli as
- the one place a rite whose [admit] DOES consult [origin] could
- see a false negative from this check. *)
+ [origin] is RECOVERED, not fabricated -- see the fuller note
+ below on [as_candidates]. It was formerly reconstructed as
+ [Sanctoral] uniformly, justified by the claim that the real EF
+ [admit] reads only rank and slug and never [origin]. That claim
+ is now FALSE: since ea22ad2 the EF [admit] orders by [band]
+ (RG 113), and [band] does read [origin] via [is_temporal], so a
+ temporal-origin commemoration relabelled [Sanctoral] would be
+ scored on the wrong table entry. The recovery below is exact,
+ not a heuristic: [resolve] builds exactly one temporal
+ candidate per day, so a slug match against the day's own
+ temporal office identifies it unambiguously. *)
let observed_candidate : 'r Precedence.candidate =
{ Precedence.cel = d.Liturgical_day.observed; origin = Precedence.Sanctoral }
in