aboutsummaryrefslogtreecommitdiff
path: root/test/test_oracle.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_oracle.ml')
-rw-r--r--test/test_oracle.ml105
1 files changed, 81 insertions, 24 deletions
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index 35d4501..58ceb26 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -599,23 +599,23 @@ let m10_dates = [ "2026-11-30"; "2027-11-30"; "2026-12-08"; "2027-12-08" ]
own full note and the task report. *)
let m11_dates = [ "2026-12-26"; "2026-12-28"; "2027-12-27"; "2027-12-28" ]
-(* M12 -- RG 110, primary text: "In Officio et Missa S. Petri semper fit
- commemoratio S. Pauli, et vicissim" -- in the Office and Mass of EITHER
- Peter or Paul, a commemoration of the OTHER is ALWAYS made (the
- "inseparable commemoration"), uncapped by RG 111's ordinary admission
- count ("in numero orationum computando, pro unica habeantur" -- counted
- as one for counting purposes, i.e. it rides alongside whatever RG 111
- already admits). Unimplemented in this codebase -- confirmed by the one
- row in this window where it is visible: 22 February 2027 (Chair of
- St Peter) shows only the privileged Lent feria commemorated in colitur,
- while missalemeum shows that AND "St. Paul". A genuine, primary-cited
- feature gap -- verdict missalemeum, register §6 open item. Real but
- NARROW: every other Peter/Paul office in this window (29 June, both
- years; 1 August M4-adjacent dates were checked and found clean) either
- had no room for the extra commemoration to become visible against this
- comparator's axes, or fell on a day this predicate does not otherwise
- touch -- see the task report for the specific check. *)
-let m12_dates = [ "2027-02-22" ]
+(* M12 -- CLOSED (ef-holyname-rg110 task): RG 110 is now built
+ (precedence_ef.ml's own [rg110_additions]/[rg110_companion_slug]), and
+ this window's one visible instance -- 22 February 2027 -- no longer
+ diverges from missalemeum on [Comm_count] at all: colitur now shows the
+ privileged Lent feria's own commemoration AND "St. Paul", same COUNT
+ (two) as missalemeum. Removed rather than kept as a dead 0-row citation,
+ the SAME shape M17's own removal already established (this file's own
+ header): the count pin now enforces that this exact divergence cannot
+ silently reappear. NOT closed with zero remaining difference, though --
+ see M15's own widened date list immediately below: once count agrees,
+ IDENTITY comparison is reached for the first time on this date, and
+ trips a SEPARATE, pre-existing, unrelated comparator limit (one of
+ colitur's two admitted commemorations, [ef-lent-2-monday], is
+ TEMPORAL-origin and carries no English name) -- a newly-exposed
+ instance of M15's own gap, not a new one, folded into M15's date list
+ rather than kept here under RG 110's own citation, which no longer
+ explains ANY part of this row's remaining diff. *)
(* M13 -- OPEN, NOT adjudicated (the brief's own explicit permission,
"say so as an open item rather than absorbing it"). 19 March 2027: St
@@ -647,13 +647,13 @@ let m13_dates = [ "2027-03-19" ]
either engine is wrong about: a genuine LIMIT of this comparator, honestly
counted rather than silently passed (the brief's own explicit
instruction: "a day whose commemoration cannot be matched must be
- visibly counted and reported, not quietly passed"). On each of these 19
+ visibly counted and reported, not quietly passed"). On 19 of these 20
rows, colitur's own admitted commemoration is TEMPORAL-origin (an
impeded Advent/Lent feria) -- Rite_ef.Temporal_ef's own [build]
(temporal_ef.ml) never sets a celebration's [names] field, so there is no
English string on colitur's side to compare against missalemeum's title
text at all (this file's own header, "THE MAPPING, AND EXACTLY WHAT IT
- CANNOT RESOLVE"). Every one of these 19 oracle titles reads as a plain
+ CANNOT RESOLVE"). Every one of those 19 oracle titles reads as a plain
prose description of the SAME temporal ferial slot colitur independently
computes for that date (e.g. 2 Dec 2026: oracle "Feria IV after I Sunday
of Advent" against colitur's own [ef-advent-1-wednesday]; 4 Dec 2027:
@@ -664,12 +664,25 @@ let m13_dates = [ "2027-03-19" ]
unresolved. Fixing this at the ROOT (giving every temporal-cycle
candidate an English name) is a data/lectionary-bootstrap task, not
something this comparator can do for itself -- register §6, "RG 113
- tie-break" section's own neighbour, records it as an open item. *)
+ tie-break" section's own neighbour, records it as an open item.
+
+ ADDED, ef-holyname-rg110 task: 2027-02-22 -- the closed M12's own date,
+ above. NOT the same shape as the other 19 (colitur admits TWO
+ commemorations there, not one -- [paul], sanctoral-origin and
+ resolvable, and [ef-lent-2-monday], temporal-origin and not): the
+ comparator's own [identity_diff] bails out to [Comm_identity_unresolved]
+ the moment ANY admitted commemoration is unresolvable, regardless of how
+ many others resolve cleanly (test_oracle.ml's own [identity_diff],
+ "[List.exists] ... name = None"), so this row reaches the identical
+ diagnosis for the identical structural reason, once RG 110 stopped
+ [Comm_count] from masking it. Genuinely newly-EXPOSED by this task's own
+ fix, not newly-CAUSED by it: the underlying gap (no English name for a
+ temporal-cycle candidate) is exactly M15's own pre-existing one. *)
let m15_dates =
[ "2026-02-24"; "2026-03-19"; "2026-03-25"; "2026-12-02"; "2026-12-03"; "2026-12-04";
- "2026-12-07"; "2026-12-11"; "2026-12-21"; "2027-02-24"; "2027-12-02"; "2027-12-03";
- "2027-12-04"; "2027-12-06"; "2027-12-07"; "2027-12-11"; "2027-12-13"; "2027-12-16";
- "2027-12-21" ]
+ "2026-12-07"; "2026-12-11"; "2026-12-21"; "2027-02-22"; "2027-02-24"; "2027-12-02";
+ "2027-12-03"; "2027-12-04"; "2027-12-06"; "2027-12-07"; "2027-12-11"; "2027-12-13";
+ "2027-12-16"; "2027-12-21" ]
(* M16 -- Task B: a genuine IDENTITY mismatch, both sides otherwise agreeing
on rank/colour/count/presence. 27 March 2026 (Friday of Passion Week):
@@ -766,6 +779,49 @@ let m16_dates = [ "2026-03-27" ]
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. *)
+(* M19 -- ef-holyname-rg110 task: RG 110's OTHER direction, 30 June (this
+ window's two instances -- both years -- of
+ [in-commemoratione-sancti-pauli-apostoli], data/ef/adjustments.sexp's
+ own `Add commemoration-of-st-peter` directive; see that file's own
+ citation for the full scan quote). Unlike 22 February above,
+ missalemeum's own row for both dates shows an EMPTY commemorations array
+ ("St. Peter" absent, and not even listed as "displaced" -- nothing
+ competes for the slot on either side, so there is no candidate for
+ missalemeum's own engine to have rejected, only one it never
+ constructed): missalemeum has the SAME gap this task's own scan found in
+ lectio's source data (`~/git/projects/lectio/internal/caldata/
+ tridentine-calendar.ini` has no 06-30 companion entry either) -- a
+ genuine feature gap, verdict colitur, the SAME shape as M1/M3/M8/M10
+ above (each already "missalemeum does not implement X"), not a
+ citation-count coincidence: RG 110's own text is unconditional ("in
+ Officio et Missa S. Petri semper fit commemoratio S. Pauli, ET
+ VICISSIM"), and the calendarium's own June table states the SAME
+ pattern already built for the other two pairs, word for word.
+
+ IDENTITY-GATED, fix round 1 (coordinator finding F2): the predicate
+ below now also requires [c.c_commemorations] to be EXACTLY the single
+ entry [commemoration-of-st-peter] -- not merely that some [Comm_presence]
+ diff exists on these two dates. Proved necessary, not decorative: the
+ reviewer added a SECOND, fabricated `Add` directive on 30 June (a
+ `bogus-fabricated-companion` slug) to a scratch copy of
+ data/ef/adjustments.sexp and found the whole suite stayed green with the
+ pre-fix, presence-only predicate -- the exact C6/C14 failure mode (a
+ Layer-C-style predicate that pins a date and a diff SHAPE but not WHICH
+ candidate). This matters more here than for any other entry in this
+ file: `commemoration-of-st-peter` is corroborated by NEITHER oracle (it
+ rests on a scan reading alone, data/ef/adjustments.sexp's own citation),
+ so this allow-list predicate is the only place in the whole suite that
+ could assert what colitur actually emits here -- and, pre-fix, asserted
+ nothing about it. Mirrors C16's own identity guard
+ (`String.equal c.slug "ef-holy-name"`, test_differential.ml) at the
+ analogous decision point in this file. *)
+let m19_dates = [ "2026-06-30"; "2027-06-30" ]
+
+let m19_commemoration_matches (c : colitur_row) =
+ match c.c_commemorations with
+ | [ (slug, _, _, _) ] -> String.equal slug "commemoration-of-st-peter"
+ | _ -> false
+
let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
if diffs = [] then None
(* M1's own subset widened (this task): colitur's observed day on both
@@ -795,7 +851,6 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
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 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
@@ -818,6 +873,8 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
&& subset diffs [ Comm_identity_mismatch; Observed_identity_unresolved ]
then Some "M16"
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 None
(* ---------------------------------------------------------------------- *)