| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
Task 5 of Phases 3-5 (the payoff task): bundles Tasks 1-4's separately
built pieces (Temporal_of, Precedence_of, Rubrics_of, Lectionary_of)
into a (Vocab_of.season, Vocab_of.rank) Colitur_kernel.Rite.t, and
wires colitur day/readings --rite of <year> into the CLI. Default
stays ef; every pre-existing invocation is byte-identical (asserted
directly in test/cli.t and against a real v1.0.0 build for three
years, plus git diff --stat v1.0.0..HEAD over lib/rites/rite_ef/,
lib/kernel/, data/ef/ is empty).
No kernel change was needed, confirming the spec's central claim.
season_runs needed real thought rather than the brief's own suggested
Vocab_of.seasons: Temporal_of.season's own 'first run'/'second run'
comments confirm Ordinary Time is genuinely interrupted by Lent and
Easter over one liturgical year, so the expected run-length-compressed
sequence names it twice, six runs over five seasons -- exactly the
case Rite.t.season_runs's own doc comment already names as its
illustration for why this field is rite-supplied rather than derived.
easter/fixed_key are as specified, each carrying its own citation
(Gregorian computus; the 2002 Missal's one bissextilis occurrence is a
leap-year table entry, not a kalends-doubling rule, so fixed_key is
identity).
Follows rite_ef.ml's template and its lectionary-parameter lesson
exactly: lectionary is caller-supplied, not closed over.
test/test_rite_of.ml resolves the real assembled rite (calendar-2002
.sexp + all 13 amendment overlays + lectionary.sexp) through Calendar
and Validate.run, the same discipline test_validate.ml/test_rite_ef.ml
already apply to EF. This is the first time rite_of has been checked
this way, and it surfaced two new, real, cited gaps outside this
task's own scope to fix: Temporal_of never reaches Normae n.35(a)'s
30-December Holy Family fallback in a year with no Sunday in 26-31
December (first hit 1583, the domain floor), and Temporal_of.anchors
disagrees with temporal on 24 December when that date is itself a
Sunday (Advent IV outranks the Vigil, first hit 2006). Both pinned as
known-wrong, not fixed, the same treatment the brief's own pre-known
St Joseph/Palm Sunday gap (Normae n.56(f)) gets, pinned on 2062. A
third gap was found in data/of/lectionary.sexp's own coverage (audited
against one civil year only, so the other weekday-cycle letter is
unaudited and at least one pairing is asymmetric on shipped data) --
that file is excluded from this task, so the wide 2005-2050 sweep
checks structural invariants only and leaves the citation-chain checks
to the small, individually-audited landmark-year set.
make check (COLITUR_EXHAUSTIVE_SWEEP=1): exit 0, 867 tests, ~316s.
|