From ca17d225afd6a5fda5cf9f3ac3146f08206c2c93 Mon Sep 17 00:00:00 2001 From: rmichaelthomas Date: Fri, 11 Sep 2026 23:19:39 -0700 Subject: [PATCH] test(conformance): a date range over a record field, which the corpus missed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The corpus's date case remembered a scalar date and compared it. The shape a consumer actually writes is a date *field on a record* compared to a literal — `filter the events where starts-at is not below 2026-01-01` — and that goes down a different path in the analyzer. Found by porting: the TypeScript validator passed the corpus's date case and still refused the record-field form with "Unexpected value in condition", because the two operand paths are separate and only one had been taught about dates. Which is the same blindness one level up. The word-list gate could not see a behaviour change; a behavioural corpus cannot see a shape it does not contain. Coverage of the vocabulary is not coverage of the grammar, and the coverage gate only checks the first. 41 cases. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01E6qcDj1e1dEYvc8jLnpGZy --- tests/fixtures/conformance-0.18.1.json | 22 ++++++++++++++++++++++ tests/fixtures/conformance_corpus.txt | 6 ++++++ 2 files changed, 28 insertions(+) diff --git a/tests/fixtures/conformance-0.18.1.json b/tests/fixtures/conformance-0.18.1.json index 00cdc2c..60f064b 100644 --- a/tests/fixtures/conformance-0.18.1.json +++ b/tests/fixtures/conformance-0.18.1.json @@ -46,6 +46,28 @@ ], "source": "remember a date called starts-at with 2026-03-15\nrequire starts-at is not below 2026-01-01\nrequire starts-at is not above 2026-12-31" }, + { + "id": "a date range over a record field, which is the shape a consumer writes", + "results": [ + { + "canonical": "remember an event called e1 with title as launch and starts-at as 2026-03-15", + "status": "success" + }, + { + "canonical": "remember a list called events with e1", + "status": "success" + }, + { + "canonical": "filter the events where starts-at is not below 2026-01-01", + "status": "success" + }, + { + "canonical": "filter the events where starts-at is not above 2026-12-31", + "status": "success" + } + ], + "source": "remember an event called e1 with title as launch and starts-at as 2026-03-15\nremember a list called events with e1\nfilter the events where starts-at is not below 2026-01-01\nfilter the events where starts-at is not above 2026-12-31" + }, { "id": "a range comparison over text is refused", "results": [ diff --git a/tests/fixtures/conformance_corpus.txt b/tests/fixtures/conformance_corpus.txt index b44aaee..fe91a67 100644 --- a/tests/fixtures/conformance_corpus.txt +++ b/tests/fixtures/conformance_corpus.txt @@ -11,6 +11,12 @@ remember a date called starts-at with 2026-03-15 require starts-at is not below 2026-01-01 require starts-at is not above 2026-12-31 +# a date range over a record field, which is the shape a consumer writes +remember an event called e1 with title as launch and starts-at as 2026-03-15 +remember a list called events with e1 +filter the events where starts-at is not below 2026-01-01 +filter the events where starts-at is not above 2026-12-31 + # a range comparison over text is refused remember a string called title with "roof" require title is above 50