| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Task 11's re-review found that Precedence_ef.transfer_target's
Annunciation/Easter condition -- and RG 96's general walk more broadly --
is correct only because Temporal_ef happens to make every day from
Easter Sunday through Low Sunday (Easter+0..+7) blocking (Class1/2):
Easter and Low Sunday via named, every day between via
privileged_feria. Nothing enforces that; a future edit narrowing the
octave's blocking range could let a translated feast land inside it,
silently.
Add a test for the consequence, not the mechanism: over 2005-2050 (real
data, the project's own differential window), no day in [Easter,
Easter+7] is ever a transfer's target, checked against both
transferred_in and transferred_out's own recorded target dates. Plus a
direct, deliberately-constructed case that starts the RG 96 search
inside Holy Week itself (Holy Thursday 2026, real occupant), pinning
that the search lands on Easter+8 -- and a companion test that reads the
real occupant's own rank across the whole [origin+1, Easter+7] span to
confirm the search genuinely walked through the window rather than
stopping early for an unrelated reason.
Mutation-verified: narrowing privileged_feria's post-Easter range (6 to
4 days) makes all three new tests fail, including a real natural
occurrence the fixture did not anticipate (St Joseph, 19 March,
transferring into Easter+5 in 2008/2035/2046) -- not just the
deliberately constructed Holy Week case.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|