diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 15:20:24 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 15:20:24 +0200 |
| commit | 36eba4eff58162cbe4c7b4ff1b9d049432fc1acc (patch) | |
| tree | aad8cd588a8a33202bfed990fec99d5eafc25dcd /lib/rites | |
| parent | dc00d1f730b23fa99cd15ff142ecba515a9fe0b7 (diff) | |
| parent | 67855ae3125148116df870bf1a9abeac5b501d5b (diff) | |
| download | colitur-36eba4eff58162cbe4c7b4ff1b9d049432fc1acc.tar.gz colitur-36eba4eff58162cbe4c7b4ff1b9d049432fc1acc.zip | |
Merge branch 'ef-triduum-litanies': the Sacred Triduum's Latin identity
Gives Holy Thursday, Good Friday and Holy Saturday the names the Missal
prints for them, taken from each Office's own running header: 'Feria V
in Cena Domini', 'Feria VI in Passione et Morte Domini', 'Sabbato
sancto'. Rank and colour were already correct; only the identity was
missing, the same shape the Holy Family had. The slug is deliberately
unchanged -- it is the lectionary key -- and the names are Latin, which
avoids promoting an English value from the oracle the engine is checked
against.
Not 'Feria VI Parasceve': that phrase occurs zero times as a title in
either photographic scan, appearing only inside the Johannine Passion
text, and RG 132(a) writes 'feriae VI in Passione et Morte Domini'.
Output is byte-identical across all 8417 years -- colitur day prints no
name column -- but layer 5 does see it: describe gained name_la, and
reverting the change reddens six pins.
The Major Litanies (RG 80) and the Rogation Wednesday commemoration were
investigated to the same depth, scan-verified, cited, and deliberately
not built. Rogation Wednesday is genuinely blocked: Easter+38 coincides
with the Ascension Vigil, so no Fixed date-spec can anchor it. The Major
Litanies are tractable in the rite module -- the two blockers first
recorded for them were false, and are retracted here -- but 25 April is
St Mark, II class, so under RG 111(c) a privileged Litanies
commemoration would displace the day's existing ordinary commemoration
in ~97.7% of years. That blast radius is unmeasured, and measuring it is
the prerequisite for its own task.
Diffstat (limited to 'lib/rites')
| -rw-r--r-- | lib/rites/rite_ef/temporal_ef.ml | 102 |
1 files changed, 101 insertions, 1 deletions
diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index bbd88ec..4b59ff4 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -154,6 +154,97 @@ let holy_name_fallback_date y = mk y 1 2 let holy_name_names = Colitur_kernel.Names.of_list [ (Colitur_kernel.Lang.of_string_exn "la", "Sanctissimi Nominis Iesu") ] +(* RG 91 entry 2 (Sacred Triduum) ranks Holy Thursday/Good Friday/Holy + Saturday above even entry 7's own I-class ferias (this file's own comment + on [privileged_feria]), but [temporal] constructs no proper NAMED office + for any of the three (ef-triduum-litanies task, Gap 1) -- they fall + through to the generic Passiontide ferial branch below like any other day + of Holy Week. The slug STAYS that generic key: RG 91 entry 2 is already + identified structurally, off the day's own Easter offset and rank + (Precedence_ef.band's own entry-2 branch), never off the slug, so + renaming it would touch precedence for no reason and would break the + lectio differential's own slug mapping for these three lectionary keys + (the same reasoning [holy_family_sunday]'s own citation above gives for + keeping "ef-time-after-epiphany-sunday-1"). What was actually missing is + IDENTITY alone, closed the same way RG 17(b)/(a) (Holy Family/Holy Name, + above) already were: Latin, not English, in [names] -- zero circularity + (an English name would mean reading missalemeum's own title text, the + oracle this exact axis is compared against, to decide colitur's own + "ground truth"). + + Both photographic scans, word for word, corroborated by the electronic + transcription's own table-of-contents-style listing at the identical + three headings (docs/research/rules-register.md; three-way agreement, no + scan-vs-transcription conflict to adjudicate here -- these three headings + sit OUTSIDE the Mass-propers body text the transcription is documented + elsewhere as missing almost all of, in a title/running-header line it + carries just the same): "FERIA QUINTA IN CENA DOMINI" / running header + "Feria V in Cena Domini" (Holy Thursday); "FERIA SEXTA / IN PASSIONE ET + MORTE DOMINI" (Good Friday -- NOT the informal "Feria VI Parasceve" the + transcription uses in passing elsewhere in an unrelated rubric; this is + the Missal's own Mass-propers section title, confirmed as the running + header on every page of that Office in both scans); "SABBATO SANCTO" + (Holy Saturday, both scans, with "I classis" printed directly beneath the + heading). + + [subject = Lord] is also set (Holy Family/Holy Name needed it only + because Precedence_ef.band's entry 14 reads [subject] to outrank a + colliding fixed feast; entry 2 here needs no such thing -- + Precedence_ef.band's own entry-2 branch tests only [rank] and the Easter + offset). Tagged anyway because it is simply true (the Last Supper, the + Passion and Death, the entombment are textbook mysteries of the Lord) and + safe: Precedence_ef.disposition's RG 112(a) branch (a mystery of the Lord + excluding a commemoration of ANOTHER mystery of the same Divine Person) + only fires when BOTH sides of an occurrence are tagged [Lord], and no + [Lord]-subject entry in data/ef/sanctoral.sexp has a fixed civil date + inside Holy Week's own movable range (earliest 19 March, latest 24 April; + the register's own subject audit lists exactly six [Lord]-tagged + entries, all fixed in January, February, JULY, August, September or + November -- the Precious Blood, 1 July, was omitted from this list until + the fix-round review counted six entries against five months) + -- and any [Class1] sanctoral entry that DOES land there (e.g. a + transferred Annunciation) reaches Precedence_ef.disposition's EARLIER, + subject-blind "I class, not a Sunday -> Transfer" branch first + regardless, so RG 112(a)'s branch is never reached for it either way. + Measured, not merely argued: this task's own full 1583-9999 blast-radius + sweep (git archive, pre- vs post-change) shows zero + [observed]/[commemorations]/[transferred_*] difference traceable to this + tag anywhere in the domain -- see the task report. *) +(* SOURCE NOTE on the three literals below (corrected, fix-round review): + each is the Missal's own RUNNING HEADER for that Office, which is the + convention every other Latin name in this file already follows + ([holy_family_sunday], [holy_name_sunday]). Counted across both + photographic scans: + "Feria V in Cena Domini" heading FERIA QUINTA IN CENA + DOMINI; running header 1:1 + "Feria VI in Passione et Morte Domini" heading FERIA SEXTA / IN + PASSIONE ET MORTE DOMINI; + running header 1:1. NOT + "Feria VI Parasceve", which + occurs ZERO times as a title in + either scan -- every occurrence + of Parasceve is inside the + Johannine Passion text. RG + 132(a) writes "feriae VI in + Passione et Morte Domini". + "Sabbato sancto" heading SABBATO SANCTO (1x); + running header "Sabbato sancto" + 28x / 30x. + The last was previously shipped as "Sabbato Sancto", a third casing + attested in NEITHER scan -- it appears only in the electronic + transcription's own table of contents, i.e. the source this project's + methodology rule deprecates -- while the comment called it "both + photographic scans, word for word". Recased to the running-header form + the other names use. *) +let triduum_names = function + | -3 -> Some (Colitur_kernel.Names.of_list [ (Colitur_kernel.Lang.of_string_exn "la", "Feria V in Cena Domini") ]) + | -2 -> + Some + (Colitur_kernel.Names.of_list + [ (Colitur_kernel.Lang.of_string_exn "la", "Feria VI in Passione et Morte Domini") ]) + | -1 -> Some (Colitur_kernel.Names.of_list [ (Colitur_kernel.Lang.of_string_exn "la", "Sabbato sancto") ]) + | _ -> None + let same a b = Date.compare a b = 0 (* Named temporal days: the I-class feasts of the Lord (RG 91 entries 1 and 3), @@ -731,7 +822,16 @@ let temporal d = Printf.sprintf "ef-%s-%d-%s" (season_slug_word s) (Option.value week_n ~default:0) (weekday_word d) in - build ~season:s ~slug ~colour ~rank:(ferial_rank d s) ~week:week_n ()))) + (* [triduum_names]'s own citation above: identity only, + for the three days of the Sacred Triduum -- every + other ferial day here stays unnamed, subject + Temporal, as before. *) + let subject, names = + match triduum_names (days_between easter d) with + | Some names -> (Colitur_kernel.Subject.Lord, names) + | None -> (Colitur_kernel.Subject.Temporal, Colitur_kernel.Names.empty) + in + build ~subject ~names ~season:s ~slug ~colour ~rank:(ferial_rank d s) ~week:week_n ()))) (* Independent restatement of [named]'s fixed and Easter-relative dates, paired with the slug each should carry, for civil year [y]. Deliberately |
