aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_of/precedence_of.mli
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 20:24:21 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 20:24:29 +0200
commite611e90b0b5433ddc9afdcf26cbf98a5c3a7be28 (patch)
treea6b49a21843078f965b330461108f6eddecb02a2 /lib/rites/rite_of/precedence_of.mli
parentce67fad69398047739a6ce89fb76f32b136b69f5 (diff)
downloadcolitur-e611e90b0b5433ddc9afdcf26cbf98a5c3a7be28.tar.gz
colitur-e611e90b0b5433ddc9afdcf26cbf98a5c3a7be28.zip
feat(of): transfer_target per Normae nn. 5 and 60
Three rules, in priority order: the Annunciation in Holy Week goes to Easter+8; any other solemnity on a Sunday of Advent, Lent or Easter goes to the following Monday (n. 5, which n. 60 defers to explicitly), except on Palm Sunday or Easter Sunday; otherwise the nearest later day free of Tabula entries 1-8. The n. 5 Monday rule is easy to miss -- n. 60 names it only by cross reference, and reading n. 60 alone yields a single search rule where the sources give three. Shaped to match Rite.t.transfer_target so a later phase wires it unchanged, with its own step bound: Calendar's round guard bounds rounds, not one call's internal search.
Diffstat (limited to 'lib/rites/rite_of/precedence_of.mli')
-rw-r--r--lib/rites/rite_of/precedence_of.mli25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/rites/rite_of/precedence_of.mli b/lib/rites/rite_of/precedence_of.mli
index e81d35e..4822411 100644
--- a/lib/rites/rite_of/precedence_of.mli
+++ b/lib/rites/rite_of/precedence_of.mli
@@ -85,3 +85,28 @@ val vigil_feast : Vocab_of.rank Precedence.candidate -> Slug.t option
(** The four functions assembled for {!Colitur_kernel.Precedence.resolve}. *)
val rules : (Vocab_of.season, Vocab_of.rank) Precedence.rules
+
+(** [transfer_target c origin occupant]: where an impeded solemnity goes.
+ Normae n. 60 and Normae n. 5 together -- n. 60 defers to n. 5 explicitly
+ ("servatis iis quae n. 5 statuuntur"), so they are one rule set:
+
+ - the Annunciation falling anywhere in Holy Week goes to Easter + 8, the
+ Monday after the Second Sunday of Easter (n. 60, a fixed destination);
+ - any other solemnity falling on a Sunday of Advent, Lent or Easter goes to
+ the following Monday (n. 5), except on Palm Sunday or Easter Sunday,
+ which n. 5 excludes and which fall through to the general rule;
+ - otherwise, the nearest later day free of Tabula entries 1-8 (n. 60).
+
+ Shaped to match {!Colitur_kernel.Rite.t.transfer_target} exactly so a later
+ phase wires it with no adaptation, and honours both obligations that field
+ states: the result is strictly later than [origin], and the search carries
+ its own step bound rather than relying on {!Colitur_kernel.Calendar}'s
+ round guard, which bounds rounds rather than one call's internal search.
+
+ @raise Failure if no free day is found within 400 days -- a structural
+ bound, not an appeal to the calendar's own shape. *)
+val transfer_target :
+ Vocab_of.rank Precedence.candidate ->
+ Date.t ->
+ (Date.t -> Vocab_of.rank Celebration.t) ->
+ Date.t