aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:49:03 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:49:03 +0200
commit74d557580e747cf309b8217d34ab6b9336939fca (patch)
tree629af99823238d7cf0edb90719d85883ae397114 /internal
parenta974243ff2a309dc9b4fe1632ddd5fbde6a526b0 (diff)
downloadlectio-74d557580e747cf309b8217d34ab6b9336939fca.tar.gz
lectio-74d557580e747cf309b8217d34ab6b9336939fca.zip
fix(ef): Passion week and Holy Week are two weeks, not one
efWeek had no Passiontide case, so both weeks fell through to 0 and every day of Holy Week took the slug of its Passion-week namesake: ef-passiontide-0- monday served both Passion Monday and Holy Monday. The two weeks therefore shared one set of readings and Holy Week could not have its own -- Good Friday was reading Passion Friday's Mass. Numbered from Passion Sunday now, so the weeks are 1 and 2 and the slugs distinguish them. The six ef-passiontide-0-* sections are replaced by colitur's twelve rather than renamed, and the reason is worth recording: they were not simply Passion week's Masses. The Tuesday section carried HOLY Tuesday's (Jer 11:18-20 with the Passion according to Mark), which was Passion Tuesday's only by the same collision -- colitur documents that specific mix-up and its own correction of it. Renaming 0 to 1 would have kept the wrong Mass on Passion Tuesday while looking like a clean migration. All twelve are colitur's, verified there against both photographic scans. All six days of Holy Week now match colitur, and so does Passion Tuesday.
Diffstat (limited to 'internal')
-rw-r--r--internal/caldata/tridentine-lectionary.ini80
-rw-r--r--internal/calendar/temporal_ef.go9
-rw-r--r--internal/calendar/temporal_ef_test.go26
3 files changed, 97 insertions, 18 deletions
diff --git a/internal/caldata/tridentine-lectionary.ini b/internal/caldata/tridentine-lectionary.ini
index a04dbe3..ff39604 100644
--- a/internal/caldata/tridentine-lectionary.ini
+++ b/internal/caldata/tridentine-lectionary.ini
@@ -304,29 +304,11 @@ gospel = Matt. 26:36-75; 27:1-60.
first = Heb 9:11-15.
gospel = John 8:46-59.
-[ef-passiontide-0-friday]
-first = Jer 17:13-18
-gospel = John 11:47-54
-[ef-passiontide-0-monday]
-first = Jonas 3:1-10
-gospel = John 7:32-39
-[ef-passiontide-0-saturday]
-first = Jer 18:18-23
-gospel = John 12:10-36
-[ef-passiontide-0-thursday]
-first = Dan 3:25, 34-45.
-gospel = Luke 7:36-50
-[ef-passiontide-0-tuesday]
-first = Jer 11:18-20
-gospel = Mark 14:32-72; 15, 1-46
-[ef-passiontide-0-wednesday]
-first = Lev 19:1-2, 11-19, 25
-gospel = John 10:22-38
[ef-pentecost]
first = Acts 2:1-11.
@@ -557,3 +539,65 @@ gospel = Luke 6:36-42
[ef-time-after-pentecost-1-saturday]
first = 1 John 4:8-21
gospel = Luke 6:36-42
+
+; ---------------------------------------------------------------------------
+; Passion week and Holy Week, separated 2026-08-18. Both weeks previously
+; shared one set of ef-passiontide-0-* sections, because efWeek numbered
+; Passiontide 0 and the two weeks' days collided on the slug. Holy Week
+; therefore read Passion week's Masses -- including on Good Friday.
+;
+; The six removed sections were not simply Passion week's, either: the Tuesday
+; one carried HOLY Tuesday's Mass (Jer 11:18-20 with the Passion according to
+; Mark), which is Passion Tuesday's only by the same collision. colitur
+; documents that specific mix-up and its own correction; rather than untangle
+; which of the six were which, all twelve are taken from colitur, where each
+; was verified against both photographic scans.
+; ---------------------------------------------------------------------------
+
+[ef-passiontide-1-monday]
+first = Jonas 3:1-10
+gospel = John 7:32-39
+
+[ef-passiontide-1-tuesday]
+first = Dan 14:27, 28-42
+gospel = John 7:1-13
+
+[ef-passiontide-1-wednesday]
+first = Lev 19:1-2, 11-19, 25
+gospel = John 10:22-38
+
+[ef-passiontide-1-thursday]
+first = Dan 3:25, 34-45.
+gospel = Luke 7:36-50
+
+[ef-passiontide-1-friday]
+first = Jer 17:13-18
+gospel = John 11:47-54
+
+[ef-passiontide-1-saturday]
+first = Jer 18:18-23
+gospel = John 12:10-36
+
+[ef-passiontide-2-monday]
+first = Isa 50:5-10
+gospel = John 12:1-9
+
+[ef-passiontide-2-tuesday]
+first = Jer 11:18-20
+gospel = Mark 14:32-72; 15, 1-46
+
+[ef-passiontide-2-wednesday]
+first = Isa 53:1-12
+gospel = Luke 22:39-71; 23:1-53
+
+[ef-passiontide-2-thursday]
+first = 1 Cor 11:20-32
+gospel = John 13:1-15
+
+[ef-passiontide-2-friday]
+first = Ex 12:1-11
+gospel = John 18:1-40; 19:1-42
+
+[ef-passiontide-2-saturday]
+first = Col 3:1-4
+gospel = Matt 28:1-7
diff --git a/internal/calendar/temporal_ef.go b/internal/calendar/temporal_ef.go
index a043179..6828f35 100644
--- a/internal/calendar/temporal_ef.go
+++ b/internal/calendar/temporal_ef.go
@@ -422,6 +422,15 @@ func efWeek(date time.Time, season Season, y int, easter time.Time) int {
// its ferias. Epiphany itself is a feast inside Christmas Time (RG 72),
// not the head of a numbered week.
return daysBetween(firstSundayAfterEpiphany(y), date)/7 + 1
+ case Passiontide:
+ // Passiontide is TWO weeks and they are not interchangeable: Passion
+ // week (from Passion Sunday, Easter-14) and Holy Week (from Palm
+ // Sunday, Easter-7) have entirely different Masses. Numbering them
+ // both 0 -- which is what falling through to the default did -- gave
+ // every day of Holy Week the slug of its Passion-week namesake, so the
+ // two weeks shared one set of readings and Holy Week could not have
+ // its own.
+ return daysBetween(easter.AddDate(0, 0, -14), date)/7 + 1
case Septuagesima:
return daysBetween(easter.AddDate(0, 0, -63), date)/7 + 1
case Easter_:
diff --git a/internal/calendar/temporal_ef_test.go b/internal/calendar/temporal_ef_test.go
index e8ef391..d930cc7 100644
--- a/internal/calendar/temporal_ef_test.go
+++ b/internal/calendar/temporal_ef_test.go
@@ -334,3 +334,29 @@ func TestTemporalEFRogationDays(t *testing.T) {
"commemoration cannot be built here without displacing the Vigil", got.Cel.Slug)
}
}
+
+// TestTemporalEFPassiontideWeeks pins that Passion week and Holy Week are
+// numbered apart. They are two weeks with entirely different Masses, and
+// efWeek used to give both 0 -- so every day of Holy Week took the slug of its
+// Passion-week namesake and the two shared one set of readings.
+//
+// Good Friday is the case that shows why it matters: it was reading Passion
+// Friday's Mass.
+func TestTemporalEFPassiontideWeeks(t *testing.T) {
+ easter := d("2026-04-05")
+ for _, c := range []struct {
+ off int
+ slug string
+ }{
+ {-13, "ef-passiontide-1-monday"}, // Passion week
+ {-11, "ef-passiontide-1-wednesday"},
+ {-6, "ef-passiontide-2-monday"}, // Holy Week
+ {-2, "ef-passiontide-2-friday"}, // Good Friday
+ } {
+ day := easter.AddDate(0, 0, c.off)
+ if got := temporalEF(day).Cel.Slug; got != c.slug {
+ t.Errorf("Easter%+d (%s): slug = %q, want %q -- Passion week and Holy Week "+
+ "must not share a slug", c.off, day.Format("2006-01-02"), got, c.slug)
+ }
+ }
+}