diff options
Diffstat (limited to 'lib/rites/rite_ef')
| -rw-r--r-- | lib/rites/rite_ef/precedence_ef.ml | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml index dd75765..b69ee52 100644 --- a/lib/rites/rite_ef/precedence_ef.ml +++ b/lib/rites/rite_ef/precedence_ef.ml @@ -1532,6 +1532,45 @@ let rg110_find_companion comms companion_slug = codebase's test suite where commemoration order is asserted at all -- flagged here, and in CLAUDE.md's own "know what each layer cannot see" section, as a genuine, permanent limit, not merely this fix's own gap. *) +(* RG 113, sentence ONE -- "Commemoratio de Tempore fit primo loco" (the + commemoration of the Season is made in the first place), verified in the + electronic transcription docs/research/LT.txt and in both photographic + scans; register §6.26. + + §4 of the register and this file's own {!admit} already implement RG 113's + SECOND sentence ("In admittendis et ordinandis ALIIS commemorationibus, + servetur ordo tabellae praecedentiae") as the admission/ordering criterion, + adopted on the ef-rg16a branch. The first sentence was never implemented: + ordering was by {!band} alone, for every commemoration including the + seasonal one. + + RECONCILED WITH RG 110(c), which says the inseparable Peter/Paul pair is + added "ante omnes alias commemorationes". The two rubrics share a technical + term: RG 113's own sentence fixes the sense of *aliae commemorationes* as + "the ones other than the de Tempore commemoration it has just placed primo + loco", and RG 110(c) sits three paragraphs earlier in the same code. Read + consistently, RG 110(c) puts the pair at the head of the OTHERS, not ahead + of the season. Hence this runs AFTER {!rg110_additions}, not before: + RG 110(c)'s own "immediate" adjacency (trigger then companion, fix round 1, + register §6.3) is preserved by {!List.partition}'s stability, and the + seasonal commemoration then steps in front of the pair rather than + splitting it. + + [origin] is the exact discriminator the kernel already carries -- a + candidate is {!Precedence.Temporal} iff it came from the rite's temporal + cycle, which is what "de Tempore" means. Measured over 1583-9999, no day + ever carries more than one such commemoration (RG 112(c), "an Office, Mass + or commemoration of the season excludes another seasonal commemoration", + holding empirically), so this promotes at most one entry; [partition] is + used rather than a find-and-move so the zero case and the never-observed + many case are both total without a special branch. *) +let rg113_season_first + (comms : (Vocab_ef.rank Precedence.candidate * Precedence.privilege) list) : + (Vocab_ef.rank Precedence.candidate * Precedence.privilege) list = + let de_tempore (c, _) = c.Precedence.origin = Precedence.Temporal in + let seasonal, others = List.partition de_tempore comms in + seasonal @ others + let rg110_additions (comms : (Vocab_ef.rank Precedence.candidate * Precedence.privilege * int) list) ~(observed : Vocab_ef.rank Precedence.candidate) (normal : (Vocab_ef.rank Precedence.candidate * Precedence.privilege) list) : @@ -1702,7 +1741,7 @@ let admit ~(observed : Vocab_ef.rank Precedence.candidate) as the non-Sunday II-class case, just with room for two. *) List.map drop_band (take 2 sorted) in - rg110_additions comms ~observed normal + rg113_season_first (rg110_additions comms ~observed normal) (* Task 11: RG 96 -- where an impeded I-class feast lands (docs/research/ rules-register.md §4, "Transfer/translation"). [band] decides who is |
