fix(eval): GT-seed scoping scan must flag _dynRange/_offsetAddr (#66 helpers)#72
Merged
Conversation
helpers) The v0.3.1 emitter lowers computed-endpoint ranges (ref:OFFSET(...)) through _dynRange/_offsetAddr with NO bare _offset( call, so per-sheet-eval's dynamic-read scan — which only knew _offset(/ctx.get(String( — silently approved GT-seed scoping on exactly the builds where ranges are runtime- addressed. Observed live on the a1-66c canonical eval (scan found no _offset(, scoped the cluster seed). Today this is defense-in-depth, not a live corruption hole: a sheet-qualified computed-endpoint anchor (Ext!E1:OFFSET(...)) refuses to parse (honest NaN, filed #71), so _dynRange reads are same-sheet-only and cluster-scope warm-starts cover them. But the scan must refuse to scope what it cannot statically bound — when #71 closes, this is already correct. New MODEL C in test-row-chunked-modules.mjs: a cluster whose ONLY dynamic construct is a same-sheet computed-endpoint range — asserts the scan refuses to scope (red pre-fix via stash) and the fixture emits _dynRange with no bare _offset( (else it discriminates nothing). 22/22. 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.
What
Follow-up to #69/#70, found live during the a1-66c canonical eval: the v0.3.1 emitter (#66) lowers computed-endpoint ranges through
_dynRange/_offsetAddrwith no bare_offset(call, so per-sheet-eval's dynamic-read scan silently approved GT-seed scoping on exactly the builds where ranges are runtime-addressed. Markers added.Today this is defense-in-depth rather than a live corruption hole: a sheet-qualified computed-endpoint anchor refuses to parse (post-#66 honest NaN — filed #71), so
_dynRangereads are same-sheet-only and cluster-scope warm-starts cover them. But the scan must refuse to scope what it cannot statically bound — when #71 closes, this is already correct.Tests
New MODEL C in
test-row-chunked-modules.mjs: a cluster whose only dynamic construct is a same-sheet computed-endpoint range — asserts the fixture emits_dynRangewith no bare_offset((else it discriminates nothing) and that the scan refuses to scope. Negative-controlled via stash (red pre-fix on exactly the scan assertion). 22/22; targeted suites green.🤖 Generated with Claude Code