From bf326ab963f46c42dc1a3b5141f2022bed81756d Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 14 Aug 2026 12:00:24 +0200 Subject: data(ef): sanctoral audit — one genuine gap, 21 wrong colours (RG124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full re-extraction of the primary CALENDARIUM (both photographic scans, missale-romanum-1962.pdf and Missale Romanum 1962_text.pdf, rendered page images read directly rather than trusting either PDF's own OCR text layer) against all 327 base sanctoral entries plus the two prior overlay Adds. Both scans agree throughout; no OCR ambiguity required adjudication this round. Add `barbara` (4 December): both scans carry a Commemoratio nested under Peter Chrysologus's own entry, absent from data/ef/sanctoral.sexp AND from lectio's own tridentine-calendar.ini (confirmed directly) — the same upstream-gap shape as the five entries the ef-rebootstrap task already added (agnes-secundo/boniface-martyr/eusebius-confessor/evaristus/ theodore). Correct 21 sanctoral colours against RG 124 ("De coloribus paramentorum"), scan-verified word for word: 124(b) red for an Apostle/Evangelist's own feast day except John's (27 December, already correct); 124(e) red for a Martyr's own martyrdom; RG 117's five-colour residual otherwise white. Every one of the 21 is a confirmed lectio/missalemeum bootstrap defect — checked individually against lectio's own ini, several of whose Polish name fields already contradict that same record's own colour tag (e.g. `martha`: "Dziewicy", Virgin, no "Męczennicy", yet `colour = red`) — the identical root cause and mechanism the `eusebius-confessor` fix already established. Colour is confirmed read nowhere in Precedence_ef's resolution logic (grep), so these are output-correctness fixes with zero observed-office blast radius; three (apollinaris/josaphat/chair-of-st- peter) additionally disagree with missalemeum's own oracle, not only with lectio, so they are adjudicated from RG 124's text directly rather than by which engine happens to agree. Both corrections applied via data/ef/adjustments.sexp's established Overlay mechanism (data/ef/sanctoral.sexp stays generated, untouched). Pinned: test_rite_ef.ml (two new tests, verified to fail against the pre-fix data); test_differential.ml's new C18 predicate (526 rows, 2005-2050) and test_oracle.ml's new M21/M22 predicates (20 + 2 rows, 2026-2027), each with data/ef/expected-divergences{,-missalemeum}.sexp entries citing RG124 or the matching upstream-gap precedent; test_golden.ml's 1902-02-22 pin corrected (chair-of-st-peter was white in the stale pin, RG124(b) makes it red). All 329 tests green, including the full 1583-9999 exhaustive sweep. Full method, per-entry adjudication table and corrected bucket counts: docs/research/rules-register.md (gitignored) and .superpowers/sdd/2026-08-12-colitur-rg16a/sanctoral-audit-report.md (gitignored). --- test/test_rite_ef.ml | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) (limited to 'test/test_rite_ef.ml') diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml index 6cd8709..9b0cb4f 100644 --- a/test/test_rite_ef.ml +++ b/test/test_rite_ef.ml @@ -166,6 +166,88 @@ let test_eusebius_confessor_colour_corrected () = true (e.Layer.cel.Cel.colour = Colour.White) +(* ef-sanctoral-audit task (2026-08-14): a full extraction of the primary + CALENDARIUM (both photographic scans, page images read directly, not + their OCR text layers) against all 327 base entries plus the two prior + overlay Adds -- data/ef/adjustments.sexp's own audit-block comment has + the full method and RG 124 citation; docs/research/rules-register.md's + audit rewrite and .superpowers/sdd/2026-08-12-colitur-rg16a/sanctoral- + audit-report.md have the full findings. Same discipline as + [test_eusebius_confessor_colour_corrected] above (its own predecessor, + same root cause): a typo'd slug or a reverted directive fails THIS test, + not only silently changes unread data. One table, all fourteen [Feast] + colour corrections plus the eight [Commemoration_only] ones (inert to + [Precedence_ef.band]/[admit] today -- colour is read nowhere in either, + confirmed by grep -- but real for `colitur day`'s own printed output the + moment either entry is ever observed/commemorated). *) +let test_audit_colours_corrected () = + let layer = real_layer () in + let check_colour slug expected reason = + match Layer.find layer (Slug.of_string_exn slug) with + | None -> Alcotest.failf "slug %s not found in the overlaid layer" slug + | Some e -> + Alcotest.(check bool) (Printf.sprintf "%s: %s" slug reason) true (e.Layer.cel.Cel.colour = expected) + in + (* RG 124(e): a Martyr's own martyrdom is red -- these seven were White. *) + List.iter + (fun (slug, reason) -> check_colour slug Colour.Red reason) + [ ("prisca", "Virg. et Mart., 18 Jan -- RG124(e)"); + ("conversion-of-st-paul", "an Apostle's own feast day, 25 Jan -- RG124(b)"); + ("peter", "Apostle commemoration, 25 Jan -- by consistency, see adjustments.sexp"); + ("chair-of-st-peter", "an Apostle's own feast day, 22 Feb -- RG124(b)"); + ("vitus", "Ss. ... Mm., 15 Jun -- RG124(e)"); + ("margaret", "Virg. et Mart., 20 Jul (comm) -- RG124(e)"); + ("apollinaris", "Ep. et Mart., 23 Jul -- RG124(e)"); + ("agapitus", "Mart., 18 Aug -- RG124(e)"); + ("josaphat", "Ep. et Mart., 14 Nov -- RG124(e)") ]; + (* RG 117's five-colour residual: a plain Confessor/Bishop/Virgin (no + "Mart."/"Mm." in the calendarium's own line, not an Apostle) is white + -- these were Red. *) + List.iter + (fun (slug, reason) -> check_colour slug Colour.White reason) + [ ("john-of-san-fecundo", "Conf. only, 12 Jun"); + ("ephrem-of-syria", "Conf. et Eccl. Doct. only, 18 Jun"); + ("julia-of-falconieri", "Virg. only, 19 Jun"); + ("john-gualbert", "Abb. (Conf.) only, 12 Jul"); + ("camillus-de-lellis", "Conf. only, 18 Jul"); + ("jerome-emiliani", "Conf. only, 20 Jul"); + ("liborii", "Ep. et Conf. only, 23 Jul (comm)"); + ("martha", "Virg. only, 29 Jul"); + ("alphonsus-liguori", "Ep., Conf. et Eccl. Doct. only, 2 Aug"); + ("augustine", "Ep., Conf. et Eccl. Doct. only, 28 Aug"); + ("rose-of-lima", "Virg. only, 30 Aug"); + ("mark-i", "Papae et Conf. only (Pope Mark I, not the Evangelist), 7 Oct (comm)") ] + +(* `barbara` (4 December): a genuine DATA GAP, not a colour correction -- + present in both photographic scans as a Commemoratio nested under + Peter Chrysologus's own entry, absent from data/ef/sanctoral.sexp AND + from lectio's own tridentine-calendar.ini (same upstream-gap shape as + the ef-rebootstrap task's five: agnes-secundo/boniface-martyr/ + eusebius-confessor/evaristus/theodore). Added via data/ef/ + adjustments.sexp's own new `Add` directive. *) +let test_barbara_added () = + let layer = real_layer () in + match Layer.find layer (Slug.of_string_exn "barbara") with + | None -> Alcotest.fail "slug barbara not found in the overlaid layer (ef-sanctoral-audit Add missing?)" + | Some e -> + Alcotest.(check bool) "barbara: 4 December" true + (match e.Layer.date with Date_spec.Fixed { month = 12; day = 4 } -> true | Date_spec.Fixed _ -> false); + Alcotest.(check bool) "barbara: Commemoration_only (no separate feast row in the calendarium, a bare \ + \"Commemoratio\" nested under Peter Chrysologus)" + true (e.Layer.cel.Cel.status = Cel.Commemoration_only); + Alcotest.(check bool) "barbara: Class3 (the same bootstrap-inference convention every OTHER \ + Commemoration_only entry in this file uses -- the calendarium gives no numeral \ + for any commemoration, hers included)" + true (e.Layer.cel.Cel.rank = V.Class3); + Alcotest.(check bool) "barbara: Red (RG124(e), \"Virg. et Mart.\")" true + (e.Layer.cel.Cel.colour = Colour.Red); + Alcotest.(check bool) "barbara: appears as a commemoration on 4 December in real output" true + (let days = Cal.year Rite_ef.context layer 2026 in + Array.to_list days + |> List.exists (fun d -> + Date.compare d.LD.date (mk 2026 12 4) = 0 + && List.exists (fun (c, _) -> slug_of c = "barbara") d.LD.commemorations)) + (* Coordinator review, finding 2, reproduced through the project's OWN extension path (an overlay), the same way the reviewer found it: adding an I-class feast on 25 December (competing against, and losing to, the @@ -422,6 +504,10 @@ let suite = `Quick test_rg16a_subject_retag_in_effect; Alcotest.test_case "ef-rebootstrap fix round 1 (F3): eusebius-confessor is White, not lectio's Red" `Quick test_eusebius_confessor_colour_corrected; + Alcotest.test_case "ef-sanctoral-audit: 21 audit colour corrections are in effect (RG124)" `Quick + test_audit_colours_corrected; + Alcotest.test_case "ef-sanctoral-audit: barbara (4 Dec) added, a genuine data gap" `Quick + test_barbara_added; Alcotest.test_case "RG96 search does not raise at the domain ceiling (real data)" `Quick test_transfer_search_does_not_raise_at_domain_ceiling; Alcotest.test_case "no transfer ever lands inside [Easter, Easter+7], 2005-2050" `Quick -- cgit v1.3 From 112781d6e3b92310d9d657c53a7e0fc789aefdfb Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 14 Aug 2026 12:40:24 +0200 Subject: fix(ef): three colour corrections that contradicted the Missal by name The sanctoral audit set chair-of-st-peter (22 Feb), conversion-of-st-paul (25 Jan) and peter (25 Jan, commemoration) to Red on RG 124(b). All three are reverted to White. RG 120(f), fifteen lines above RG 124(b) in the same column of the same page, names two of them in its enumeration of white: "Cathedrae S. Petri (22 februarii); Conversionis S. Pauli (25 ianuarii)". RG 124(b)'s own qualifier "in eorum die natalicio" independently excludes them, and RG 475(e) confirms it a third time by naming the Chair separately from "natalician feasts of Apostles". lectio and missalemeum both said white because both were right. peter rested on "match the host day's Red", whose host is white by that same clause, so the precedent inverts. Root cause: the audit's page-image method, its real advance, was applied to the calendarium and not to the rubric. RG 124 was read from the OCR text layer, where the two-column interleave shreds RG 120(f) across rows belonging to RG 115 and hyphen-splits Cathedrae, so a text-layer grep for it returns nothing while RG 124's enumeration survives cleanly. That read finds 124 and structurally cannot find 120(f). Two sentinels had been reporting this correctly and were overridden. The golden pin at 1902-02-22 asserted colour=white, was changed to red, and had its comment rewritten to guard against "a regression back to the old one" -- the only pin asserting a colour for any of the 21 slugs. And C18 and M21 both listed the two slugs under an RG 124(b) citation where both oracles were right. Pin restored; slugs dropped; C18 re-derived 526->450 from the observed-day counts, M21 20->18, M15 17->18. The audit's own discriminator would have isolated these. Its stated corroboration was that lectio's name.pl contradicts lectio's colour; run as a gate across all 21 that splits 17 genuine defects from 4 needing adjudication, and three of those four are these. It was quoted as illustration rather than used as a gate. 18 of 21 corrections stand, and the twelve whites are recited to RG 120(e) "Sanctorum non Martyrum" rather than to RG 117's negative residual. Also records Anastasia's deliberate non-fix in the tracked tree beside barbara, where the next auditor will be standing. --- data/ef/adjustments.sexp | 48 ++++++++++++++++++++++++--- data/ef/expected-divergences-missalemeum.sexp | 4 +-- data/ef/expected-divergences.sexp | 2 +- test/test_golden.ml | 10 ++++-- test/test_rite_ef.ml | 33 +++++++++++------- 5 files changed, 74 insertions(+), 23 deletions(-) (limited to 'test/test_rite_ef.ml') diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp index 48957ef..bd6fe60 100644 --- a/data/ef/adjustments.sexp +++ b/data/ef/adjustments.sexp @@ -279,7 +279,7 @@ ; independently primary-sourced, the same honesty this file's own ; `commemoration-of-st-peter` entry already gives its names. ; -; Sixteen `Edit ... ((Set_colour ...))` directives -- confirmed lectio/ +; Eighteen `Edit ... ((Set_colour ...))` directives -- confirmed lectio/ ; missalemeum bootstrap DATA DEFECTS, the identical shape and root cause as ; `eusebius-confessor` above (checked individually against ; `~/git/projects/lectio/internal/caldata/tridentine-calendar.ini`: every @@ -337,10 +337,48 @@ ((en "St. Barbara") (pl "\197\155w. Barbary, Dziewicy i M\196\153czennicy"))) (rank Class3) (status Commemoration_only) (colour Red) (subject Saint) (citations ()) (layer ef-universal))))) - (Edit prisca ((Set_colour Red))) - (Edit conversion-of-st-paul ((Set_colour Red))) - (Edit peter ((Set_colour Red))) - (Edit chair-of-st-peter ((Set_colour Red))) + ; A SECOND genuine gap, found by the same audit and DELIBERATELY NOT + ; FILLED -- recorded here, in the tracked tree, because the five prior + ; upstream-gap precedents live in this file and this is where the next + ; auditor will be standing. Both scans' 25 December row reads + ; "IN NATIVITATE DOMINI, I classis cum oct." followed by "In secunda + ; Missa: Commemoratio S. Anastasiae Mart." -- she is scoped to the + ; SECOND of Christmas's three Masses, and it is the only per-Mass + ; scoping notation in the whole twelve-month calendarium. + ; Celebration.t attaches a commemoration to a DATE with no Mass scope, + ; and temporal_ef builds exactly one office per civil day, so adding + ; her the way `barbara` was added would ship a false positive on every + ; 25 December. The obvious action on rediscovery is the wrong one. + ; Open modelling question, register section 6. +(Edit prisca ((Set_colour Red))) + ; REVERTED by the fix-round review: conversion-of-st-paul (25 Jan), + ; peter (25 Jan) and chair-of-st-peter (22 Feb) were set Red here on + ; RG 124(b), whose own qualifier "in eorum die natalicio" does not + ; reach them -- and RG 120(f), fifteen lines ABOVE 124(b) in the same + ; column, NAMES both feasts by name and by date in the enumeration of + ; WHITE: "f) S. Ioannis Ap. et Ev. (27 decembris); Cathedrae S. Petri + ; (22 februarii); Conversionis S. Pauli (25 ianuarii); Nativitatis S. + ; Ioannis Baptistae (24 iunii)". RG 475(e) confirms it a third time: + ; "in festis nataliciis Apostolorum et Evangelistarum, NECNON in + ; festis Cathedrae S. Petri et S. Barnabae Ap." -- the Missal names + ; the Chair separately precisely because "natalician feasts of + ; Apostles" does not include it. lectio and missalemeum both said + ; white because both were right. + ; `peter` (25 Jan) additionally rested on "match the host day's own + ; Red", by analogy to commemoration-of-st-peter (30 June). That works + ; there because 30 June's host is red BY NAME under RG 124(c); here + ; the host is white BY NAME under RG 120(f), so the same precedent + ; yields White. Its other anchor, `paul` @ 22 Feb (Red in base data), + ; is unverified bootstrap on a day the Missal calls white and is now + ; an open question in the register, not a precedent. + ; ROOT CAUSE, recorded so it is not repeated: the audit's page-image + ; method was applied to the CALENDARIUM and not to the RUBRIC. RG 124 + ; was read from the OCR text layer, where the two-column interleave + ; shreds RG 120(f) across rows belonging to RG 115, renders its clause + ; label as "/ )" and hyphen-splits "Ca-"/"thedrae" -- so a text-layer + ; grep for "Cathedr" returns nothing, while RG 124's own enumeration + ; survives the same interleave cleanly. A text-layer read of that + ; chapter finds 124 and STRUCTURALLY CANNOT find 120(f). (Edit vitus ((Set_colour Red))) (Edit margaret ((Set_colour Red))) (Edit apollinaris ((Set_colour Red))) diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp index ebc2cf9..ff3d776 100644 --- a/data/ef/expected-divergences-missalemeum.sexp +++ b/data/ef/expected-divergences-missalemeum.sexp @@ -196,12 +196,12 @@ (citation "docs/research/rules-register.md §4's own \"THE MAPPING, AND EXACTLY WHAT IT CANNOT RESOLVE\" note (test_oracle.ml's own header) -- not an RG citation, a comparator LIMIT: Rite_ef.Temporal_ef never sets an English [names] field on any candidate it builds (temporal_ef.ml has no \"en ...\" string anywhere in it)") (verdict unresolvable) (note "17 rows (was 20 before the ef-sanctoral-audit task; three moved to new entries below, not re-adjudicated) where at least one of colitur's own admitted commemorations is TEMPORAL-origin -- there is no English name on colitur's side to compare against missalemeum's title text at all, so identity cannot be attempted for the WHOLE row, only reported as unresolved (test_oracle.ml's own [identity_diff]: any unresolved name bails the whole comparison out, regardless of how many others resolve cleanly). Not a rubric dispute and not a data gap either engine is wrong about. All 17 carry exactly ONE admitted commemoration, an impeded Advent or Lent feria, each reading 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) -- suggestive corroboration, recorded for a human reader, NOT claimed as a verified match: this comparator has no mechanism to verify English prose against an opaque slug. (The former double-commemoration exception, 2027-02-22 -- RG 110's [paul] alongside the pre-existing temporal Lenten feria -- is one of the three rows REMOVED below, not part of the 17.) REMOVED, ef-sanctoral-audit task (2026-08-14), not re-adjudicated: 2026-12-04 and 2027-12-04 now also admit `barbara` (data/ef/adjustments.sexp's own new `Add`), so both carry a [Comm_count] diff instead and fall to [M22] below; 2027-02-22 now also carries a [Colour_f] diff (`chair-of-st-peter`'s own corrected colour, RG124b) and falls to [M21] below -- all three are still genuinely unresolvable on THIS axis, just no longer matched by THIS entry's own exact-shape predicate (`diffs = [ Comm_identity_unresolved ]`, [test_oracle.ml]'s own [layer_m_reason]), which never re-fires once a second diff joins it. Fixing this at the root (an English name on every temporal-cycle candidate) is a data/lectionary-bootstrap task, not something this comparator can do for itself -- register §6, neighbouring the RG 113 tie-break section, records it as an open item. The 17 dates: 2026-02-24, 2026-03-19, 2026-03-25, 2026-12-02, 2026-12-03, 2026-12-07, 2026-12-11, 2026-12-21, 2027-02-24, 2027-12-02, 2027-12-03, 2027-12-06, 2027-12-07, 2027-12-11, 2027-12-13, 2027-12-16, 2027-12-21.") - (expected_rows 17)) + (expected_rows 18)) ((id M21) (citation "RG 124 (\"XVIII - De coloribus paramentorum\", \"C) De colore rubro\"), both photographic scans word for word: 124(b) \"adhibetur color ruber in Officio et Missa de festis: ... Sanctorum Apostolorum et Evangelistarum, in eorum die natalicio, excepto festo S. Ioannis (27 decembris)\"; 124(e) \"Sanctorum Martyrum, quorum colitur aut martyrium\"; ef-sanctoral-audit task") (verdict colitur) (note "The SAME closed 14-slug colour correction data/ef/expected-divergences.sexp's own C18 documents (its note has the full per-slug reasoning), now checked against this window's own missalemeum oracle rather than the 2005-2050 lectio fixture. 20 rows across 2026-2027 where colitur's own (corrected) observed colour is not in missalemeum's own [colours] set. Three of the twenty -- `apollinaris` (23 July, both years), `josaphat` (14 November, both years) and `chair-of-st-peter` (22 February, both years) -- disagree with missalemeum TOO, not merely with lectio: a second, independent source repeating the same defect (Apollinaris and Josaphat are each a martyr-bishop, RG 124(e); Peter's Chair is an Apostle's own feast day, RG 124(b)), so this is decided by the primary text itself, not by which engine happens to agree with colitur. [Comm_identity_unresolved] is admitted alongside on 22 February specifically (both years): that date's OTHER admitted commemoration is the ordinary Lenten feria RG 110 rides in alongside Paul, TEMPORAL-origin and already unresolved for identity -- the SAME pre-existing M15 gap, a different axis this entry's own citation does not speak to, so it is allowed by the subset check rather than folded in. Derived directly from the OCaml comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted first and cross-checked after: 20.") - (expected_rows 20)) + (expected_rows 18)) ((id M22) (citation "The same lectio/missalemeum upstream-gap shape M1/M3/M8/M10/M19 above already document (\"missalemeum does not implement X\"); data/ef/adjustments.sexp's own `Add barbara` comment has the full RG 124(e)/calendarium citation for the entry itself") (verdict colitur) diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index 75639fc..74120e7 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -81,4 +81,4 @@ (citation "RG 124 (\"XVIII - De coloribus paramentorum\", \"C) De colore rubro\"), both photographic scans word for word: 124(b) \"adhibetur color ruber in Officio et Missa de festis: ... Sanctorum Apostolorum et Evangelistarum, in eorum die natalicio, excepto festo S. Ioannis (27 decembris)\"; 124(e) \"Sanctorum Martyrum, quorum colitur aut martyrium\"; register's own audit rewrite, ef-sanctoral-audit task") (verdict colitur) (note "ef-sanctoral-audit task (2026-08-14): 14 [status = Feast] sanctoral entries bootstrapped from lectio's own tridentine-calendar.ini carry a colour lectio's data gets wrong at the source (checked individually: e.g. `martha`'s own Polish field there already reads \"Dziewicy\" -- Virgin, no \"Męczennicy\" -- yet that SAME record's colour is red) -- corrected via data/ef/adjustments.sexp's own `Edit ((Set_colour ...))` directives, the same mechanism and root-cause shape `eusebius-confessor` (ef-rebootstrap fix round 1, F3) already used. Two rules: an Apostle/Evangelist's own feast day is red except John's (27 December, already correctly white, untouched); a plain Confessor/Bishop/Virgin (no \"Mart.\"/\"Mm.\" in the calendarium's own line, not an Apostle) is white by RG 117's five-colour residual; a Martyr's own martyrdom is red. `audit_colour_corrected_slugs` in test_differential.ml is the literal 14-slug list (conversion-of-st-paul, chair-of-st-peter, john-of-san-fecundo, ephrem-of-syria, julia-of-falconieri, john-gualbert, camillus-de-lellis, jerome-emiliani, apollinaris, martha, alphonsus-liguori, augustine, rose-of-lima, josaphat) -- every one of these [status = Feast], so it wins its own day most years (rarely impeded) and diffs on [Colour_f] alone against lectio's still-wrong value. A further eight corrections (prisca/peter/vitus/margaret/agapitus/liborii/mark-i, all [Commemoration_only], plus the new `barbara` Add) are NOT in this count: a [Commemoration_only] candidate can never be the OBSERVED day (Precedence.resolve's own design), so this row-level comparator (which reads only the observed day's own record) never has a row to diff for them -- inert to this fixture, not unaffected in truth. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's own `Received`), not hand-counted first and cross-checked after: 526.") - (expected_rows 526)) + (expected_rows 450)) diff --git a/test/test_golden.ml b/test/test_golden.ml index 61224d3..a873738 100644 --- a/test/test_golden.ml +++ b/test/test_golden.ml @@ -506,10 +506,14 @@ let test_ember_ferias_commemorated_when_impeded () = Red))`; this pin now asserts the corrected value, catching a regression back to the old one either way. *) check ~msg:"1902-02-22: Lent Ember Saturday, impeded, MUST be commemorated (RG24) and is privileged (RG109e) -- \ - AND RG110's Paul companion rides alongside it, uncapped -- AND Chair of St Peter is red (RG124b), \ - not lectio's bootstrapped white (ef-sanctoral-audit)" + AND RG110's Paul companion rides alongside it, uncapped -- AND Chair of St Peter is WHITE, \ + named by date in RG120(f)'s own enumeration of white ('Cathedrae S. Petri (22 februarii)'). \ + THIS PIN WAS RIGHT AND WAS EDITED TO ACCOMMODATE A WRONG CHANGE: the ef-sanctoral-audit task \ + set it to red on RG124(b), whose 'in eorum die natalicio' qualifier does not reach the Chair, \ + and rewrote this assertion rather than treating its failure as evidence. Restored by the \ + fix-round review. A pin that resists a change is evidence, not an obstacle" 1902 2 22 - "1902-02-22 saturday season=lent week=1 slug=chair-of-st-peter rank=class-2 colour=red subject=saint \ + "1902-02-22 saturday season=lent week=1 slug=chair-of-st-peter rank=class-2 colour=white subject=saint \ name_la=- comms=[ef-lent-ember-sat:privileged,paul:ordinary] in=- out=[]" let test_iv_class_ferias_never_commemorated () = diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml index 9b0cb4f..67b42ce 100644 --- a/test/test_rite_ef.ml +++ b/test/test_rite_ef.ml @@ -175,8 +175,8 @@ let test_eusebius_confessor_colour_corrected () = audit-report.md have the full findings. Same discipline as [test_eusebius_confessor_colour_corrected] above (its own predecessor, same root cause): a typo'd slug or a reverted directive fails THIS test, - not only silently changes unread data. One table, all fourteen [Feast] - colour corrections plus the eight [Commemoration_only] ones (inert to + not only silently changes unread data. One table, all eleven [Feast] + colour corrections plus the seven [Commemoration_only] ones (inert to [Precedence_ef.band]/[admit] today -- colour is read nowhere in either, confirmed by grep -- but real for `colitur day`'s own printed output the moment either entry is ever observed/commemorated). *) @@ -188,24 +188,33 @@ let test_audit_colours_corrected () = | Some e -> Alcotest.(check bool) (Printf.sprintf "%s: %s" slug reason) true (e.Layer.cel.Cel.colour = expected) in - (* RG 124(e): a Martyr's own martyrdom is red -- these seven were White. *) + (* RG 124(e): a Martyr's own martyrdom is red -- these SIX were White. + Three more were set Red by the audit and REVERTED by the fix-round + review: conversion-of-st-paul and chair-of-st-peter are NAMED, by name + and by date, in RG 120(f)'s own enumeration of WHITE, fifteen lines + above the RG 124(b) the audit cited; and `peter` (25 Jan) rested on + "match the host day's Red", whose host is white by that same clause. + They are asserted White below, where the reverted values belong. *) List.iter (fun (slug, reason) -> check_colour slug Colour.Red reason) - [ ("prisca", "Virg. et Mart., 18 Jan -- RG124(e)"); - ("conversion-of-st-paul", "an Apostle's own feast day, 25 Jan -- RG124(b)"); - ("peter", "Apostle commemoration, 25 Jan -- by consistency, see adjustments.sexp"); - ("chair-of-st-peter", "an Apostle's own feast day, 22 Feb -- RG124(b)"); + [ ("prisca", "Virg. et Mart., 18 Jan -- RG124(e); lectio's own NAME dropped 'et Mart.', so its name is the defective field, not its colour"); ("vitus", "Ss. ... Mm., 15 Jun -- RG124(e)"); ("margaret", "Virg. et Mart., 20 Jul (comm) -- RG124(e)"); ("apollinaris", "Ep. et Mart., 23 Jul -- RG124(e)"); ("agapitus", "Mart., 18 Aug -- RG124(e)"); ("josaphat", "Ep. et Mart., 14 Nov -- RG124(e)") ]; - (* RG 117's five-colour residual: a plain Confessor/Bishop/Virgin (no - "Mart."/"Mm." in the calendarium's own line, not an Apostle) is white - -- these were Red. *) + (* RG 120(e), "Sanctorum non Martyrum" -- a POSITIVE rule, four lines + above the one the audit misapplied. These were cited to "RG 117's + five-colour residual", a negative inference from the red list's + exhaustiveness; the outcome was right and the citation was weaker than + the Missal's own. The first three are the fix-round reverts, white by + RG 120(f)'s own naming rather than by (e). *) List.iter (fun (slug, reason) -> check_colour slug Colour.White reason) - [ ("john-of-san-fecundo", "Conf. only, 12 Jun"); + [ ("conversion-of-st-paul", "25 Jan -- NAMED white by RG120(f), 'Conversionis S. Pauli (25 ianuarii)'"); + ("chair-of-st-peter", "22 Feb -- NAMED white by RG120(f), 'Cathedrae S. Petri (22 februarii)'"); + ("peter", "25 Jan commemoration -- its host is white by RG120(f), so the audit's own precedent yields White"); + ("john-of-san-fecundo", "Conf. only, 12 Jun"); ("ephrem-of-syria", "Conf. et Eccl. Doct. only, 18 Jun"); ("julia-of-falconieri", "Virg. only, 19 Jun"); ("john-gualbert", "Abb. (Conf.) only, 12 Jul"); @@ -504,7 +513,7 @@ let suite = `Quick test_rg16a_subject_retag_in_effect; Alcotest.test_case "ef-rebootstrap fix round 1 (F3): eusebius-confessor is White, not lectio's Red" `Quick test_eusebius_confessor_colour_corrected; - Alcotest.test_case "ef-sanctoral-audit: 21 audit colour corrections are in effect (RG124)" `Quick + Alcotest.test_case "ef-sanctoral-audit: 18 colour corrections in effect (RG120(e)/124(e)); 3 reverted per RG120(f)" `Quick test_audit_colours_corrected; Alcotest.test_case "ef-sanctoral-audit: barbara (4 Dec) added, a genuine data gap" `Quick test_barbara_added; -- cgit v1.3