aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/ef/expected-divergences-missalemeum.sexp48
-rw-r--r--test/test_oracle.ml89
2 files changed, 44 insertions, 93 deletions
diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp
index 53e93d4..47db6fb 100644
--- a/data/ef/expected-divergences-missalemeum.sexp
+++ b/data/ef/expected-divergences-missalemeum.sexp
@@ -35,6 +35,29 @@
; primary-source effort, not defaulted past -- see each entry's own note
; and the task report for the full search.
;
+; FIVE MORE REMOVED, ef-rebootstrap (2026-08-12), same shape as M17's own
+; removal above -- not re-adjudicated to a different verdict, just gone,
+; because the underlying divergence stopped occurring: M4 (second
+; commemoration of St Agnes, 28 Jan), M6 (St Eusebius Confessor, 14 Aug),
+; M7 (St Evaristus, 26 Oct), M9 (St Theodore, 9 Nov) and M14 (St Boniface
+; Martyr, 14 May) were all recorded as genuine DATA GAPS traced upstream
+; into lectio's own tridentine-calendar.ini and "cannot be fixed without
+; touching lectio" -- true at the time, and no longer true: lectio's own
+; generator was independently fixed in the same session (docs/research/
+; rules-register.md's own transcription-audit record) and colitur's
+; sanctoral data re-bootstrapped from the corrected source (SHA-256
+; 1b303ef2..., tools/bootstrap_sanctoral.ml's own regenerated header). All
+; five commemorations these entries named are now present in
+; data/ef/sanctoral.sexp (agnes-secundo, eusebius-confessor, evaristus,
+; theodore) and admitted through the ordinary pipeline with no code
+; change -- re-run against the 2026-2027 fixture, each of the five now
+; contributes ZERO rows to the comparator's own diff stream (verified: the
+; day-by-day classification no longer reaches [layer_m_reason] for any of
+; their dates at all, since [diffs = []] -- Matched, not Explained -- for
+; every one). Removed rather than kept as a dead 0-row citation, matching
+; the M17 precedent immediately below: the count pin now enforces that
+; none of these five divergences can silently reappear.
+;
; [expected_rows] is the exact row count this entry accounts for over the
; fixture's 2026-2027 span: a REGRESSION PIN, not documentation --
; test_oracle.ml asserts actual counts equal these exactly, so an unnoticed
@@ -59,36 +82,16 @@
(verdict colitur)
(note "missalemeum, like lectio, computes no Rogation day at all and shows the plain paschaltide-week feria instead. Only 3 May 2027 (Rogation Monday) shows it in this window -- every other Rogation day here is won outright by a saint on both sides, so only the underlying temporal identity differs, which this comparator's axes do not expose.")
(expected_rows 1))
- ((id M4)
- (citation "1962 calendarium (missale-romanum-1962.pdf), 28 January row: \"S. Petri Nolasci Conf., III classis. / Com. S. Agnetis Virg. et Mart., secundo.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A second commemoration of St Agnes (secundo, distinct from her main 21 January feast) is missing from data/ef/sanctoral.sexp. Traced upstream: lectio's own tridentine-calendar.ini has no 01-28 entry beyond [peter-nolasco] either -- a bootstrap-source gap, not a bootstrap-tool bug. Cannot be fixed without touching lectio (out of this task's reach); register §6 open item.")
- (expected_rows 2))
((id M5)
(citation "RG 80 (Major Litanies, 25 April) -- register §6's own pre-existing open item, \"Major Litanies (25 April, RG 80) are not computed\"")
(verdict missalemeum)
(note "Independently confirmed by the oracle, not a new finding: missalemeum's \"Pro rogationibus\" commemoration on St Mark's day (25 April, the Major Litanies' fixed date) is exactly the missing office register §6 already tracks. Only 2026 shows as a comparator MISMATCH: 25 April 2026 is a Saturday with Mark winning outright, so colitur's commemoration list is empty where the oracle's carries \"Pro rogationibus\" -- a real presence gap. 25 April 2027 is a Sunday: the Sunday wins on BOTH sides, and each side's own single commemoration slot goes to a DIFFERENT candidate (colitur: St Mark himself, an ordinary II-class sanctoral loser admitted under RG111(b)'s \"de festo II classis\" slot; missalemeum: the Major Litanies) -- both non-empty, same count, so this comparator's count-only axis (deliberately not slug-identity, see test_oracle.ml's own header) cannot see that mismatch; the underlying gap is the same, just invisible to this year's row.")
(expected_rows 1))
- ((id M6)
- (citation "CORRECTED 2026-08-12, transcription-audit task (branch ef-rg16a): the previous citation below read the ELECTRONIC TRANSCRIPTION (1962-06-23,_SS_Ioannes_XXIII,_Missale_Romanum,_LT.pdf), which silently drops calendarium commemorations, and mistook its silence for the calendarium's own. A photographic scan (missale-romanum-1962.pdf), 14 August row: \"Vigilia, II classis, Commemoratio S. Eusebii Conf.\", with its own proper immediately following (\"Eodem die ... Et fit commemoratio S. Eusebii Conf.\") -- independently confirmed in the second scan, Missale Romanum 1962_text.pdf. Primary-source-verified 2026-08-12.")
- (verdict missalemeum)
- (note "The same shape as M4/M7/M9/M14, not the reverse of them: a genuine commemoration -- S. Eusebius, Confessor, 14 August -- is present in the 1962 calendarium and in missalemeum's own data, but absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini (no 08-14 entry beyond vigil-of-the-assumption). This Eusebius Confessor (14 Aug) is a genuinely DIFFERENT saint from Eusebius Bishop and Martyr (16 Dec, already correctly in data/ef/sanctoral.sexp, matching lectio's own [eusebius] entry at THAT date) -- both exist, at their own separate dates; the calendarium carries both. Not fixed here: single-source data, the same bootstrap-reach constraint as M4/M7/M9/M14 (would require touching ~/git/projects/lectio). Register docs/research/rules-register.md, Decisions item 4 and the transcription-audit record in section 6, has the full account and the wider calendarium sweep this correction came from.")
- (expected_rows 2))
- ((id M7)
- (citation "1962 calendarium, 26 October row: \"Com. S. Evaristi Papæ et Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4: absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini (no 10-26 entry at all). Register §6 open item.")
- (expected_rows 2))
((id M8)
(citation "RG 109(a) (\"of a Sunday\" is always privileged) + RG 111(a) (\"I class: none save one privileged\")")
(verdict colitur)
(note "When a fixed I-class feast (All Saints 1 Nov; the Assumption 15 Aug) lands on an ordinary Sunday, the impeded Sunday IS the one privileged commemoration RG 111(a) admits -- already an established, independently-tested rule (test_precedence_ef.ml's RG95/RG109(a) row). missalemeum shows no commemoration at all on either occurrence in this window.")
(expected_rows 2))
- ((id M9)
- (citation "1962 calendarium, 9 November row: \"IN DEDICATIONE ARCHIBASILICÆ SANCTISSIMI SALVATORIS, II classis. / Com. S. Theodori Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4/M7: absent from data/ef/sanctoral.sexp and from lectio's own 11-09 entry (dedication-of-the-archbasilica-of-our-holy-savior alone). Register §6 open item.")
- (expected_rows 2))
((id M10)
(citation "RG 109(e), unqualified text: \"de feriis Adventus, Quadragesimae et Passionis\" -- of the FERIAS of Advent (not \"the Advent ferias 17-23 December only\", which is RG 91 entry 18's separate OCCURRENCE-table dignity, not a RG 109 privilege restriction)")
(verdict colitur)
@@ -104,11 +107,6 @@
(verdict missalemeum)
(note "Unimplemented in this codebase. 22 February 2027 (Chair of St Peter): colitur commemorates only the privileged Lent feria; missalemeum shows that AND \"St. Paul\". A genuine, primary-cited feature gap -- register §6 open item. Narrow: the only row in this window where it becomes visible against this comparator's axes (see the task report for the other Peter/Paul offices checked and found clean).")
(expected_rows 1))
- ((id M14)
- (citation "1962 calendarium, 14 May row: \"Com. S. Bonifatii Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4/M7/M9: a commemoration-only St Boniface, Martyr (DIFFERENT from the II-class St Boniface, Bishop and Martyr, of 5 June, which data/ef/sanctoral.sexp already carries correctly) is absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini for 05-14 (no entry at all). Only visible in 2027 -- in 2026, 14 May is Ascension Thursday (I class), which correctly admits no ordinary commemoration on either side (RG 111(a)), so Boniface is (correctly) absent from BOTH streams that year. Register §6 open item.")
- (expected_rows 1))
((id M13)
(citation "OPEN -- not adjudicated. 1962 calendarium's March table: \"Feria VI post dominicam I Passionis: Commemoratio septem Dolorum B. Mariæ Virg.\" (confirmed real, every year) -- but RG 91's plain table (entry 11-13, Joseph, I class, vs entry 22, an ordinary III-class Passiontide feria) gives Joseph the day outright, with no RG 96 collision requiring a transfer, so the primary text found here does not by itself explain missalemeum's result")
(verdict open)
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index 2624664..a86fd76 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -438,19 +438,11 @@ let bvm_saturday_title = "Salve, Sancta Parens"
colitur, same citation as lectio's own C8. *)
let m3_dates = [ "2027-05-03" ]
-(* M4 -- a genuine DATA GAP, primary-source-confirmed: the 1962 calendarium
- itself lists, under 28 January, "S. Petri Nolasci Conf., III classis. /
- Com. S. Agnetis Virg. et Mart., secundo" -- a second commemoration of
- St Agnes (distinct from her main 21 January feast) that data/ef/
- sanctoral.sexp does not carry at all. Traced upstream: lectio's own
- tridentine-calendar.ini has no 01-28 entry beyond [peter-nolasco]
- either, so colitur inherited the gap from its bootstrap source, not
- from the bootstrap tool mis-reading a present entry. Cannot be fixed in
- this task (data/ef/sanctoral.sexp is bootstrapped from lectio, per
- CLAUDE.md's binding decision 3; lectio itself needs the entry first,
- and this task does not touch ~/git/projects/lectio) -- verdict
- missalemeum, tracked as a register §6 open item. *)
-let m4_dates = [ "2026-01-28"; "2027-01-28" ]
+(* M4 -- REMOVED, ef-rebootstrap (2026-08-12): see data/ef/expected-
+ divergences-missalemeum.sexp's own "FIVE MORE REMOVED" note for the
+ full account (agnes-secundo now present in data/ef/sanctoral.sexp,
+ 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" --
@@ -471,41 +463,15 @@ let m4_dates = [ "2026-01-28"; "2027-01-28" ]
report). *)
let m5_dates = [ "2026-04-25" ]
-(* M6 -- CORRECTED 2026-08-12, transcription-audit task (branch ef-rg16a):
- the previous version of this comment read the ELECTRONIC TRANSCRIPTION
- (1962-06-23,_SS_Ioannes_XXIII,_Missale_Romanum,_LT.pdf), which silently
- drops calendarium commemorations, and mistook its silence for the
- calendarium's own -- "reads, in full, 'Vigilia, II classis.' -- nothing
- else" was true of the TRANSCRIPTION only. A photographic scan
- (missale-romanum-1962.pdf), 14 August row: "Vigilia, II classis,
- Commemoratio S. Eusebii Conf.", with its own proper immediately
- following ("Eodem die ... Et fit commemoratio S. Eusebii Conf.") --
- independently confirmed in the second scan, Missale Romanum 1962_text
- .pdf. The same shape as M4/M7/M9/M14, NOT their reverse: a genuine
- commemoration is present in the calendarium and in missalemeum's own
- data, but absent from data/ef/sanctoral.sexp and lectio's own
- tridentine-calendar.ini (no 08-14 entry beyond [vigil-of-the-assumption]).
- This Eusebius Confessor (14 Aug) is a genuinely DIFFERENT saint from
- Eusebius Bishop and Martyr (16 Dec, already correctly in data/ef/
- sanctoral.sexp, matching lectio's own [eusebius] entry at THAT date) --
- both exist, at their own separate dates. Verdict missalemeum (flipped
- from colitur): colitur is missing this commemoration, a genuine data gap
- not fixable without touching ~/git/projects/lectio -- see
- docs/research/rules-register.md, Decisions item 4 and the
- transcription-audit record in section 6, for the full account and the
- wider calendarium sweep this correction came from. The diff SHAPE this
- predicate matches (Comm_presence, both dates) is unchanged by the
- verdict flip -- only which side is right, and why, changed. *)
-let m6_dates = [ "2026-08-14"; "2027-08-14" ]
+(* 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
+ (eusebius-confessor), so the divergence no longer occurs. *)
-(* M7 -- a genuine DATA GAP, primary-source-confirmed, the same shape as
- M4: the calendarium's own 26 October row reads "Com. S. Evaristi Papæ
- et Mart." (Commemoration of St Evaristus, Pope and Martyr) -- absent
- from data/ef/sanctoral.sexp, and absent from lectio's own tridentine-
- calendar.ini for 10-26 (no entry at all for that date), so this is
- another bootstrap-source gap, not fixable without touching lectio.
- Verdict missalemeum, register §6 open item. *)
-let m7_dates = [ "2026-10-26"; "2027-10-26" ]
+(* M7 -- REMOVED, ef-rebootstrap (2026-08-12): see data/ef/expected-
+ divergences-missalemeum.sexp's own "FIVE MORE REMOVED" note. St
+ Evaristus (26 Oct) is now present in data/ef/sanctoral.sexp
+ (evaristus), so the divergence no longer occurs. *)
(* M8 -- RG 109(a) ("of a Sunday" is always privileged) + RG 111(a) ("on
I-class days... none save one privileged"): when a FIXED I-class feast
@@ -518,23 +484,15 @@ let m7_dates = [ "2026-10-26"; "2027-10-26" ]
colitur. *)
let m8_dates = [ "2026-11-01"; "2027-08-15" ]
-(* M9 -- a genuine DATA GAP, the same shape as M4/M7: the calendarium's own
- 9 November row reads, alongside the Dedication of the Archbasilica (II
- class), "Com. S. Theodori Mart." (Commemoration of St Theodore,
- Martyr) -- absent from data/ef/sanctoral.sexp and from lectio's own
- 11-09 entry (dedication-of-the-archbasilica-of-our-holy-savior alone,
- no second entry for that date). Verdict missalemeum, register §6 open
- item. *)
-let m9_dates = [ "2026-11-09"; "2027-11-09" ]
+(* M9 -- REMOVED, ef-rebootstrap (2026-08-12): see data/ef/expected-
+ divergences-missalemeum.sexp's own "FIVE MORE REMOVED" note. St
+ Theodore (9 Nov) is now present in data/ef/sanctoral.sexp (theodore),
+ so the divergence no longer occurs. *)
-(* M14 -- a genuine DATA GAP, the same shape as M4/M7/M9: the calendarium's
- own 14 May row reads "Com. S. Bonifatii Mart." (a commemoration-only St
- Boniface, Martyr -- DIFFERENT from the II-class St Boniface, Bishop and
- Martyr, of 5 June, which data/ef/sanctoral.sexp and lectio both already
- carry correctly) -- absent from data/ef/sanctoral.sexp and from lectio's
- own tridentine-calendar.ini for 05-14 (no entry at all for that date).
- Verdict missalemeum, register §6 open item. *)
-let m14_dates = [ "2027-05-14" ]
+(* M14 -- REMOVED, ef-rebootstrap (2026-08-12): see data/ef/expected-
+ divergences-missalemeum.sexp's own "FIVE MORE REMOVED" note. St
+ Boniface Martyr (14 May) is now present in data/ef/sanctoral.sexp
+ (boniface-martyr), so the divergence no longer occurs. *)
(* M10 -- RG 109(e), unqualified text ("de feriis Adventus, Quadragesimae
et Passionis" -- OF THE FERIAS OF ADVENT, not "of the Advent ferias 17-
@@ -705,13 +663,8 @@ 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 ] 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"
- else if List.mem c.c_date m4_dates && diffs = [ Comm_presence ] then Some "M4"
else if List.mem c.c_date m5_dates && diffs = [ Comm_presence ] then Some "M5"
- else if List.mem c.c_date m6_dates && diffs = [ Comm_presence ] then Some "M6"
- else if List.mem c.c_date m7_dates && diffs = [ Comm_presence ] then Some "M7"
else if List.mem c.c_date m8_dates && diffs = [ Comm_presence ] then Some "M8"
- else if List.mem c.c_date m9_dates && diffs = [ Comm_presence ] then Some "M9"
- else if List.mem c.c_date m14_dates && diffs = [ Comm_presence ] then Some "M14"
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"