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); 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: commit d7da4b0 "sources: store the snapshot as one compressed archive" path sources/snapshot.tar.gz, entries missalemeum/en/YYYY-MM-DD.json (lectio/sources/README.md: "First archived 2026-07-29") Re-verified 2026-08-12 (Task B): sources/snapshot.tar.gz is still at commit d7da4b0 (git log -1 -- sources/snapshot.tar.gz, working tree clean for that path) -- the underlying data has not moved. Re-extracted into a scratch copy OUTSIDE ~/git/projects/lectio (that repo was not read via its own 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: 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 python3 ~/git/projects/colitur/tools/extract_missalemeum_oracle.py \ ~/git/projects/lectio/sources \ ~/git/projects/colitur/test/fixtures/missalemeum-ef-2026-2027.txt 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|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; 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 for THOSE fields (this fixture's own convention) loses nothing the comparator or a human auditor needs there -- CORRECTED, fix round 1 (coordinator review): this is NOT true for the citation fields Task 9 added. Christmas (25 December) has three genuinely different Masses (Midnight/Dawn/Day) with three different Epistle+Gospel pairs; entry[0] is the Midnight Mass, colitur's own citation (bootstrapped from lectio) reflects the Day Mass -- a real, documented divergence (test_oracle.ml's own M27), not one this convention avoids. The citation extraction itself (all 1 456 Lectio/ Evangelium sections, 728 days x 2) does NOT yield exactly one candidate per section either -- CORRECTED, fix round 1: 2 of the 1 456 (Holy Saturday's own "Lectio", both years) yield two verse-shaped spans, ['Col 3:1-4', 'Ps 117, 1'] (the second is the Tractus verse following the real citation in the same paragraph). Both rows are still extracted correctly because [extract_citation] returns candidates[0] and the real citation happens to come first -- correctness rests on ORDERING, not uniqueness. See tools/extract_missalemeum_oracle.py's own header for the full account of both corrections. 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.