aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_ef/temporal_ef.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 12:01:25 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 12:01:25 +0200
commit853351fad8aebc71c5341e6ff90371ca0caf8cf9 (patch)
treea1328e7a3777472604e59a5961cca78ac483c92f /lib/rites/rite_ef/temporal_ef.ml
parent204fd4e4a09a00e7edc240020249ffda5fd512b4 (diff)
downloadcolitur-853351fad8aebc71c5341e6ff90371ca0caf8cf9.tar.gz
colitur-853351fad8aebc71c5341e6ff90371ca0caf8cf9.zip
fix round 1: RG 110(c)'s ordering was inverted; M19 lacked an identity gate
RG 110(c), word for word: "quoties vero oratio unius Apostoli addenda est ad modum commemorationis, huic orationi additur altera immediate, ante omnes alias commemorationes." "Huic orationi" (dative, "to this oration") refers to the trigger's own oration; "additur altera" means the companion is added to it, i.e. follows it. "Ante omnes alias commemorationes" governs the pair's position relative to other, unrelated commemorations, not the pair's own internal order. The previous build prepended the companion uniformly in both RG 110 shapes, citing this same clause for both -- correct for (a)/(b) (the day's own oration, not a list member, has nothing to order against), backwards for (c), where the trigger is itself a list member and the companion belongs after it. Fixed in rg110_additions: shape (a)/(b) still prepends; shape (c) now splices the companion in immediately after its own trigger. Re-pinned the unit test that had asserted the wrong order, and corrected both rows' comments to cite the clause that actually governs each shape. No layer in this codebase compares commemoration order: the lectio differential never compares commemorations, the oracle sorts both sides into a multiset, and the golden tests' own describe function sorts its commemorations field too. Recorded as a new, permanent blind spot in CLAUDE.md and the register, not merely fixed around -- the admit_cases unit table is the only place order is asserted at all. Re-measured the full blast radius against the same pre-change binary: same 14,627 differing days, same four shapes and counts, confirming the fix changed only the content of the 593 shape-(c) rows and nothing else. Mutation-tested: reverting the splice back to a uniform prepend reddens exactly the shape-(c) unit test; a new golden pin for a real shape-(c) day (2004-02-22) stays green under the same mutation, living proof that golden pins cannot see this axis, not merely a claim. Separately, M19's own predicate checked a date and a diff shape but not which candidate -- proved insufficient by fabricating a second, bogus companion on 30 June and confirming the whole suite stayed green. Fixed by requiring the admitted commemoration to be exactly commemoration-of-st-peter, mirroring C16's own identity guard. Added a golden pin for 30 June, the only assertion of that entry's identity outside the allow-list. Also: corrected a false claim in the task report that the electronic transcription carries no corroboration of the Holy Name fallback -- its own table of contents does, at a line not checked on the first pass. Added two further citations, both re-verified against the scan: RG 17's own closing paragraph, settling the Sunday shape's Sunday- exclusion at the rubric level rather than only in the propers; RG 124(c), which assigns red to 30 June by paragraph number rather than by the generic apostle/martyr default. Noted the fragility of deriving the Sunday shape's RG 109(a) privilege from a slug-substring match rather than from a citation. Cosmetic: a stray blank line and an indentation inconsistency.
Diffstat (limited to 'lib/rites/rite_ef/temporal_ef.ml')
-rw-r--r--lib/rites/rite_ef/temporal_ef.ml37
1 files changed, 36 insertions, 1 deletions
diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml
index 721790d..bbd88ec 100644
--- a/lib/rites/rite_ef/temporal_ef.ml
+++ b/lib/rites/rite_ef/temporal_ef.ml
@@ -598,7 +598,42 @@ let temporal d =
check this way, against the SAME independently-computed
date [holy_name_sunday] returns rather than a bare month/
day range, is what test_temporal_ef.ml's own anchor test
- below cross-checks against. *)
+ below cross-checks against.
+
+ ADDED, fix round 1 (coordinator finding F4): the Sunday
+ shape's "takes the Sunday's own place, no commemoration of
+ it" treatment is settled at RG LEVEL, not only in Holy
+ Name's own Mass propers (this file's own [holy_name_sunday]
+ citation already has that quote) -- RG 17's own CLOSING
+ paragraph, immediately after its own lettered list
+ (a)-(e), scan-verified: "Haec festa locum tenent dominicae
+ occurrentis cum omnibus iuribus et privilegiis; de
+ dominica, proinde, nulla fit commemoratio" -- "these
+ feasts" (plural, covering the WHOLE list (a)-(e), Holy Name
+ included) "hold the place of the occurring Sunday with all
+ rights and privileges; of the Sunday, therefore, no
+ commemoration is made". A second, independent primary
+ source for the same conclusion the propers-level quote
+ already gives, not a new claim.
+
+ FRAGILE DERIVATION, noted per fix round 1 (coordinator
+ finding F5): the mechanism that actually grants a LOSING
+ Holy-Name-Sunday its RG 109(a) privilege when outranked
+ (Precedence_ef.privilege_of's own (a) branch, {!Precedence
+ _ef.is_sunday_slug}) reads it off the "-sunday" SUBSTRING
+ in the slug ("ef-holy-name-sunday") -- a naming convention,
+ not a citation of RG 17's own text quoted immediately
+ above, which is the actual warrant ("these feasts hold the
+ place of the occurring Sunday WITH ALL ITS RIGHTS AND
+ PRIVILEGES" -- RG 109(a)'s own "of a Sunday" privilege is
+ one of those rights). Right answer, fragile path: a future
+ rename of this slug family would silently drop the
+ privilege with no compiler or test failure pointing here.
+ No live witness exists to test it either way (no
+ fixed-date candidate ever outranks Holy Name in today's
+ data -- test_precedence_ef.ml's own synthetic
+ [test_class1_feast_inside_holy_name_window_end_to_end]
+ proves the SYNTHETIC case only). *)
let subject, names =
if same d (holy_family_sunday y) then
( Colitur_kernel.Subject.Lord,