Skip to content

value_position_whole_read: read the domain binder through binder_node_parts (7 silent reds on main) - #13394

Merged
gunbai-bot[bot] merged 1 commit into
mainfrom
fix-vpw-binder-node
Oct 5, 2026
Merged

gunbai-bot[bot] merged 1 commit into
mainfrom
fix-vpw-binder-node

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Seven claims in v2.test.claim.namespace_xl0.value_position_whole_read have been failing on main without blocking anything, because the floor never plans them on an ordinary diff.

First bad #12923 (e878c9b): its new binder-node shape was never read by this test helper. Since #12923, a domain edge's target is a binder node: a Conj carrying one BinderTypeEdge to the type. vpw_domain_binds still called node_atom_identity_optional on that target, got Absent, and so every claim that goes through it returned false.

Fix: vpw_domain_binds reads the binder's type through v2.std.node_query binder_node_parts, the one read of a binder node, then checks that type's identity against the Arrow's type_param_names as before. Test-only, one file.

Bisect (claim_batch, one dispatch per first-parent commit, the tree verified by a source fingerprint):

Evidence: all 23 claims in the module PASS on main 6296275 with this change, run https://app.buildbuddy.io/invocation/a14415b8-6a1d-4c21-94cf-7dee95671707. Before it, the seven failed on main (run 8c7179a7).

The seven claims:

  • a_lambda_argument_lowers_to_an_arrow_binding_its_parameter_for_its_body
  • a_fn_literal_argument_lowers_to_the_same_arrow_as_a_lambda
  • a_fn_literal_argument_with_a_let_block_body_lowers_its_body_as_a_named_fn_does
  • a_fn_literal_record_field_with_a_single_atom_body_lowers_unfolded
  • a_fn_literal_record_field_with_a_record_construct_body_lowers_well_formed
  • two_lambdas_with_one_parameter_name_each_carry_their_own_fresh_type_parameter
  • a_let_bound_fn_literal_lowers_whole_with_its_authored_return_type

The eighth silent red, function_value_body_route a_curried_function_typed_return_emits_impl_fn_over_box_dyn_fn (first bad #12506), is a real false refusal and is handled separately.

🤖 Generated with Claude Code

…arts

Since #12923 (e878c9b) a domain edge's target is a binder node (a Conj with
one BinderTypeEdge); vpw_domain_binds read the atom identity of that node
directly, got Absent, and seven claims went silently red on main. It now reads
the binder's type through v2.std.node_query binder_node_parts, the one read of a
binder node.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 5, 2026
Merged via the queue into main with commit e81d4d3 Oct 5, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the fix-vpw-binder-node branch October 5, 2026 17:25
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.

0 participants