Repository navigation
#12145 follow-up: value-position regression controls, lambda-argument frontier enrolled expected-red, RFM receipts (no compiler change) - #12198
Merged
Conversation
…d arguments no longer refuse the whole module gunbc#12145 stopped the operand reader narrowing a sequence to its left element, which had read h(q: a) as h and [a] as [. body_lower_call_arg_value read every argument with that reader alone, so a nested call, record, caret symbol or parenthesised group became call_argument_unread and its whole module refused normalize. An argument's value is now lowered by body_lower_value_lowered (the field-initializer / if-condition reader), with the operand reader as fallback. A parenthesised group lowers to its inner expression instead of its first atom. A list literal anywhere in an argument value still refuses, at the list (body_lowering_reason_list_literal_unlowered): body lowering has no lowered form for a list literal yet, so reading it would trade a refusal for a silent drop. Witness: v2.test.claim.namespace_xl0.call_argument_value_resolve_refusal. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e no longer refuses the whole match
body_lower_match_scrutinee_optional read the scrutinee with the operand reader
alone: before gunbc#12145 match t(p: x) {..} narrowed to t, after it the match
refused as match_arm_navigation_refused (64 of the 133 still-refusing sample
modules). The scrutinee now goes through body_lower_value_lowered, operand reader
as fallback, refusal propagated. Witness claim: an undeclared name inside a call
scrutinee refuses at resolve at its atom.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…b.com/gunb-ai/gunbc into session/silent-dove-314
…ments read through the value reader Stacked on #12173 (call arguments and match scrutinees via body_lower_value_lowered). body_lower_operator_operand reads a non-operator operand whole via body_lower_value_lowered before refusing operator_operand_unread; a function value in argument position is carried as its preserved shell under value_carried_unlowered (the field-initializer disposition) instead of refusing its module as call_argument_unread (weather.dag, gen-one's first fatal). Claim v2.test.claim.namespace_xl0.value_position_whole_read with production-route shape assertions; RFM row fold_rewrite_regression_visible_only_at_whole_route_identity_diff. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… outcome, not dropped (review 70746) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
Author
|
Review 70746: confirmed and fixed in 6f6839a. |
…rom the #12198 srv1 diff) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e_query and node_subtree_nodes, no untyped edge field access (entry resolve refused '.target' on T) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
|
Source review hold on current head
The whole-value direction and explicit list frontier are otherwise consistent with the pass. |
…RFM receipts folded into lowering_accessor_collapses_a_sequence_operand as an exposure/coverage gap, not a new regression row (side-chat review) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… shape of the operator_operand_unread files; the bare call lowered before the fallback (srv1: M1/M2 stayed green) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…eclared body name refused at its atom; operator-operand fallback and its non-discriminating claims dropped (owned by #12194) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…; lambda claims enrolled expected-red as the MQ frontier; shape claims read an ingest without the lambda fixtures; RFM receipt updated Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…main and no scrutinee shape is known to raise an accepted diagnostic; #12198 is controls + lambda frontier + receipts Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… the RFM row) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Sep 24, 2026
…'s landed versions Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Sep 24, 2026
…branch hunk the squash did not land is not this PR's) Co-Authored-By: Claude Opus 5.5 (1M context) <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 this is now: controls, a named frontier, and receipts. No compiler change.
This PR started as the fix-forward for the regression #12145 landed. Measurement narrowed it: #12173 (landed) fixed call arguments and match scrutinees, and #12194 owns operator operands. At acca7e8,
src/v2/compiler/body_lowering_fold.dagis unchanged from main. What lands:v2.test.claim.namespace_xl0.value_position_whole_read.module_roots_from_source_root_ingestthroughv2.std.node_query's call readers and assert callee, arity 1, and the argument at the authored atom. Measured red on the pre-XL-2 hotfix: call arguments lower as values; nested-call/record args no longer refuse the whole module (list args still refuse, located) #12173 fold, and red under a callee mutation.call_argument_unread, which is gen-one's first fatal inweather.dag. Two claims pin the target: a lambda whose body uses its parameter RESOLVES, and an undeclared name in a lambda body refuses at its atom. They are enrolled inv2.workflow.floor_expected_redfloor_expected_red_chunk_lambda_argument_lowering, owned by the MQ lane; fierce-gull-556's MQ-1: function values in value position (lambdas and fn literals) lower to the generic fn Arrow; unwritten types are fresh type parameters #12210 targets them. They dissolve when both pass. Whichever of #12145 follow-up: value-position regression controls, lambda-argument frontier enrolled expected-red, RFM receipts (no compiler change) #12198 and MQ-1: function values in value position (lambdas and fn literals) lower to the generic fn Arrow; unwritten types are fresh type parameters #12210 lands second removes the rows.lowering_accessor_collapses_a_sequence_operand: XL-2: sequence-operand refs reach resolve — operator expressions lower whole, a sequence operand is never narrowed #12145 exposed silent truncation; it was not a regression. The receipt adds the identity-diff lessons, the missing locus, and the dead ends below.What was tried and dropped, with the measurement
Scrutinee
diagnostics_merge(review 70746).body_lower_try_match_from_capturedbinds the scrutinee's accepted diagnostics as_. With XL-2 hotfix: call arguments lower as values; nested-call/record args no longer refuse the whole module (list args still refuse, located) #12173 landed, no claim distinguishes merging them from main (srv1 matrix at 4ab6497: identical under both folds), and no scrutinee shape is known to raise an accepted diagnostic. It was an unobservable change, so it was dropped rather than landed without a discriminator. If a scrutinee shape that raises an advisory is found, the merge returns with a claim that is red on main.Lambda carry. I tried passing a lambda argument through whole as its preserved shell under
value_carried_unlowered. On srv1 at 8fc9f27 the module normalizes, but both lambda resolve claims stay red: the carried shell gives the resolver no scope for the parameter. That is a refusal moved from normalize to resolve, not a repair, so I dropped it (quiet-seal-543 / fierce-hawk-274 found the same). Real lambda lowering is the MQ lane's.Operator-operand fallback. It was dead. With bare-call and parenthesised-call operands, neither mutation (M1: fallback → refusal; M2: fallback → callee only) turned the claim red. The canary with the fallback removed regressed none of the six
operator_operand_unreadfiles:content_hashrefuses onlylist_literal_unlowered, which MQ-1: list literals lower whole as their free-monoid construction, through the one value reader #12208 clears, and the other two stay clear. XL-2 follow-up to #12173: match-scrutinee controls, list/lambda RFM rows (three-baseline identity census posted as a PR comment) #12194 owns operands.Claims matrix (srv1, neat-boar-16, at 8fc9f27, before the carry was dropped)
fd9a659c6cThe two shape claims' red on main was most likely collateral from the lambda fixture refusing the one shared ingest. At this head they read their own ingest without the lambda fixtures, so their verdict is their own. An earlier mutation run (callee
^vpw_id→^vpw_leaf) turned exactly the two shape claims red. Pending: a re-run at this head (shape claims green with their own ingest; both lambda rows red as enrolled), and CI's required floor.Whole-route identity diff (srv1/srv2, at f813dd9, stacked on #12173)
83 of 85 added (cause, path) rows cleared. The 4 removed rows did not return, and the seven's subject became readable. The two stragglers,
keyed_roster.dagandsugar.dag(headparse_grammar_choice_overlap_residue), were not in the parent's refusal set: exposure of a parse overlap, outside this PR. Most rows new relative to the parent are parentparse_g0_tokens_remainfiles moving to a later stage once they parse. Almost all of that clearing is #12173's, which has landed.🤖 Generated with Claude Code