Small-tails sweep: NULL-value statics + schema-less qualifiers — corpus 505 -> 511 (TASK-55) - #42
Merged
Merged
Conversation
… the limitations contract
The known-limitations doc gains the fuzzer-found regex row (backrefs
outside classes, the stacked-quantifier grammar, nested repetition
products, whitespace bounds, class set-op lookalikes, Perl-class range
endpoints, capturing {0}, anchor-only patterns) and a new 'how this
document stays honest' section naming the three gate mechanisms (corpus
replay, executable twin, standing fuzzer). The twin suite grows 9
assertions covering the new classes — 39 tests total.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…us 505 -> 511 (TASK-55) NULL values in static join tables now serve: a declared-nullable value column flattens to a (validity i1, payload) pair in the map layout — zero IR changes; the probe writes typed defaults on a miss (validity false), and StaticCol ANDs the validity into the null lane alongside the LEFT-miss flag, so INNER/LEFT/residual paths all get NULL-correct lanes on both backends. NULL keys keep the drop rule. The materializer converts NULL -> (false, typed default); the declared-non-nullable NULL guard stays as a safety net. Schema qualifiers become registry-noise: s1.t1 (driving, joined, or comma-joined) resolves when the table part matches a registered bare name, and 3-part schema.table.col refs bind — amending the wave-5 main.-only rule (DuckDB's schema-existence errors are unknowable to a schema-less registry; documented as a contract choice). Ambiguity still errors. known-limitations.md + the twin suite updated in the same commit (the NULL-value reject row flips to served; the qualifier choice joins §5). Corpus 511/165/2 zero FAILs — 3 of the 9 NULL-static cases uncovered second blockers (dup keys / self-joins), counted honestly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ahrzb
approved these changes
Jul 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two conservative rejects lifted, per the post-wave-B census:
NULL values in static join tables (the real one). Fitted-encoding tables have NULLs; the original static-map design rejected them at build. Now a declared-nullable value column flattens to a (validity i1, payload) pair in the map layout — zero IR changes, both backends. The probe already writes typed defaults on a miss (validity=false), so
StaticColjust ANDs the validity into the null lane next to the LEFT-miss flag; INNER, LEFT, and residual-ON paths all produce NULL-correct lanes. NULL keys keep the drop rule (a NULL never equi-matches).Schema qualifiers are registry-noise.
s1.t1(driving, joined, or comma-joined) resolves when the table part matches a registered bare name, and 3-partschema.table.colrefs bind. This amends the wave-5 main.-only rule: DuckDB's schema-existence errors are unknowable to a schema-less registry, so the choice is documented inknown-limitations.md§5 rather than half-mimicked. Ambiguous matches still error.Contract discipline
known-limitations.md+test_known_limitations.pyupdated in the same commit: the NULL-value reject row flips to a served behavior (its test now asserts the oracle-checked NULL flow), and the qualifier choice joins the §5 contract-choices list. One stale reject-test in the interpreter suite rewritten as a positive oracle check.Verification
Note: this branch stacks on #41 (the fuzzer-classes doc fold) — merging #41 first keeps histories clean.
🤖 Generated with Claude Code