summaryrefslogtreecommitdiff
path: root/test/test_oracle.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_oracle.ml')
-rw-r--r--test/test_oracle.ml125
1 files changed, 107 insertions, 18 deletions
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index c0badfe..3a9e499 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -517,25 +517,108 @@ let m3_dates = [ "2027-05-03" ]
sourced from lectio's independently-fixed generator; the divergence no
longer occurs on either 2026-01-28 or 2027-01-28). *)
-(* M5 -- register §6's OWN already-open item, independently confirmed by
- the oracle: "Major Litanies (25 April, RG 80) are not yet computed" --
- missalemeum's commemoration "Pro rogationibus" ("for the Rogations") on
- St Mark's day (25 April, the Major Litanies' fixed date) is exactly the
- missing office. Not a new finding; recorded here so the automated
- comparator does not report it as an unexplained mismatch, and cross-
- referenced from the register so a reader sees both. Verdict missalemeum
- (colitur is missing a real, cited office; register §6 already tracks
- it). Only ONE date below, not two: 25 April 2026 is a Saturday (Mark
- wins outright, colitur's commemoration list is empty where the oracle's
- is not -- a visible presence gap); 25 April 2027 is a Sunday, where the
- Sunday wins on BOTH sides and each side's own single slot goes to a
- DIFFERENT candidate (colitur: Mark himself, admitted under RG 111(b)'s
- "de festo II classis"; missalemeum: the Major Litanies) -- both
- non-empty, same count, so this comparator's deliberately-not-slug-
- identity axes cannot see that year's instance at all (see the task
- report). *)
+(* M5 -- CORRECTED (ef-major-litanies task): the Major Litanies (RG 80,
+ Caput X "De Litaniis maioribus et minoribus") are now built
+ (Rite_ef.Precedence_ef's own [major_litanies_slug]/[disposition]/
+ [privilege_of] RG 109(f) branch/[transfer_target] RG 80 branch,
+ data/ef/adjustments.sexp's matching [Add] entry). This note's own
+ PRIOR text (struck below, kept for the record of what was corrected)
+ claimed missalemeum's single admitted commemoration on 25 April 2027
+ (the Sunday-conflict shape) was "the Major Litanies" -- CHECKED AGAINST
+ THE RAW FIXTURE ROW DIRECTLY while adjudicating this task's own new
+ divergence (test/fixtures/missalemeum-ef-2026-2027.txt, the 2027-04-25
+ line: "...|IV Sunday after Easter|-|St. Mark|Pro rogationibus|1|
+ sancti:04-25:2:r") and found BACKWARDS: missalemeum's own
+ [commemorations] field for that row is "St. Mark", and "Pro
+ rogationibus" (the Litanies) is the one listed in [displaced]. The
+ note had the two swapped -- a genuine source-fidelity slip in this
+ file's own prior authorship, not a re-reading of a primary document,
+ but corrected on the same "read positively, quote it" discipline this
+ project applies to the primary scans. See [M20] below for the fix
+ this correction actually motivates (2027's own now-real divergence,
+ colitur=Litanies vs missalemeum=Mark, adjudicated separately).
+
+ What THIS entry (M5) still covers, unchanged in kind: 25 April 2026 (an
+ ordinary, non-Sunday year -- Mark wins the day outright on both sides,
+ uncontested). Both engines now admit a commemoration there (colitur:
+ [major-litanies]; missalemeum: "Pro rogationibus") -- PRESENCE now
+ agrees (closing the register §6 gap this entry used to track), but the
+ two engines name the SAME real-world observance in different registers:
+ colitur's own English descriptive name (data/ef/adjustments.sexp's own
+ honestly-flagged, not-primary-sourced "The Major Litanies") against
+ missalemeum's Latin-ish "Pro rogationibus" ("for the Rogations") --
+ never going to match as literal strings, and not a rubric dispute at
+ all (RG 80/81 do not prescribe an English title for this observance;
+ this comparator's own [identity_diff] can only ever compare exact
+ strings, the same declared limit [M15]/[M18] already document for
+ temporal-origin candidates, now hit here for a different structural
+ reason -- a real candidate on both sides, just two different
+ vocabularies). Verdict colitur (the identity axis's own declared limit,
+ not an error): {!m5_commemoration_matches} pins WHICH candidate colitur
+ actually admits here, not merely that some [Comm_identity_mismatch]
+ diff exists, the same discipline [M19]'s own identity guard already
+ established. *)
let m5_dates = [ "2026-04-25" ]
+let m5_commemoration_matches (c : colitur_row) =
+ match c.c_commemorations with [ (slug, _, _, _) ] -> String.equal slug "major-litanies" | _ -> false
+
+(* M20 -- ef-major-litanies task, NEW. 25 April 2027: the Sunday-conflict
+ shape (RG 80's own condition -- 25 April is Easter Sunday or Monday --
+ does NOT fire this year, so the Litanies stay put on 25 April itself,
+ which this year happens to be an ordinary II-class Sunday, RG 91 entry
+ 15). St Mark (II class, RG 91 entry 16) also loses to the Sunday. Two
+ losing candidates, ONE slot (RG 111(b)): colitur admits the Litanies,
+ NOT Mark; missalemeum's raw fixture row shows the reverse (verified
+ directly, not inferred -- see [M5]'s own corrected note above for the
+ exact line).
+
+ ADJUDICATED: verdict colitur, RG 109(f) + RG 111(b) (docs/research/
+ rules-register.md §4 "Commemorations", both primary-source-verified
+ word for word, all three documents): RG 109(f), Caput XVI "De
+ Commemorationibus", places "de Litaniis maioribus, in Missa" in the
+ SAME closed list as (a)-(e), with equal grammatical standing -- no
+ textual qualifier narrows its privilege relative to theirs. RG 111(b),
+ same chapter: "in dominicis II classis, una tantum admittitur
+ commemoratio, scilicet de festo II classis, QUÆ TAMEN OMITTITUR SI
+ COMMEMORATIO PRIVILEGIATA FACIENDA SIT" -- the II-class-feast
+ commemoration is DROPPED if a privileged commemoration is due, full
+ stop; the clause names no table-order qualifier ("whichever ranks
+ higher"), only the categorical fact of a privileged commemoration being
+ due. This is the SAME mechanism {!Precedence_ef.admit}'s [Class2, true]
+ branch already implements and this project's OWN prior work already
+ primary-source-verified for this exact clause (precedence_ef.ml's own
+ "Fix, Task 16" comment) -- not new code, not a special case written for
+ the Litanies; St Mark simply meets the same fate any other ordinary
+ Class2 commemoration meets when a privileged one is also due that
+ Sunday (RG 16(a)'s Transfiguration/Sixtus shape is the nearest existing
+ witness, though there the privileged side wins the DAY, not merely the
+ commemoration slot).
+
+ HONESTLY FLAGGED, not overclaimed: this is the FIRST real, independent
+ (non-synthetic) data point this codebase has for "an ordinary Class2
+ feast candidate and a privileged non-feast commemoration candidate,
+ both losing to the identical Sunday" -- every other witness for
+ [admit]'s Class2-Sunday privilege-override branch in this suite's own
+ test_precedence_ef.ml is hand-built (real slugs/ranks, but a
+ constructed collision, not one the calendar itself produces). Read
+ plainly, RG 111(b)'s text supports colitur's outcome; missalemeum's own
+ divergence here is consistent with this project's ALREADY-DOCUMENTED
+ pattern of RG 108-111 gaps in that oracle (M1: RG 33's Sunday omission
+ not implemented; M8: RG 109(a)+RG 111(a) not implemented for an impeded
+ I-class Sunday; M10: RG 109(e) inconsistently applied) -- plausibly one
+ more instance of the same generator not modelling RG 109(f)'s privilege
+ for this one rare, single-date observance, not evidence the general
+ RG 111(b) mechanism itself is mis-read. Recorded as an adjudicated
+ verdict, not a certainty: if a future primary-source pass finds
+ textual grounds narrowing RG 109(f)'s privilege specifically (e.g. a
+ clause this task's own scan reading did not surface), this entry is
+ the one to revisit first. *)
+let m20_dates = [ "2027-04-25" ]
+
+let m20_commemoration_matches (c : colitur_row) =
+ match c.c_commemorations with [ (slug, _, _, _) ] -> String.equal slug "major-litanies" | _ -> false
+
(* M6 -- REMOVED, ef-rebootstrap (2026-08-12): see data/ef/expected-
divergences-missalemeum.sexp's own "FIVE MORE REMOVED" note. Eusebius
Confessor (14 Aug) is now present in data/ef/sanctoral.sexp
@@ -852,7 +935,8 @@ let layer_m_reason (c : colitur_row) (_o : oracle_row) diffs =
observes is temporal-origin, same root cause as M1/M2 above. *)
else if List.mem c.c_date m3_dates && subset diffs [ Colour_f; Observed_identity_unresolved ] then
Some "M3"
- else if List.mem c.c_date m5_dates && diffs = [ Comm_presence ] then Some "M5"
+ else if List.mem c.c_date m5_dates && diffs = [ Comm_identity_mismatch ] && m5_commemoration_matches c then
+ Some "M5"
else if List.mem c.c_date m8_dates && diffs = [ Comm_presence ] then Some "M8"
else if List.mem c.c_date m10_dates && diffs = [ Comm_presence ] then Some "M10"
else if List.mem c.c_date m11_dates && diffs = [ Comm_presence ] then Some "M11"
@@ -880,6 +964,11 @@ let layer_m_reason (c : colitur_row) (_o : oracle_row) diffs =
else if diffs = [ Observed_identity_unresolved ] then Some "M18"
else if List.mem c.c_date m19_dates && diffs = [ Comm_presence ] && m19_commemoration_matches c then
Some "M19"
+ else if
+ List.mem c.c_date m20_dates
+ && subset diffs [ Comm_identity_mismatch; Observed_identity_unresolved ]
+ && m20_commemoration_matches c
+ then Some "M20"
else None
(* ---------------------------------------------------------------------- *)