Skip to content

Commit 1c9c65b

Browse files
fabio-rovaiclaude
andcommitted
An impossible date is a violation, and the day is judged where a regex cannot judge it
`xsd:date` and `xsd:dateTime` were checked by a regex alone, so "2026-02-31" satisfied `sh:datatype` on both evaluation paths. Decision 0018 recorded that as engine defect E1 and deferred the fix until the conformance baseline had been measured. This is that fix. A syntactic pattern cannot express "this day exists in this month" without encoding leap years, and a regex that tried would be unreadable and wrong at the century boundary. So the regex stays what it is good at and becomes a PRE-FILTER: it returns every form it cannot vouch for, well formed ones included, and the day is judged in Rust afterwards. A row the pre-filter returns is therefore a candidate and not yet a verdict. The leap rule is Gregorian, so 1900 is not a leap year and 2000 is, and a test pins both because that is the pair any century shortcut gets wrong. The pre-filter is keyed by its own test text, which is unique per datatype, so a node shape carrying two datatype constraints keeps them apart. Measured rather than assumed. The W3C conformance baseline did not move: the file diff is zero bytes and all four ratchet tests pass. The Lean evaluator has always checked the day against the days in the month, so Lean and Rust disagreed here; they now agree on the fixtures where they diverged, and `tests/shacl_verified_tool_test.rs` carries that agreement. The E1 test in the adversarial corpus recorded the defect as an expectation. Decision 0018 said that when the lexical space was implemented the test would fail, and that the right response was to correct the expectation and amend the record rather than weaken the test. Both were done. Every gate was watched failing: an early return in `calendar_violation` reddens three of the six new tests and two in the adversarial corpus, and the three that survive it are testing other things, which is why they do not move. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent dab6638 commit 1c9c65b

5 files changed

Lines changed: 1184 additions & 88 deletions

File tree

0 commit comments

Comments
 (0)