aboutsummaryrefslogtreecommitdiff
path: root/internal/caldata/readings.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:32:52 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:32:52 +0200
commit5ee75098e1c86fdce195df2e37784c18a2b081a5 (patch)
tree4f5a5a12536087acce3553a4d140f3b5d034faf3 /internal/caldata/readings.go
parent2dc44fbbc581430e2038e2ff6d67265fe716791c (diff)
downloadlectio-5ee75098e1c86fdce195df2e37784c18a2b081a5.tar.gz
lectio-5ee75098e1c86fdce195df2e37784c18a2b081a5.zip
fix(ef): the weekdays within the Octave of the Nativity have their own Mass
29, 30 and 31 December are named days in the Missal's calendarium -- "De V die infra octavam Nativitatis Domini, II classis" and so on -- with a direct formulary, "Diebus infra octavam Nativitatis Domini": Titus 3:4-7 / Luke 2:15-20, and each date's own rubric pointing at it ("Die 29 decembris ... Missa Puer natus est nobis, ut supra"). lectio treated them as ordinary Christmas ferias, so they fell back to the preceding Sunday and served "Dominica infra octavam Nativitatis Domini" (Gal 4:1-7 / Luke 2:33-40) -- a different heading, for the Sunday specifically. Worth recording because it is not a guess: colitur made the IDENTICAL mistake, gave these three days the Sunday's citation, measured it against real years and reverted it. Its bootstrap_lectionary.ml keeps the rejection on record with the scan references for both headings, which is how this one was diagnosed rather than re-derived. Only the weekdays. When 29-31 December falls on a Sunday the day really IS Dominica infra octavam and keeps the Sunday's Mass -- 2030-12-29 is the case, and it is asserted, because a fix applied by date alone would pass on the weekdays and silently swallow the Sunday. Mutation-tested: dropping the Sunday exclusion reddens exactly that assertion and nothing else.
Diffstat (limited to 'internal/caldata/readings.go')
-rw-r--r--internal/caldata/readings.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/caldata/readings.go b/internal/caldata/readings.go
index 62ef1fc..44d1bc1 100644
--- a/internal/caldata/readings.go
+++ b/internal/caldata/readings.go
@@ -60,6 +60,9 @@ func Readings(sel calendar.Selection, layers []calendar.Layer, date time.Time, d
if r := efBVMSaturdayReadings(day); len(r) > 0 {
return r
}
+ if r := efNativityOctaveReadings(day); len(r) > 0 {
+ return r
+ }
if r := TemporalReadings("old", day.Observed.Slug); len(r) > 0 {
return r
}
@@ -145,3 +148,43 @@ func efBVMSaturdayReadings(day calendar.LiturgicalDay) []calendar.Reading {
{Part: "gospel", Citation: gospel},
}
}
+
+// efNativityOctaveReadings returns the Mass of a WEEKDAY within the Octave of
+// the Nativity -- 29, 30 and 31 December.
+//
+// The Missal gives those days a direct formulary, "Diebus infra octavam
+// Nativitatis Domini, II classis": Titus 3:4-7 / Luke 2:15-20, and each date's
+// own rubric points at it ("Die 29 decembris ... Missa Puer natus est nobis,
+// ut supra", repeated verbatim on the 30th and 31st). They are named days in
+// the calendarium too -- "De V die infra octavam Nativitatis Domini, II
+// classis" and so on -- not ordinary ferias.
+//
+// lectio treated them as ordinary Christmas ferias, so they fell back to the
+// preceding Sunday and served "Dominica infra octavam Nativitatis Domini"
+// (Gal 4:1-7 / Luke 2:33-40). That is a DIFFERENT heading, for the Sunday
+// specifically. colitur made the identical mistake once, measured it against
+// real years and reverted it; its bootstrap_lectionary.ml records the
+// rejection so it is not re-attempted, with the scan references for both.
+//
+// Only the WEEKDAYS. When 29-31 December falls on a Sunday the day really is
+// "Dominica infra octavam" and keeps the Sunday's Mass, which is the
+// distinction the wrong citation blurred -- so the Sunday is excluded here
+// rather than merely happening not to match.
+func efNativityOctaveReadings(day calendar.LiturgicalDay) []calendar.Reading {
+ if day.Date.Month() != time.December || day.Date.Day() < 29 {
+ return nil
+ }
+ if day.Weekday == time.Sunday {
+ return nil
+ }
+ // The day within the octave, not a feast that outranks it: the observed
+ // office must still be the temporal one. A sanctoral feast keeps its own
+ // readings, as it did before this.
+ if !strings.HasPrefix(day.Observed.Slug, "ef-christmas-") {
+ return nil
+ }
+ return []calendar.Reading{
+ {Part: "first", Citation: "Titus 3:4-7"},
+ {Part: "gospel", Citation: "Luke 2:15-20"},
+ }
+}