diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-12 04:12:41 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-12 04:12:41 +0200 |
| commit | 079e332e0a797105588787f7e5fdabd95ba1fa12 (patch) | |
| tree | 1cf2881355296a5e8ee43583e52185247977ece1 | |
| parent | efc1b303417388c75f27403952b506dc4d4e03d7 (diff) | |
| download | colitur-079e332e0a797105588787f7e5fdabd95ba1fa12.tar.gz colitur-079e332e0a797105588787f7e5fdabd95ba1fa12.zip | |
kernel(precedence): three RG-verified EF precedence bugs, found via oracle
Task 16's missalemeum oracle comparison (2026-2027) surfaced three
distinct precedence-engine bugs, each confirmed against the primary
1962 Missale Romanum text and cross-checked against the oracle:
1. RG 33 (vigil omission) was transcribed backwards. The primary text
reads "Vigilia II AUT III classis penitus omittitur" (a II OR III
class vigil is entirely omitted on any Sunday or I-class feast) --
not "I aut II" as the register and this module's own rank check
(Class1 || Class2) previously had it. I-class vigils (Nativity,
Pentecost) can never actually lose in this engine (band always
ranks them above anything that could coincide with their dates), so
the Class1 half was dead code; the real bug was that Class3 (St
Lawrence's vigil, the sole III-class vigil) was MISSING, so it fell
through to an ordinary commemoration instead of RG 33's mandatory
omission whenever 9 August landed on a Sunday.
2. RG 93/95/109/113 read together: an ordinary, non-privileged
TEMPORAL-cycle office (a bog-standard green-season feria, a plain
Advent/Lent Ember day, a Minor Rogation day) has no standing to be
commemorated at all when impeded -- RG 109's six-item list is a
CLOSED set of the only temporal circumstances that generate a
commemoration, not a floor under which anything ordinary still
gets one. The engine previously commemorated the losing feria
itself in this situation; confirmed wrong against ~190 independent
missalemeum days (2026-2027) showing zero commemorations for the
exact shape. Vigils are explicitly excluded from this new rule --
RG 31/32 give them their own "if impeded, commemorated" mandate,
independent of RG 109's list.
3. RG 111(b)'s Sunday admission slot is restricted to "de festo II
classis" -- a rank restriction, not merely the best available
ordinary candidate. A III/IV-class ordinary saint competing for a
II-class Sunday's single commemoration slot had no such restriction
applied before; confirmed wrong via St Hyginus (11 Jan, Class3)
losing to Holy Family, which missalemeum shows entirely displaced,
never commemorated.
All three fixes are pure disposition/admission changes -- they never
touch band, so the observed day (season/slug/rank/colour) is
unaffected in every case; the lectio differential (which never
compares commemorations) stays green untouched. test_precedence_ef.ml
updated throughout: two previously-wrong test expectations corrected
(the RG33 III-class-vigil boundary row, the IV-class-feria totality
row), three privilege boundary rows sharpened from "commemorated but
unprivileged" to "omitted entirely" now that temporal+ordinary
means omission, and a new contrast row added to keep the SANCTORAL
side of rule 2 covered separately from the TEMPORAL side.
| -rw-r--r-- | lib/rites/rite_ef/precedence_ef.ml | 215 | ||||
| -rw-r--r-- | test/test_precedence_ef.ml | 93 |
2 files changed, 256 insertions, 52 deletions
diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml index 0feb3e0..fd83383 100644 --- a/lib/rites/rite_ef/precedence_ef.ml +++ b/lib/rites/rite_ef/precedence_ef.ml @@ -244,15 +244,60 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc plan's scope -- see calendar.mli's own note that nothing in the EF ruleset currently emits it. *) -(* RG 33 (register line 383-384): a I- or II-class vigil falling on any - Sunday or a I-class feast is entirely omitted. Every Sunday slug this - rite's temporal cycle produces -- named (temporal_ef.ml's [named], e.g. - "ef-easter-sunday") or the generic "ef-<season>-sunday-<n>" fallback - ([sunday_slug]) -- contains this marker; nothing else [band] classifies - does. Not an RG citation itself -- see [universal_layer]'s note on this - file's own naming conventions -- exposed for the same reason as - {!vigil_suffix}: a future rename of temporal_ef's Sunday-slug format has - somewhere to be caught other than a silently-wrong RG 33 disposition. *) +(* 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 + General Rubrics' own Chapter XI "De Vigiliis"). The register previously + transcribed this as "a I/II-class vigil is entirely omitted"; the + PRIMARY TEXT reads the other way round: + + "33. Vigilia II aut III classis penitus omittitur, si occurrat in + dominica quavis, aut in festo I classis, vel si festum cui + præmittitur in alium diem transferri aut ad commemorationem reduci + contingat." + + -- "A vigil of the II OR III class is entirely omitted, if it occurs on + ANY Sunday whatsoever, or on a feast of the I class, or if the feast it + precedes happens to be transferred to another day or reduced to a + commemoration." I-class vigils (Nativity, Pentecost, RG 30) are outside + this rule entirely -- RG 30's own text says they "festis quibuslibet + præferunt, et nullam admittunt commemorationem" (are preferred to ANY + feast whatsoever, and admit no commemoration at all), i.e. they can never + lose in the first place: {!band} entries 1/5/9 already rank Nativity Eve + and the Pentecost Vigil above every Sunday and every other I-class row + that could coincide with their fixed/Easter-relative dates (verified: no + date collision is even representable), so no I-class vigil can ever reach + this function as a [loser] -- the branch below never needs to test for + [Class1] and, before this fix, its stray inclusion of [Class1] here was + simply dead code, not a second bug (see the task report for the + argument). The bug was the OTHER half: [Class3] (the sole III-class + vigil, St Lawrence, RG 32) was MISSING from this branch, so it fell + through to the generic "commemorated or omitted" branch below instead of + RG 33's mandatory omission -- confirmed wrong for real data: 9 August + 2026 is a Sunday, and before this fix "vigil-of-st-lawrence" competed for + (and could in principle win) that Sunday's single commemoration slot, + when RG 33 says it must not even be a candidate. The oracle comparison + (missalemeum, Task 16) independently confirms: 9 Aug 2026 shows no trace + of the vigil surviving as a commemoration. + + The third omission trigger in RG 33's own text -- "or if the feast it + precedes is transferred to another day or reduced to a commemoration" -- + is NOT implemented: no II/III-class vigil's own feast (Ascension, + Assumption, John Baptist, Sts Peter & Paul, Lawrence) is ever + transferred or reduced to a commemoration anywhere in this codebase's + current data (all fixed I-class, none coincide with anything of equal or + higher rank within any year this project has sampled), so no witness + exists to build or test this clause against; flagged in the register + (§6) rather than guessed. *) +let is_omissible_vigil (rank : Vocab_ef.rank) = rank = Vocab_ef.Class2 || rank = Vocab_ef.Class3 + +(* Every Sunday slug this rite's temporal cycle produces -- named + (temporal_ef.ml's [named], e.g. "ef-easter-sunday") or the generic + "ef-<season>-sunday-<n>" fallback ([sunday_slug]) -- contains this + marker; nothing else [band] classifies does. Not an RG citation itself -- + see [universal_layer]'s note on this file's own naming conventions -- + exposed for the same reason as {!vigil_suffix}: a future rename of + temporal_ef's Sunday-slug format has somewhere to be caught other than a + silently-wrong RG 33 disposition. *) let sunday_marker = "-sunday" let contains_substring s ~needle = @@ -372,6 +417,7 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) ~(loser : Vocab_ef.rank Precedence.candidate) : Precedence.disposition = let open Vocab_ef in let cel = loser.Precedence.cel in + let is_temporal = loser.Precedence.origin = Precedence.Temporal in if cel.Celebration.status = Celebration.Commemoration_only then (* Always -- checked before RG 33's omission and RG 95's transfer so neither can override it: a Commemoration_only entry can never win @@ -384,13 +430,17 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) it would to any other candidate. *) Precedence.Commemorate (privilege_of loser) else if - (cel.Celebration.rank = Class1 || cel.Celebration.rank = Class2) + is_omissible_vigil cel.Celebration.rank && is_vigil (Slug.to_string cel.Celebration.slug) && impedes_vigil winner then - (* RG 33. Checked before the generic Class1 -> Transfer rule below, or a - I-class vigil (Nativity, Pentecost) impeded on its own Sunday/ - I-class-feast terms would wrongly transfer instead of vanishing. *) + (* RG 33, corrected (see {!is_omissible_vigil}'s own comment): II- or + III-class vigils only -- a real I-class vigil can never reach this + function as a loser at all (see that comment), so this branch would + never have fired for [Class1] even before the fix; what changed is + that [Class3] (St Lawrence) now correctly reaches RG 33's omission + instead of falling through to the generic "commemorated or omitted" + branch below. *) Precedence.Omit else if cel.Celebration.rank = Class1 @@ -416,19 +466,93 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) Rite.transfer_target's job, not this function's -- disposition only says THAT it moves. *) Precedence.Transfer + else if + is_temporal + && (not (is_vigil (Slug.to_string cel.Celebration.slug))) + && (match privilege_of loser with Precedence.Ordinary -> true | Precedence.Privileged -> false) + then + (* Task 16, primary-source-verified (RG 93, 95, 109, 113): an ordinary, + NON-privileged TEMPORAL-cycle office has no standing to be + commemorated at all when impeded -- it is simply omitted, not the + "commemorated or omitted, per rubric" residual RG 95 leaves open for + everything else. Three primary texts read together settle this: + + - RG 95: "Alia festa, ab Officio gradus superioris accidentaliter + impedita, AUT COMMEMORANTUR AUT, eo anno, PENITUS OMITTUNTUR, IUXTA + RUBRICAS" -- impeded offices are "either commemorated or, that + year, entirely omitted, ACCORDING TO THE RUBRICS" -- i.e. some + OTHER rule decides which fate applies; RG 95 itself does not grant + a commemoration to everything impeded. + - RG 109 gives that other rule for the temporal cycle: an EXHAUSTIVE, + closed six-item list of the only temporal-origin circumstances that + ever generate a commemoration -- (a) of a Sunday; (b) of a I-class + day; (c) of days within the Nativity Octave; (d) of the September + Ember days; (e) of Advent/Lent/Passiontide ferias; (f) of the Major + Rogations. [privilege_of] above already implements exactly this + list (its own six branches, each cited to its own RG 109 letter); + its terminal "[else Precedence.Ordinary]" is what a TEMPORAL-origin + candidate falls through to when it matches NONE of (a)-(f) -- an + ordinary green-season feria of Time after Epiphany/Pentecost/ + Easter, a plain (non-Ember) Advent/Lent weekday already caught by + (e), or a Minor Rogation day (RG 87 -- deliberately NOT named by + RG 109(f), see [privilege_of]'s own comment on that letter). + - RG 113: "Commemoratio de Tempore fit primo loco" -- the + commemoration OF THE TEMPORAL DAY is made FIRST [in the list, when + one is due] -- presupposes RG 109 already answered whether one is + due; it does not itself create a right for every impeded feria. + + So testing [privilege_of loser = Ordinary] here, for a TEMPORAL-origin + loser specifically, is not a second, parallel "is this commemorable" + predicate that could drift from RG 109's own list -- it IS RG 109's + list, already computed by [privilege_of] for the commemoration this + branch is about to deny. SANCTORAL losers are entirely unaffected + (the [is_temporal] guard): RG 111(c)/(d) admit an "ordinary" + commemoration of a losing SAINT freely, with no such closed-list + gate -- this omission is specific to the temporal cycle's own + ferial/Sunday-tail offices, never to a saint. + + Empirically confirmed against the missalemeum oracle (Task 16, + 2026-2027, both years): every one of ~190 days where a saint's feast + impedes an ordinary (non-privileged) temporal feria shows ZERO + commemorations in the oracle, including the exact shape this fixes + (e.g. "St. Marcellus I" impeding the plain "Friday after Epiphany", + 6/730 identical instances of the pattern per week of ordinary time) + -- and the SAME fix, for the same reason, independently corrects the + Minor Rogation days (RG 87) losing to a saint (9/730 days), which + [privilege_of]'s own (f) comment already flags as NOT RG 109(f). + + [is_vigil] is EXCLUDED from this branch deliberately: a II/III-class + vigil is temporal-origin too (when it is the Ascension/Pentecost- + adjacent case {!of_temporal} produces) and [privilege_of] rightly + calls it [Ordinary] (a vigil is none of RG 109(a)-(f)), but vigils + are NOT governed by RG 109 at all -- they carry their OWN, separate, + explicit commemoration mandate: RG 31 (II class) "Hae vigiliae + praeferuntur diebus liturgicis III et IV classis; ET, SI + IMPEDIUNTUR, COMMEMORANTUR, iuxta rubricas" and RG 32 (III class, St + Lawrence) "si impeditur, COMMEMORATUR, iuxta rubricas" -- "if + impeded, ARE/IS commemorated". So a vigil impeded WITHOUT triggering + RG 33's full omission (the [is_omissible_vigil] branch above, e.g. + impeded by an ordinary sanctoral feast that is neither a Sunday nor + I class) must still fall through to the final [Commemorate] branch + below, exactly like a sanctoral loser -- RG 31/32's own text, not + RG 109's closed list, is what governs it. *) + Precedence.Omit else (* RG 95's other branch: "aut commemorantur aut penitus omittuntur" -- - commemorated or wholly omitted. Reached by everything below I class, - AND by an impeded I-class Sunday (excluded from the [Transfer] branch - above): RG 109(a) (register line 374) lists "of a Sunday" as a - privileged commemoration category, which presupposes an impeded - Sunday stays put rather than moving to another day the way a feast - does -- [privilege_of] tags it [Privileged] via the same - [is_sunday_slug] marker, with no further code needed here. Which of - commemorate/omit survives is RG 108-111's admission count ([admit], - below), not this function's decision; this only opens the - commemoration, tagged with its real RG 109 privilege via - [privilege_of]. + commemorated or wholly omitted. Reached by every SANCTORAL loser + below I class (RG 111(c)/(d)'s "ordinary" commemoration, no closed + list the way the temporal branch above has), AND by an impeded + I-class Sunday (excluded from the [Transfer] branch above, and from + the temporal-Ordinary [Omit] branch above because [privilege_of]'s + (a) makes a Sunday loser [Privileged], never [Ordinary]): RG 109(a) + (register line 374) lists "of a Sunday" as a privileged commemoration + category, which presupposes an impeded Sunday stays put rather than + moving to another day the way a feast does -- [privilege_of] tags it + [Privileged] via the same [is_sunday_slug] marker, with no further + code needed here. Which of commemorate/omit survives is RG 108-111's + admission count ([admit], below), not this function's decision; this + only opens the commemoration, tagged with its real RG 109 privilege + via [privilege_of]. RG 94 (a fixed-day commemoration is not carried along with a transferred feast) needs no code here: [Precedence.resolve] calls @@ -512,19 +636,40 @@ let admit ~(observed : Vocab_ef.rank Precedence.candidate) several are. *) (match List.filter is_privileged sorted with [] -> [] | best :: _ -> [ best ]) | Class2, true -> - (* RG 111: "II-class Sundays: one (dropped if a privileged one is - due)." Read as: the day's one slot goes to a privileged - commemoration whenever one is due, categorically -- not by - comparing its dignity against the ordinary contender's -- so an - ordinary commemoration that would otherwise win the slot on raw - dignity is still dropped once any privileged commemoration is also - due. This is the asymmetric clause the brief and task report flag - as deliberate, not present at "other II class" below; see the task - report for the reasoning and its residual uncertainty (the register - does not spell out the mechanism beyond this one sentence). *) + (* RG 111(b), primary text: "in dominicis II classis, una tantum + admittitur commemoratio, SCILICET DE FESTO II CLASSIS, quæ tamen + omittitur si commemoratio privilegiata facienda sit" -- "on Sundays + of the II class, only ONE commemoration is admitted, NAMELY OF A + FEAST OF THE II CLASS, which however is dropped if a privileged + commemoration is due." Two clauses, not one: (i) a privileged + commemoration, whenever due, categorically takes the day's one slot + -- not by comparing its dignity against the ordinary contender's, + so an ordinary commemoration that would otherwise win on raw + dignity is still dropped once any privileged one is also due (the + asymmetric clause the brief and task report flag as deliberate, not + present at "other II class" below); (ii) failing that, the slot is + reserved SPECIFICALLY for a [Class2] candidate -- "de festo II + classis" is a RANK restriction, not merely "whichever ordinary + candidate has the best dignity": a III- or IV-class ordinary loser + (a plain commemoration-only saint with no privilege of its own) has + NO standing for this slot at all and must be entirely omitted, even + when it is the only candidate present. + + Fix, Task 16 (primary-source-verified + missalemeum-confirmed): + previously this fell back to "the best of [sorted], whatever its + rank" once no privileged candidate was due, silently admitting a + III/IV-class ordinary saint that RG 111(b)'s own wording excludes. + Confirmed wrong for real data by the oracle comparison: e.g. 11 Jan + 2026 (Holy Family, a II-class Sunday) has St Hyginus (Class3, + commemoration-only) as its only competing candidate -- missalemeum + shows him "displaced" (omitted), never commemorated; the + pre-fix code admitted him regardless. *) (match List.filter is_privileged sorted with | best :: _ -> [ best ] - | [] -> ( match sorted with [] -> [] | best :: _ -> [ best ] )) + | [] -> ( + match List.filter (fun (c, _) -> c.Precedence.cel.Celebration.rank = Class2) sorted with + | [] -> [] + | best :: _ -> [ best ])) | Class2, false -> (* RG 111: "other II class: one" -- no privilege-override clause here, unlike the Sunday case immediately above, so the day's one slot diff --git a/test/test_precedence_ef.ml b/test/test_precedence_ef.ml index aa98686..2f08864 100644 --- a/test/test_precedence_ef.ml +++ b/test/test_precedence_ef.ml @@ -375,17 +375,34 @@ let disposition_cases = of_temporal (off 38), "Omit" ); (* RG 33's own boundary, proved from both sides so the rule is shown to - gate on the WINNER too, not "any vigil is always omitted": *) + gate on the WINNER too, not "any vigil is always omitted": winner is + neither a Sunday nor I class, so RG 33's omission does not fire; the + vigil is temporal-origin ({!of_temporal}, the real Ascension Vigil) + and would otherwise land in Task 16's new "ordinary temporal loser -> + Omit" branch too (see the IV-class-feria row further down) -- this + row is what proves that branch's own [not (is_vigil ...)] guard: a + vigil, per RG 31's own text ("si impediuntur, commemorantur"), is + ALWAYS commemorated once RG 33 does not omit it outright, regardless + of RG 109's closed list. *) ( "RG33 boundary: vigil loses to an ordinary (non-Sunday, non-I-class) \ - II-class day -> Commemorate, NOT Omit", + II-class day -> Commemorate, NOT Omit (RG31's own vigil mandate)", cand ~origin:P.Sanctoral ~rank:V.Class2 ~layer:PE.universal_layer "ef-some-other-feast", of_temporal (off 38), "Commemorate(Ordinary)" ); - ( "RG33 boundary: a III-class vigil (outside RG33's I/II-class scope) \ - loses to a Sunday -> Commemorate, NOT Omit", + (* CORRECTED 2026-08-12 (Task 16, primary-source-verified): the register + previously (mis-)transcribed RG 33 as covering only I/II-class + vigils, so this row's own title used to read "outside RG33's + I/II-class scope" and expect Commemorate. The primary text ("Vigilia + II AUT III classis penitus omittitur...") covers II OR III class -- + St Lawrence's vigil (III class, RG 32) falling on ANY Sunday ("in + dominica quavis") is entirely omitted, exactly like a II-class vigil. + See {!PE.is_omissible_vigil}'s own comment for the full primary text + and the register correction. *) + ( "RG33 (corrected): a III-class vigil loses to a Sunday -> Omit, not \ + Commemorate", an_ordinary_sunday, cand ~origin:P.Sanctoral ~rank:V.Class3 ~layer:PE.universal_layer "ef-lawrence-vigil", - "Commemorate(Ordinary)" ); + "Omit" ); (* Task 11, issue (a): [disposition]'s own [is_vigil] check (the RG 33 omission test) is a SEPARATE call site from [band]'s -- both read the same private [is_vigil], but each needed its own witness, since a fix @@ -424,16 +441,45 @@ let disposition_cases = cand ~origin:P.Sanctoral ~status:Cel.Commemoration_only ~layer:PE.universal_layer "ef-suppressed-vigil", "Commemorate(Privileged)" ); - (* Totality: the lower ranks the RG 33/RG 95 branches never touch still - reach the RG 95 "commemorated or omitted" branch, not an - unhandled/exceptional case. *) + (* Totality (SANCTORAL side): the lower ranks the RG 33/RG 95/Task-16 + branches never touch still reach the RG 95 "commemorated or omitted" + branch's [Commemorate] side, not an unhandled/exceptional case -- RG + 111(c)/(d) admit an "ordinary" SAINT commemoration freely, with none + of RG 109's closed-list restriction the temporal branch below has. *) ( "III-class feast loses to a I-class day -> Commemorate", cand "ef-nativity", cand ~origin:P.Sanctoral ~rank:V.Class3 ~layer:PE.universal_layer "ef-some-saint-3", "Commemorate(Ordinary)" ); - ( "IV-class feria loses to a II-class Sunday -> Commemorate", + (* Task 16 (primary-source-verified: RG 95 + RG 109's closed list + RG + 113 -- see this branch's own comment in precedence_ef.ml for the full + three-text argument): an ORDINARY, non-privileged TEMPORAL-cycle + loser -- a bog-standard green-season feria of Time after Pentecost, + none of RG 109(a)-(f) -- has NO standing to be commemorated at all + when impeded; it is entirely omitted, not the "ordinary" + commemoration a losing SAINT would get (contrast the SANCTORAL row + immediately above, same rank, same kind of winner, opposite + [Commemorate]/[Omit] outcome -- the discriminating factor is + [origin], nothing else). Before this fix the engine wrongly + commemorated the losing feria itself here; confirmed wrong against + the missalemeum oracle (Task 16 report): every one of ~190 + structurally identical days (an ordinary sanctoral feast impeding an + ordinary temporal feria, 2026-2027) shows zero commemorations in an + independent published EF calendar. *) + ( "TASK16: an ORDINARY temporal feria loses to a II-class Sunday -> \ + Omit, not Commemorate (RG109's closed list; contrast the sanctoral \ + row above)", an_ordinary_sunday, cand ~rank:V.Class4 "ef-time-after-pentecost-1-sat", + "Omit" ); + (* Totality's other half: a SANCTORAL loser of the exact same rank as + the row above still reaches [Commemorate], proving the branch above + is gated on [origin] and not merely on rank -- without this row nothing + here would distinguish "temporal losers are omitted" from "IV-class + losers are omitted", which would be a much bigger (and wrong) claim. *) + ( "TASK16 contrast: a SANCTORAL IV-class loser still reaches \ + Commemorate(Ordinary)", + an_ordinary_sunday, + cand ~origin:P.Sanctoral ~rank:V.Class4 ~layer:PE.universal_layer "ef-some-minor-saint", "Commemorate(Ordinary)" ) ] @@ -506,29 +552,42 @@ let privilege_cases = already used by the entry-18 [band] row above. Both sourced from [Temporal_ef.temporal]. If [privilege_of] relied on the season prefix alone without excluding Ember slugs, both would wrongly come back - [Privileged] -- the exact trap this pair of rows guards against. *) + [Privileged] -- the exact trap this pair of rows guards against. + + CHANGED, Task 16: these used to expect [Commemorate(Ordinary)] -- + "not privileged" originally meant "commemorated, but without RG 109's + higher liturgical honours". Now that a TEMPORAL-origin [Ordinary] + loser is Task 16's own [Omit] branch (see precedence_ef.ml), "not + privileged" for a temporal candidate means "not commemorable at all" + -- a sharper, more direct assertion of the same underlying + [privilege_of] classification, via the one vantage point available + on that private function. *) ( "boundary: an Advent Ember day is NOT privileged (only September is, \ - RG109(d))", + RG109(d)) -- and being temporal+ordinary, TASK16 omits it entirely", cand "ef-nativity", of_temporal (mk 2026 12 16), - "Commemorate(Ordinary)" ); + "Omit" ); ( "boundary: a Lent Ember day is NOT privileged (only September is, \ - RG109(d))", + RG109(d)) -- and being temporal+ordinary, TASK16 omits it entirely", cand "ef-nativity", of_temporal (off (-39)), - "Commemorate(Ordinary)" ); + "Omit" ); (* Negative, RG 109(f)'s own boundary: the Minor Litanies/Rogations (Monday/Tuesday before Ascension, RG 87 -- [Temporal_ef.temporal] DOES compute these, unlike the Major Litanies RG 109(f) actually names, see [privilege_of]'s own comment) must NOT be mistaken for the Major Rogations RG 109(f) privileges: RG 88 says the Minor Rogations change nothing in the Office at all, so nothing about them is - privileged either. *) + privileged either -- and (Task 16) being temporal+ordinary, a Minor + Rogation day impeded by a saint is now omitted outright, matching the + missalemeum oracle exactly (Task 16 report: 11 May 2026 and 12 May + 2026, both Minor Rogation days impeded by a saint, show zero + commemoration of the Rogation in the independent oracle). *) ( "boundary: a Minor Rogation day is NOT privileged (RG109(f) names \ - the Major Litanies, not these)", + the Major Litanies, not these) -- TASK16 omits it entirely", cand "ef-nativity", of_temporal (off 36), - "Commemorate(Ordinary)" ) + "Omit" ) ] (* Task 9: [PE.admit] -- RG 111's admission counts (register line 378), |
