Diagnostics for an explicit CONCAT/JOIN on an anchor without a record - #4
Merged
Merged
Conversation
An explicit CONCAT/JOIN whose anchor has no record (REC missing), or none of whose provided items has a record, was skipped silently. Both cases are now reported through TableInterpreter.diagnostics() and raise under strict preconditions. Inherited actions stay silent; anchors folded away by an earlier CONCAT are tracked in the new set C (WorkingState.isConcatenated / allConcatenated) and are not reported either. - InterpretationAction.inherited (3-arg constructor kept) - WorkingState.report (was private skip), concatenated set C - TableInterpreter.checkRecords before applyConcat/applyJoin - task corpus and semantic conformance runner assert no diagnostics - docs, CHANGELOG; rtl-reference Example 6 snippet restored ()->REC Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Closes TODO item 2 (plan
DIAG_ANCHOR_WITHOUT_RECORD).Summary
CONCAT/JOIN(written on the anchor's own content spec) whose anchor has no record, or none of whose provided items has a record, was skipped silently — the anchor just vanished from the recordset. Both cases are now reported throughTableInterpreter.diagnostics()(anchor has no record — REC missing?,none of the provided items has a record — REC missing on the provider side?) and raise underwithStrictPreconditions(true).actSpecs) stay silent — for them anchors without records are routine.CONCATare tracked in the new set C (WorkingState.isConcatenated/allConcatenated, the counterpart ofJ) and are not reported either — otherwise every folded row ofBW&STR*->CONCAT(0)patterns would be a false positive.API
InterpretationAction.inherited()— new fourth record component; the three-argument constructor is kept (inherited = false). Positional deconstruction patterns need a fourth binding (noted in CHANGELOG).WorkingState.report(anchor, operation, message)(was privateskip),isConcatenated,allConcatenated.Tests
WorkingStateDiagnosticsTest; six end-to-end cases inTableInterpreterMultiRecordTest.RtlTask*Test,AtpTask*Test) and the semantic conformance runner now assert that interpretation produces no diagnostics — 2164 tests green, no diagnostics on the corpus.Docs
docs/model/itm.md,docs/rtl-reference.md(the Example 6 snippet in the cheat sheet was missing()->REC— fixed),docs/api.md,docs/examples.md,CHANGELOG.md.🤖 Generated with Claude Code