aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rites/rite_ef/precedence_ef.ml36
-rw-r--r--lib/rites/rite_ef/precedence_ef.mli27
-rw-r--r--test/test_precedence_ef.ml22
3 files changed, 64 insertions, 21 deletions
diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml
index 06bbf7c..ff6f991 100644
--- a/lib/rites/rite_ef/precedence_ef.ml
+++ b/lib/rites/rite_ef/precedence_ef.ml
@@ -383,20 +383,34 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate)
I-class vigil (Nativity, Pentecost) impeded on its own Sunday/
I-class-feast terms would wrongly transfer instead of vanishing. *)
Precedence.Omit
- else if cel.Celebration.rank = Class1 then
- (* RG 95: only I-class feasts have the right of translation. This is the
+ else if
+ cel.Celebration.rank = Class1
+ && not (is_sunday_slug (Slug.to_string cel.Celebration.slug))
+ then
+ (* RG 95 (register lines 323, 363): only I-class FEASTS have the right
+ of translation -- RG 91's own table lists Sundays as a separate row
+ (entry 6, register line 332) from feasts (entries 11-13, register
+ lines 337-339), so a Sunday is never a "feast" in RG 95's sense, and
+ [is_sunday_slug] (the same marker RG 33's [impedes_vigil] and RG
+ 109(a)'s [privilege_of] already use) excludes it here. This is the
branch that completes Task 7's All Souls fix (register line 334, RG
- 91 entry 8): All Souls is I class and not a vigil, so once it loses
- to an occurring Sunday it reaches here and transfers -- to 3
- November per the register, but WHERE it lands is
- Rite.transfer_target's job (RG 96), not this function's; disposition
- only says THAT it moves. *)
+ 91 entry 8): All Souls is I class, not a vigil, and not a Sunday
+ slug, so once it loses to an occurring Sunday it still reaches here
+ and transfers -- to 3 November per the register, but WHERE it lands
+ is Rite.transfer_target's job (RG 96), not this function's;
+ disposition only says THAT it moves. *)
Precedence.Transfer
else
- (* RG 95's other branch, for everything below I class: "aut
- commemorantur aut penitus omittuntur" -- commemorated or wholly
- omitted. Which of the two survives is RG 108-111's admission count
- ([admit], below), not this function's decision; this only opens the
+ (* RG 95's other branch: "aut commemorantur aut penitus omittuntur" --
+ commemorated or wholly omitted. Reached by everything below I class,
+ AND by an impeded I-class Sunday (excluded from the [Transfer] branch
+ above): RG 109(a) (register line 374) lists "of a Sunday" as a
+ privileged commemoration category, which presupposes an impeded
+ Sunday stays put rather than moving to another day the way a feast
+ does -- [privilege_of] tags it [Privileged] via the same
+ [is_sunday_slug] marker, with no further code needed here. Which of
+ commemorate/omit survives is RG 108-111's admission count ([admit],
+ below), not this function's decision; this only opens the
commemoration, tagged with its real RG 109 privilege via
[privilege_of].
diff --git a/lib/rites/rite_ef/precedence_ef.mli b/lib/rites/rite_ef/precedence_ef.mli
index 9c3af95..e1b3638 100644
--- a/lib/rites/rite_ef/precedence_ef.mli
+++ b/lib/rites/rite_ef/precedence_ef.mli
@@ -78,19 +78,26 @@ val sunday_marker : string
- a [Class1] or [Class2] loser whose slug marks it a vigil ({!vigil_suffix})
is [Omit] when the winner is any Sunday ({!sunday_marker}) or itself
[Class1] (RG 33 -- entirely omitted, not merely commemorated);
- - any other [Class1] loser is [Transfer] (RG 95 -- only I class has the
- right of translation; this is also what moves All Souls, register
- line 334, once it loses to an occurring Sunday -- WHERE it lands is
- {!Rite.t.transfer_target}'s job, not this function's);
- - everything else is [Commemorate], carrying its real RG 109 privilege
- (see {!admit} below).
+ - any other [Class1] loser that is NOT a Sunday ({!sunday_marker}) is
+ [Transfer] (RG 95, register lines 323, 363 -- only I-class FEASTS have
+ the right of translation; RG 91's own table lists Sundays as a
+ separate row, entry 6, from feasts, entries 11-13, so a Sunday is
+ never a "feast" in RG 95's sense and does not transfer even when
+ impeded by a higher I-class day. This is also what moves All Souls,
+ register line 334, once it loses to an occurring Sunday -- WHERE it
+ lands is {!Rite.t.transfer_target}'s job, not this function's);
+ - everything else -- including an impeded I-class Sunday -- is
+ [Commemorate], carrying its real RG 109 privilege (see {!admit}
+ below); RG 109(a) (register line 374) lists "of a Sunday" as a
+ privileged commemoration category precisely because an impeded Sunday
+ stays put rather than moving to another day.
Total over every winner/loser pair {!Precedence.resolve} or {!Calendar}
can construct: [Vocab_ef.rank] (RG 8) and {!Celebration.status} are both
- closed variants, so the four cases above exhaust every representable
- shape -- there is no fifth, "unclassified" case the way {!band} needs
- one, because this function's own return type has no such slot to fall
- into by accident. *)
+ closed variants, so the cases above exhaust every representable shape --
+ there is no fifth, "unclassified" case the way {!band} needs one,
+ because this function's own return type has no such slot to fall into
+ by accident. *)
val disposition :
winner:Vocab_ef.rank Precedence.candidate ->
loser:Vocab_ef.rank Precedence.candidate ->
diff --git a/test/test_precedence_ef.ml b/test/test_precedence_ef.ml
index f3fd357..09c41fd 100644
--- a/test/test_precedence_ef.ml
+++ b/test/test_precedence_ef.ml
@@ -318,6 +318,28 @@ let disposition_cases =
cand "ef-nativity",
cand ~origin:P.Sanctoral ~layer:PE.universal_layer "ef-local-i-class-feast",
"Transfer" );
+ (* Fix round 1 (post-Task-9 review): RG 95 (register lines 323, 363)
+ restricts the right of translation to I-class FEASTS -- RG 91's own
+ table lists Sundays as a separate row (entry 6, register line 332)
+ from feasts (entries 11-13, lines 337-339) -- so an impeded I-class
+ Sunday must NOT transfer, unlike the plain I-class feast row above:
+ same [Class1] rank, same kind of winner, the ONLY difference is that
+ this loser's slug carries [PE.sunday_marker]. RG 109(a) (register
+ line 374) confirms this from the other direction: "of a Sunday" is a
+ privileged commemoration category, which presupposes an impeded
+ Sunday stays put rather than moving to another day the way a feast
+ does. Sourced from [Temporal_ef.temporal]'s own real output (Advent I
+ Sunday 2026, Class1, "ef-advent-sunday-1"), the same coupling-safety
+ reason [of_temporal]'s other callers use it -- this is also a
+ realistic shape: 8 December falls on an Advent Sunday in 2024, 2030
+ and 2041 (Immaculate Conception, RG 91 entry 4, outranking entry 6),
+ and 24 December falls on Advent IV in 2023, 2028, 2034 and 2045 (the
+ Nativity Vigil, also entry 5 outranking entry 6). *)
+ ( "RG95/RG109(a): an impeded I-class SUNDAY does NOT transfer -- it is \
+ Commemorated and Privileged",
+ cand ~origin:P.Sanctoral ~layer:PE.universal_layer "ef-immaculate-conception",
+ of_temporal (T.advent_start 2026),
+ "Commemorate(Privileged)" );
(* RG 33 -- register line 383-384: a I/II-class vigil impeded by any
Sunday or a I-class feast is entirely OMITTED, not commemorated. The
vigil is sourced from [Temporal_ef.temporal]'s own real output (as