diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 16:00:23 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 16:00:23 +0200 |
| commit | f03567a04b68ab19b5f16f0b6d56d9c08b14c818 (patch) | |
| tree | b6ea189657c866c1d3ba435398c4d19395f0a143 /test/fixtures/missalemeum-ef-2038.provenance | |
| parent | c06ebb7344b7f267c325b832632f7cd4e81939e7 (diff) | |
| download | colitur-f03567a04b68ab19b5f16f0b6d56d9c08b14c818.tar.gz colitur-f03567a04b68ab19b5f16f0b6d56d9c08b14c818.zip | |
test(oracle): a second oracle year, 2038, closing step 4's blind spot
Register section 6.7 recorded that step 4 of the reading chain -- the
Common route -- had no external witness of any kind, and proved it by
mutation: corrupting a Common citation left both the 16801-day
differential and the 730-day oracle green. This closes that.
2038 is the only year in 2005-2050 in which two of the five
Common-routed saints are the observed office (Perpetua and Felicitas on
6 March, Frances of Rome on 9 March). 365 days were captured live, one
request per day, zero failures.
A separate fixture, not more rows on the existing one. sources.md
already records that the live endpoint has drifted from lectio's
archived 2026-2027 snapshot; merging two versions of one source behind a
single set of expectations would make any future disagreement
unattributable -- calendar or drift, no way to tell. Nothing in the 2038
comparison is checked against the older fixture, and its provenance file
says so, along with the fact that a live capture is not reproducible
byte-for-byte on demand the way a snapshot-derived one is.
338 of 365 days match. 27 differ, every one of them in a named,
already-adjudicated class, none unexplained: 13 the BVM Saturday votive
Mass (M26 shape 1), 7 colour (M21), 2 Judith (M28), 2 Christ the King's
week (M26 shape 2b), 1 Christmas multi-Mass (M27), 1 Perpetua's Common,
1 new. Each was decided in a different year, so 2038 re-confirms them
independently -- the point of a second window is not new rulings but
evidence the old ones are not artefacts of their own year.
Two findings came out of it. Perpetua and Felicitas: missalemeum serves
the Common of Virgins and calls them "Virgins and Martyrs" in its own
oration, where the Missal directs "Missa Me exspectaverunt, de Communi
non Virginum I loco" (scan1:27634-27635). Both Commons share the Introit
Ps 118:95-96, which is exactly why the calendarium qualifies its
direction, and both women were mothers. Verdict colitur; the mechanism
is located on missalemeum's side, not merely asserted. Passion Tuesday:
the Missal prints "Dan. 14, 27 et 28-42" (scan1:11106) and colitur
reproduces that two-part form where missalemeum collapses it to
27-42. Same verses; the convention is deliberate, appearing also in the
Seven Sorrows and the Common of Non-Virgins. Verdict colitur, cosmetic.
Citations are notation-normalised before comparing, as layer 3 already
does: Ecclus/Sir, Joann/John, Luc/Luke, Matth/Matt. Each pair was added
because a real row needed it, and no target contains its own source as a
substring, so the set is idempotent.
Not compared, stated rather than left to be found: commemorations and
observed-identity. That machinery is built around a date-literal
28-entry allow-list specific to 2026-2027, and re-deriving it for a
second year is its own task. 2038 compares rank, colour, Epistle, Gospel.
The extractor's day count was hardcoded to 730, which silently forbade
any other window. It is now a parameter defaulting to 730, so the
existing documented command keeps its guard and a partial fetch still
fails loudly instead of producing a short fixture that passes a
comparison it never ran.
Teeth, by re-running section 6.7's own experiment: corrupting the Common
of Non-Virgins II now reddens four tests, two of them external-oracle,
where the same mutation previously reddened neither oracle layer.
Residual: isidore-of-seville is still unwitnessed and needs 2035 or
2046; gregory-the-great and patrick are never the observed office in any
year 2005-2050, so no fixture in that range can reach them.
Register section 6.8 and 6.9.
Diffstat (limited to 'test/fixtures/missalemeum-ef-2038.provenance')
| -rw-r--r-- | test/fixtures/missalemeum-ef-2038.provenance | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/test/fixtures/missalemeum-ef-2038.provenance b/test/fixtures/missalemeum-ef-2038.provenance new file mode 100644 index 0000000..a69c558 --- /dev/null +++ b/test/fixtures/missalemeum-ef-2038.provenance @@ -0,0 +1,80 @@ +Fixture: missalemeum-ef-2038.txt +Task: the 2038 oracle extension, 2026-08-17 (branch ef-oracle-2038). + +WHY 2038 AND NOT ANOTHER YEAR +---------------------------- +docs/research/rules-register.md ยง6.7 recorded that step 4 of the reading- +resolution chain -- the Common route, data/ef/commons.sexp -- had NO external +witness of any kind. Only five saints route through a Common, and across all +of 2005-2050 they are the OBSERVED office on five days total: + + isidore-of-seville 2008, 2035, 2046 + frances-rome 2038 + sts-felicitas-perpetua 2038 + gregory-the-great never (impeded by Lent's privileged ferias every year) + patrick never (same) + +None falls inside the 2026-2027 fixture's own window, so layer 4 had never +once compared a Common-routed citation. 2038 is the year that covers TWO of +the five at once, which is why it was chosen over 2035 or 2046. + +SOURCE, AND HOW IT DIFFERS FROM THE 2026-2027 FIXTURE'S +------------------------------------------------------- +This fixture is a LIVE capture, not an archived snapshot, and that is a +material difference from missalemeum-ef-2026-2027.provenance's own source: + + endpoint : https://www.missalemeum.com/en/api/v5/proper/YYYY-MM-DD + fetched : 2026-08-17, one request per day, 2038-01-01..2038-12-31, + 365 files, 0 failures, 0.25s between requests + local : the JSON was written into a scratch directory laid out as + <dir>/missalemeum/en/YYYY-MM-DD.json so the existing extractor + could read it unchanged + +docs/research/sources.md already records that **the live endpoint HAS DRIFTED +from lectio's archived 2026-2027 snapshot, so the two are not +interchangeable.** That is why this is a SEPARATE fixture with its own +comparison and its own allow-list rather than extra rows appended to the +2026-2027 one: merging them would put two different versions of the same +source behind a single set of expectations, and a future disagreement could +not be attributed to either the calendar or the drift. Nothing here is +compared against the 2026-2027 fixture. + +Because it is a live capture of a third-party service, it is also NOT +reproducible byte-for-byte on demand the way the snapshot-derived fixture is: +re-running the fetch tomorrow may legitimately return different content if +missalemeum changes. The SHA below pins WHAT WAS COMPARED, and a mismatch +means the fixture file changed, not that missalemeum did. + +SHA-256 of the extracted fixture: + 2ac17136be5f6a831bb115ab62f0bb993f69973fdd847d269b43915746ef2151 +Asserted by test_oracle.ml's own 2038 fixture-SHA test, the same discipline +the 2026-2027 fixture uses. Regenerate deliberately; never copy a mismatch's +actual value back in, which defeats the pin. + +Exact commands: + # fetch (365 requests, be polite -- this is someone else's server) + d=2038-01-01 + while [ "$d" != "2039-01-01" ]; do + curl -s -A "colitur-validation/0.1" \ + "https://www.missalemeum.com/en/api/v5/proper/$d" \ + -o <dir>/missalemeum/en/$d.json + sleep 0.25 + d=$(date -I -d "$d + 1 day") + done + # extract (the third argument is the expected day count -- see the tool's + # own header; it used to be hardcoded to 730 and was generalised for this) + python3 tools/extract_missalemeum_oracle.py <dir> \ + test/fixtures/missalemeum-ef-2038.txt 365 + +Output: one line per civil day, 2038-01-01 through 2038-12-31 inclusive +(365 lines), pipe-separated, IDENTICAL schema to the 2026-2027 fixture: + date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids|first|gospel + +Known extraction warnings for this year, checked rather than suppressed: + 2038-04-23 has no "Lectio" and no "Evangelium" section -- it is Good + Friday (Easter 2038 is 25 April, the latest date Easter can fall), whose + "Missa Praesanctificatorum" has a multi-lesson structure with no single + reading in the Epistle/Gospel slot this schema assumes. Both fields are + "-", with a warning on stderr naming the date, never a silent guess -- + exactly the shape the 2026-2027 fixture already records for its own two + Good Friday rows. |
