aboutsummaryrefslogtreecommitdiff
path: root/data/ef/expected-divergences-missalemeum.sexp
diff options
context:
space:
mode:
Diffstat (limited to 'data/ef/expected-divergences-missalemeum.sexp')
-rw-r--r--data/ef/expected-divergences-missalemeum.sexp39
1 files changed, 35 insertions, 4 deletions
diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp
index ff3d776..30187de 100644
--- a/data/ef/expected-divergences-missalemeum.sexp
+++ b/data/ef/expected-divergences-missalemeum.sexp
@@ -160,7 +160,9 @@
((id M1)
(citation "RG 33, corrected (precedence_ef.ml's own [is_omissible_vigil], primary-source-verified 2026-08-12): \"Vigilia II aut III classis penitus omittitur, si occurrat in dominica quavis...\" -- a II or III class vigil is entirely omitted if it occurs on ANY Sunday")
(verdict colitur)
- (note "missalemeum does not implement RG 33's Sunday-omission for II/III-class vigils. 28 June 2026 (Vigil of Sts Peter & Paul, II class): still shown as a commemoration on the V Sunday after Pentecost. 9 August 2026 (Vigil of St Lawrence, III class): shown as the day's FULL OBSERVED OFFICE, displacing the XI Sunday after Pentecost entirely, not merely surviving as a commemoration.")
+ (note "missalemeum does not implement RG 33's Sunday-omission for II/III-class vigils. 28 June 2026 (Vigil of Sts Peter & Paul, II class): still shown as a commemoration on the V Sunday after Pentecost. 9 August 2026 (Vigil of St Lawrence, III class): shown as the day's FULL OBSERVED OFFICE, displacing the XI Sunday after Pentecost entirely, not merely surviving as a commemoration.
+
+WIDENED, Task 9 (branch ef-lectionary, layer-4 oracle): [First_mismatch]/[Gospel_mismatch] joined the accepted diff set on 9 August 2026 (test_oracle.ml's own [m1_dates] predicate) -- now that reading citations are compared at all, the day's own OBSERVED-identity divergence this entry already explains naturally carries a citation divergence too (colitur's own XI-Sunday-after-Pentecost reading vs missalemeum's own Vigil-of-St-Lawrence reading), the SAME \"identity already differs, so citation differs too\" consequence data/ef/expected-divergences.sexp's own C14/C15/C16/C29 already establish for the sibling lectio differential. Count unchanged: 2.")
(expected_rows 2))
((id M3)
(citation "RG 87 (Minor Litanies/Rogations, Mon/Tue before Ascension) -- the SAME citation as the lectio allow-list's own C8 (data/ef/expected-divergences.sexp)")
@@ -190,7 +192,9 @@
((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)
- (note "19 March 2027: St Joseph (I class) falls on the Friday of Passion Week. missalemeum shows Joseph entirely displaced, with the Friday's own III-class violet office observed and the Seven Sorrows commemorated instead. Three possibilities, none confirmed: (a) colitur's plain RG 91 reading is right and missalemeum is wrong; (b) a more specific rubric attached to St Joseph's own Proprium Sanctorum entry (the same shape as the Annunciation's own Attamen clause) overrides the general table for this exact collision, and this task did not find its text; (c) the Seven Sorrows commemoration itself outranks an ordinary I-class feast on this one Friday, unsupported by anything found here either. Extensive but non-exhaustive primary-source search did not settle it -- register §6 open item, explicitly unresolved rather than defaulted to either side. Separately, but confirmed regardless: colitur does not implement the Seven-Sorrows-of-Passion-Friday commemoration at all, in any year -- a real, primary-attested gap on its own. CORRECTED 2026-08-12 (Task B, branch ef-rg16a, commemoration-identity comparison): this date now ALSO trips [Comm_identity_unresolved] (colitur's own commemorated candidate there, [ef-passiontide-1-friday], is temporal-origin and carries no English name) -- the SAME root cause as M15 below, folded into this entry's own subset check rather than a separate id, since it is the identical Seven-Sorrows gap this note already names, not a new finding.")
+ (note "19 March 2027: St Joseph (I class) falls on the Friday of Passion Week. missalemeum shows Joseph entirely displaced, with the Friday's own III-class violet office observed and the Seven Sorrows commemorated instead. Three possibilities, none confirmed: (a) colitur's plain RG 91 reading is right and missalemeum is wrong; (b) a more specific rubric attached to St Joseph's own Proprium Sanctorum entry (the same shape as the Annunciation's own Attamen clause) overrides the general table for this exact collision, and this task did not find its text; (c) the Seven Sorrows commemoration itself outranks an ordinary I-class feast on this one Friday, unsupported by anything found here either. Extensive but non-exhaustive primary-source search did not settle it -- register §6 open item, explicitly unresolved rather than defaulted to either side. Separately, but confirmed regardless: colitur does not implement the Seven-Sorrows-of-Passion-Friday commemoration at all, in any year -- a real, primary-attested gap on its own. CORRECTED 2026-08-12 (Task B, branch ef-rg16a, commemoration-identity comparison): this date now ALSO trips [Comm_identity_unresolved] (colitur's own commemorated candidate there, [ef-passiontide-1-friday], is temporal-origin and carries no English name) -- the SAME root cause as M15 below, folded into this entry's own subset check rather than a separate id, since it is the identical Seven-Sorrows gap this note already names, not a new finding.
+
+WIDENED, Task 9 (branch ef-lectionary, layer-4 oracle): [First_mismatch]/[Gospel_mismatch] joined the accepted diff set (test_oracle.ml's own [m13_dates] predicate) -- colitur's own OBSERVED day here is Joseph, whose real proper (Ecclus 45:1-6/Matt 1:18-21) naturally diverges from missalemeum's own Seven-Sorrows-of-Passion-Friday reading (Jer 17:13-18/John 11:47-54) for the SAME already-named cause (the Seven Sorrows office is unimplemented, so colitur observes Joseph outright instead), not a fourth, independent divergence. Count unchanged: 1.")
(expected_rows 1))
((id M15)
(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)")
@@ -217,8 +221,10 @@
(verdict unresolvable)
(note "REVISED AGAIN, ef-major-litanies task: 394, down by exactly 1 from the ef-bvm-saturday task's own 395 (breakdown below unchanged in kind, only this one row moved). 25 April 2027 used to carry [Observed_identity_unresolved] ALONE (the Sunday itself is temporal-origin, unresolved; commemoration identity agreed by coincidence -- Mark on both sides, pre-Litanies) and so fell into this entry's own bucket; now that the Major Litanies are built, that same date ALSO carries [Comm_identity_mismatch] (colitur admits the Litanies, missalemeum still admits Mark -- see [M20]'s own new entry), so it moves OUT of this bucket and into M20's own single-row citation instead. Verified directly from the comparator's own failure output, not merely arithmetic (395-1=394 is necessary but not sufficient: the mechanism above is why it left, not merely that some count decreased).
-REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry this shape alone (M1/M3/M16 absorb a further 4 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 395+4=399 is the axis's own full unresolved population, UNCHANGED from before that task -- only the SPLIT moved, since M2 (closed above) used to separately absorb 22 of the 26 that used to be \"elsewhere\"). Before that revision the split was 373 alone / 26 elsewhere (373+26=399) -- CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own (then 395, now 394) and the 4 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before the ef-rg112-rg110 task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes this number and fails the pin, even though the axis itself cannot say WHICH specific day moved or why -- exactly the guard that caught this task's own -1 shift, which HAD to be traced to a specific date and mechanism (above) rather than merely re-baselined. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, 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\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis).")
- (expected_rows 394))
+REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry this shape alone (M1/M3/M16 absorb a further 4 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 395+4=399 is the axis's own full unresolved population, UNCHANGED from before that task -- only the SPLIT moved, since M2 (closed above) used to separately absorb 22 of the 26 that used to be \"elsewhere\"). Before that revision the split was 373 alone / 26 elsewhere (373+26=399) -- CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own (then 395, now 394) and the 4 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before the ef-rg112-rg110 task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes this number and fails the pin, even though the axis itself cannot say WHICH specific day moved or why -- exactly the guard that caught this task's own -1 shift, which HAD to be traced to a specific date and mechanism (above) rather than merely re-baselined. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, 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\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis).
+
+REVISED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): 352, down by 42 from 394. NOT a change to this entry's own guard (still, and only, [diffs = [ Observed_identity_unresolved ]] exactly) -- this task compared reading citations for the first time, and 42 of the former 394 rows now ALSO carry a real [First_mismatch]/[Gospel_mismatch] alongside the pre-existing observed-identity gap, so they escape this entry's own EXACT-match guard and move to the six new entries below (M23 2, M24 4, M25 4, M26 30, M27 2 -- 2+4+4+30+2=42, exactly accounting for the drop, verified against the comparator's own failure output, not assumed from the arithmetic alone). The remaining 352 are every temporal-origin observed day whose reading citation ALREADY agreed with missalemeum before this task and still does -- unaffected by this task's own fixes, since those fixes only ever touched a citation, never an identity.")
+ (expected_rows 352))
((id M19)
(citation "RG 110's OTHER direction: \"In Officio et Missa S. Petri semper fit commemoratio S. Pauli, ET VICISSIM\" -- the SAME rule M12 used to cite, applied here to Paul's own office commemorating Peter, not Peter's own office commemorating Paul; confirmed a third time by the calendarium's own June table, both photographic scans, word for word: \"In Commemoratione S. Pauli Ap., III classis. / Commemoratio S. Petri Ap.\"")
(verdict colitur)
@@ -233,3 +239,28 @@ REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry
HONESTLY FLAGGED, now closer to certain than first written: this is the first real (non-synthetic) data point this codebase has for \"an ordinary Class2 feast and a privileged non-feast commemoration both losing to the identical Sunday\" -- every other witness for this admit branch in test_precedence_ef.ml is hand-built. First written \"moderate-high, not certain\"; RG 434(b)'s own independent, Mass-specific repetition of RG 111(b)'s exact rule (fix round 1 finding, above) closes the main remaining doubt (that RG 111 might be Office-shaped) and moves this near-certain -- but NOT to certain, and the revisit trigger stands: no primary text anywhere names the Major Litanies in a Mass-orations-count worked example, only the general II-class-Sunday rule, twice over. RG 434(b) closes the Office-shaped doubt and nothing further. If a future primary-source pass finds textual grounds narrowing RG 109(f)'s privilege specifically, THIS is the entry to revisit first. (That sentence was dropped in the same edit that raised the label to near-certain, and is restored here: upgrading a confidence while deleting its revisit trigger is the one move this record must not make.) missalemeum's divergence remains consistent with this project's already-documented pattern of RG 108-111 gaps in that oracle (M1, M8, M10 above each already \"missalemeum does not implement X\") -- plausibly one more instance of the same generator not modelling RG 109(f)'s privilege for this rare, single-date observance. Identity-gated (test_oracle.ml's own [m20_commemoration_matches]): pins that colitur's own sole admitted commemoration really is [major-litanies].")
(expected_rows 1))
+ ((id M23)
+ (citation "tools/extract_missalemeum_oracle.py's own header (the extraction script, not an RG citation): missalemeum's JSON has no \"Lectio\"/\"Evangelium\" section at all for Good Friday, a multi-lesson \"Missa Praesanctificatorum\" structure instead (\"Lectiones\"/\"Passio\") -- a comparator/fixture-structural limit, not a rubric dispute")
+ (verdict colitur)
+ (note "Task 9 (branch ef-lectionary, layer-4 oracle): Good Friday, both years (2026-04-03, 2027-03-26). colitur's own citation (Ex 12:1-11/John 18:1-40; 19:1-42) is Missal-verified twice, both scans, already established (tools/bootstrap_lectionary.ml's own [holy_week_entries], Task 8) -- it is missalemeum's OWN JSON, not colitur, that has nothing in the shape this schema's First/Gospel pair assumes for this one day: Good Friday's own liturgy is multiple readings without a single labelled \"Epistle\", the SAME shape colitur's own bootstrap hit and solved with a stated convention (the second of two peer lessons) rather than leaving absent. [First_unresolved]/[Gospel_unresolved] fire on the ORACLE side here (the mirror image of [Comm_identity_unresolved]'s own colitur-side absence) -- counted and cited, never silently skipped, the same discipline this file's own M15/M18 already establish for the opposite direction. Derived directly from the OCaml comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted first and cross-checked after: 2.")
+ (expected_rows 2))
+ ((id M24)
+ (citation "Not an RG citation -- a source-presentation quirk in missalemeum's own JSON, checked directly against the raw data (tools/extract_missalemeum_oracle.py's own extraction, verified by hand for these four rows): the Gospel citation embeds a LATIN book abbreviation (\"Luc\"/\"Joann\") instead of missalemeum's own usual English one (\"Luke\"/\"John\") on exactly these four Holy Week rows, nowhere else in the whole 730-day fixture")
+ (verdict colitur)
+ (note "Task 9 (branch ef-lectionary, layer-4 oracle): Holy Wednesday and Holy Thursday, both years (2026-04-01/04-02, 2027-03-24/03-25). Same underlying verse range on both sides, confirmed directly: colitur \"Luke 22:39-71; 23:1-53\" vs missalemeum \"Luc 22:39-71; 23:1-53\" (Holy Wednesday); colitur \"John 13:1-15\" vs missalemeum \"Joann 13:1-15\" (Holy Thursday, where the Epistle side already matches after this file's own [normalize_citation] strips the trailing full stop missalemeum's own sentence happens to end with, \"1 Cor 11:20-32.\"). Not folded into [normalize_citation] itself -- a Latin/English book-name equivalence table would be the first step of a general translation layer this project's own citation discipline deliberately does not build, the SAME comparator limit M5 already names for a different vocabulary gap (\"The Major Litanies\" vs \"Pro rogationibus\"). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 4.")
+ (expected_rows 4))
+ ((id M25)
+ (citation "Not an RG citation -- a punctuation-only difference in how the SAME verse range is written, checked directly: \"4 Kings 5:1-15\" (colitur) vs \"4 Kings, 5:1-15\" (missalemeum, a spurious comma with no citation content of its own); \"Dan 14:27, 28-42\" (colitur, verse 27 named separately then 28-42) vs \"Dan 14:27-42\" (missalemeum, the identical span written as one contiguous range)")
+ (verdict colitur)
+ (note "Task 9 (branch ef-lectionary, layer-4 oracle): four Lenten rows (2026-03-09/03-24, 2027-03-01/03-16 -- Frances of Rome and Gabriel the Archangel's own commemorated Lenten ferias, both years). Neither pair is a book/chapter/verse-NUMBER difference [normalize_citation] could safely absorb without also risking equating two GENUINELY different verse lists elsewhere in the fixture that happen to share this exact shape (a real \"12, 15-20\" vs \"12-20\" would look identical to this rule but mean different things) -- named individually instead, the same discipline M5's own identity-gated predicate already applies to a citation-vocabulary gap it also declines to generalise. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 4.")
+ (expected_rows 4))
+ ((id M26)
+ (citation "{!Rite_ef.Lectionary_ef.readings}'s own header comment (not an RG citation, a comparator/architecture LIMIT): step 3's own WARRANT is \"lectio's own observed behaviour... not a confirmed Missal citation\" -- register's own standing note; RG 309(a) (\"iuxta temporum diversitatem\", the season-keyed votive-Mass selection this task's own investigation confirmed missalemeum implements and colitur does not, corroborating Task 6's own already-recorded open item)")
+ (verdict open)
+ (note "Task 9 (branch ef-lectionary, layer-4 oracle): 30 rows, ONE root cause, THREE confirmed shapes, none built here. (1) RG 78's own rotating votive Mass of the BVM (\"Missae de sanctae Mariae in sabbato\" and its Time-after-Pentecost siblings, missalemeum's own \"II/III/V Mass of the B. V. M.\" titles) on an otherwise-unoccupied feria -- Task 6's own already-named open item (\"the BVM Saturday Office still emits its feria's Mass... needs... a season-keyed selection among five formularies\"), confirmed live on four Saturdays here (2026-01-03/01-10, 2027-01-02/01-09 -- `ef-christmas-1-saturday`/`ef-christmas-2-saturday`, this task's own deliberately-unentered slugs, C25's unchanged population in the sibling lectio differential) and on every ordinary Time-after-Pentecost weekday feria in this entry's own remaining population (2026-02-14/06-20/06-27/07-04/07-11/08-01/10-31/11-07/11-28, 2027-07-17/07-24/09-04/09-11/10-30/11-06/11-13/11-27). (2) A named weekly formula distinct from the plain Sunday-repeat rule, found by accident while researching Corpus Christi's own Mass (docs/research/scan1.txt, \"Missa dominicae I post Pentecosten\", 1 Ioann. 4:8-21/Luc. 6:36-42, printed immediately before Corpus Christi's own heading) but NOT independently verified as a general \"every week has its own named formula\" rule the way the January window (this task's own [epiphanytide_opening_entries]) was -- 2026-06-02/06-03 and 2027-05-24 show it. (3) Later Time-after-Pentecost weeks (2026-10-26 through 2026-10-30, 2027-11-03/11-05) whose own votive/ferial answer this task's own investigation did not narrow to a single citable rule at all. None is safe to fix piecemeal inside this task's own scope (extending layer 4 + triage) without the same real, dedicated, TDD/mutation-tested unit of work data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own open item already call for -- a season-keyed ferial/votive-Mass-selection mechanism, new behaviour, not new data. Verdict open, the SAME fourth verdict M15/M18 already establish for a genuine comparator/architecture LIMIT, honestly counted rather than silently absorbed or left failing without explanation. A literal date list, not a shape predicate: no single structural signal (unlike C17's own [subject = bvm]) distinguishes this population from a genuinely new, unrelated citation bug on some other Time-after-Pentecost feria. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 30.")
+ (expected_rows 30))
+ ((id M27)
+ (citation "tools/extract_missalemeum_oracle.py's own header (the extraction script, not an RG citation): Christmas Day has THREE Masses in the 1962 Missal (Midnight/Dawn/Day), each with its own distinct Epistle+Gospel; this fixture's own entry[0] convention (verified, and documented, for every OTHER field it reads) takes the Midnight Mass, while colitur's own citation (bootstrapped from lectio) reflects the Day Mass -- two DIFFERENT, both genuine, Masses of the identical civil day")
+ (verdict colitur)
+ (note "Task 9 (branch ef-lectionary, layer-4 oracle): 25 December, both years. colitur: Heb 1:1-12/John 1:1-14 (\"Missa in die\"); missalemeum's own entry[0]: Titus 2:11-15/Luke 2:1-14 (\"Missa in nocte\"). Both are real, correct, Missal-verifiable citations for 25 December -- this is not a rubric dispute or a data gap either engine is wrong about, a comparator/fixture-extraction artefact (which of several equally-real Masses a multi-Mass day's own JSON array entry[0] happens to be). NOT fixed by changing the extractor's own array-index convention: that convention is deliberate and already verified, in the extraction script's own header, for every OTHER field this fixture reads on a multi-Mass day (rank/colours/tempora/commemorations/displaced, confirmed IDENTICAL across a day's own multiple Masses on all 4 such days, Christmas and All Souls, both years) -- only the CITATION fields are not identical across a day's own Masses, discovered by this task, and changing the index for citations alone while keeping it for everything else would be a second, undeclared convention, not a fix. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 2.")
+ (expected_rows 2))