diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 19:59:26 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 19:59:26 +0200 |
| commit | ce67fad69398047739a6ce89fb76f32b136b69f5 (patch) | |
| tree | ae2074f9602fed00dbb0ed33b7c97bef4e34d717 /lib | |
| parent | 29f1cc7e67e75d3f35747e5f6edd4e7ba430f97e (diff) | |
| download | colitur-ce67fad69398047739a6ce89fb76f32b136b69f5.tar.gz colitur-ce67fad69398047739a6ce89fb76f32b136b69f5.zip | |
fix(of): correct vigil_feast's justification for of-nativity-vigil
The prior comment claimed of-nativity-vigil is 'not a distinct celebration' -
wrong: Temporal_of.named (temporal_of.ml:230) constructs it as its own
Sollemnitas-rank candidate on 24 December, a genuine contestant in
band/Precedence.resolve.
The real reason None is safe is structural, not that. The Nativity is
Tabula entry 2 (band 20); only entry 1, the Paschal Triduum (band 10),
bands lower. The Triduum's Easter-2..Easter window is confined to 20
March-25 April because Gregorian Easter never falls outside [22 March, 25
April] over the whole 1583-9999 domain (measured exhaustively in
test_computus.ml, not assumed), so it can never reach 25 December. The
Nativity therefore always keeps its own day and its vigil can never be
orphaned by a transfer or reduction.
Behaviour is unchanged: vigil_feast still returns None unconditionally.
RG 33 (EF-only) and Normae nn. 11/13 remain the reason the hook exists at
all and returns None for every other candidate.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rites/rite_of/precedence_of.ml | 26 | ||||
| -rw-r--r-- | lib/rites/rite_of/precedence_of.mli | 15 |
2 files changed, 32 insertions, 9 deletions
diff --git a/lib/rites/rite_of/precedence_of.ml b/lib/rites/rite_of/precedence_of.ml index fb26d64..5d32ee2 100644 --- a/lib/rites/rite_of/precedence_of.ml +++ b/lib/rites/rite_of/precedence_of.ml @@ -226,13 +226,27 @@ let admit ~(observed : Vocab_of.rank Precedence.candidate) can be orphaned by its feast moving: Normae n. 11 gives solemnities First Vespers and n. 13 denies them to feasts, but neither creates a separate celebration that could survive or fail independently of the day it precedes. - The one OF celebration whose slug says "vigil" -- the Nativity's, which - Temporal_of emits as "of-nativity-vigil" -- is a MASS FORMULARY of the - solemnity itself (IGMR n. 346's own Christmas-Mass series: ad vigiliam, in - nocte, in aurora, in die), not a distinct celebration. + This is why the hook exists at all and why it returns [None] for every + OTHER candidate -- there is no OF office this rule could ever apply to. - So [None] unconditionally, and Calendar's RG 33 suppression pass never - fires for this rite. *) + "of-nativity-vigil" itself needs a narrower, structural argument, not that + general one: Temporal_of.named (temporal_of.ml:230) DOES construct it as + its own Sollemnitas-rank candidate on 24 December, independent of + "of-nativity" on the 25th -- it is a genuine contestant in [band]/[resolve], + not merely a Mass formulary with no life of its own on the precedence axis. + + What makes [None] safe here is that the feast it precedes can never be + orphaned. The Nativity is Tabula entry 2 (band 20); the only entry that + bands lower is entry 1, the Paschal Triduum (band 10, [is_triduum] above). + Gregorian Easter falls in [22 March, 25 April] for EVERY year 1583-9999 -- + measured exhaustively, not assumed (test_computus.ml's + [test_gregorian_invariants_exhaustive]) -- so the Triduum's own band-10 + window (Easter-2 .. Easter) is confined to 20 March-25 April and can never + reach 25 December. Nothing else in the Tabula bands below entry 2. So + "of-nativity" is unconditionally the observed office on its own day, its + vigil can never be orphaned by a transfer or reduction, and [None] is the + correct answer for it too -- not because it lacks standing as a candidate, + but because the day it precedes can never lose. *) let vigil_feast (_ : Vocab_of.rank Precedence.candidate) : Slug.t option = None (* The assembled record Precedence.resolve consumes. Kept here rather than in diff --git a/lib/rites/rite_of/precedence_of.mli b/lib/rites/rite_of/precedence_of.mli index 6b30dad..e81d35e 100644 --- a/lib/rites/rite_of/precedence_of.mli +++ b/lib/rites/rite_of/precedence_of.mli @@ -69,9 +69,18 @@ val admit : (Vocab_of.rank Precedence.candidate * Precedence.privilege) list (** [vigil_feast]: always [None]. RG 33's third omission trigger is EF-only; - the OF has no vigil OFFICE that its feast's movement could orphan. The - Nativity's "of-nativity-vigil" is a Mass formulary of the solemnity, not a - separate celebration. *) + the OF has no vigil OFFICE that its feast's movement could orphan -- + Normae nn. 11/13 create no such independent celebration for anything + other than "of-nativity-vigil". THAT candidate is not exempt by lacking + standing: {!Rite_of.Temporal_of.named} constructs it as its own + Sollemnitas-rank candidate on 24 December, a genuine contestant in + {!band}/{!Colitur_kernel.Precedence.resolve}. It is exempt structurally + instead -- the Nativity (Tabula entry 2, band 20) can only ever be beaten + by the Triduum (entry 1, band 10), whose window (Easter-2..Easter) is + confined to 20 March-25 April because Gregorian Easter never falls outside + [22 March, 25 April] (measured exhaustively, 1583-9999, not assumed), so + it can never reach 25 December. The Nativity therefore always keeps its + own day, and its vigil can never be orphaned. *) val vigil_feast : Vocab_of.rank Precedence.candidate -> Slug.t option (** The four functions assembled for {!Colitur_kernel.Precedence.resolve}. *) |
