diff options
| -rw-r--r-- | data/ef/expected-divergences.sexp | 13 | ||||
| -rw-r--r-- | lib/rites/rite_ef/temporal_ef.ml | 23 | ||||
| -rw-r--r-- | test/test_differential.ml | 12 | ||||
| -rw-r--r-- | test/test_golden.ml | 4 |
4 files changed, 49 insertions, 3 deletions
diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index 9d268fb..d8c197b 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -172,7 +172,18 @@ CORRECTED, task 8 fix round 1 (coordinator review, Minor): this note previously CORRECTED, fix round 2 (coordinator review, Critical): the first-round fix hand-authored only FOUR of Holy Week's six days (Monday, Tuesday, Thursday, Saturday), reasoning that Wednesday and Good Friday have no unambiguous Epistle and leaving both entirely ABSENT under a separate entry, C24 (now retired). That was worse than the bug it replaced: an absent key does not mean \"no reading\" to Lectionary_ef.readings, it means step 3 silently resumes the preceding SUNDAY -- so Good Friday, which has no Mass at all, was emitting Palm Sunday's own Epistle and Passion narrative, every year. Fixed at the source: the GOSPEL is always unambiguous on both days (one labelled Passion narrative each) and is always authored; the FIRST slot is filled too, using the SAME \"last lesson before the Gospel\" convention already load-bearing elsewhere in data/ef/lectionary.sexp (the Lenten Ember Wednesday entry, itself an identical two-peer-lesson shape, already ships its own second lesson) -- not a fresh editorial invention for this entry. Neither lesson on either day is labelled \"Epistola\" the way Holy Saturday's genuinely is, so this remains a stated convention, not a textual fact, but a consistently-applied one. C24 is retired, not re-adjudicated: its own two-day population now has a real citation and folds into this entry, which covers all SIX days of Holy Week uniformly. lectio, still conflating Holy Week with Passion week on all six days, keeps showing Passion week's own reused citation regardless -- a genuine, permanent, structural divergence, not a data gap on either side that could close. Gated on the literal 6-slug list and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees on all six -- season/slug/rank/colour were never the problem). NOT simply 46 x 6 = 276: Holy TUESDAY's own hand-authored citation is BYTE-IDENTICAL to lectio's own value (both draw on the identical Missal Mass -- C26 below has the account of why lectio's own ini carries Holy Tuesday's data under a Passion-week key), so all 46 of ITS rows match outright and never reach this entry. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 230 (276 - 46).") - (expected_rows 230)) + (expected_rows 184)) + ; C36 -- Good Friday's colour, split out of C23 (ef-oconnell-rubrics branch). + ; C23's own note says "identity already agrees on all six -- season/slug/rank/ + ; colour were never the problem". That is no longer true of ONE of its six + ; days, so the row moves rather than C23's gate being loosened for all six. + ; 184 + 46 = 230, C23's own former count, no residue -- both numbers derived + ; from the comparator's own output, not hand-counted. + ((id C36) + (citation "RG 128(b), primary text, already transcribed in docs/research/rules-register.md §3b and verified 2026-08-12 (Task 16): Passiontide's violet runs from Septuagesima to the Easter Vigil EXCEPTIS, among others, 'Actione liturgica feria VI in Passione et Morte Domini usque ad Communionem exclusive' -- the Good Friday liturgical action up to Communion exclusive is NOT violet. RG 132 assigns black to it. The register recorded this as an acknowledged gap ('Not currently emitted by Rite_ef.Temporal_ef') rather than a disputed reading; this entry closes it. Corroborated by two witnesses outside the Divinum Officium lineage that colitur, lectio and missalemeum all share: O'Connell, The Celebration of Mass, 4th ed. (1964, revised throughout to the Codex Rubricarum 1960 and the 1962 Missal, imprimatur Nov 1963), section 5 -- 'Black, symbolising mourning, is used on Good Friday (violet for the Communion rite) and for requiem Masses' -- and a published 1962 Ordo, register §6.21. Even missalemeum's own colour SET for this day is 'bv', black first") + (verdict colitur) + (note "ef-oconnell-rubrics branch. Good Friday's own 46 rows used to sit inside C23 with diffs = [First_f; Gospel_f]; they now carry [First_f; Gospel_f; Colour_f] and are gated on that exact triple, so C23's own exact-pair gate is unchanged and still means what its note says for its remaining four days. The citation divergence is C23's cause and unchanged (lectio conflates Holy Week with Passion week and has no Holy Week propers at all); the colour divergence is this branch's own fix, and lectio cannot follow it -- lectio has no Good Friday office distinct from Passion Friday's to colour in the first place, so this is a permanent structural divergence, not a data gap that could close on either side. Per-ACTION residue, stated not hidden: the rubric is 'usque ad Communionem exclusive', so violet returns for the Communion rite; the day/colour model emits ONE colour and black is the day's principal one. That is the SAME already-acknowledged modelling limit RG 126's Palm Sunday blessing carries, not a new one this entry introduces. 46 = one per year over the fixture's 2005-2050 span, no year excepted: Good Friday is I class and can never be impeded, unlike C26/C27/C28 whose populations lose years to competing feasts. Derived from the OCaml comparator's own output, not hand-counted.") + (expected_rows 46)) ; C25 -- CLOSED, BVM Saturday Mass (2026-08-17), REMOVED not re-adjudicated: ; 0 of 16801 rows. It covered `ef-christmas-1-saturday`, a Holy-Name-week ; Saturday with no proper of its own, which resumed the preceding Sunday's diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index fa78cbe..c16732b 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -1054,6 +1054,29 @@ let temporal d = Thursday's is white ALONE -- confirming this specific day, and only this one, needs the exception coded. *) else if days_between easter d = -3 then Colour.White + (* RG 128(b)'s THIRD named exception, the same primary + sentence quoted above: "...Actione liturgica feria VI + in Passione et Morte Domini usque ad Communionem + exclusive; ..." -- violet does NOT run through the Good + Friday liturgical action, and RG 132 assigns black + there. Recorded in register §3b as an acknowledged gap + since Task 16 (the comment above says so in as many + words) and closed here on two independent 1962-scoped + witnesses, neither in the Divinum Officium lineage: + O'Connell, *The Celebration of Mass* 4th ed. (1964), + revised to the Codex Rubricarum (1960) and the 1962 + Missal, §5 -- "Black, symbolising mourning, is used on + Good Friday (violet for the Communion rite)" -- and a + published 1962 Ordo (register §6.21, §6.22). + Like Palm Sunday's palms this rubric is per-ACTION + ("usque ad Communionem exclusive") and the day/colour + model emits ONE colour; black is the day's principal + one -- the same judgement missalemeum's own colour SET + makes by ordering Good Friday "bv", black first. The + residual per-action nuance (violet from Communion) is + the SAME already-acknowledged modelling gap RG 126's + palms carry, not a new one. *) + else if days_between easter d = -2 then Colour.Black else season_colour s in (* [triduum_names]'s own citation above: identity only, diff --git a/test/test_differential.ml b/test/test_differential.ml index c9173d6..c121d91 100644 --- a/test/test_differential.ml +++ b/test/test_differential.ml @@ -893,6 +893,16 @@ let holy_week_slugs = [ "ef-passiontide-2-monday"; "ef-passiontide-2-tuesday"; "ef-passiontide-2-wednesday"; "ef-passiontide-2-thursday"; "ef-passiontide-2-friday"; "ef-passiontide-2-saturday" ] +(* C36 (ef-oconnell-rubrics): Good Friday alone, split out of C23's own + six-slug population because its diff SET grew a third member. RG 128(b) + excepts "Actione liturgica feria VI in Passione et Morte Domini usque ad + Communionem exclusive" from Passiontide's violet and RG 132 assigns black + there -- recorded in register §3b as an acknowledged gap since Task 16 and + closed on this branch. lectio, which has no Holy Week propers at all (C23's + own note), keeps showing Passion week's violet, so colour now differs on + this ONE of C23's six days in addition to the two citation fields. *) +let good_friday_slug = "ef-passiontide-2-friday" + (* C26 (task 8, fix round 2, coordinator review, Important): Passion week's own real Tuesday Mass (tools/bootstrap_lectionary.ml's own [passion_tuesday_entry] comment has the full Missal citation and both @@ -1272,6 +1282,8 @@ let layer_c_reason (l : row) (c : row) diffs = and now RG 309(a)'s Mass for it, which answers before step 3's walkback is reached. They still differ from lectio, but for C17's cause, and are filed there. See data/ef/expected-divergences.sexp's own closure note. *) + else if String.equal c.slug good_friday_slug && diffs = [ First_f; Gospel_f; Colour_f ] then + Some "C36" else if List.mem c.slug holy_week_slugs && diffs = [ First_f; Gospel_f ] then Some "C23" else if String.equal c.slug passion_tuesday_slug && diffs = [ First_f; Gospel_f ] then Some "C26" else if String.equal c.slug advent_ember_sat_slug && diffs = [ First_f; Gospel_f ] then Some "C27" diff --git a/test/test_golden.ml b/test/test_golden.ml index a073c52..876e3de 100644 --- a/test/test_golden.ml +++ b/test/test_golden.ml @@ -329,7 +329,7 @@ let test_annunciation_transfer_inside_holy_week_2016 () = actually reaches a live case" for exactly this reason. *) check ~msg:"2016-03-25 Good Friday: Triduum outranks the Annunciation (RG91 entry 2 > 11), no commemoration" 2016 3 25 - "2016-03-25 friday season=passiontide week=2 slug=ef-passiontide-2-friday rank=class-1 colour=violet subject=lord \ + "2016-03-25 friday season=passiontide week=2 slug=ef-passiontide-2-friday rank=class-1 colour=black subject=lord \ name_la=Feria VI in Passione et Morte Domini comms=[] in=- out=[annunciation-of-the-blessed-virgin-mary->2016-04-04]"; (* The general RG 96 walk from 26 March would still be inside the Triduum, the Easter octave (all I class, entry 2/10) -- carrying the feast PAST @@ -524,7 +524,7 @@ let test_holy_thursday_is_white_2026 () = name_la=Feria V in Cena Domini comms=[] in=- out=[]"; check ~msg:"2026-04-03 Good Friday: back to violet (RG128) -- Thursday's white is a one-day exception" 2026 4 3 - "2026-04-03 friday season=passiontide week=2 slug=ef-passiontide-2-friday rank=class-1 colour=violet subject=lord \ + "2026-04-03 friday season=passiontide week=2 slug=ef-passiontide-2-friday rank=class-1 colour=black subject=lord \ name_la=Feria VI in Passione et Morte Domini comms=[] in=- out=[]" (* ------------------------------------------------------------------ *) |
