summaryrefslogtreecommitdiff
path: root/scripts/gen-sanctoral.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-28 01:05:56 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-28 01:05:56 +0200
commitb12d59b094246163a75f4a4f5ce7f9fb487614bf (patch)
tree089e8b060dbf676e433edbb6eb5f10413c9bdae0 /scripts/gen-sanctoral.go
parenta3e1781363ab708b25dfa87b39d29e2c4324f5cb (diff)
downloadlectio-b12d59b094246163a75f4a4f5ce7f9fb487614bf.tar.gz
lectio-b12d59b094246163a75f4a4f5ce7f9fb487614bf.zip
fix(of): sanctoral generation — exclude temporal & movable, keep transferred-fixed
- Skip ALL dates the temporal engine owns (Sundays + its solemnities/feasts), so Christ the King / Trinity no longer leak into the sanctoral as duplicate fixed-date entries; saints are captured on their weekday occurrences. - Explicit skip-list for genuinely movable memorials (Mary Mother of the Church, Immaculate Heart, BVM-on-Saturday) that a fixed-date calendar cannot represent -- a documented gap needing temporal-engine support. - 'first year wins' keeps a transferred-but-fixed feast (Annunciation Mar 25) on its proper date. Lord-feast class inference fixed earlier. Calendar rank vs calapi: 2026 1/86, 2027 2/86, 2028 2/92 mismatches (~98-99%); residual = the skipped movable memorials.
Diffstat (limited to 'scripts/gen-sanctoral.go')
-rw-r--r--scripts/gen-sanctoral.go21
1 files changed, 16 insertions, 5 deletions
diff --git a/scripts/gen-sanctoral.go b/scripts/gen-sanctoral.go
index 561bec0..6d81d66 100644
--- a/scripts/gen-sanctoral.go
+++ b/scripts/gen-sanctoral.go
@@ -112,6 +112,15 @@ func main() {
entries := map[string]entry{} // slug -> entry (first year wins per slug)
+ // Genuinely MOVABLE celebrations tied to the temporal cycle (no fixed date):
+ // a fixed-date sanctoral cannot represent them; they need temporal-engine
+ // support. Skipped here (tracked as a known gap).
+ movableSkip := map[string]bool{
+ "mary-mother-of-the-church": true, // Monday after Pentecost
+ "the-immaculate-heart-of-mary": true, // Saturday after the Sacred Heart
+ "the-memorial-of-the-blessed-virgin-mary-on-saturday": true, // any free Saturday
+ }
+
// Reference years: cover every weekday so a saint whose date is a Sunday in
// one year is captured in another. 2025 is past -> niedziela gives pl names.
for _, y := range []int{2025, 2026, 2027} {
@@ -134,10 +143,12 @@ func main() {
// Christmas, Easter cycle, etc.). Sanctoral dates are ferial (or a
// plain Sunday) in the pure temporal.
temp := calendar.Compute(t, sel, nil)
- if temp.Observed.Rank == calendar.RankSolemnity && t.Weekday() != time.Sunday {
- continue
- }
- if temp.Observed.Rank == calendar.RankFeast {
+ // Skip dates the temporal engine owns: Sundays and its own
+ // solemnities/feasts (Christmas & Easter cycles, Christ the King,
+ // Trinity, Corpus Christi, …). Sanctoral saints are captured on their
+ // weekday (ferial) occurrences -- and since a fixed date lands on a
+ // weekday in most years, one reference year suffices per saint.
+ if temp.Observed.Rank == calendar.RankSolemnity || temp.Observed.Rank == calendar.RankFeast {
continue
}
// Polish name for the observed (obligatory) celebration, 2025 only.
@@ -153,7 +164,7 @@ func main() {
continue // "ferial" or unknown -> not a sanctoral saint
}
slug := slugify(c.Title)
- if slug == "" {
+ if slug == "" || movableSkip[slug] {
continue
}
if _, seen := entries[slug]; seen {