diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-26 23:40:17 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-26 23:40:17 +0200 |
| commit | 2f6d25aff88b4c76c61e36889f1c017b3cc8faee (patch) | |
| tree | baf3027229ef3b95eff2d7fdf0b479f8bdbb2a87 /lib/rites/rite_of/rite_of.mli | |
| parent | 1c0137dee8ff3858707281366662891a5ff01044 (diff) | |
| download | colitur-2f6d25aff88b4c76c61e36889f1c017b3cc8faee.tar.gz colitur-2f6d25aff88b4c76c61e36889f1c017b3cc8faee.zip | |
fix(of): anticipate St Joseph onto 18 March per Normae n. 56(f)
W1: when 19 March (St Joseph) falls on Palm Sunday, colitur sent him
forward to Easter+9 instead of anticipating the solemnity backward to
18 March, the one rule in the whole Normae transfer machinery that
names an earlier date. Live in 16 of 1583-2100 (1595, 1606, 1617,
1690, 1758, 1769, 1780, 1815, 1826, 1837, 1967, 1978, 1989, 2062,
2073, 2084).
Blocked on a kernel contract: Rite.t.transfer_target required its
result be strictly later than the impeded date, an obligation argued
purely from the EF's RG 96. Traced against Calendar's actual placement
pass rather than assumed unsafe: the round loop re-resolves the whole
year fresh every round, and its two safety nets (~start/~stop; the
round-count guard) both test the target's own value with no comparison
against origin, so a bounded backward jump converges the same way a
bounded forward one does. The one requirement that stays load-bearing
is target <> origin: Precedence.resolve never deduplicates by slug, so
a candidate returning its own argument unchanged would collide with
itself in the same round's contest. Relaxed the obligation accordingly
(rite.mli) and added the fourth transfer_target branch in
Precedence_of, ahead of the existing three (Precedence_of.transfer_target,
Rule 0). calendar.ml needed no logic change, only two comments that
asserted "every genuine transfer moves forward" as a blanket fact.
Unpinned the two tests that asserted the old wrong (forward) behaviour
and replaced them with assertions of the correct one, plus a new
direct unit test of the backward branch across two independent years.
EF output is untouched: data/ef/ and lib/rites/rite_ef/ carry no diff,
and colitur day/readings for 2026, 1583 and 9999 are byte-identical
against a build of the prior commit. OF's own 2005-2050 window carries
none of the 16 affected years and shows zero unexpected diffs; the
full 1583-9999 domain still reaches a fixed point under the exhaustive
sweep.
Diffstat (limited to 'lib/rites/rite_of/rite_of.mli')
| -rw-r--r-- | lib/rites/rite_of/rite_of.mli | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/rites/rite_of/rite_of.mli b/lib/rites/rite_of/rite_of.mli index 8124467..e537cbd 100644 --- a/lib/rites/rite_of/rite_of.mli +++ b/lib/rites/rite_of/rite_of.mli @@ -34,10 +34,11 @@ module Lectionary_of = Lectionary_of Ordinary Time runs in two separate blocks over one liturgical year (Normae n. 43-44), so the expected run-length-compressed sequence names it twice. - - [transfer_target]: {!Precedence_of.transfer_target}, Normae n. 60/n. 5. - Known incomplete on one named date shape (Normae n. 56(f), St - Joseph's backward anticipation onto Palm Sunday) -- documented on that - value's own .mli, not repeated or silently worked around here. + - [transfer_target]: {!Precedence_of.transfer_target}, Normae n. 56(f)/ + n. 60/n. 5 (St Joseph's backward anticipation onto Palm Sunday, + resolved [of-normae-56f]/W1, 2026-08-26, together with the general + forward search) -- documented on that value's own .mli, not repeated + or silently worked around here. - [readings]: {!Lectionary_of.readings} partially applied to the caller's own [~lectionary] and {!Temporal_of.year_start} (the OF reading-cycle arithmetic's own Advent anchor) -- no [~commons] |
