summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 15:57:26 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 15:57:26 +0200
commit957a6d88ed447be16aa8c7e71250f4c9b87a832b (patch)
treef8fc5b62ec23c383328f7b991dda38fd6c0aca08 /test
parentc7f9b66ffe0c265ab049afc8948317e9daded9e7 (diff)
downloadcolitur-957a6d88ed447be16aa8c7e71250f4c9b87a832b.tar.gz
colitur-957a6d88ed447be16aa8c7e71250f4c9b87a832b.zip
data(ef): close and derive the RG 91 entry 27 allow-list rows
The BVM Saturday office is now genuinely correct, so both comparators' allow-lists move -- every count derived from the harnesses' own failure output, never transcribed or guessed. lectio differential (data/ef/expected-divergences.sexp, C17, new, colitur): lectio builds no equivalent office at all, so it keeps showing the plain season colour on every otherwise-unoccupied Class4 Saturday where colitur now shows white. Season, slug and rank all still agree (the office deliberately reuses the ordinary ferial slug), so Colour_f alone is the complete diff set -- gated on colitur's own rank/weekday/colour rather than a date list, the same shape M2 used, at 416 rows over 2005-2050. missalemeum oracle (data/ef/expected-divergences-missalemeum.sexp): M2 is CLOSED, REMOVED, the same shape as this file's own M4/M6/M7/M9/M12/ M14/M17 precedents -- not re-adjudicated to a different verdict, gone because the colour divergence it named no longer occurs on any of its former 22 dates. What is left on all 22 is Observed_identity_unresolved alone (colitur's BVM-Saturday candidate is temporal-origin and deliberately carries no English name) -- exactly M18's own shape, not a distinct citation any more. Keeping M2 as a separate id would have kept silently absorbing these rows under a stale "colour differs" citation whose own reason had stopped firing (subset's own diff-set test admits a SMALLER set than the one named) -- the same "count proving cardinality where identity was required" trap this project's review process watches for. M18's own expected_rows moves 373 -> 395 accordingly.
Diffstat (limited to 'test')
-rw-r--r--test/test_differential.ml23
-rw-r--r--test/test_oracle.ml67
2 files changed, 59 insertions, 31 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml
index bea1bf4..3f416fd 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -516,6 +516,28 @@ let holy_name_fallback_dates_2005_2050 =
"2034-01-02"; "2035-01-02"; "2036-01-02"; "2040-01-02"; "2041-01-02"; "2045-01-02";
"2046-01-02"; "2047-01-02" ]
+(* C17 -- ef-bvm-saturday task: RG 91 entry 27 ("Officium sanctae Mariae in
+ sabbato" -- see data/ef/expected-divergences.sexp's own C17 note for the
+ full RG 78/RG 120(b) citation). lectio builds no equivalent office at all
+ (checked directly against its own tridentine-calendar.ini/generator, the
+ same "genuine upstream gap, not a colitur bootstrap miss" shape C15/C16
+ already document for their own gaps) -- it shows the ordinary season
+ colour on every otherwise-unoccupied Class4 Saturday where colitur's own
+ RG 78 fix now shows white. Season, slug and rank all still agree --
+ temporal_ef.ml's own [bvm_saturday_names] citation ("Slug" paragraph)
+ deliberately REUSES the ordinary ferial slug rather than minting a new
+ one, precisely so this predicate's diff set stays [Colour_f] alone, never
+ [Slug_f] too. Gated on colitur's own [rank]/[weekday]/[colour] rather
+ than a date list, the same shape M2 (data/ef/expected-divergences-
+ missalemeum.sexp) already uses for the identical reason: this
+ population is large (a large fraction of all Saturdays domain-wide) and
+ entirely formulaic (RG 78's own condition, "otherwise unoccupied
+ IV-class Saturday", reduces exactly to this triple), not a short,
+ individually-interesting list of dates the way C14/C15/C16 above are. *)
+let is_bvm_saturday_row (c : row) diffs =
+ diffs = [ Colour_f ] && String.equal c.weekday "saturday" && String.equal c.rank "class-4"
+ && String.equal c.colour "white"
+
(* [layer_c_reason l c diffs] returns the [data/ef/expected-divergences.sexp]
[id] this row-pair's remaining (post Layer A/B) diff set belongs to, or
[None] if nothing here explains it (a genuine, uncovered failure). *)
@@ -571,6 +593,7 @@ let layer_c_reason (l : row) (c : row) diffs =
&& subset diffs [ Slug_f; Rank ]
&& String.equal c.slug "ef-holy-name"
then Some "C16"
+ else if is_bvm_saturday_row c diffs then Some "C17"
else None
(* ---------------------------------------------------------------------- *)
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index 58ceb26..c0badfe 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -475,25 +475,30 @@ let contains_substring s ~needle =
own "in dominica quavis" (ANY Sunday, unqualified) -- verdict colitur. *)
let m1_dates = [ "2026-06-28"; "2026-08-09" ]
-(* M2 -- RG 91 entry 27 ("Officium sanctae Mariae in sabbato"): every
- otherwise-unoccupied IV-class Saturday should carry the votive Office of
- the BVM (white; missalemeum's own title cycles "I".."V Mass of the
- B. V. M. - Salve, Sancta Parens"), a genuinely DISTINCT office from an
- ordinary green/violet feria. temporal_ef.ml's [band] already carries an
- entry-27 comment acknowledging this row of RG 91 exists, but nothing in
- [Temporal_ef.temporal]'s actual CONSTRUCTION builds this office -- an
- unimpeded Time-after-Epiphany/-Pentecost Saturday still gets the bare
- ferial slug and [season_colour]'s green. A genuine, primary-attested
- FEATURE GAP (not a citation dispute) -- verdict missalemeum: colitur is
- short a whole office here, not merely differently-opinioned. Registered
- as an open item (register ยง6) rather than built in this task: it needs
- its own proper texts/citations, the same scope line "Major Litanies"
- (M5 below) already sits on. Matched on the oracle's own title substring,
- not a hardcoded date list -- the title IS the distinguishing evidence,
- and every Paschaltide occurrence (where colitur's season colour is
- already white, RG 119) never reaches this predicate at all, since its
- diffs are already empty before [layer_m_reason] is ever called. *)
-let bvm_saturday_title = "Salve, Sancta Parens"
+(* M2 -- CLOSED, REMOVED (ef-bvm-saturday task), same shape as M12/M17's own
+ removal elsewhere in this suite (not re-adjudicated to a different
+ verdict, gone because the underlying divergence stopped occurring): RG 91
+ entry 27 ("Officium sanctae Mariae in sabbato") is now built
+ (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full RG
+ 78/RG 120(b) argument) -- white, unconditionally, on every otherwise-
+ unoccupied IV-class Saturday, so [Colour_f] no longer appears in this
+ predicate's own diff set on ANY of these 22 dates (checked: 0 of them
+ retain it). What is left on every one of them is [Observed_identity_
+ unresolved] ALONE -- colitur's own BVM-Saturday candidate is
+ temporal-origin and deliberately carries no ENGLISH name (Latin only,
+ the same zero-circularity discipline Holy Family/Holy Name/the Sacred
+ Triduum already established) -- which is EXACTLY [M18]'s own shape
+ ([diffs = [ Observed_identity_unresolved ]], nothing else disagreeing),
+ not a distinct citation any more. Kept as a separate id here would have
+ been the same "count proving cardinality where identity was required"
+ trap this project's own review process watches for: [subset] admits a
+ SMALLER diff set than the one named, so this branch would have kept
+ silently absorbing these 22 rows under a stale "colour differs" citation
+ even though that citation's own reason no longer fires -- checked
+ directly, not assumed: removing this branch and re-running moves the
+ count from M2's own former 22 to M18's own count rising by exactly 22
+ (373 -> 395, see M18's own note below), with the "no unexplained
+ differences" test staying green throughout. *)
(* M3 -- RG 87 (Minor Litanies/Rogations): the SAME gap the lectio
differential's own C8 already names (data/ef/expected-divergences.sexp)
@@ -822,7 +827,12 @@ let m19_commemoration_matches (c : colitur_row) =
| [ (slug, _, _, _) ] -> String.equal slug "commemoration-of-st-peter"
| _ -> false
-let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
+(* [_o] (the oracle's own row) is unused now that M2 -- its one reader, via
+ [o.o_title] -- is closed/removed (see the comment above [m1_dates]):
+ every remaining predicate below reads only [c]/[diffs]. Kept as a named,
+ typed parameter (not dropped from the signature) so a FUTURE oracle-title
+ predicate has somewhere to plug back in without a signature change. *)
+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
dates is TEMPORAL-origin (the Sunday itself, RG33's own point -- the
@@ -832,17 +842,12 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
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"
+ (* M2 -- CLOSED, REMOVED (ef-bvm-saturday task): see this file's own M2
+ note above (near [m1_dates]) for the full account -- the RG 91 entry 27
+ office is now built, so every one of these 22 dates now falls through
+ to [M18]'s own generic predicate below instead ([diffs = [
+ Observed_identity_unresolved ]] exactly), which is what actually
+ catches them now. *)
(* 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