summaryrefslogtreecommitdiff
path: root/lib/rites/rite_ef
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 12:16:53 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 12:16:53 +0200
commit04f7521a9143d8888d1e29a3e5c2d60eaae56951 (patch)
tree32fc3bf61c0717f2456046befdf7605425cf0093 /lib/rites/rite_ef
parente19adb9c7ea369cafe76e7eff50e9248a4a954d0 (diff)
downloadcolitur-04f7521a9143d8888d1e29a3e5c2d60eaae56951.tar.gz
colitur-04f7521a9143d8888d1e29a3e5c2d60eaae56951.zip
kernel(rite-ef): apply RG16(a) -- a Feast of the Lord leaves the impeded Sunday uncommemorated
Caput III "De Dominicis", RG 16(a): a Feast of the Lord, I or II class, occurring on a II-class Sunday takes the Sunday's own place with all its rights and privileges -- of the Sunday, therefore, no commemoration is made. band's entry 14 already ranked such a feast above the Sunday correctly; disposition had no exception for the collision, so the impeded Sunday fell through to the ordinary RG 95/109(a) commemorate-or-omit catch-all and was wrongly admitted as a privileged commemoration. Adds a branch to Rite_ef.Precedence_ef.disposition, gated on all four of: loser is temporal-origin, loser rank Class2, loser carries the Sunday slug marker, winner rank Class1-or-2 with subject Lord. No signature change -- disposition already receives the winner (RG 33's own vigil-omission branch already reads it); each conjunct is proved independently load-bearing by a dedicated disposition_cases row, including one real-data case each for the winner's subject and rank conjuncts, and a defensive synthetic case for the winner rank conjunct's currently-unreachable Class3 shape. A new end-to-end resolve-level test (2028-08-06, the Transfiguration) proves the real band/disposition pipeline together, checking the Omit reason string distinguishes this from admit's own admission-limit cut.
Diffstat (limited to 'lib/rites/rite_ef')
-rw-r--r--lib/rites/rite_ef/precedence_ef.ml79
1 files changed, 72 insertions, 7 deletions
diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml
index db7e708..179fa13 100644
--- a/lib/rites/rite_ef/precedence_ef.ml
+++ b/lib/rites/rite_ef/precedence_ef.ml
@@ -244,13 +244,14 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc
(* Task 8: what happens to the day's LOSING candidate (docs/research/
rules-register.md §4, "Occurrence" RG 92-95 and "Vigils" RG 33, plus RG
- 94). [band] above decides who wins; this decides the loser's fate, which
- turns on the LOSER's own rank and status (RG 95), except RG 33's vigil
- omission, which also has to read the winner. Nothing here ever returns
- [Precedence.Repose]: that disposition denotes RG 100-102's *repositio*
- (perpetual impediment from a proper/diocesan calendar), out of this
- plan's scope -- see calendar.mli's own note that nothing in the EF
- ruleset currently emits it. *)
+ 94; also §6.0/Caput III "De Dominicis" RG 16(a), below). [band] above
+ decides who wins; this decides the loser's fate, which turns on the
+ LOSER's own rank and status (RG 95), except RG 33's vigil omission and RG
+ 16(a)'s Sunday-suppression, which also have to read the winner. Nothing
+ here ever returns [Precedence.Repose]: that disposition denotes RG
+ 100-102's *repositio* (perpetual impediment from a proper/diocesan
+ calendar), out of this plan's scope -- see calendar.mli's own note that
+ nothing in the EF ruleset currently emits it. *)
(* RG 33 -- CORRECTED 2026-08-12 (Task 16, primary-source-verified against
docs/research/1962-06-23,_SS_Ioannes_XXIII,_Missale_Romanum,_LT.pdf, the
@@ -605,6 +606,70 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate)
register's own §4 "Vigils" entry states RG 32 only as "same pattern
[as RG 31]", not verbatim -- now closed here). *)
Precedence.Omit
+ else if
+ is_temporal
+ && cel.Celebration.rank = Class2
+ && is_sunday_slug (Slug.to_string cel.Celebration.slug)
+ && (let wcel = winner.Precedence.cel in
+ (wcel.Celebration.rank = Class1 || wcel.Celebration.rank = Class2)
+ && wcel.Celebration.subject = Subject.Lord)
+ then
+ (* RG 16(a) (docs/research/rules-register.md §6.0, Caput III "De
+ Dominicis", primary text): "Dominica II classis, in occurrentia,
+ festis II classis praefertur. Attamen: a) festum Domini I aut II
+ classis, in dominica II classis occurrens, locum tenet ipsius
+ dominicae cum omnibus iuribus et privilegiis: de dominica, proinde,
+ NULLA FIT COMMEMORATIO" -- a Feast of the Lord, I or II class,
+ occurring on a II-class Sunday, takes the Sunday's own place with all
+ its rights and privileges: OF THE SUNDAY, THEREFORE, NO
+ COMMEMORATION IS MADE. {!band} entry 14 already ranks such a feast
+ above the Sunday (RG 91 entry 14 < entry 15), so the feast is
+ correctly [observed]; this is [disposition]'s own answer for what
+ becomes of the SUNDAY once it has lost -- [Omit], not the [Commemorate]
+ every other impeded II-class Sunday gets via RG 109(a)/RG 111(b)
+ below. This is the ONE place in this function that needs the WINNER's
+ [subject], not only the loser's own fields -- like RG 33's vigil
+ omission above, not a new kind of signature: [Precedence.rules.disposition]
+ already takes [~winner], this is simply its first other reader.
+
+ Both winner-side conjuncts are load-bearing, proved by
+ [test_precedence_ef.ml]'s own paired rows (the brief's "one without
+ the other proves nothing"):
+ - [rank = Class1 || rank = Class2]: {!band} entries 11-13 admit ANY
+ I-class feast -- Lord or Saint alike, no subject test at all (entry
+ 14's own comment: unlike entry 16, entries 11-13 draw no such
+ line) -- ahead of a II-class Sunday. REACHABLE at Class1 on real
+ data: e.g. the Nativity of St John the Baptist (24 June, I class,
+ Saint) landing on a Time-after-Pentecost Sunday already wins the
+ day under {!band} alone; without this conjunct RG 16(a) would
+ wrongly fire for it too. (At Class2 this conjunct adds no further
+ cases beyond what the [subject = Lord] conjunct below already
+ requires -- entry 16's ordinary II-class feasts never outrank a
+ Sunday in {!band} in the first place, 16 > 15 -- so it is only
+ independently reachable at Class1.)
+ - [subject = Lord]: at Class2 this is what {!band} entry 14 already
+ requires of its own winners, so it adds no further restriction
+ there; at Class1 it is independently reachable and necessary, per
+ the St John Baptist example above -- dropping it would fire RG
+ 16(a) for any winning I-class feast at all, exactly the
+ over-wide branch the task brief warns against.
+
+ The SUNDAY-side conjuncts: [rank = Class2] excludes a I-class Sunday
+ (Advent/Lent/Passiontide, Low Sunday, {!band} entry 6) -- RG 16(a)'s
+ own text says "Dominica II classis", not "any Sunday", and a I-class
+ Sunday can never actually reach here as a [loser] against a
+ Class1-or-2 Lord winner in the first place: entry 6's own band value
+ (6) is lower than every entry a Lord feast of Class1 or Class2 could
+ occupy (3, 11-14), so a I-class Sunday always wins outright -- this
+ is exactly why the rubric restricts itself to II class. [is_sunday_slug]
+ (the same marker RG 33's [impedes_vigil] and RG 109(a)'s
+ [privilege_of] already use, with no [is_temporal] guard there either
+ -- no sanctoral slug this codebase's data produces contains
+ {!sunday_marker}) is the "Dominica" half; [is_temporal] is kept
+ alongside it anyway, the same explicit-but-not-load-bearing defence
+ the RG26 branch above gives its own [not is_vigil] guard, rather than
+ relying on that absence silently. *)
+ Precedence.Omit
else
(* RG 95's other branch: "aut commemorantur aut penitus omittuntur" --
commemorated or wholly omitted. Reached by every SANCTORAL loser