| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With data/ef/adjustments.sexp's one Suppress directive replaced by an
empty directive list, colitur day 2026's stdout was byte-identical for
all 365 days and the whole suite still passed: ef-nativity-vigil already
outranks vigil-of-christmas in the RG91 contest regardless of whether
the overlay ever ran, so the suppression's only observable effect is
keeping vigil-of-christmas out of 24 December's Liturgical_day.omitted
-- a field no cram assertion reads. test/dune's own dep on
adjustments.sexp pinned the file's existence, never its content.
Confirmed the gap two ways: reverting the overlay to (directives ())
makes this new test fail (24 December's omitted gains
vigil-of-christmas), and confirmed test/cli.t's whole cram suite still
passes under that same mutation -- cram is structurally blind to this,
not merely undertested.
|
|
|
search_from could walk up to 400 days past origin before Calendar's own
~start ~stop clamp is ever consulted, and nothing stopped it probing
occupant on a date past 31 December 9999 -- occupant chains through the
real EF rite's temporal, which calls Computus.gregorian_easter, not
total outside 1583..9999 (it Date.makes and failwiths on Error).
Not reachable with the shipped sanctoral data alone, but reachable
through the project's own primary extension path: an overlay adding an
I-class feast on 25 December leaves nothing but Class2 Nativity-octave
days for the rest of civil year 9999, so the unguarded search reached 1
January of year 10000 and crashed there with 'computus: year 10000 out
of range 1583..9999'. 9999 is an in-range year and the kernel's contract
is 'never raises on in-range input'.
search_from now also stops, without probing occupant again, once it
passes Date's own domain ceiling -- the same 'return a finite date, let
Calendar's own out-of-range handling record it, never pretend to have
found something admissible' contract the existing step-count guard
already follows.
Two new tests, both mutation-verified to actually reproduce the crash
when the guard is removed (see the task report): a precedence_ef.ml unit
test using the real Temporal_ef.temporal as occupant (a synthetic
occupant can never discriminate this, since it never calls Computus
itself), and a Calendar-level integration test reproducing the exact
overlay-based scenario the review found.
|