Repository navigation
v2 grammar: the keyword data names a value in expression position, as module does - #12801
Conversation
… module does and as v1 reads it Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… values Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE at exact head 2d86190.
No findings. The admission is narrowly limited to the declaration-heading keyword data beside the existing module case; clause and expression-heading keywords remain excluded. The controls cover parse, the route through normalize, and a negative clause-keyword twin, so this does not copy v1's broader keyword-as-name policy.
Merge queue only. The actual merge_group candidate must pass against then-current main; no direct merge and no check bypass.
…r union) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…r union) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE / REBIND at exact head 9e2419b. Supersedes my approval at 2d86190. Since that approved head, the branch gained only two successive main merges: dbf1877 (parents 2d86190 + main cbfdc1e) and this head (parents dbf1877 + main a00d1fe). No feature commit was added. The current diff remains the approved three-file, 85-addition/4-deletion change; the warm-roster patch adds only the three data_keyword_as_value producers beside main's rows. Exact-head floor, generated, emit-build, and witnesses pass. Merge-queue landing only: the actual merge_group candidate must pass against then-current main; no direct merge or check bypass.
…r union) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE / exact-head rebind from approved 9e2419b409bc18b10ee3ebed54f88dc8de90c24b to 6ca31d556d9573e251e175389cba1027127dcac6.
The new commit is a main merge only: first parent is the approved head and second parent is current main c95f906f0ff6f21b00db7edb84ae09c41eff5863. The PR remains the same three-file 85+/4- change. The resolved floor_pure_producer_share diff adds only this witness family's three warm producers while retaining main's intervening rows. Exact-head floor, generated, emit-build, and witnesses pass.
Merge-queue landing only. Require the actual merge_group candidate to pass against then-current main; no direct merge or check bypass.
XL-2, per quiet-seal-543's ruling: v2 parse refusals, one class per PR, with v1 as the reference. This one is class C1.
The defect
v2.extdeps.languages.dagdag_grammar_primary_name_expradmitted identifiers and exactly one keyword,module, as a name in expression position.extdeps.google.sheetswritesdata: datain a transport body, naming its io fielddata. The label parses, becausedag_grammar_binding_name_terminalalready admits keywords. The valuedatadid not, so the module refused whole asparse_g0_tokens_remain.The change
datajoinsmoduleas an admitted value-position keyword, formodule's stated reason: it heads a declaration that is module-level only, so nothing else can begin an expression with it.v1 is wider.
02_parseparse_primaryreads every keyword as a name except the literal keywords and the six that head their own expressions (dag_non_name_keywords). v2 deliberately does not copy that, because a clause keyword admitted as a value (else,then,in,as) could begin a new statement where the grammar expects the clause. The note on the rule records v1's wider reading and why v2 admits only the declaration-heading keywords a source has needed.Controls (
v2.test.claim.parse.data_keyword_as_value)Each outcome is a nullary value enrolled warm in
v2.workflow.floor_pure_producer_share, and each claim reads it: a claim that parsed its own source was over the new-witness eval-step budget on #12796.the_data_keyword_as_a_value_parses_holds(fn pick(data: Int) -> Int { data }). Red on main, executed.the_data_keyword_as_a_value_normalizes_holds: the route past parse. Red on main, executed.a_clause_keyword_is_still_not_a_value_holds:elsein the same position still refuses. It passes on main and on the branch, so the admission is exactlydata.Parse count before and after (
extdeps.google.sheets, the one file in this class)sheets.dagalso carries a5xxstatus class, which #12778 fixes and which refuses first on main. Both arms were therefore measured with #12778's grammar change applied:dag/extdeps/google/sheets.dagparse_g0_tokens_remainat byte 30061 (line 771,data: data)Without #12778, both arms refuse at the earlier
5xx(byte 29212), so this PR's effect on that file is visible only once #12778 lands. The controls above don't depend on it.No emitted Rust changes: the v2 grammar has no stage0 mirror.
Land only via the merge queue.
🤖 Generated with Claude Code