diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-26 10:35:33 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-26 10:35:33 +0200 |
| commit | e199ad6f599a263cad1f9886b512da8b3a46f465 (patch) | |
| tree | 21f34e527b43a5c4b87a6a79b77e48cec8f913b9 /lib/rites | |
| parent | b6d0eba04d1da51515dad70127112898b500c1bc (diff) | |
| download | colitur-e199ad6f599a263cad1f9886b512da8b3a46f465.tar.gz colitur-e199ad6f599a263cad1f9886b512da8b3a46f465.zip | |
fix(of-temporal): make anchors agree with temporal on the Nativity Vigil
Temporal_of.named correctly guards the Nativity Vigil: when 24 December
falls on a Sunday it is the Fourth Sunday of Advent (Tabula I.2 outranks
I.3), not the Vigil, and named returns None so temporal's dispatch falls
through to the ordinary Sunday slug. anchors, however, still listed
("of-nativity-vigil", 24 December) unconditionally -- a regression from
the earlier R8 fix, which added the guard to named but never updated
anchors to match. In 2028 and 2034, anchors claimed the Vigil where
temporal actually returns "of-advent-sunday-4".
anchors exists precisely as an independent restatement whose stated
purpose is to catch an accidental single-site drift rather than leaving
it invisible -- it caught exactly this drift, just later than it should
have, only once Validate.run was wired for the OF rite for the first
time (nothing before that compared anchors against named/temporal, so
the two were free to disagree unnoticed).
Fixed by restating named's own guard exactly: the Vigil entry is omitted
on a Sunday year rather than replaced, since the Fourth Sunday of Advent
is an ordinary generic week-numbered Sunday, not one of the named days
anchors exists to restate.
Audited every other anchors entry the same way, across the full
1584-9997 domain (test_temporal_of.ml's own exhaustive sweep, run under
COLITUR_EXHAUSTIVE_SWEEP=1): no further drift found. The sweep does
surface one already-known, already-pinned mismatch -- the "of-holy-family"
entry, in any year 26-31 December holds no Sunday (Normae n.35(a)'s own
30-December fallback) -- but it is a different shape, not a second
instance of this bug: there anchors computes the right date and it is
temporal that fails to reach it, which test_rite_of.ml already found,
pinned and deferred as out of scope. Corrected that file's own stale
comment, which still described the now-fixed Vigil disagreement as an
open gap.
New tests in test_temporal_of.ml cover both a Sunday-24-December year
(2028, 2034) and a non-Sunday one, checking every anchors entry against
temporal directly, plus a positive assertion that the Vigil entry is
correctly present or absent depending on the year.
Diffstat (limited to 'lib/rites')
| -rw-r--r-- | lib/rites/rite_of/temporal_of.ml | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/rites/rite_of/temporal_of.ml b/lib/rites/rite_of/temporal_of.ml index e375350..1da6cf9 100644 --- a/lib/rites/rite_of/temporal_of.ml +++ b/lib/rites/rite_of/temporal_of.ml @@ -532,8 +532,32 @@ let temporal d = let anchors y = let easter = Computus.gregorian_easter y in let off n = Date.add_days easter n in - [ ("of-nativity-vigil", mk y 12 24); - ("of-nativity", mk y 12 25); + (* CORRECTED (celebrant-rubrics-phase1 review, 2026-08-26): this used to + list ("of-nativity-vigil", mk y 12 24) UNCONDITIONALLY -- a regression + from the earlier R8 fix, which added the Sunday guard to [named] + above (Tabula I.2 outranks I.3: on a Sunday, 24 December is the + Fourth Sunday of Advent, not the Vigil) but never updated this + function to match, so in 2028/2034 this list claimed the Vigil where + [temporal] actually returns "of-advent-sunday-4". This module's own + doc comment on [anchors] says its whole purpose is to "catch an + accidental single-site drift... rather than leaving it invisible" -- + the irony being that it caught exactly this drift, just years later + than it should have, only once Validate.run was wired for the OF rite + at all (nothing before that compared [anchors] against [named]/ + [temporal], so the two were free to disagree unnoticed). The Fourth + Sunday of Advent is not added as a replacement entry on a Sunday year: + it is an ordinary generic week-numbered Sunday + ({!sunday_slug}'s own "of-advent-sunday-4", produced every year + regardless of where in the week it falls), never one of the NAMED + days this function exists to restate -- see the module doc comment + above [anchors] ("Independent restatement of {!named}'s... dates"). + [named]'s own guard is restated exactly, not re-derived: [named] + checks the WEEKDAY of the actual civil date, so this does too, rather + than assuming Advent 4 Sunday is always 24 December (it is any Sunday + 18-24 December; testing the weekday of 24 December itself is exact + regardless of which Sunday that turns out to be). *) + (if Date.weekday (mk y 12 24) = Date.Sun then [] else [ ("of-nativity-vigil", mk y 12 24) ]) + @ [ ("of-nativity", mk y 12 25); ("of-mary-mother-of-god", mk y 1 1); ("of-epiphany", mk y 1 6); ("of-holy-family", holy_family y); |
