aboutsummaryrefslogtreecommitdiff
path: root/internal/calendar/oracle_ef_test.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 13:02:49 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 13:02:49 +0200
commit910ea22fd90ded9d4bf1845d5a4cfd9f11a624e1 (patch)
treea196ae0bebc3eb24c2965a05db11163431cdb2ce /internal/calendar/oracle_ef_test.go
parente1f4b8f0ca7ff328d6c232b9dbb4cb5f17db5d3e (diff)
downloadlectio-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.
Diffstat (limited to 'internal/calendar/oracle_ef_test.go')
-rw-r--r--internal/calendar/oracle_ef_test.go59
1 files changed, 59 insertions, 0 deletions
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