diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-12 14:50:58 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-12 14:50:58 +0200 |
| commit | 09a14446d5b0d4150a6de118a7d04ab99e54c21e (patch) | |
| tree | 48ec37d11060abe925d3d8a8b8c48951d6fb33d7 | |
| parent | e122fa4368e156b9c90c128a8daad9545b22ed11 (diff) | |
| download | lectio-09a14446d5b0d4150a6de118a7d04ab99e54c21e.tar.gz lectio-09a14446d5b0d4150a6de118a7d04ab99e54c21e.zip | |
calendar: record the RG 95 chained-transfer gap in the source
transferIfImpededEF resolves one candidate's own transfer walk in
isolation and has no way to notice a SECOND, separately-transferred
I-class candidate landing on the same destination day -- St Joseph
(19 March) and the Annunciation (25 March) can both walk to the
Monday after Low Sunday in the same year (2008, 2035, 2046, e.g.
2035-04-02: annunciation-of-the-blessed-virgin-mary +joseph-spouse-
of-the-bl-virgin-mary). RG 95 grants the right of translation
"solummodo festis I classis" to I-class feasts only, so both
candidates genuinely have it, and the collision they land in
together is an ordinary RG 97/98 occurrence question this function
does not resolve: pickEF's plain alphabetical slug tie-break settles
it instead of re-walking the loser. RG 98 itself supplies the
determinism rule this collision needs and does not have: "in
paritate autem Officium prius impeditum praecedit" -- at equal table
position, the office impeded FIRST takes precedence, which is
chronological (Joseph, impeded on the 19th, before the Annunciation's
own walk begins on the 25th) and may favour Joseph over the current
alphabetical fallback.
No functional change -- this collision is left unfixed, defensible
against scope (it needs resolving occurrence between two ALREADY-
TRANSFERRED candidates, not a single one, a bigger shape than this
function currently has). Leaving it unrecorded was not defensible:
nothing in internal/calendar/ named RG 95, 97, 98, or chained
transfers anywhere before this comment.
| -rw-r--r-- | internal/calendar/calendar.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/internal/calendar/calendar.go b/internal/calendar/calendar.go index 19c0efb..2d8611a 100644 --- a/internal/calendar/calendar.go +++ b/internal/calendar/calendar.go @@ -250,6 +250,31 @@ func transferIfImpeded(cel Celebration, when time.Time, sel Selection) time.Time // ANY I- or II-class day (RG 96's own wider "not I or II class" text) -- // e.g. the Visitation, 2 July, blocks the Precious Blood's transfer off 1 // July in 2011, and 3 July's ordinary Sunday blocks it a second time. +// +// KNOWN GAP, not fixed here (recorded per RG 95, so the next person does not +// have to rediscover it from scratch): this function resolves ONE +// candidate's own transfer walk in isolation. It has no way to notice that a +// SECOND, separately-transferred I-class candidate has landed on the exact +// same destination day. Concretely: St Joseph (19 March) and the +// Annunciation (25 March) can both be walked, independently, to the Monday +// after Low Sunday in the same year (2008, 2035, 2046 -- e.g. 2035-04-02: +// `annunciation-of-the-blessed-virgin-mary … +joseph-spouse-of-the-bl-virgin-mary`). +// RG 95 grants the right of translation "solummodo festis I classis" (to +// I-class feasts ONLY) -- so BOTH have that right, and the day they land on +// together is itself an ordinary occurrence collision RG 97/98 governs (the +// higher table position is kept, the other transfers FURTHER): this +// function does not re-walk the loser, it lets pickEF's plain alphabetical +// slug tie-break settle it, so the loser is merely commemorated instead of +// continuing its own walk one more day. RG 98 itself supplies the missing +// determinism rule for the tie this collision even needs: "in paritate +// autem Officium prius impeditum praecedit" -- at equal table position, the +// office impeded FIRST takes precedence -- which is chronological (Joseph, +// impeded on the 19th, before the Annunciation's own walk begins on the +// 25th) and may favour Joseph over pickEF's alphabetical fallback. Neither +// RG 98's tie rule nor the re-walk RG 97 implies is implemented; fixing this +// properly means resolving occurrence between two ALREADY-TRANSFERRED +// candidates, not a single one, which is out of this function's current +// shape. func transferIfImpededEF(cel Celebration, when time.Time, occupiedByClass1, occupiedByClass1Or2 func(time.Time) bool) time.Time { if when.Month() == time.November && when.Day() == 2 && when.Weekday() == time.Sunday && strings.Contains(cel.Slug, "all-souls") { |
