diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 12:28:03 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 12:28:03 +0200 |
| commit | 8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7 (patch) | |
| tree | 9c72d1c30f0f37ef7138325abb3ca26ebe68ff14 /data/ef/expected-divergences.sexp | |
| parent | 9947a28f3a40bd8ac36892dcf5aad59d9e6f847c (diff) | |
| download | colitur-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 'data/ef/expected-divergences.sexp')
| -rw-r--r-- | data/ef/expected-divergences.sexp | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index da80dbe..8522da5 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -70,8 +70,10 @@ ((id C1) (citation "RG 72-73 (Nativity/Epiphany season boundary, Jan 1-13) + RG 119a (white through \"expletum tempus Epiphaniae\"); register §3c item 1") (verdict colitur) - (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-8 January specifically, into the ferial slug family name (colitur's ef-christmas-2-<weekday> vs lectio's ef-time-after-epiphany-1-<weekday> for the same two days). REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows moved 361 -> 368. NOT a new divergence -- the closed C13's own 7 rows (13 January in the 7 years it falls on a Sunday) fold back in here: lectio's fix wave independently fixed its own equivalent of the RG16(a) defect C13 used to allow-list, so on all 7 of those Sunday years lectio's slug now matches colitur's `commemoration-of-the-baptism-of-the-lord` too (not just rank/colour), leaving season as the ONLY residual difference on those rows -- squarely inside C1's own existing shape (diffs subset of [Season;Colour;Slug] with the Slug-diff escape clause unused). REFRESHED AGAIN (ef-rg112-rg110 task, branch ef-rg112-rg110): expected_rows moved 368 -> 361, back to its PRE-ef-rebootstrap value, but for a THIRD, different reason -- SPLIT OUT to its own new entry, C15, not silently re-absorbed: colitur now BUILDS Holy Family (RG 17(b)) and, on these same 7 dates, correctly observes it in the fixed Baptism's place (RG 91 entry 14, RG 112(a)), so colitur's own slug there changes from `commemoration-of-the-baptism-of-the-lord` (which happened to already match lectio's own slug) to `ef-time-after-epiphany-sunday-1` (Holy Family's own, lectio has no equivalent) -- a genuine SLUG divergence now, no longer inside C1's own [Season]-only shape. See C15's own entry for the full account. PROVENANCE, fix round 1 (coordinator finding 6, restoring the discipline this entry's own prior refresh recorded and this round's rewrite had dropped): 361 read directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's `Received` array, run against the widened C15 predicate/allow-list together, not before it existed) -- not hand-counted first and cross-checked after, and not 368 minus 7 taken on faith: the arithmetic matches C15's own independently-derived 7, which is corroboration, not the derivation itself.") - (expected_rows 361)) + (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-12 January specifically, into the ferial slug family name (colitur's ef-christmas-2-<weekday> vs lectio's ef-time-after-epiphany-1-<weekday> for those days). REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows moved 361 -> 368. NOT a new divergence -- the closed C13's own 7 rows (13 January in the 7 years it falls on a Sunday) fold back in here: lectio's fix wave independently fixed its own equivalent of the RG16(a) defect C13 used to allow-list, so on all 7 of those Sunday years lectio's slug now matches colitur's `commemoration-of-the-baptism-of-the-lord` too (not just rank/colour), leaving season as the ONLY residual difference on those rows -- squarely inside C1's own existing shape (diffs subset of [Season;Colour;Slug] with the Slug-diff escape clause unused). REFRESHED AGAIN (ef-rg112-rg110 task, branch ef-rg112-rg110): expected_rows moved 368 -> 361, back to its PRE-ef-rebootstrap value, but for a THIRD, different reason -- SPLIT OUT to its own new entry, C15, not silently re-absorbed: colitur now BUILDS Holy Family (RG 17(b)) and, on these same 7 dates, correctly observes it in the fixed Baptism's place (RG 91 entry 14, RG 112(a)), so colitur's own slug there changes from `commemoration-of-the-baptism-of-the-lord` (which happened to already match lectio's own slug) to `ef-time-after-epiphany-sunday-1` (Holy Family's own, lectio has no equivalent) -- a genuine SLUG divergence now, no longer inside C1's own [Season]-only shape. See C15's own entry for the full account. PROVENANCE, fix round 1 (coordinator finding 6, restoring the discipline this entry's own prior refresh recorded and this round's rewrite had dropped): 361 read directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's `Received` array, run against the widened C15 predicate/allow-list together, not before it existed) -- not hand-counted first and cross-checked after, and not 368 minus 7 taken on faith: the arithmetic matches C15's own independently-derived 7, which is corroboration, not the derivation itself. + +REFRESHED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): expected_rows moved 361 -> 173. NOT a data change -- this entry's OWN diff-set guard (`subset diffs [Season;Colour_f;Slug_f]`) never accepted a citation diff, and this task gave the `ef-christmas-2-<weekday>` and `ef-time-after-epiphany-1-<weekday>` families their OWN direct citations for the first time (RG 17(a)'s own \"diebus ferialibus\" rubric, tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) -- every row in this window that ALSO now carries a real First_f/Gospel_f divergence escapes this entry's own subset guard and moves to the new C31/C32 instead (not silently re-absorbed: C31/C32's own [subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]] guard is what actually catches them, checked BEFORE this entry no longer applies, not assumed). What remains here is every 6-13 January row this task's own fix did NOT touch: Epiphany itself, the fixed Baptism commemoration, and any day a competing saint or the BVM Saturday Office already wins outright (unaffected by a lectionary citation either way). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 173.") + (expected_rows 173)) ((id C6) (citation "RG 91 entry 17 (\"days within the Octave of the Nativity\") for the slug/rank divergence; RG 69, scan1.txt:625-631 word for word, for the QUESTIONED citation component (Important 3(b), coordinator review, task 8 fix round 1): \"De dominica infra octavam Nativitatis Domini, quae scilicet a die 26 ad 31 decembris occurrit, semper fit Officium cum commemoratione festi forte occurrentis, iuxta rubricas, nisi dominica incidat in festum I classis: quo in casu, fit de festo cum commemoratione dominicae\" -- the Sunday's OWN Office (not the fixed weekday placeholder) is kept, WITH a commemoration of whatever feast falls that day, whenever a Sunday lands anywhere 26-31 December (unless that feast is itself I class, in which case the feast wins with the Sunday commemorated instead)") (verdict open) @@ -103,7 +105,9 @@ Gated on the literal date window (month=12, day in {29,30,31}) AND colitur's own ((id C16) (citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii, SECUS DIE 2 IANUARII\") + the calendarium's own January table, both photographic scans, word for word: \"Dominica inter octavam Nativitatis Domini et Epiphaniam, vel, EA DEFICIENTE, die 2 ianuarii: Sanctissimi Nominis Iesu, II classis\"") (verdict colitur) - (note "ef-holyname-rg110 task: RG 17(a)'s own fallback, previously unbuilt (register §6.2's own open item -- colitur emitted no Holy Name office at all in a year with no Sunday 2-5 January, not merely an unnamed generic Sunday the way Holy Family's own pre-fix gap was). 2 January in a year with no Sunday in that window now carries the feast (`ef-holy-name`, class-2, subject Lord) instead of the ordinary Christmastide ferial fallback (`ef-christmas-1-<weekday>`/`ef-christmas-0-<weekday>` in lectio's own naming, class-4) -- a genuine SLUG AND RANK divergence against lectio, which has no fallback for this window at all (`~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` carries no 01-02 entry; checked directly, not assumed) and shows the plain ferial slug on every one of these dates regardless. Gated on the literal date list AND colitur's own slug (the same identity guard C1/C6/C8/C14/C15 already apply, fix round 1's own finding 1). 20 of the 46 years in the fixture's own 2005-2050 span have no Sunday 2-5 January -- independently re-derived against `date -d <year>-01-0{2,3,4,5} +%u` for every year in range (not the register's domain-wide 3,619-of-8,417 figure divided down; a fresh count over this file's own narrower window), then cross-checked against the OCaml comparator's own failure output before being set here: 20. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set. `ef-holy-name` now carries RG 17(a)'s own citation (Gal 4:1-7/Luke 2:33-40, tools/bootstrap_lectionary.ml's [derived_entries] -- the same Mass heading covers both the Sunday and 2-January shapes, so it is copied from `ef-holy-name-sunday`'s own translated entry, not re-typed). On 13 of these 20 years lectio's OWN plain-ferial fallback happens to land on the identical citation by coincidence (its generic 2-January slug's own preceding-Sunday walk finds a December Sunday whose reading-key collapses to the same `ef-christmas-sunday-0` entry this generator translates), so those 13 rows now match on [First_f]/[Gospel_f] too and drop out of the diff entirely -- harmless to this entry's count, since [layer_c_reason]'s `subset` check accepts EITHER an empty citation diff or the wider one. On the remaining 7 years (2006, 2012, 2017, 2023, 2034, 2040, 2045 -- exactly the years, among these 20, where 1 January itself falls on a Sunday, confirmed against `date -d <year>-01-01 +%u`) lectio's fallback instead finds the CIRCUMCISION's own real Mass (Titus 2:11-15/Luke 2:21, `ef-circumcision`), a genuine divergence from RG 17(a)'s office, which reads the identical Holy Name Mass on 2 January regardless of what happened the day before -- the same underlying cause (colitur builds a real RG 17(a) office; lectio has none), not a second one. Count unchanged: 20.") + (note "ef-holyname-rg110 task: RG 17(a)'s own fallback, previously unbuilt (register §6.2's own open item -- colitur emitted no Holy Name office at all in a year with no Sunday 2-5 January, not merely an unnamed generic Sunday the way Holy Family's own pre-fix gap was). 2 January in a year with no Sunday in that window now carries the feast (`ef-holy-name`, class-2, subject Lord) instead of the ordinary Christmastide ferial fallback (`ef-christmas-1-<weekday>`/`ef-christmas-0-<weekday>` in lectio's own naming, class-4) -- a genuine SLUG AND RANK divergence against lectio, which has no fallback for this window at all (`~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` carries no 01-02 entry; checked directly, not assumed) and shows the plain ferial slug on every one of these dates regardless. Gated on the literal date list AND colitur's own slug (the same identity guard C1/C6/C8/C14/C15 already apply, fix round 1's own finding 1). 20 of the 46 years in the fixture's own 2005-2050 span have no Sunday 2-5 January -- independently re-derived against `date -d <year>-01-0{2,3,4,5} +%u` for every year in range (not the register's domain-wide 3,619-of-8,417 figure divided down; a fresh count over this file's own narrower window), then cross-checked against the OCaml comparator's own failure output before being set here: 20. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set. `ef-holy-name` used to carry a MIS-DERIVED citation (Gal 4:1-7/Luke 2:33-40, borrowed by analogy from `ef-christmas-sunday-0`'s own ini section) -- on 13 of these 20 years lectio's own plain-ferial fallback happened to land on that SAME wrong value by coincidence, so those 13 rows matched outright and dropped out of the diff entirely, and only the remaining 7 (where 1 January itself is a Sunday, so lectio's fallback finds the Circumcision's own Titus 2:11-15/Luke 2:21 instead) carried a real citation diff -- both sub-populations still summed to the SAME 20-row count either way, since [layer_c_reason]'s own `subset` guard accepts an empty citation diff too. + +CORRECTED, Task 9 (branch ef-lectionary, layer-4 oracle): the 13-vs-7 coincidental-match split above is now STALE, not merely superseded -- `ef-holy-name` carries its own genuinely correct citation as of this task (Acts 4:8-12/Luke 2:21, Missal-verified twice, both scans, `colitur_keys`'s own CORRECTED note in bootstrap_lectionary.ml has the full account of the analogy error this replaces), which cannot coincide with EITHER of lectio's own two possible fallback answers (Gal 4:1-7 nor Titus 2:11-15 -- neither equals Acts 4:8-12) -- so ALL 20 of this entry's rows now carry a real [First_f]/[Gospel_f] diff, not merely 7 of them, a direct logical consequence of the three citations' own values, not re-derived by a fresh sweep. Row count itself is UNCHANGED at 20 (confirmed against the OCaml comparator's own failure output, still 20) -- only which rows carry a citation diff moved, and this entry's own `subset` guard already tolerated both shapes throughout, so nothing about the ALLOW-LIST predicate itself needed to change, only this note's own account of the values involved.") (expected_rows 20)) ((id C17) (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") + RG 78 (Caput IX, \"De sancta Maria in sabbato\", both photographic scans and the electronic transcription word for word): \"In sabbatis, in quibus occurrit Officium de feria IV classis, fit de sancta Maria in sabbato\" -- on Saturdays on which the Office of a IV-class feria occurs, [the Office] is made of Holy Mary on Saturday instead + RG 120(b) (\"Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg.\") for the white colour, unconditional regardless of season") @@ -162,8 +166,10 @@ lectio, still conflating Holy Week with Passion week on all six days, keeps show CORRECTED, fix round 2 (coordinator review, Minor): this entry's own reason for the literal 4-slug list (Wednesday/Thursday/Friday/Saturday, never Monday/Tuesday) previously claimed Monday and Tuesday \"are always claimed first by the Circumcision's or Holy Name's own direct entries\" -- FALSIFIED by 2028-01-03/04, real dates that genuinely exist as their own `ef-christmas-1-{monday,tuesday}` slugs and genuinely resume via step 3 (they are not \"claimed away\" from existing at all). Replaced with the directly OBSERVED fact, from an exhaustive sweep of every such occurrence 2004-2051 against the real resolver (not merely the slug, the resolved citation): `ef-christmas-1-monday` occurs 21 times and resolves to Holy Name Sunday's own citation (Gal 4:1-7/Luke 2:33-40) every time; `ef-christmas-1-tuesday` occurs 22 times and resolves to EITHER Holy Name Sunday's citation OR the Circumcision's (Titus 2:11-15/Luke 2:21) -- both real, correct, directly-cited entries, confirmed never the wrong Nativity-Octave-Sunday value. Both weekdays fall close enough to 1-2 January that their own preceding-Sunday walk stays within January; Wednesday/Thursday/Friday/Saturday are far enough that the same walk can reach past 2 January into December when Holy Name Sunday does not exist that year, landing on this entry's own wrong Sunday instead -- the general shape, not re-asserted as a proven arithmetic rule (a first attempted derivation was itself found wrong on a second reading and is not repeated). Gated on the literal 4-slug family and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- this is a pure content consequence one hop removed). -CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly from the OCaml comparator's own failure output (its own `expected_rows` pin, cross-checked against a real test run) -- that part was accurate. The PER-WEEKDAY split is NOT: the comparator reports per-id totals only, never a per-weekday breakdown, so that finer split came from a separate pass over the raw per-slug failure list, and a prior version of this note wrongly implied it came from the comparator directly. That prior version also rotated the labels: it read \"19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively\" -- the right four numbers, each attached to the wrong weekday. Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = 57, no residue).") - (expected_rows 57)) +CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly from the OCaml comparator's own failure output (its own `expected_rows` pin, cross-checked against a real test run) -- that part was accurate. The PER-WEEKDAY split is NOT: the comparator reports per-id totals only, never a per-weekday breakdown, so that finer split came from a separate pass over the raw per-slug failure list, and a prior version of this note wrongly implied it came from the comparator directly. That prior version also rotated the labels: it read \"19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively\" -- the right four numbers, each attached to the wrong weekday. Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = 57, no residue). + +NARROWED, Task 9 (branch ef-lectionary, layer-4 oracle): expected_rows moved 57 -> 13, and the slug list narrowed to `ef-christmas-1-saturday` ALONE. Wednesday/Thursday/Friday (6+19+19=44 of the former 57 rows) each now have their OWN direct lectionary entry (RG 17(a)'s own \"diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii\", tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) and no longer reach step 3's walkback at all -- colitur is now RIGHT there, not merely differently wrong, so those 44 rows are a SEPARATE new id (C30 below, verdict colitur), not a re-adjudication of this one. `ef-christmas-1-saturday` is the ONE weekday deliberately left WITHOUT a direct entry (RG 78's BVM Saturday Office wins that day unconditionally whenever nothing else does, {!Rite_ef.Temporal_ef.bvm_saturday_names} -- giving it the \"repeat 1 January\" citation would be wrong on exactly the days this same rubric is correct for the other four weekdays), so its own step-3 walkback -- and this entry's own root cause and citation, \"Titus 3, 4-7\" -- are genuinely UNCHANGED by this task, confirmed directly: the pinned regression test (test_lectionary_ef.ml's own `test_step3_christmas_feria_resumes_sunday`, now re-pointed at 2026-01-03) still returns exactly \"Gal 4:1-7\"/\"Luke 2:33-40\", the Nativity-Octave Sunday's own value C6 above still questions. 13 matches the ORIGINAL per-weekday breakdown's own Saturday figure exactly (6+19+19+13=57 from fix round 3 above), corroborating rather than merely asserting the narrowed count; re-derived directly from the OCaml comparator's own failure output after narrowing the predicate, not assumed from the old breakdown alone.") + (expected_rows 13)) ((id C26) (citation "Passion Tuesday's real Mass (\"Feria tertia, III classis, Statio ad S. Cyriacum\"): Dan 14:27, 28-42 / John 7:1-13 -- docs/research/scan1.txt:11085-11121, corroborated scan2.txt:12063-12120 (CORRECTED, fix round 3, coordinator review: the scan2 endpoint previously read 12104, which stops after the Epistle -- \"Lectio Danielis Prophetae, Dan. 14,27 et 28-42\" -- and never reaches the Gospel heading/citation at all; \"Sequentia sancti Evangelii secundum Ioannem, Ioann. 7,1-13\" is at scan2.txt:12117-12120, so the range now extends to 12120, mirroring scan1's own convention of ending right at the Gospel's citation line rather than the full pericope text), word for word both scans") (verdict colitur) @@ -179,3 +185,33 @@ CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly (verdict colitur) (note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-september-ember-sat` is not the September Ember Saturday's Mass at all -- it is St Matthew's (Ezek 1:10-14 / Matt 9:9-13, the calling of Matthew, 21 September), the identical shape C26/C27 document. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes Heb 9:2-12), so this entry, like C27, needed no \"last lesson before the Gospel\" convention judgement call. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- the IDENTICAL 6 civil years C27 above names (2013, 2019, 2024, 2030, 2041, 2047), where 21 September (St Matthew) falls on a Saturday and coincides with the September Ember Saturday itself, so the SAINT wins outright and these six rows never reach this entry -- the same 91-day/13-week weekday coincidence between 21 September and 21 December that explains C27's own gap, confirmed against `date -d` for all six years, not merely by arithmetic. The other four Ember entries (Advent Wednesday/Friday, September Wednesday/Friday) were checked against both scans and are correct as lectio already had them -- these two Saturdays are the only Ember exceptions. 40 + 6 = 46, the full domain, no residue.") (expected_rows 40)) + ((id C29) + (citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii\") for the PRIVILEGE; the Missal's own Sanctissimi Nominis Iesu Mass propers, both scans, word for word: \"Lectio Actuum Apostolorum. Act. 4, 8-12\" / \"Sequentia sancti Evangelii secundum Lucam. Luc. 2, 21\" (docs/research/scan1.txt:6579-6608, scan2.txt:7225-7297) -- the Sunday shape's own citation, distinct from C16's fallback shape immediately above") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-holy-name-sunday`, the primary RG 17(a) shape (a genuine Sunday 2-5 January), had NO lectionary entry of its own before this task -- Rite_ef.Temporal_ef already computed the right slug/rank/colour (RG 91 entry 14, {!Rite_ef.Precedence_ef.entry_14_movable_band}), but tools/bootstrap_lectionary.ml's own [colitur_keys] used to WIDEN lectio's \"ef-christmas-sunday-0\" ini section onto this slug too, by analogy, on the (WRONG) assumption that Holy Name Sunday shares the Sunday-within-the-Octave's own Mass -- DISPROVED by missalemeum's own independent extraction for the two real Holy Name Sundays in its 2026-2027 window (test/fixtures/missalemeum-ef-2026-2027.txt, 2026-01-04/2027-01-03: \"Acts 4:8-12\"/\"Luke 2:21\", title \"Holy Name of Jesus\"), then confirmed against the Missal itself, twice, both scans (above) -- see [colitur_keys]'s own CORRECTED note in bootstrap_lectionary.ml for the full account of the analogy error this replaces. Season and Slug_f already agree on every occurrence (Layer A's own alias for \"ef-christmas-sunday-0\"/\"ef-holy-name-sunday\" -- the SAME underlying fact the generator's old, wrong widen also used, only one of the two uses was ever mistaken), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`, not a subset. 26 of the 46 years in the fixture's own 2005-2050 span DO have a Sunday 2-5 January -- the complement of C16's own 20 fallback years (26 + 20 = 46, no residue) -- derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 26.") + (expected_rows 26)) + ((id C30) + (citation "RG 17(a)'s own rubric, immediately following the Holy-Name-Sunday heading, both scans, word for word: \"Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii\" (docs/research/scan1.txt:6522-6526) / \"Diebus ferialibus a 2 ad 6 ianuarii Missa dicitur ut die 1 ianuarii\" (scan2.txt, the \"6\" a one-digit OCR variant of scan1's \"5\" -- immaterial, 6 January is always Epiphany, a fixed I-class feast outranking any ferial rubric outright) -- ON FERIAL DAYS from 2 to 5 January, THE SAME MASS AS 1 JANUARY (the Circumcision, Titus 2:11-15/Luke 2:21) IS SAID") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-1-{monday,tuesday,wednesday,thursday,friday}` (2-5 January, EXCLUDING Saturday) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback (C25's OWN former population, before this task narrowed it -- see C25's own note for the full split). Given a direct entry now (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]), Season/Slug_f already agree with lectio on every occurrence (this window is entirely BEFORE C1's own 6-13 January boundary, and lectio's own naming for 2-5 January is already the SAME \"ef-christmas-0\"/\"ef-christmas-sunday-0\" family Layer A already aliases), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`. `ef-christmas-1-saturday` is DELIBERATELY excluded, both from the direct entry and from this predicate's own slug list -- RG 78's BVM Saturday Office wins that day unconditionally whenever nothing else does (Rite_ef.Temporal_ef's own [bvm_saturday_names], already built, ef-bvm-saturday task), confirmed directly against missalemeum's own title on this window's own two such Saturdays (\"II Mass of the B. V. M. -- Vultum Tuum\", never \"Feria\") -- giving it this entry's own citation would be wrong exactly there; it remains C25's own narrower population, unaffected by this task (see C25's own note). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 91.") + (expected_rows 91)) + ((id C31) + (citation "RG 17(a)'s own rubric's own next sentence, both scans, word for word: \"Diebus ferialibus a 7 ad 12 ianuarii ante dominicam I post Epiphaniam occurrentibus, dicitur Missa de festo Epiphaniae\" (docs/research/scan1.txt:6753-6757) -- ON FERIAL DAYS from 7 to 12 January occurring BEFORE the first Sunday after Epiphany (Holy Family), THE MASS OF THE FEAST OF EPIPHANY (Isa 60:1-6/Matt 2:1-12) IS SAID") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-2-{monday,tuesday,wednesday,thursday,friday}` (7 January through the day before Holy Family Sunday, EXCLUDING Saturday -- the same RG 78 exclusion C30 above explains, confirmed again on this window's own remaining such Saturdays) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback. This slug family's own civil dates ALREADY carried a Season/Slug_f/Colour_f divergence against lectio BEFORE this task (lectio's own season boundary starts Time-after-Epiphany at Epiphany itself, RG 72-73's own later boundary colitur keeps; lectio's own week numbering has no Holy Family to wait for, so its own slug for these dates is already \"ef-time-after-epiphany-1-<weekday>\", not \"ef-christmas-2-...\"), previously absorbed by C1's own [jan_6_13_slug] allow-list (which already names this family, unchanged) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top of that EXISTING one, so this entry's own guard is a SUBSET, `subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present (a feria's Epistle and Gospel are independent lookups and can each happen to already coincide). `ef-christmas-2-saturday`, though deliberately given no DIRECT entry (the same RG 78 reasoning as C30), is included in THIS entry's own slug list for a different, genuinely observed reason: its own step-3 walkback CAN land on `ef-holy-name-sunday` in years where that Sunday immediately precedes it, inheriting that slug's newly-corrected citation (C29 above) as a side effect, with no direct entry of its own involved at all -- confirmed directly against the real resolver, not theorised (`ef-christmas-1-saturday`'s own walkback structurally cannot reach that far forward, since its own window, 2-5 January, is entirely before Holy Name Sunday can exist; C25's own unchanged population is the proof this genuinely does not happen there). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 89.") + (expected_rows 89)) + ((id C32) + (citation "RG 17(a)'s own rubric's own third sentence, a named formula, both scans: \"post eandem dominicam vero Missa de eadem dominica In excelso throno, ut infra... Haec Missa dicenda est diebus ferialibus huius hebdomadae\" (docs/research/scan1.txt:6758-6851) -- \"MISSA DOMINICAE PRIMAE post Epiphaniam\", Epistle \"Lectio Epistolae beati Pauli Apostoli ad Romanos. Rom. 12, 1-5\" (scan1.txt:6875-6877), Gospel the SAME pericope as Holy Family's own Sunday Mass, Luke 2:42-52 (scan1.txt:6885-6905) -- said on the FERIAL DAYS of Holy Family Sunday's OWN week") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-time-after-epiphany-1-{monday,tuesday,wednesday,thursday,friday}` (Holy Family Sunday's own week, EXCLUDING Saturday -- the same RG 78 reasoning as C30/C31) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback (which happened to land on Holy Family Sunday's OWN citation, Col 3:12-17/Luke 2:42-52 -- a DIFFERENT Epistle from this entry's own Rom 12:1-5, the same Mass propers' own distinction between the Sunday and its week's ferias, both scans). This slug family's own civil dates ALREADY carried a bare Season/Colour_f divergence against lectio BEFORE this task (SAME slug on both sides here, unlike C31 -- lectio's own season boundary alone, RG 72-73 vs Epiphany), previously absorbed by C1's own generic 6-13 January window (no [Slug_f] involved, so C1's own [jan_6_13_slug] gate was never even reached) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top, so this entry's own guard is a SUBSET, `subset diffs [Season;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present, the same \"not necessarily both\" reasoning C31 explains. Checked AFTER C19 deliberately in test_differential.ml's own [layer_c_reason]: C19's own 7 \"week shift\" years (2008/2013/2019/2030/2036/2041/2047) already explain this SAME slug family's own citation divergence there, for a DIFFERENT root cause (the week-numbering offset, not this task's own fix) -- this entry must not re-claim those rows under a citation-content reason C19 already owns, so its own population is exactly the OTHER (non-shift-year) civil dates; C19's own count is independently confirmed UNCHANGED at 45 by this same test run. `ef-time-after-epiphany-1-saturday`, though deliberately given no direct entry, is included in this entry's own slug list for the SAME step-3-ripple reason C31's own note explains for `ef-christmas-2-saturday` -- confirmed directly against the real resolver, not theorised. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 99.") + (expected_rows 99)) + ((id C33) + (citation "\"IN FESTO SSMI CORPORIS CHRISTI, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Corinthios. 1 Cor. 11, 23-29\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 6, 56-59\" -- docs/research/scan1.txt:21867-21917, corroborated scan2.txt:24084-24172, word for word both scans") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): Corpus Christi (`ef-corpus-christi`, a real, directly-computed Rite_ef.Temporal_ef office, I class, movable, Thursday after Trinity Sunday) had NO lectionary entry at all before this task -- not a renamed/mis-widened value the way C29/C30/C31/C32 above are, a genuine ABSENCE: lectio's own EF ini has no equivalent section either. Both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"Rom 11:33-36\") and silently AGREED on the wrong answer -- the \"Holy Thursday was violet in both\" shape this project's own CLAUDE.md names for exactly this reason (layer 3 shares colitur's own bootstrap lineage in general, and here shares an architectural gap specifically, not lineage) -- so this divergence is newly VISIBLE only because colitur is now correct (tools/bootstrap_lectionary.ml's own [movable_feast_entries]), not because either engine changed what it already agreed on. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- Corpus Christi is never impeded by anything else in the 1962 calendar, so it is the observed office on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.") + (expected_rows 46)) + ((id C34) + (citation "\"IN FESTO SACRATISSIMI CORDIS IESU, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Ephesios. Ephes. 3, 8-12 et 14-19\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 19, 31-37\" -- docs/research/scan1.txt:22030-22095, corroborated scan2.txt:24284-24336 (the Epistle's own \"et 14-19\" clause is OCR-truncated to \"3, 8-19\" on this second scan alone; its printed body text otherwise matches word for word, and scan1's own transcription is unambiguous, so this is a scan-quality gap, not a genuine disagreement between the two printings), word for word both scans") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): the SAME shape as C33 immediately above, for the Sacred Heart of Jesus (`ef-sacred-heart`, I class, movable, Friday after the Octave of Corpus Christi). No lectionary entry at all before this task; both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"1 John 3:13-18\") and silently agreed on the wrong answer, the identical \"both wrong, both silent\" shape C33 explains. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- never impeded, observed on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.") + (expected_rows 46)) |
