aboutsummaryrefslogtreecommitdiff
path: root/test/fixtures/missalemeum-ef-2026-2027.provenance
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 12:28:03 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 12:28:03 +0200
commit8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7 (patch)
tree9c72d1c30f0f37ef7138325abb3ca26ebe68ff14 /test/fixtures/missalemeum-ef-2026-2027.provenance
parent9947a28f3a40bd8ac36892dcf5aad59d9e6f847c (diff)
downloadcolitur-8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7.tar.gz
colitur-8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7.zip
test(oracle): compare reading citations against missalemeum
Layer 4 (test_oracle.ml) now extracts and compares the Epistle/Gospel citation for every one of the 730 days in the 2026-2027 fixture, the same axis Task 8 already added to layer 3. tools/ extract_missalemeum_oracle.py gained a structural citation-span detector (the first "*...*"-wrapped span under 40 chars containing a chapter:verse-shaped digit pair), verified exhaustively over all 1 458 Lectio/Evangelium sections. 728 of 730 days are comparable; the 2 that are not (Good Friday, both years) have no such section in missalemeum's own JSON at all -- a structural limit on the oracle's own side (M23), not a colitur gap. 451 of 730 days differ and are all explained across 19 cited entries; 0 unexplained. Chain step 4 (the Commons) has no layer-4 witness: confirmed empirically (a scratch sweep, not merely re-asserted from Task 6's own report) that none of the 15 Commons/proper saints is ever the observed office in this window. The comparison surfaced three genuine colitur bugs in data/ef/lectionary.sexp, all fixed at the source in tools/bootstrap_lectionary.ml: 1. Holy Name of Jesus (ef-holy-name-sunday/ef-holy-name) carried a mis-derived citation, borrowed by analogy from an unrelated ini section ("ef-christmas-sunday-0", the Sunday-within-the-Octave's own Mass) on the wrong assumption the two share a Mass. Disproved by missalemeum's own extraction for both real Holy Name Sundays in its window, confirmed against the Missal itself, twice, both scans (Acts 4:8-12/Luke 2:21, not Gal 4:1-7/Luke 2:33-40). 2. RG 17(a)'s own "diebus ferialibus" rubric (immediately following the Holy Name heading, both scans) was never implemented: 2-5 January ferias repeat 1 January's Mass, 7-12 January ferias before Holy Family Sunday repeat Epiphany's, and Holy Family's own week has a named formula ("Missa Dominicae Primae post Epiphaniam"). All three fell to step 3's undifferentiated Sunday walkback instead. Fixed for three 5-weekday families, deliberately excluding Saturday from all three -- RG 78's BVM Saturday Office wins there unconditionally, confirmed against missalemeum's own title on this window's own such Saturdays. 3. Corpus Christi and Sacred Heart (both real, never-impeded I-class movable feasts) had no lectionary entry at all. Both engines independently fell back to Trinity Sunday's own citation and silently agreed on the wrong answer -- the "Holy Thursday violet in both" shape CLAUDE.md names for exactly this reason. Because lectionary.sexp is shared with layer 3 (the lectio differential, 2005-2050), these fixes changed colitur's output for the whole domain, not only 2026-2027. data/ef/expected-divergences.sexp and test_differential.ml needed matching updates: C1 narrowed 361->173 and C25 narrowed 57->13 (rows that now resolve correctly moved to new entries), C16's note corrected (count unchanged), and six new entries added (C29-C34, 397 rows total, all verdict colitur). test_lectionary.ml and test_lectionary_ef.ml's own pins were updated to match (entry count 131->148; one step-3 regression test re-pointed to a date that still genuinely exercises that step). One entry, M26 (30 rows, verdict open), is a genuine unfixed gap: colitur's step-3 "resume the preceding Sunday" fallback is its only ferial-Mass mechanism, and missalemeum's own selection is more granular in three confirmed ways (a rotating votive Mass of the BVM, a named weekly formula for at least one week, and later Time-after-Pentecost weeks this task's own investigation did not narrow to a single rule) -- the same "needs a season-keyed selection mechanism, new behaviour not new data" shape data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own residual concern already name, out of this task's own scope to build. dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359 tests green, 89.5s.
Diffstat (limited to 'test/fixtures/missalemeum-ef-2026-2027.provenance')
-rw-r--r--test/fixtures/missalemeum-ef-2026-2027.provenance45
1 files changed, 27 insertions, 18 deletions
diff --git a/test/fixtures/missalemeum-ef-2026-2027.provenance b/test/fixtures/missalemeum-ef-2026-2027.provenance
index adae533..d760c9f 100644
--- a/test/fixtures/missalemeum-ef-2026-2027.provenance
+++ b/test/fixtures/missalemeum-ef-2026-2027.provenance
@@ -1,7 +1,9 @@
Fixture: missalemeum-ef-2026-2027.txt
Task: 2026-08-11-colitur-plan3-resolution-engine, Task 16 (oracle harness +
data audit); field 9 (commemoration_ids) added 2026-08-12, Task B
-(branch ef-rg16a, commemoration-identity comparison).
+(branch ef-rg16a, commemoration-identity comparison); fields 10-11
+(first/gospel citations) added 2026-08-17, Task 9 (branch ef-lectionary,
+reading-citation comparison).
Source: missalemeum.com (Divinum Officium data), archived by the sibling
project ~/git/projects/lectio at:
@@ -16,15 +18,16 @@ working commands and was not modified -- another agent was working there
concurrently), and confirmed the first 8 fields are byte-identical to the
fixture's own prior content before field 9 was appended.
-SHA-256 of the extracted fixture: 4162e79d7a0bc03b81a34ce6cd3b074e2d32570217759bc3b4058ada75ea8781
-(previously 718eff1a03fa09c3927ef18d19fe7921c2d4d7611890c22566058b81fd7cc5ea,
-before field 9 was appended -- same digest as [fixture_sha256] in
-test/test_oracle.ml, ASSERTED by that suite's own "fixture SHA-256 matches
-its provenance note" test -- this line documents the pin for a reader who
-never runs the suite; that test is what actually enforces it. Regenerate
-both together, deliberately, after re-running the exact command below --
-never by copying a mismatch's actual value back in, which would defeat the
-pin's purpose.)
+SHA-256 of the extracted fixture: 350199498ce197c93dfee23bea62a47811995c3c70eec66707c123dd9e9c37fb
+(previously 4162e79d7a0bc03b81a34ce6cd3b074e2d32570217759bc3b4058ada75ea8781,
+before fields 10-11 were appended, and 718eff1a03fa09c3927ef18d19fe7921c2d4d7611890c22566058b81fd7cc5ea
+before that, before field 9 was appended -- same digest as [fixture_sha256]
+in test/test_oracle.ml, ASSERTED by that suite's own "fixture SHA-256
+matches its provenance note" test -- this line documents the pin for a
+reader who never runs the suite; that test is what actually enforces it.
+Regenerate both together, deliberately, after re-running the exact command
+below -- never by copying a mismatch's actual value back in, which would
+defeat the pin's purpose.)
Exact commands:
cd ~/git/projects/lectio && sh scripts/snapshot-sources.sh unpack
@@ -34,17 +37,23 @@ Exact commands:
Output: one line per civil day, 2026-01-01 through 2027-12-31 inclusive
(730 lines = 365 + 365, both non-leap years), pipe-separated:
- date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids
+ date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids|first|gospel
See tools/extract_missalemeum_oracle.py's own header for the exact field
semantics (info.rank/colors/title/tempora/commemorations/displaced,
verbatim English strings, not translated or slugified; commemoration_ids is
-info.commemorations[*].id, ";"-joined, index-aligned with commemorations)
-and the two things verified during extraction, not merely assumed: no
-field collides with the "|"/";" delimiters, and all 4 multi-Mass days (info
-is an array on 2026-11-02, 2026-12-25, 2027-11-02, 2027-12-25) carry an
-IDENTICAL info block (rank/colors/tempora/commemorations/displaced) across
-every Mass of the day, so taking entry[0] throughout (this fixture's own
-convention) loses nothing the comparator or a human auditor needs.
+info.commemorations[*].id, ";"-joined, index-aligned with commemorations;
+first/gospel, Task 9, are the day's Epistle and Gospel citations extracted
+from entry[0]["sections"]'s own "Lectio"/"Evangelium" bodies, verbatim,
+"-" for the 2 Good Friday rows which have no such section at all) and the
+things verified during extraction, not merely assumed: no field collides
+with the "|"/";" delimiters, all 4 multi-Mass days (info is an array on
+2026-11-02, 2026-12-25, 2027-11-02, 2027-12-25) carry an IDENTICAL info
+block (rank/colors/tempora/commemorations/displaced) across every Mass of
+the day, so taking entry[0] throughout (this fixture's own convention)
+loses nothing the comparator or a human auditor needs, and the citation
+extraction itself (all 1 458 Lectio/Evangelium sections across the 728
+days that carry one) yields exactly one unambiguous citation-shaped
+candidate per section -- checked exhaustively, not sampled.
Regenerate with the same commands if the missalemeum snapshot is refreshed
and the fixture needs updating; do not hand-edit this file or the fixture.