aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 15:39:48 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 15:39:48 +0200
commit967e911728eefb85dc53065c73c5c5d4cdce6a59 (patch)
tree70a25aba22fa038ba411e5e3323f5ab42d349047
parent4b2e1a1e0d52cba62ab7f80aecf3506c323b47fd (diff)
downloadlectio-967e911728eefb85dc53065c73c5c5d4cdce6a59.tar.gz
lectio-967e911728eefb85dc53065c73c5c5d4cdce6a59.zip
fix(ef): twelve RG 124 colours -- missalemeum has the rule inverted
RG 124, "De coloribus paramentorum", section C, both photographic scans word for word: 124(b) gives red to "Sanctorum Apostolorum et Evangelistarum, in eorum die natalicio, excepto festo S. Ioannis (27 decembris)", and 124(e) to "Sanctorum Martyrum, quorum colitur aut martyrium". Red is for Apostles, Evangelists and Martyrs. A Confessor, Doctor or non-martyr Virgin is white. missalemeum has twelve of these INVERTED IN BOTH DIRECTIONS: ten confessors, doctors and virgins in red (Ephrem, Julia of Falconieri, John Gualbert, Camillus de Lellis, Jerome Emiliani, Martha, Alphonsus Liguori, Augustine, Rose of Lima, John of San Fecundo), and two actual martyrs in white (Apollinaris and Josaphat, both Bishop and Martyr). Both directions failing is why this reads as one rule applied backwards rather than twelve separate slips, and why they are corrected as a block. Adjudicated by colitur against the scans -- its C18 carries the per-slug reasoning and its M21 the oracle side, verdict colitur. Two of its fourteen, conversion-of-st-paul and chair-of-st-peter, already agreed here. Found by a full-year sweep comparing clectio's output against colitur day by day, not by the patch tool that produced the earlier corrections. That tool reads colitur's sanctoral.sexp directly and so misses everything in adjustments.sexp, the overlay where all twenty of colitur's colour edits actually live -- its SECOND structural blind spot, after temporal days. All twelve go into the generator's missalOverrides table, so regeneration preserves them, and into TestTridentineMissalOverrides, now sixteen pinned fields. Mutation-tested in BOTH directions: reverting a martyr to white and a confessor to red each redden the test with the rubric named. Pinning only one direction would have let a careless "make them all white" fix pass ten of twelve. The oracle allow-list gains one entry covering the twelve dates in both years.
-rw-r--r--internal/caldata/caldata_test.go17
-rw-r--r--internal/caldata/tridentine-calendar.ini24
-rw-r--r--internal/calendar/oracle_ef_test.go31
-rw-r--r--scripts/gen-sanctoral-ef.go39
4 files changed, 99 insertions, 12 deletions
diff --git a/internal/caldata/caldata_test.go b/internal/caldata/caldata_test.go
index c0e2d50..95bb7dc 100644
--- a/internal/caldata/caldata_test.go
+++ b/internal/caldata/caldata_test.go
@@ -434,6 +434,23 @@ func TestTridentineMissalOverrides(t *testing.T) {
{"didacus", "rank", "class-3", "Missal calendarium: S. Didaci Conf., III classis"},
{"vigil-of-st-lawrence", "colour", "violet", "RG 128: III-class vigil outside Paschaltide"},
{"vigil-of-the-assumption", "colour", "violet", "RG 128: II-class vigil outside Paschaltide"},
+ // RG 124: red is for Apostles, Evangelists and Martyrs. missalemeum has
+ // these inverted in BOTH directions -- confessors and virgins red, two
+ // actual martyrs white -- which is why both directions are pinned here.
+ // A fix that turned every one of them white would pass ten of these
+ // twelve and fail the two that matter.
+ {"alphonsus-liguori", "colour", "white", "RG 124: not a martyr, so white"},
+ {"apollinaris", "colour", "red", "RG 124(e): Bishop and MARTYR, red"},
+ {"augustine", "colour", "white", "RG 124: not a martyr, so white"},
+ {"camillus-de-lellis", "colour", "white", "RG 124: not a martyr, so white"},
+ {"ephrem-of-syria", "colour", "white", "RG 124: not a martyr, so white"},
+ {"jerome-emiliani", "colour", "white", "RG 124: not a martyr, so white"},
+ {"john-gualbert", "colour", "white", "RG 124: not a martyr, so white"},
+ {"john-of-san-fecundo", "colour", "white", "RG 124: not a martyr, so white"},
+ {"josaphat", "colour", "red", "RG 124(e): Bishop and MARTYR, red"},
+ {"julia-of-falconieri", "colour", "white", "RG 124: not a martyr, so white"},
+ {"martha", "colour", "white", "RG 124: not a martyr, so white"},
+ {"rose-of-lima", "colour", "white", "RG 124: not a martyr, so white"},
} {
rc, ok := l.Cels[c.slug]
if !ok {
diff --git a/internal/caldata/tridentine-calendar.ini b/internal/caldata/tridentine-calendar.ini
index 51b931a..54c8aa2 100644
--- a/internal/caldata/tridentine-calendar.ini
+++ b/internal/caldata/tridentine-calendar.ini
@@ -1053,7 +1053,7 @@ name.pl = śś. Bazylidesa, Cyryna, Nabora i Nazariusza, Męczenników
[john-of-san-fecundo]
date = 06-12
rank = class-3
-colour = red
+colour = white
name.en = St. John of San Fecundo
name.pl = św. Jana z Facundo, Wyznawcy
reading.first = Sir 31:8-11
@@ -1096,7 +1096,7 @@ reading.gospel = Matt 25:14-23
[ephrem-of-syria]
date = 06-18
rank = class-3
-colour = red
+colour = white
name.en = St. Ephrem of Syria
name.pl = św. Efrema, Diakona, Wyznawcy i Doktora Kościoła
reading.first = 2 Tim 4:1-8
@@ -1112,7 +1112,7 @@ name.pl = śś. Marka i Marcelina, Męczenników
[julia-of-falconieri]
date = 06-19
rank = class-3
-colour = red
+colour = white
name.en = St. Julia of Falconieri
name.pl = św. Juliany Falconieri, Dziewicy
reading.first = 2 Cor 10:17-18; 11:1-2
@@ -1294,7 +1294,7 @@ name.pl = św. Piusa I, Papieża i Męczennika
[john-gualbert]
date = 07-12
rank = class-3
-colour = red
+colour = white
name.en = St. John Gualbert
name.pl = św. Jana Gwalberta, Opata
reading.first = Ecclus 45:1-6
@@ -1342,7 +1342,7 @@ name.pl = św. Aleksego, Wyznawcy
[camillus-de-lellis]
date = 07-18
rank = class-3
-colour = red
+colour = white
name.en = Camillus de Lellis
name.pl = św. Kamila de Lellis
reading.first = 1 John 3:13-18.
@@ -1367,7 +1367,7 @@ reading.gospel = Luke 10:1-9
[jerome-emiliani]
date = 07-20
rank = class-3
-colour = red
+colour = white
name.en = St. Jerome Emiliani
name.pl = św. Hieronima Emiliani, Wyznawcy
reading.first = Isa 58:7-11
@@ -1408,7 +1408,7 @@ reading.gospel = Luke 7:36-50
[apollinaris]
date = 07-23
rank = class-3
-colour = white
+colour = red
name.en = St. Apollinaris
name.pl = św. Apolinarego, Biskupa i Męczennika
reading.first = 1 Pet. 5:1-11
@@ -1479,7 +1479,7 @@ name.pl = śś. Feliksa, Symplicjusza, Faustyna i Beatryczy, Męczenników
[martha]
date = 07-29
rank = class-3
-colour = red
+colour = white
name.en = St. Martha
name.pl = św. Marty, Dziewicy
reading.first = 2 Cor 10:17-18; 11:1-2
@@ -1511,7 +1511,7 @@ name.pl = Siedmiu Braci Machabejskich, Męczenników
[alphonsus-liguori]
date = 08-02
rank = class-3
-colour = red
+colour = white
name.en = St. Alphonsus Liguori
name.pl = św. Alfonsa Marii Liguori, Biskupa, Wyznawcy i Doktora Kościoła
reading.first = 2 Tim. 2:1-7
@@ -1777,7 +1777,7 @@ reading.gospel = Matt 18:1-5
[augustine]
date = 08-28
rank = class-3
-colour = red
+colour = white
name.en = St. Augustine
name.pl = św. Augustyna, Biskupa, Wyznawcy i Doktora Kościoła
reading.first = 2 Tim 4:1-8
@@ -1809,7 +1809,7 @@ name.pl = św. Sabiny, Męczennicy
[rose-of-lima]
date = 08-30
rank = class-3
-colour = red
+colour = white
name.en = St. Rose of Lima
name.pl = św. Róży z Limy, Dziewicy
reading.first = 2 Cor 10:17-18; 11:1-2
@@ -2435,7 +2435,7 @@ name.pl = św. Dydaka, Wyznawcy
[josaphat]
date = 11-14
rank = class-3
-colour = white
+colour = red
name.en = St. Josaphat
name.pl = św. Jozafata, Biskupa i Męczennika
reading.first = Heb 5:1-6
diff --git a/internal/calendar/oracle_ef_test.go b/internal/calendar/oracle_ef_test.go
index 47983c9..b74d935 100644
--- a/internal/calendar/oracle_ef_test.go
+++ b/internal/calendar/oracle_ef_test.go
@@ -128,6 +128,37 @@ type efAllow struct {
var efAllowList = []efAllow{
{
+ // RG 124, "De coloribus paramentorum", section C "De colore rubro",
+ // both photographic scans word for word: 124(b) gives red to
+ // "Sanctorum Apostolorum et Evangelistarum, in eorum die natalicio,
+ // excepto festo S. Ioannis (27 decembris)", and 124(e) to "Sanctorum
+ // Martyrum, quorum colitur aut martyrium". Red is for Apostles,
+ // Evangelists and Martyrs; a Confessor, Doctor or non-martyr Virgin is
+ // white.
+ //
+ // missalemeum has these INVERTED IN BOTH DIRECTIONS -- ten confessors
+ // and virgins in red, and two actual martyrs (Apollinaris and
+ // Josaphat, both Bishop and Martyr) in white. Both directions failing
+ // is why this is read as a systematic upstream error rather than a
+ // judgement call: a rule applied backwards, not a series of
+ // individual mistakes.
+ //
+ // colitur adjudicated the same fourteen slugs against the scans (its
+ // C18 carries the per-slug reasoning, its M21 the oracle side, verdict
+ // colitur). Twelve are corrected here; conversion-of-st-paul and
+ // chair-of-st-peter already agreed.
+ match: func(date string, day time.Time, o efOracleDay) bool {
+ switch date[5:] {
+ case "06-12", "06-18", "06-19", "07-12", "07-18", "07-20",
+ "07-23", "07-29", "08-02", "08-28", "08-30", "11-14":
+ return true
+ }
+ return false
+ },
+ field: "colour",
+ reason: "RG 124: red is for Apostles, Evangelists and Martyrs; missalemeum has ten confessors/virgins red and two martyrs white, inverted in both directions (colitur C18/M21)",
+ },
+ {
// 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"
diff --git a/scripts/gen-sanctoral-ef.go b/scripts/gen-sanctoral-ef.go
index ba4d9ce..39826fc 100644
--- a/scripts/gen-sanctoral-ef.go
+++ b/scripts/gen-sanctoral-ef.go
@@ -333,6 +333,45 @@ var missalOverrides = []missalOverride{
`RG 128, same rule; 14 August is a II-class vigil outside Paschaltide. ` +
`The rule's sole exception is the Ascension's vigil, INSIDE Paschaltide, ` +
`which is white and is deliberately not listed here`},
+
+ // RG 124, "De coloribus paramentorum", section C "De colore rubro", both
+ // photographic scans word for word: 124(b) gives red to "Sanctorum
+ // Apostolorum et Evangelistarum, in eorum die natalicio, excepto festo S.
+ // Ioannis (27 decembris)", and 124(e) to "Sanctorum Martyrum, quorum
+ // colitur aut martyrium". Red is therefore for Apostles, Evangelists and
+ // Martyrs; a Confessor, Doctor or non-martyr Virgin is white.
+ //
+ // missalemeum has these twelve INVERTED IN BOTH DIRECTIONS -- ten
+ // confessors and virgins in red, and two actual martyrs in white -- which
+ // is the signature of a systematic upstream error rather than a judgement
+ // call, and is why they are corrected as a block. colitur adjudicated the
+ // same fourteen slugs against the scans (its C18 carries the per-slug
+ // reasoning, its M21 the oracle side); the two not listed here,
+ // conversion-of-st-paul and chair-of-st-peter, already agree.
+ {"alphonsus-liguori", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"apollinaris", "colour", "red",
+ `RG 124 Bishop and MARTYR -- RG 124(e), red`},
+ {"augustine", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"camillus-de-lellis", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"ephrem-of-syria", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"jerome-emiliani", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"john-gualbert", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"john-of-san-fecundo", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"josaphat", "colour", "red",
+ `RG 124 Bishop and MARTYR -- RG 124(e), red`},
+ {"julia-of-falconieri", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"martha", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
+ {"rose-of-lima", "colour", "white",
+ `RG 124 not a martyr (Confessor/Virgin/Doctor) -- RG 124 gives red only to Apostles, Evangelists and Martyrs, so white`},
}
// applyMissalOverrides rewrites the harvested entries in place and reports