From 1299815ea03c2b1e4ff19d92d32e386fec24f4e4 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Sat, 15 Aug 2026 01:40:54 +0200 Subject: ef(lectionary): the Commons, chain step 4 Fifteen class-3 saints had no readings anywhere in colitur -- the 6 March - 5 April cluster whose RANKS lectio's generator fix of 2026-08-12 restored without backfilling readings, and lectio has no Commons concept to have backfilled them from. They are exactly the fifteen `status Feast` entries in data/ef/sanctoral.sexp carrying `(citations ())`. The Missal splits them eight/seven, and NOT as the plan predicted. It expected propers for Benedict, Patrick, Thomas Aquinas and Gregory the Great; only Thomas Aquinas has one. Benedict ("Missa Os iusti, de Communi Abbatum"), Patrick ("Missa Statuit, de Communi Confessoris Pontificis I loco") and Gregory the Great ("Missa Si diligis me, de Communi unius aut plurium Summorum Pontificum") are all sent to a Common, with only Oratio, Secreta and Postcommunio printed at the date. All three reversals verified on the page images (pp. 488, 492) as well as in both OCR text layers. PROPERS (data/ef/adjustments.sexp, `Edit ... Set_citation`): thomas-aquinas 7 Mar Sap 7:7-14 / Mt 5:13-19 john-of-god 8 Mar Eccli 31:8-11 / Mt 22:34-46 forty-holy-martyrs 10 Mar Hebr 11:33-39 / Luc 6:17-23 cyril-of-jerusalem 18 Mar Eccli 39:6-14 / Mt 10:23-28 gabriel-the-archangel 24 Mar Dan 9:21-26 / Luc 1:26-38 john-damascene 27 Mar Sap 10:10-17 / Luc 6:6-11 john-of-capistrano 28 Mar Sap 10:10-14 / Luc 9:1-6 francis-of-paola 2 Apr Philipp 3:7-12 / Luc 12:32-34 COMMONS (data/ef/commons.sexp), each quoting the Missal's own instruction at the saint's date: sts-felicitas-perpetua 6 Mar non Virginum I Eccli 51:1-8,12 / Mt 13:44-52 frances-rome 9 Mar non Virginum II Prov 31:10-31 / Mt 13:44-52 gregory-the-great 12 Mar Summ. Pontificum 1 Petri 5:1-4,10-11 / Mt 16:13-19 patrick 17 Mar Conf. Pont. I Eccli 44:16-27;45:3-20 / Mt 25:14-23 benedict 21 Mar Abbatum Eccli 45:1-6 / Mt 19:27-29 isidore-of-seville 4 Apr Doctorum 2 Tim 4:1-8 / Mt 5:13-19 vincent-ferrer 5 Apr Conf. non Pont. I Eccli 31:8-11 / Luc 12:35-40 Every value read in three independent places -- both OCR text layers (two DIFFERENT printings, whose Commune Sanctorum pagination differs by 1-2, so the data keys on heading plus Mass incipit and never on the bracketed page number) and the rendered page images. That caught a genuine typographical error in one printing: it gives St Gabriel's Gospel as "Luc. 2, 26-38" (on the page image, so not an OCR artefact). Luke 1:26-38 is settled by the other printing, by the pericope text in both, and by the SAME edition citing the identical pericope correctly two pages later at the Annunciation. Step 4 EXECUTES SECOND (order 1, 4, 2, 3), not last as the plan sketched. Measured: every day on which one of the fifteen is actually the observed office already has a non-empty step-2 or step-3 answer waiting, so a step 4 placed after the ferial fallback is unreachable on every date in 1583-9999 -- and wrong where it would fire (2038-03-06 would emit Septuagesima II Saturday's Mass on a day whose office is Sts Perpetua and Felicity). Step 4 is also the only step in the chain with a direct primary-source warrant: the Missal names the Mass at each such saint's own date, while steps 2 and 3 rest only on lectio's observed behaviour. Guarded so it can never divert a day whose observed office IS its temporal office -- ferias, Sundays, the Triduum and the RG 78 Saturday Office of the BVM (which deliberately shares the ferial slug) are structurally excluded. Step NUMBERS are unchanged so every "step 3" already written down still names the same branch. The Commons are caller-supplied, like the lectionary: `Rite_ef.context` gains a REQUIRED `~commons`, not an optional one -- a silently-defaulted empty table would give a rite whose class-3 saints quietly lose their Mass, and nothing in layers 3-5 compares citations, so that loss would be invisible. `Commons.load` rejects the four defects indistinguishable downstream from "this saint has no Common": duplicate common id, duplicate assignment, empty formulary, assignment naming a common that does not exist. KNOWN LIMITS, recorded rather than papered over. There is no oracle: lectio has no readings for these feasts and missalemeum's 2026-2027 window never observes one of the fifteen. Eight of the fifteen are NEVER the observed office anywhere in the domain (10-28 March always falls to a Lenten or Passiontide feria that outranks a III-class feast), so they have no end-to-end witness and are covered by dedicated table tests instead. The Commune Sanctorum's own opening rubric permits any Epistle or Gospel of a Common in any Mass of that Common unless one is assigned, so what is emitted is the reading PRINTED WITH the named formulary, not the only lawful one; labelled alternatives (e.g. the widow's Epistle 1 Tim 5:3-10, squarely available to St Frances of Rome) are noted in the data and deliberately not encoded. The BVM Common is NOT authored: the RG 78 Saturday Office shares the ordinary ferial slug, so assigning a Common to it would hand the BVM Mass to every feria sharing that slug; routing it needs a subject-keyed lookup and a season-keyed choice among the Missal's five "Missae de sancta Maria in sabbato" -- new behaviour, not new data. It currently emits its feria's Mass, now pinned as such. Blast radius, measured (git archive HEAD binary vs HEAD, full 1583-9999 `colitur day` sweep, diffed): ZERO differing lines, 3 074 246 lines each side, byte-identical -- the CLI prints no citations, so this change is invisible to layers 2-5 by construction, and the sanctoral overlay perturbed nothing else. 357 tests green (344 before), 358 with the exhaustive sweep. Mutation-tested six ways, all reverted after confirming: relegating step 4 to last reddens exactly the four step-4 pins and nothing else; corrupting a Common's citation, dropping an assignment, dropping a proper Edit, and corrupting either an unreachable proper or an unreachable Common each redden their own pins. The load-bearing assertion is stated over the loaded layer rather than a hard-coded list: every sanctoral entry that can ever BE the observed office now has either a proper or an assigned Common -- fifteen failures before, zero after, and a future re-bootstrap adding a readingless class-3 feast fails there instead of silently emitting its feria's Mass. --- data/ef/adjustments.sexp | 144 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 1 deletion(-) (limited to 'data/ef/adjustments.sexp') diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp index bd6fe60..f41d0d1 100644 --- a/data/ef/adjustments.sexp +++ b/data/ef/adjustments.sexp @@ -395,4 +395,146 @@ (Edit alphonsus-liguori ((Set_colour White))) (Edit augustine ((Set_colour White))) (Edit rose-of-lima ((Set_colour White))) - (Edit mark-i ((Set_colour White)))))) + (Edit mark-i ((Set_colour White))) + + ; --- ef-lectionary Task 6: the eight class-3 saints whose Mass the + ; 1962 Missal prints IN FULL, with its own Epistle and Gospel. + ; + ; Fifteen class-3 saints reached this branch with no readings at all + ; (data/ef/sanctoral.sexp, `(citations ())` -- they are exactly the + ; fifteen `status Feast` entries in that file that have none, checked + ; not assumed). They are the 6 March - 5 April cluster whose RANKS + ; lectio's own generator fix of 2026-08-12 restored without + ; backfilling readings, and lectio has no Commons concept to have + ; backfilled them from. + ; + ; The Missal splits them cleanly in two, and the split is NOT the one + ; the plan predicted (it expected propers for Benedict, Patrick, + ; Thomas Aquinas and Gregory the Great; only Thomas Aquinas has one). + ; The seven that the Missal sends to a Common are routed through + ; data/ef/commons.sexp instead -- see that file's header for the whole + ; method, the Commune Sanctorum's own substitution rubric, and the + ; per-Common evidence. The eight below are the ones the Missal prints + ; a full Mass for at the date itself, so the readings are ASSIGNED + ; ("certa Epistola aut certum Evangelium in Missali ... assignata", + ; the Commune's own proviso) and belong on the celebration. + ; + ; They are Edits here, not corrections to data/ef/sanctoral.sexp, + ; because that file is GENERATED (tools/bootstrap_sanctoral.ml) and + ; its source is upstream in lectio -- the same reasoning the colour + ; corrections above already carry. If lectio ever gains these + ; readings, `Set_citation` is idempotent (overlay.ml's own + ; [apply_field_edit] replaces the matching part), so the Edits stay + ; harmless and stand as a regression guard. + ; + ; EVERY value below was read in three independent places before being + ; written: docs/research/scan1.txt (CMAA scan), docs/research/scan2.txt + ; (Internet Archive scan -- a DIFFERENT printing), and the rendered + ; page images of missale-romanum-1962.pdf. Both text layers interleave + ; the two-column page, so no value rests on a single reading. There is + ; NO oracle for any of this: layer 3 (lectio) has no readings for these + ; feasts at all, and layer 4 (missalemeum, 2026-2027) never observes + ; one of them in either year. + ; + ; OBSERVABILITY, measured against the real resolver over 1950-2200: + ; only three of the eight are EVER the observed office -- + ; thomas-aquinas (6 days, e.g. 2000-03-07, 2011-03-07), john-of-god + ; (5 days, e.g. 2011-03-08, 2038-03-08), francis-of-paola (2 days, + ; 2008-04-02, 2160-04-02). The other five fall on dates always held by + ; a Lenten or Passiontide feria that outranks a III-class feast, so + ; they are only ever COMMEMORATIONS, and colitur emits readings for + ; the observed office only. Their citations are correct data with no + ; live witness today; they are recorded rather than omitted so that a + ; diocesan overlay or a rank change finds them already sourced. + + ; 7 March, "S. Thomae de Aquino, Conf. et Eccl. Doct., III classis": + ; "Lectio libri Sapientiae. Sap. 7, 7-14" / "Sequentia sancti + ; Evangelii secundum Matthaeum. Mt. 5, 13-19". + ; scan1:27701-27704 + 27699-27700; scan2:30588-30589 + 30643-30646; + ; page image p. 484. (scan2's OCR renders the Gospel chapter as "6"; + ; scan1 and the page image both print 5, and the pericope is "Vos + ; estis sal terrae", Mt 5:13-19.) + (Edit thomas-aquinas + ((Set_citation First "Wis 7:7-14") (Set_citation Gospel "Matt 5:13-19"))) + + ; 8 March, "S. Ioannis a Deo Conf., III classis": + ; "Lectio libri Sapientiae. Eccli. 31, 8-11" / "Sequentia sancti + ; Evangelii secundum Matthaeum. Mt. 22, 34-46". + ; scan1:27732-27734 + 27769-27770; scan2:30698-30699 + 30733-30736; + ; page image p. 485. NOTE: the Epistle is the Common of a Confessor + ; not a Bishop's own, but the GOSPEL is not (that Common has Luke + ; 12:35-40) -- the Missal prints him a full Mass with an assigned + ; Gospel, so this is a proper, not a Common. (scan2's OCR renders the + ; Gospel's last verse as 48; scan1 and the page image print 46, and + ; the pericope ends at "neque ausus fuit quisquam ex illa die eum + ; amplius interrogare" = Mt 22:46.) + (Edit john-of-god + ((Set_citation First "Ecclus 31:8-11") (Set_citation Gospel "Matt 22:34-46"))) + + ; 10 March, "Ss. Quadraginta Martyrum, III classis": + ; "Lectio Epistolae beati Pauli Apostoli ad Hebraeos. Hebr. 11, 33-39" + ; / "Sequentia sancti Evangelii secundum Lucam. Luc. 6, 17-23". + ; scan1:27841-27842 + 27832-27834; scan2:30766-30768 + 30821-30823. + (Edit forty-holy-martyrs-of-sebaste + ((Set_citation First "Heb 11:33-39") (Set_citation Gospel "Luke 6:17-23"))) + + ; 18 March, "S. Cyrilli Ep. Hierosolymitani, Conf. et Eccl. Doct., + ; III classis": "Lectio libri Sapientiae. Eccli. 39, 6-14" / + ; "Sequentia sancti Evangelii secundum Matthaeum. Mt. 10, 23-28". + ; scan1:27948-27949 + 27953-27955; scan2:30890-30896 + 30948-30951; + ; page image p. 489. This Epistle is the Common of Doctors' own + ; labelled ALTERNATIVE ("Item altera Epistola pro Doctoribus") -- here + ; it is assigned outright at the date, which is what makes it his. + (Edit cyril-of-jerusalem + ((Set_citation First "Ecclus 39:6-14") (Set_citation Gospel "Matt 10:23-28"))) + + ; 24 March, "S. Gabrielis Archangeli, III classis": + ; "Lectio Danielis Prophetae. Dan. 9, 21-26" / "Sequentia sancti + ; Evangelii secundum Lucam. Luc. 1, 26-38". + ; scan1:28149-28150 + 28175-28176; scan2:31070-31074 + 31158-31160; + ; page images pp. 493-494. + ; + ; THE ONE GENUINE CONFLICT BETWEEN THE TWO PRINTINGS, and the reason + ; this task's cross-check discipline exists. scan1's edition prints + ; the Gospel citation as "Luc. 2, 26-38" -- confirmed on the page + ; image, so it is a TYPOGRAPHICAL ERROR IN THAT PRINTING, not an OCR + ; artefact. scan2's edition prints "Luc. 1, 26-38". Three independent + ; things settle it for Luke 1: (a) scan2's own text; (b) the pericope + ; printed under the citation in BOTH editions is "Missus est Angelus + ; Gabriel ... Ecce ancilla Domini", which is Luke 1:26-38 -- Luke + ; 2:26-38 is Simeon and Anna, a different passage entirely; (c) the + ; SAME edition that misprints it here prints the identical pericope + ; two pages later for the Annunciation (25 March, page image p. 496) + ; and cites it correctly as "Luc. 1, 26-38". + (Edit gabriel-the-archangel + ((Set_citation First "Dan 9:21-26") (Set_citation Gospel "Luke 1:26-38"))) + + ; 27 March, "S. Ioannis Damasceni, Conf. et Eccl. Doct., III classis": + ; "Lectio libri Sapientiae. Sap. 10, 10-17" / "Sequentia sancti + ; Evangelii secundum Lucam. Luc. 6, 6-11". + ; scan1:28305-28306 + 28319-28320; scan2:31326-31328 + 31344-31346; + ; page image p. 497. The 10-17 (here) versus 10-14 (John of + ; Capistrano, next entry) split is real and agreed by all three + ; sources: this pericope runs on through "Et reddidit iustis mercedem + ; laborum suorum" (Wis 10:17), his does not. + (Edit john-damascene + ((Set_citation First "Wis 10:10-17") (Set_citation Gospel "Luke 6:6-11"))) + + ; 28 March, "S. Ioannis de Capistrano Conf., III classis": + ; "Lectio libri Sapientiae. Sap. 10, 10-14" / "Sequentia sancti + ; Evangelii secundum Lucam. Luc. 9, 1-6". + ; scan1:28346-28348 + 28412-28413; scan2:31382-31387 + 31445-31447; + ; page image p. 498 (the pericope there ends at "et in vinculis non + ; dereliquit illum" = Wis 10:14). + (Edit john-of-capistrano + ((Set_citation First "Wis 10:10-14") (Set_citation Gospel "Luke 9:1-6"))) + + ; 2 April, "S. Francisci de Paula Conf., III classis": + ; "Lectio Epistolae beati Pauli Apostoli ad Philippenses. Philipp. 3, + ; 7-12" / "Sequentia sancti Evangelii secundum Lucam. Luc. 12, 32-34". + ; scan1:28585-28586 + 28587-28588; scan2:31560-31562 + 31625-31630. + ; (scan2's OCR of the Gospel citation is shredded to "Lac. U, 32-34"; + ; scan1 prints it cleanly and the pericope is "Nolite timere, + ; pusillus grex", Luke 12:32-34.) + (Edit francis-of-paola + ((Set_citation First "Phil 3:7-12") (Set_citation Gospel "Luke 12:32-34")))))) -- cgit v1.3