diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-18 13:02:49 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-18 13:02:49 +0200 |
| commit | 910ea22fd90ded9d4bf1845d5a4cfd9f11a624e1 (patch) | |
| tree | a196ae0bebc3eb24c2965a05db11163431cdb2ce | |
| parent | e1f4b8f0ca7ff328d6c232b9dbb4cb5f17db5d3e (diff) | |
| download | lectio-910ea22fd90ded9d4bf1845d5a4cfd9f11a624e1.tar.gz lectio-910ea22fd90ded9d4bf1845d5a4cfd9f11a624e1.zip | |
fix(ef): adopt eight corrections from colitur, with their citations
lectio's EF data has been the upstream for colitur, whose data was
bootstrapped from this ini. colitur has since validated that data against the
1962 Missal itself, and these eight fields are where the two now disagree and
the Missal decides against us. Each carries the rubric.
Calendar. St Ubaldus (16 May) and St Didacus (13 November) become III-class
feasts rather than commemorations: the Missal's own universal calendarium
ranks both "III classis" outright with no commemoration rubric, and each has
its own Mass entry in the Proprium taking its readings from a Common with
only its Oratio proper -- which a bare commemoration never has. Found by
auditing all 290 of colitur's fixed-date entries against that calendarium;
these two were the only status defects in the file. The Vigil of the
Assumption becomes violet from white and the Vigil of St Lawrence violet from
red: RG 128 gives violet to vigils of II and III class outside Paschaltide,
and its sole exception is the Ascension's vigil, inside Paschaltide, which is
white and is untouched here.
Lectionary. Both Ember Saturdays carried the wrong saint's Mass entirely --
St Thomas the Apostle's under ef-advent-ember-sat and St Matthew's under
ef-september-ember-sat, in both cases because 21 December and 21 September
fall on a Saturday in the same six years and a bootstrap generalised one
year's coincidence into a template value.
Two oracle allow-list entries, both placed ahead of the BVM-Saturday entry
deliberately. When 16 May or 13 November falls on a Saturday, that entry's
predicate also matches and would absorb the divergence under a reason no
longer true of it -- it says both engines agree the day is unimpeded, and the
point here is that the day IS impeded. The vigil entry excludes Sundays for
the mirror reason: RG 33 omits a vigil falling on one, and without the guard
2026-08-09 is stolen from the RG 33 entry that actually explains it.
Six days of the 730-day oracle window are affected. Readings are untouched by
that test, so the two lectionary corrections cost it nothing.
| -rw-r--r-- | internal/caldata/tridentine-calendar.ini | 8 | ||||
| -rw-r--r-- | internal/caldata/tridentine-lectionary.ini | 8 | ||||
| -rw-r--r-- | internal/calendar/oracle_ef_test.go | 59 |
3 files changed, 67 insertions, 8 deletions
diff --git a/internal/caldata/tridentine-calendar.ini b/internal/caldata/tridentine-calendar.ini index 746f783..e8f0797 100644 --- a/internal/caldata/tridentine-calendar.ini +++ b/internal/caldata/tridentine-calendar.ini @@ -810,7 +810,7 @@ reading.gospel = Matt 18:1-5 [ubaldus] date = 05-16 -rank = commemoration +rank = class-3 colour = white name.en = St. Ubaldus name.pl = św. Ubalda, Biskupa i Wyznawcy @@ -1573,7 +1573,7 @@ name.pl = św. Romana, Męczennika [vigil-of-st-lawrence] date = 08-09 rank = class-3 -colour = red +colour = violet name.en = Vigil of St. Lawrence name.pl = Wigilia św. Wawrzyńca, Męczennika reading.first = Ecclus 51:1-8, 12 @@ -1620,7 +1620,7 @@ name.en = St. Eusebius [vigil-of-the-assumption] date = 08-14 rank = class-2 -colour = white +colour = violet name.en = Vigil of the Assumption name.pl = Wigilia Wniebowzięcia N. M. P. reading.first = Sir 24:23-31 @@ -2399,7 +2399,7 @@ reading.gospel = Matt 16:13-19 [didacus] date = 11-13 -rank = commemoration +rank = class-3 colour = white name.en = St. Didacus name.pl = św. Dydaka, Wyznawcy diff --git a/internal/caldata/tridentine-lectionary.ini b/internal/caldata/tridentine-lectionary.ini index 1f8a9b9..ea896a2 100644 --- a/internal/caldata/tridentine-lectionary.ini +++ b/internal/caldata/tridentine-lectionary.ini @@ -22,8 +22,8 @@ first = Isa 11:1-5 gospel = Luke 1:39-47 [ef-advent-ember-sat] -first = Eph 2:19-22 -gospel = John 20:24-29 +first = 2 Thess 2:1-8 +gospel = Luke 3:1-6 [ef-advent-ember-wed] first = Isa 7:10-15 @@ -326,8 +326,8 @@ first = Osee 14:2-10 gospel = Luke 7:36-50 [ef-september-ember-sat] -first = Ezek 1:10-14 -gospel = Matt 9:9-13 +first = Heb 9:2-12 +gospel = Luke 13:6-17 [ef-september-ember-wed] first = 2 Esd. 8:1-10 diff --git a/internal/calendar/oracle_ef_test.go b/internal/calendar/oracle_ef_test.go index a2bb6a5..47983c9 100644 --- a/internal/calendar/oracle_ef_test.go +++ b/internal/calendar/oracle_ef_test.go @@ -128,6 +128,65 @@ type efAllow struct { var efAllowList = []efAllow{ { + // The 1962 Missal's own universal CALENDARIUM ranks both of these as + // bare III-class feasts, with no commemoration rubric: "S. Ubaldi Ep. + // et Conf., III classis" (16 May) and "S. Didaci Conf., III classis" + // (13 November). Each also has its own Mass entry in the Proprium, + // taking its readings from a Common with only its Oratio proper -- + // which a bare commemoration never has. missalemeum ranks both as + // commemorations, so on these dates it leaves the day unimpeded and + // shows a feria or the Saturday BVM Office; lectio now shows the feast. + // + // This entry MUST precede the BVM-Saturday entry below. When 16 May or + // 13 November falls on a Saturday, that entry's predicate (Saturday + + // an oracle title naming the B.V.M.) also matches, and would absorb + // this divergence under a reason that is no longer true of it -- it + // says "both engines agree only that the day is unimpeded", and the + // whole point here is that the day IS impeded, by a feast missalemeum + // does not rank as one. + // + // Found by auditing all 290 of colitur's fixed-date sanctoral entries + // against that calendarium; these two were the only status defects. + // colitur allow-list C38/M30, rules-register.md 6.25. + match: func(date string, day time.Time, o efOracleDay) bool { + md := date[5:] + return (md == "05-16" || md == "11-13") && + !strings.Contains(strings.ToLower(o.Title), "ubald") && + !strings.Contains(strings.ToLower(o.Title), "didac") + }, + field: "rank+colour", + reason: "Missal calendarium ranks St Ubaldus (16 May) and St Didacus (13 Nov) III classis, not commemorations; missalemeum keeps them as commemorations and so leaves the day unimpeded (colitur C38/M30)", + }, + { + // RG 128, "De colore violaceo": violet is used for vigils of II and III + // class outside Paschaltide. The Vigil of the Assumption (14 August, II + // class) and the Vigil of St Lawrence (9 August, III class) both + // qualify. missalemeum shows white and red respectively -- values + // lectio carried too, and colitur inherited from lectio, all three + // descending from Divinum Officium's data files. The rule's sole + // exception is named in the same place and is not either of these: the + // Ascension's vigil, the one II-class vigil INSIDE Paschaltide, which + // is white and is untouched. + // + // colitur allow-list C37/M29, rules-register.md 6.24. + // NOT on a Sunday. RG 33 omits a II/III-class vigil whenever its date + // falls on one, so lectio shows the Sunday and the divergence there is + // missalemeum's own RG 33 gap -- already allow-listed further down, + // with its own citation. Without this guard, 2026-08-09 (a Sunday whose + // oracle title still reads "Vigil of St. Lawrence") matches on the + // title alone and is stolen from that entry, reported under a colour + // rule that has nothing to do with it. Same failure this list's first + // entry exists to prevent, in the opposite direction. + match: func(date string, day time.Time, o efOracleDay) bool { + md := date[5:] + return (md == "08-09" || md == "08-14") && + day.Weekday() != time.Sunday && + strings.Contains(strings.ToLower(o.Title), "vigil") + }, + field: "colour", + reason: "RG 128: violet for vigils of II and III class outside Paschaltide; missalemeum shows white/red (colitur C37/M29)", + }, + { // RG 91 entry 27, "Officium sanctae Mariae in sabbato": the votive // BVM Office on an otherwise-unoccupied IV-class Saturday. Not built // in lectio (temporal_ef.go constructs only a bare ferial slug on |
