aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_oracle.ml83
1 files changed, 72 insertions, 11 deletions
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index ae5c396..7068af9 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -726,25 +726,86 @@ let m16_dates = [ "2026-03-27" ]
entry needed at all -- removed, not re-adjudicated to a different
verdict, since there is no longer a divergence to name. *)
+(* M18 -- ef-rg112-rg110 task: the gap this file's own header now names under
+ "COMMEMORATION IDENTITY", restated for the OBSERVED axis. colitur's own
+ observed celebration carries an English name ({!Celebration.t}.names)
+ ONLY for a SANCTORAL-origin day (a saint's feast winning outright); a
+ TEMPORAL-origin one -- an ordinary Sunday, a feria, a movable named feast
+ including Holy Family itself -- never does ({!Rite_ef.Temporal_ef}'s own
+ [build] has no [en "..."] string anywhere in it, this file's own header
+ again). That is the OVERWHELMING majority of days in any calendar (saints'
+ feasts are common, but far from every day), so this is a single
+ STRUCTURAL predicate -- [Observed_identity_unresolved] alone, nothing
+ else disagreeing -- not a literal date list the way every other entry in
+ this file is: at 374 of the 730 days in this window, a list would be
+ exactly the "range/pattern that could silently widen" this file's own
+ header explicitly avoids elsewhere, for the OPPOSITE reason a range is
+ normally risky here -- the predicate itself (colitur's own name is
+ [None]) is the precise, falsifiable evidence, the same shape [M2]'s own
+ title-substring predicate already uses instead of a date list, just keyed
+ on presence-of-a-name rather than a title string. NOT a rubric dispute
+ and NOT a data gap either engine is wrong about -- a LIMIT of this
+ comparator itself, honestly counted rather than silently passed, per the
+ brief's own explicit instruction ("a day whose observed identity cannot
+ be resolved must be a counted, allow-listed outcome, never a silent
+ skip"), the SAME discipline [M15] already established for an unresolvable
+ COMMEMORATION, applied here for the first time to the OBSERVED day. Fixing
+ this at the root (giving every temporal-cycle candidate an English name)
+ is a data/lectionary-bootstrap task (Plan 4), not something this
+ comparator can do for itself -- register ยง6 tracks it, the same open item
+ [M15]'s own note already points to. *)
let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
if diffs = [] then None
- else if List.mem c.c_date m1_dates && subset diffs [ Rank; Colour_f; Comm_presence ] then Some "M1"
- else if contains_substring o.o_title ~needle:bvm_saturday_title && diffs = [ Colour_f ] then Some "M2"
- else if List.mem c.c_date m3_dates && diffs = [ Colour_f ] then Some "M3"
+ (* M1's own subset widened (this task): colitur's observed day on both
+ dates is TEMPORAL-origin (the Sunday itself, RG33's own point -- the
+ vigil should never have displaced it), so it now ALSO carries
+ [Observed_identity_unresolved] -- the same root cause the file's other
+ widened entries below share, restated for this one's own shape. *)
+ else if List.mem c.c_date m1_dates
+ && subset diffs [ Rank; Colour_f; Comm_presence; Observed_identity_unresolved ]
+ then Some "M1"
+ (* M2's own subset widened (this task): every BVM-Saturday date's observed
+ celebration is temporal-origin (the ordinary Saturday feria colitur
+ computes, not the distinct Office of the BVM missalemeum's title
+ names -- M2's own gap), so [Observed_identity_unresolved] now fires
+ alongside [Colour_f] where it used to fire alone, AND alone on its own
+ on every Paschaltide occurrence M2's own comment already says never
+ reached this predicate before (colour already agrees there; only the
+ new axis has anything left to say). *)
+ else if contains_substring o.o_title ~needle:bvm_saturday_title
+ && subset diffs [ Colour_f; Observed_identity_unresolved ]
+ then Some "M2"
+ (* M3's own subset widened (this task): the Rogation Monday feria colitur
+ 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 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"
else if List.mem c.c_date m12_dates && diffs = [ Comm_count ] then Some "M12"
- (* M13's own subset widened (Task B): the same underlying gap (the Seven
- Sorrows commemoration is never constructed at all) now ALSO surfaces
- as [Comm_identity_unresolved] on this date, since colitur's own
- admitted commemoration there is temporal-origin (no English name) --
- one root cause, one id, both axes it touches. *)
- else if List.mem c.c_date m13_dates && subset diffs [ Rank; Colour_f; Comm_identity_unresolved ] then
- Some "M13"
+ (* M13's own subset widened AGAIN (this task, following the SAME pattern
+ Task B's own widening comment below records): colitur's observed
+ celebration here is Joseph, SANCTORAL-origin, so its name IS
+ resolvable -- and disagrees with missalemeum's own title outright
+ ([Observed_identity_mismatch], not [_unresolved]), the SAME underlying
+ gap (the Seven Sorrows commemoration is never constructed, so colitur
+ has no candidate to observe OR commemorate in its place) now visible
+ on a THIRD axis. *)
+ else if List.mem c.c_date m13_dates
+ && subset diffs [ Rank; Colour_f; Comm_identity_unresolved; Observed_identity_mismatch ]
+ then Some "M13"
else if List.mem c.c_date m15_dates && diffs = [ Comm_identity_unresolved ] then Some "M15"
- else if List.mem c.c_date m16_dates && diffs = [ Comm_identity_mismatch ] then Some "M16"
+ (* M16's own subset widened (this task): colitur's observed celebration
+ here is the temporal Passiontide feria (John Damascene is only a
+ COMMEMORATION on this Feast-status-losing day -- band picks the
+ temporal candidate outright at Class3 rank, register's own account of
+ this date), so [Observed_identity_unresolved] now fires alongside the
+ pre-existing [Comm_identity_mismatch]. *)
+ else if List.mem c.c_date m16_dates
+ && subset diffs [ Comm_identity_mismatch; Observed_identity_unresolved ]
+ then Some "M16"
+ else if diffs = [ Observed_identity_unresolved ] then Some "M18"
else None
(* ---------------------------------------------------------------------- *)