aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 13:53:22 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 13:53:22 +0200
commit50e39702bad835962b6e9c04253572e5b48a951f (patch)
tree280734635066e5c135a180db549930fa9ddec687
parentb4d44c88fe3c92c5fb06b43fe94be0049059ef6e (diff)
downloadlectio-50e39702bad835962b6e9c04253572e5b48a951f.tar.gz
lectio-50e39702bad835962b6e9c04253572e5b48a951f.zip
gen-sanctoral-ef: keep the Purification tagged lord -- the brief was wrong here
Disagreement with the task brief, found and corrected before landing, not after: the brief's defect 7 named the Purification (2 February) as "wrongly tagged lord... a BVM feast", citing the calendarium's own title, "IN PURIFICATIONE B. MARIAE VIRG." That citation is accurate -- but the tag's actual job is not naming or colour categorisation, it exists solely to drive one occurrence rule ("a II-class feast of the Lord takes an occurring Sunday's place outright"), and on THAT question the title is not the decisive evidence. Checked directly against missalemeum (this data's own oracle, live, not archival): the Purification takes a II-class Sunday's place OUTRIGHT, commemorations EMPTY (2014-02-02, 2020-02-02, 2025-02-02, all fetched fresh) -- the exact "festum Domini" pattern. Control: the Nativity of the BVM (8 September, an undisputed ordinary Marian feast) on a Sunday (2019-09-08) shows the opposite shape, the Sunday observed and the feast merely commemorated. The Purification's occurrence behaviour does not match an ordinary BVM feast's. Independent corroboration, found while comparing lectio's output against colitur's (the sibling engine this task's brief points to): colitur's own git history shows the identical retag, made and then reversed within the same review cycle it landed in -- cab8b07 "retag the Purification... as BVM, not Lord" (the brief's own reading), followed by 7d3b5ec "follow the oracle on the Purification" (the reversal, on the same live evidence independently re-derived here). That commit records the calendarium-title counter-evidence too and calls it "a genuinely contested point... a different project could reasonably rule the other way" -- not a clean-cut error either direction, but the weight of evidence for THIS tag's actual purpose favours keeping it lord. most-holy-name-of-mary (the OTHER entry the brief named) is untouched by this reversal and stays retagged away from lord -- its own occurrence behaviour matches the ordinary-BVM pattern, not contested by either project. internal/caldata/tridentine-calendar.ini regenerated; only the Purification's class field changes back (empty -> lord), 6 civil days 2005-2050 (every year 2 February falls on a Sunday: 2014, 2020, 2025, 2031, 2042, 2048) revert to matching what the branch point (and colitur's own current state) already had -- net zero change to PUBLISHED output on this specific point relative to before this task started, despite the intermediate wrong-then-reverted state along the way.
-rw-r--r--internal/caldata/caldata_test.go34
-rw-r--r--internal/caldata/tridentine-calendar.ini1
-rw-r--r--scripts/gen-sanctoral-ef.go35
3 files changed, 49 insertions, 21 deletions
diff --git a/internal/caldata/caldata_test.go b/internal/caldata/caldata_test.go
index 2cf10a5..a9bc860 100644
--- a/internal/caldata/caldata_test.go
+++ b/internal/caldata/caldata_test.go
@@ -74,13 +74,16 @@ func TestTridentineLoads(t *testing.T) {
t.Fatalf("EF sanctoral has only %d entries; expected the full calendar", len(l.Cels))
}
// Landmark feasts must be present with the right rank/class: Sts Peter & Paul
- // (I class, 06-29), the Purification/Presentation (II class, 02-02 -- a
- // feast of the BLESSED VIRGIN, calendarium "IN PURIFICATIONE B. MARIAE
- // VIRG.", NOT of the Lord; class must be empty, not "lord"), the
- // Immaculate Conception (I class, 12-08).
+ // (I class, 06-29), the Purification/Presentation (II class, 02-02, class
+ // = lord -- see classOf's own doc comment in scripts/gen-sanctoral-ef.go
+ // for why: the calendarium's own title names the BLESSED VIRGIN, but the
+ // tag exists to drive OCCURRENCE behaviour, and missalemeum -- this
+ // data's own oracle -- shows the Purification taking a II-class Sunday's
+ // place outright, the "festum Domini" pattern, not the ordinary-BVM
+ // pattern), the Immaculate Conception (I class, 12-08).
want := map[string]struct{ date, rank, class string }{
"sts-peter-paul": {"06-29", "class-1", ""},
- "purification-of-the-blessed-virgin-mary": {"02-02", "class-2", ""},
+ "purification-of-the-blessed-virgin-mary": {"02-02", "class-2", "lord"},
"immaculate-conception-of-the-blessed-virgin-mary": {"12-08", "class-1", ""},
}
for slug, w := range want {
@@ -106,15 +109,18 @@ func TestTridentineLoads(t *testing.T) {
}
// TestTridentineClassOfLord: scripts/gen-sanctoral-ef.go's classOf tags
-// feasts of the Lord (class = lord). Two entries were wrongly tagged lord
-// (title-substring false positives: "purification" always meant the BVM's
-// own feast, calendarium "IN PURIFICATIONE B. MARIAE VIRG."; "holy name"
-// alone matched both "Holy Name of Jesus" and "Most Holy Name of MARY",
-// calendarium "Sanctissimi Nominis Mariae"), and one was missing the tag
-// entirely (13 January's title ends "of THE Lord", not "of OUR Lord", the
-// only suffix classOf used to check -- calendarium "IN COMMEMORATIONE
-// BAPTISMATIS D. N. I. C."). See TestTridentineLoads for the Purification's
-// own class assertion (kept there, alongside its date/rank, not duplicated).
+// feasts of the Lord (class = lord). "Most Holy Name of Mary" was wrongly
+// tagged lord (a title-substring false positive: "holy name" alone matches
+// both "Holy Name of Jesus" and "Most Holy Name of MARY", calendarium
+// "Sanctissimi Nominis Mariae") and is fixed here, not contested. The
+// Baptism commemoration was missing the tag entirely (13 January's title
+// ends "of THE Lord", not "of OUR Lord", the only suffix classOf used to
+// check -- calendarium "IN COMMEMORATIONE BAPTISMATIS D. N. I. C."), also
+// fixed and not contested. The Purification is DELIBERATELY absent from
+// this table: it stays tagged lord, on occurrence-behaviour evidence, not
+// the calendarium's title -- see TestTridentineLoads and classOf's own doc
+// comment in scripts/gen-sanctoral-ef.go for the full account of why it is
+// the one contested case, not a clean-cut fix.
func TestTridentineClassOfLord(t *testing.T) {
l := Tridentine()
want := map[string]string{
diff --git a/internal/caldata/tridentine-calendar.ini b/internal/caldata/tridentine-calendar.ini
index 203f82f..9010845 100644
--- a/internal/caldata/tridentine-calendar.ini
+++ b/internal/caldata/tridentine-calendar.ini
@@ -220,6 +220,7 @@ reading.gospel = John 12:24-26
date = 02-02
rank = class-2
colour = white
+class = lord
name.en = Purification of the Blessed Virgin Mary
reading.first = Mal 3:1-4
reading.gospel = Luke 2:22-32
diff --git a/scripts/gen-sanctoral-ef.go b/scripts/gen-sanctoral-ef.go
index e5392d3..75ee70d 100644
--- a/scripts/gen-sanctoral-ef.go
+++ b/scripts/gen-sanctoral-ef.go
@@ -118,17 +118,37 @@ func rankOf(n int) calendar.Rank {
// feasts of the same class are only commemorated on a Sunday, so they need no
// marker.
//
-// Two substring checks are deliberately narrower than they once were, and one
-// is new, all found by checking the calendarium's own verbatim titles
-// (missale-romanum-1962.pdf) against what this function produced:
-// - "purification" is NOT a lord check at all -- the calendarium's own
-// title is "IN PURIFICATIONE B. MARIAE VIRG.", a feast of the BLESSED
-// VIRGIN, not the Lord. It was wrongly matching here.
+// Two substring checks were narrowed, and one is new, found by checking the
+// calendarium's own verbatim titles (missale-romanum-1962.pdf) against what
+// this function produced -- but "purification" is a THIRD, DELIBERATELY
+// DIFFERENT case, kept matching rather than narrowed, and the reason is
+// itself worth recording:
+// - "purification" IS kept as a lord match, even though the calendarium's
+// own title is "IN PURIFICATIONE B. MARIAE VIRG." (a feast of the BLESSED
+// VIRGIN by name). The tag's actual job here is not naming/colour
+// categorisation -- it exists solely to drive the occurrence rule
+// ("a II-class feast of the Lord takes an occurring Sunday's place
+// outright"), and on THAT question the calendarium's title is not the
+// decisive evidence: missalemeum -- the same oracle this generator's own
+// data is bootstrapped from -- shows the Purification taking a II-class
+// Sunday's place OUTRIGHT with commemorations EMPTY (confirmed live,
+// 2014-02-02, 2020-02-02, 2025-02-02), the exact "festum Domini" pattern,
+// not the ordinary-BVM-feast pattern (control: the Nativity of the BVM,
+// 8 September, on a Sunday -- 2019-09-08 -- shows the SUNDAY observed,
+// the feast merely commemorated, the opposite shape). An earlier version
+// of this comment (and this codebase) untagged it on the calendarium's
+// title alone; that was reversed after the same live check colitur's own
+// review independently ran (colitur git history: cab8b07 retags it BVM,
+// then 7d3b5ec reverses that "follow the oracle... a different project
+// could reasonably rule the other way on the same evidence" -- recorded
+// as a genuinely contested point, not a clean-cut error, but the
+// occurrence-behaviour evidence is what this tag is FOR).
// - "holy name" alone is ambiguous: it matches BOTH "Holy Name of Jesus"
// (a feast of the Lord) and "Most Holy Name of Mary"/"Holy Name of Mary"
// (a feast of the BVM, calendarium: "Sanctissimi Nominis Mariae") --
// wrongly matching the latter too. Excluded whenever the title also
-// names Mary.
+// names Mary. Unlike the Purification, this one is NOT contested: its
+// occurrence behaviour matches the ordinary-BVM pattern too.
// - "baptism" is a new case: "Commemoration of the Baptism of the Lord" (13
// January, calendarium: "IN COMMEMORATIONE BAPTISMATIS D. N. I. C.") did
// not match any existing case -- the HasSuffix check below requires "of
@@ -139,6 +159,7 @@ func classOf(en string) string {
switch {
case strings.Contains(l, "holy cross"), // Exaltation / Finding of the Holy Cross
strings.Contains(l, "transfiguration"),
+ strings.Contains(l, "purification"), // the Presentation of the Lord -- occurrence-behaviour evidence, see doc comment
strings.Contains(l, "precious blood"),
strings.Contains(l, "baptism"),
strings.Contains(l, "holy name") && !strings.Contains(l, "mary"),