aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_precedence_ef.ml96
1 files changed, 68 insertions, 28 deletions
diff --git a/test/test_precedence_ef.ml b/test/test_precedence_ef.ml
index 2f08864..9bd9b7f 100644
--- a/test/test_precedence_ef.ml
+++ b/test/test_precedence_ef.ml
@@ -523,9 +523,13 @@ let privilege_cases =
[Temporal_ef]'s own third-Sunday-of-September rule: first Sunday of
September 2026 is the 6th, +14 days = 20th, +3 = 23rd), sourced from
[Temporal_ef.temporal] itself, Class2. Not a Sunday, not Class1, not
- within the Nativity octave, not an Advent/Lent Ember day (a DIFFERENT
- Ember set, deliberately excluded by (d) -- see the negative row
- below), not a plain Advent/Lent/Passiontide feria slug either. *)
+ within the Nativity octave, not a plain Advent/Lent/Passiontide feria
+ slug either -- and, unlike the Advent/Lent Ember rows below, its own
+ slug ("ef-september-ember-wed") never starts with any of (e)'s own
+ [alp_feria_prefixes] ("ef-advent-"/"ef-lent-"/"ef-passiontide-"), so
+ (d) is this candidate's ONLY route to [Privileged] -- a genuine,
+ still-necessary distinction from (e), unlike the Advent/Lent Ember
+ case below (fix round 1). *)
( "(d) a September Ember day is privileged",
cand "ef-nativity",
of_temporal (mk 2026 9 23),
@@ -542,36 +546,49 @@ let privilege_cases =
cand "ef-nativity",
of_temporal (off (-41)),
"Commemorate(Privileged)" );
- (* Negative, RG 109(d) vs (e)'s own boundary: the Advent and Lent Ember
- sets are ALSO II-class ferias of Advent/Lent by RG 91 (entry 18), and
- their slugs ("ef-advent-ember-*", "ef-lent-ember-*") share (e)'s own
- season prefixes -- but RG 109 privileges ONLY the September set (d),
- leaving these two ordinary. 16 Dec 2026 is the Advent Ember Wednesday
- (independently derived: Advent I 2026 is 29 Nov, +14 days = 13 Dec,
- +3 = 16 Dec); the Lent Ember Wednesday is the same date [off (-39)]
- already used by the entry-18 [band] row above. Both sourced from
- [Temporal_ef.temporal]. If [privilege_of] relied on the season prefix
- alone without excluding Ember slugs, both would wrongly come back
- [Privileged] -- the exact trap this pair of rows guards against.
+ (* CHANGED, fix round 1 (F1/F2/F6): these two rows used to be titled
+ "boundary: ... is NOT privileged (only September is, RG109(d))" and
+ expected [Omit] (a Task-16-pass reading that treated RG 109(e)'s bare
+ "feriis Adventus, Quadragesimae" as tacitly excluding the Advent and
+ Lent Ember sub-days, by analogy with (d)'s own separate, explicit
+ September carve-out). Review round 1 (F1) reproduced the real
+ consequence directly -- 1900-12-21, an Advent Ember Friday, lost its
+ own commemoration entirely, while an ordinary (lower-solemnity,
+ non-Ember) Advent feria the same week kept its commemoration --
+ backwards on any reading, and traced it to this exact
+ misclassification (F2).
- CHANGED, Task 16: these used to expect [Commemorate(Ordinary)] --
- "not privileged" originally meant "commemorated, but without RG 109's
- higher liturgical honours". Now that a TEMPORAL-origin [Ordinary]
- loser is Task 16's own [Omit] branch (see precedence_ef.ml), "not
- privileged" for a temporal candidate means "not commemorable at all"
- -- a sharper, more direct assertion of the same underlying
- [privilege_of] classification, via the one vantage point available
- on that private function. *)
- ( "boundary: an Advent Ember day is NOT privileged (only September is, \
- RG109(d)) -- and being temporal+ordinary, TASK16 omits it entirely",
+ Corrected reading (precedence_ef.ml's own [privilege_of], (e)
+ branch, carries the full argument): RG 91's TABLE needs an explicit
+ "exceptis feriis Quatuor Temporum" at its own entries 22 and 25 to
+ keep Ember days from being double-listed against their own entry 18
+ -- an exception that would be unnecessary drafting if "feriae
+ Adventus"/"feriae Quadragesimae" did not ALREADY include their Ember
+ sub-days by default. RG 109(e) carries no such "exceptis" clause, so
+ its bare text is read at that same default, INCLUSIVE scope: the
+ Advent and Lent Ember ferias ARE privileged under (e), not merely
+ commemorable-but-ordinary. (d)'s own separate existence survives
+ this reading intact -- September Ember days sit outside Advent/Lent/
+ Passiontide under ANY reading, so (d) remains the ONLY way they
+ reach [Privileged], the point the row immediately above this one
+ makes explicit.
+
+ 16 Dec 2026 is the Advent Ember Wednesday (independently derived:
+ Advent I 2026 is 29 Nov, +14 days = 13 Dec, +3 = 16 Dec); the Lent
+ Ember Wednesday is the same date [off (-39)] already used by the
+ entry-18 [band] row above. Both sourced from [Temporal_ef.temporal],
+ not hand-typed, for the same coupling-safety reason every
+ [of_temporal] row in this file uses it. *)
+ ( "(e), corrected fix round 1: an Advent Ember day is ALSO privileged, \
+ not excluded from (e)",
cand "ef-nativity",
of_temporal (mk 2026 12 16),
- "Omit" );
- ( "boundary: a Lent Ember day is NOT privileged (only September is, \
- RG109(d)) -- and being temporal+ordinary, TASK16 omits it entirely",
+ "Commemorate(Privileged)" );
+ ( "(e), corrected fix round 1: a Lent Ember day is ALSO privileged, \
+ not excluded from (e)",
cand "ef-nativity",
of_temporal (off (-39)),
- "Omit" );
+ "Commemorate(Privileged)" );
(* Negative, RG 109(f)'s own boundary: the Minor Litanies/Rogations
(Monday/Tuesday before Ascension, RG 87 -- [Temporal_ef.temporal]
DOES compute these, unlike the Major Litanies RG 109(f) actually
@@ -623,6 +640,17 @@ let privileged_hi = cand ~rank:V.Class2 "ef-privileged-hi"
thing under test, not merely how many. *)
let ordinary_lowest = cand ~rank:V.Class4 "ef-ordinary-lowest"
+(* Class3, tagged [Ordinary] -- fix round 1, F7: the RG 111(b) rank-floor
+ witness [admit_cases] was missing. [ordinary_hi] above is already Class2,
+ so every existing II-class-Sunday row here passes whether or not
+ [admit]'s "de festo II classis" filter is even present -- reverting that
+ filter would only redden [test_oracle.ml], not this file, which is
+ exactly the coverage gap the review round found. This candidate is the
+ ONLY thing due on the Sunday row below, so a version of [admit] without
+ the rank floor would (wrongly) admit it on pure "best available"
+ dignity, same as it would have admitted [ordinary_hi]. *)
+let ordinary_class3 = cand ~rank:V.Class3 "ef-ordinary-class3"
+
let observed_class1 = cand "ef-nativity" (* Class1 by [cand]'s own default. *)
let observed_class2_sunday = an_ordinary_sunday (* Class2, slug carries "-sunday". *)
let observed_class2_other = cand ~rank:V.Class2 "ef-other-class2-day" (* Class2, no "-sunday". *)
@@ -658,6 +686,18 @@ let admit_cases =
observed_class2_sunday,
[ (ordinary_hi, P.Ordinary); (privileged_lo, P.Privileged) ],
[ "ef-privileged-lo" ] );
+ (* RG 111(b)'s own rank floor ("scilicet DE FESTO II CLASSIS"), fix
+ round 1 F7: a Class3 ORDINARY candidate -- no privileged rival due,
+ so the pre-fix-round code's "no privileged? take the best of what's
+ left" fallback would (wrongly) admit it -- is admitted NOTHING. The
+ slot is reserved for a II-class candidate specifically; a III-class
+ ordinary one has no standing for it at all, unlike "other II class"
+ below, which has no such restriction. *)
+ ( "II-class Sunday, sole candidate is an ORDINARY Class3 (not \
+ \"de festo II classis\") -> admitted nothing, not the best available",
+ observed_class2_sunday,
+ [ (ordinary_class3, P.Ordinary) ],
+ [] );
(* RG 111: "other II class: one" -- no privilege override, the exact
asymmetry the brief and precedence_ef.ml's own [admit] comment flag:
same candidate pair as the II-class-Sunday row above, OPPOSITE