Skip to content

#12145 follow-up: value-position regression controls, lambda-argument frontier enrolled expected-red, RFM receipts (no compiler change) - #12198

Merged
gunbai-bot[bot] merged 19 commits into
mainfrom
session/silent-dove-314
Sep 24, 2026
Merged

gunbai-bot[bot] merged 19 commits into
mainfrom
session/silent-dove-314

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

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.dag is unchanged from main. What lands:

  1. Permanent regression controls for XL-2 hotfix: call arguments lower as values; nested-call/record args no longer refuse the whole module (list args still refuse, located) #12173's value-position reading: v2.test.claim.namespace_xl0.value_position_whole_read.
  2. The lambda-argument frontier, enrolled expected-red. A lambda argument still refuses its module as call_argument_unread, which is gen-one's first fatal in weather.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 in v2.workflow.floor_expected_red floor_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.
  3. RFM receipts in 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

Claims matrix (srv1, neat-boar-16, at 8fc9f27, before the carry was dropped)

claim fold @ HEAD fold @ main fd9a659c6c
a_call_argument_lowers_to_the_authored_nested_call_with_arity_one PASS FAIL
a_call_scrutinee_lowers_whole_to_the_authored_call PASS FAIL
lambda: body uses its parameter → resolves FAIL FAIL
lambda: undeclared name in body → refused at its atom FAIL FAIL
scrutinee / argument resolve controls (3) PASS PASS

The 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.dag and sugar.dag (head parse_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 parent parse_g0_tokens_remain files moving to a later stage once they parse. Almost all of that clearing is #12173's, which has landed.

🤖 Generated with Claude Code

Brian Searls and others added 6 commits September 23, 2026 20:10
…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>
…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>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 24, 2026 01:14
… outcome, not dropped (review 70746)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

Review 70746: confirmed and fixed in 6f6839a. body_lower_try_match_from_captured now binds the scrutinee's accepted diagnostics as sd and returns diagnostics_merge(outer: sd, inner: d) with the arms' diagnostics, so an advisory raised while lowering the scrutinee is counted. That arm came from #12173, which this PR stacks on. The fix lands here because #12173 is already enqueued. — sent from silent-dove-314

Brian Searls and others added 3 commits September 24, 2026 01:55
…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>

Copy link
Copy Markdown
Contributor

Source review hold on current head da4f5aab6e1d68ba8aa36a93e93fc338086a62dc:

  1. The operator-operand fallback still lacks a direct discriminating claim. The PR body says its fixture passes under every fold and relies on the six-row whole-route delta. Please add a boundary/production specimen whose result changes when the body_lower_value_lowered fallback is removed, so this specific consumer is permanently protected.
  2. Please correct the failure-mode framing before landing. XL-2: sequence-operand refs reach resolve — operator expressions lower whole, a sequence operand is never narrowed #12145 exposed pre-existing silent truncation; it did not create working-code regressions. The new row may describe the distinct pairing/whole-route-observation gap, but its identity and receipts should not call the fail-closed exposure itself a regression, and the semantic occurrence should remain attached to lowering_accessor_collapses_a_sequence_operand.
  3. Rebase after XL-2 hotfix: call arguments lower as values; nested-call/record args no longer refuse the whole module (list args still refuse, located) #12173 lands and rerun the exact seven plus generation-two canary and current required checks on the resulting head.

The whole-value direction and explicit list frontier are otherwise consistent with the pass.

Brian Searls and others added 2 commits September 24, 2026 03:29
…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>
@gunbai-bot gunbai-bot Bot changed the title Fix-forward #12145: operator-operand fallback and lambda arguments read as values (stacked on #12173) Fix-forward #12145: lambda arguments carried whole; operator-operand fallback read as a value (after #12173) Sep 24, 2026
Brian Searls and others added 2 commits September 24, 2026 05:08
…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>
@gunbai-bot gunbai-bot Bot changed the title Fix-forward #12145: lambda arguments carried whole; operator-operand fallback read as a value (after #12173) #12145 follow-up: scrutinee diagnostics merged; production-route shape control; lambda-argument frontier enrolled expected-red Sep 24, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Sep 24, 2026
 landed) into MQ-1

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>
@gunbai-bot gunbai-bot Bot changed the title #12145 follow-up: scrutinee diagnostics merged; production-route shape control; lambda-argument frontier enrolled expected-red #12145 follow-up: value-position regression controls, lambda-argument frontier enrolled expected-red, RFM receipts (no compiler change) Sep 24, 2026
Brian Searls and others added 3 commits September 24, 2026 05:55
… the RFM row)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…2173 repaired, identity counts, holds vs expected-red separated (side-chat verdict)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merged via the queue into main with commit 1eda053 Sep 24, 2026
5 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/silent-dove-314 branch September 24, 2026 12:22
@briansrls
briansrls restored the session/silent-dove-314 branch September 24, 2026 12:26
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant