summaryrefslogtreecommitdiff
path: root/lib/rites/rite_of/precedence_of.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 19:52:46 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 19:52:46 +0200
commit29f1cc7e67e75d3f35747e5f6edd4e7ba430f97e (patch)
treeae8d6817bc2761ec30c1ae6d37a4629d1c4cc1c0 /lib/rites/rite_of/precedence_of.ml
parentebbf88dae0110e9cb00935861fae1857107260cc (diff)
downloadcolitur-29f1cc7e67e75d3f35747e5f6edd4e7ba430f97e.tar.gz
colitur-29f1cc7e67e75d3f35747e5f6edd4e7ba430f97e.zip
feat(of): admit and vigil_feast, both argued degenerate
admit returns the empty list because disposition never returns Commemorate; vigil_feast returns None because the OF has no vigil office that its feast's movement could orphan -- 'of-nativity-vigil' is a Mass formulary of the solemnity, not a separate celebration. Both are argued from the sources rather than stubbed, and Precedence_of.rules now assembles the four functions the kernel resolver consumes.
Diffstat (limited to 'lib/rites/rite_of/precedence_of.ml')
-rw-r--r--lib/rites/rite_of/precedence_of.ml40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/rites/rite_of/precedence_of.ml b/lib/rites/rite_of/precedence_of.ml
index 5ceaa11..fb26d64 100644
--- a/lib/rites/rite_of/precedence_of.ml
+++ b/lib/rites/rite_of/precedence_of.ml
@@ -200,3 +200,43 @@ let disposition ~(winner : Vocab_of.rank Precedence.candidate)
| Vocab_of.Festum | Vocab_of.Memoria_obligatoria | Vocab_of.Memoria_ad_libitum
| Vocab_of.Feria ->
Precedence.Omit
+
+(* Normae n. 60's "Reliquae celebrationes eo anno omittuntur", read together
+ with the whole Tabula: nothing in the OF is admitted as a commemoration of
+ another day's office, so this returns the empty list unconditionally.
+
+ NOT A STUB. This is [disposition]'s own rule expressed at the second of the
+ two places the kernel asks about it: [disposition] never returns
+ [Commemorate], so Precedence.resolve never offers this function a candidate
+ it could admit even if it wanted to. Returning [] is therefore the only
+ answer consistent with the rubric, and every losing candidate is reported in
+ [resolution.omitted] with its reason -- nothing is dropped silently.
+
+ All three parameters are unread, for that reason. The EF's own admit reads
+ all of them (RG 108-113); the OF's has nothing to decide. *)
+let admit ~(observed : Vocab_of.rank Precedence.candidate)
+ ~(temporal : Vocab_of.rank Precedence.candidate)
+ (_ : (Vocab_of.rank Precedence.candidate * Precedence.privilege * int) list) :
+ (Vocab_of.rank Precedence.candidate * Precedence.privilege) list =
+ ignore observed;
+ ignore temporal;
+ []
+
+(* RG 33's third omission trigger is EF-only. The OF has no vigil OFFICE that
+ can be orphaned by its feast moving: Normae n. 11 gives solemnities First
+ Vespers and n. 13 denies them to feasts, but neither creates a separate
+ celebration that could survive or fail independently of the day it precedes.
+ The one OF celebration whose slug says "vigil" -- the Nativity's, which
+ Temporal_of emits as "of-nativity-vigil" -- is a MASS FORMULARY of the
+ solemnity itself (IGMR n. 346's own Christmas-Mass series: ad vigiliam, in
+ nocte, in aurora, in die), not a distinct celebration.
+
+ So [None] unconditionally, and Calendar's RG 33 suppression pass never
+ fires for this rite. *)
+let vigil_feast (_ : Vocab_of.rank Precedence.candidate) : Slug.t option = None
+
+(* The assembled record Precedence.resolve consumes. Kept here rather than in
+ rite_of.ml so a reader sees the four functions and their citations
+ together. *)
+let rules : (Vocab_of.season, Vocab_of.rank) Precedence.rules =
+ { band; disposition; admit; vigil_feast }