diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-18 16:49:03 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-18 16:49:03 +0200 |
| commit | 74d557580e747cf309b8217d34ab6b9336939fca (patch) | |
| tree | 629af99823238d7cf0edb90719d85883ae397114 /internal/calendar | |
| parent | a974243ff2a309dc9b4fe1632ddd5fbde6a526b0 (diff) | |
| download | lectio-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/calendar')
| -rw-r--r-- | internal/calendar/temporal_ef.go | 9 | ||||
| -rw-r--r-- | internal/calendar/temporal_ef_test.go | 26 |
2 files changed, 35 insertions, 0 deletions
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) + } + } +} |
