From ceb7d379152cceae227fe966984cbc73421b6afb Mon Sep 17 00:00:00 2001 From: gunbc-ci-auto-heal Date: Mon, 5 Oct 2026 11:15:17 +0000 Subject: [PATCH] value_position_whole_read: read a domain binder through binder_node_parts Since #12923 (e878c9bf76) 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) --- .../value_position_whole_read_test.dag | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/v2/test/claim/namespace_xl0/value_position_whole_read_test.dag b/src/v2/test/claim/namespace_xl0/value_position_whole_read_test.dag index c411774b68a..d4864136bdc 100644 --- a/src/v2/test/claim/namespace_xl0/value_position_whole_read_test.dag +++ b/src/v2/test/claim/namespace_xl0/value_position_whole_read_test.dag @@ -43,7 +43,7 @@ import v2.std.compilers.body_lowering { application_read } import v2.std.arrow_signature { ArrowParameterOrderAbsent, ArrowParameterOrderDeclared, ArrowParameterOrderMalformed, arrow_declared_parameter_order } -import v2.std.node_query { field_projection_optional, node_positional_child_targets } +import v2.std.node_query { binder_node_parts, field_projection_optional, node_positional_child_targets } import v2.std.type_binder { type_param_names } import v2.std.collection { list_at_optional } import v2.extdeps.languages.dag { dag_language_model } @@ -472,10 +472,14 @@ fn vpw_domain_binds(arrow: Node, binder: Symbol) -> Optional { match list_at_optional(xs: node_positional_child_targets(node: arrow), index: 0) { Present { value: domain } => match named_edge_target_lookup(children: domain.children, name: binder) { - Found { target: t } => - match node_atom_identity_optional(node: t) { - Present { value: tv } => - if vpw_symbol_in(xs: type_param_names(n: arrow), s: tv) { optional_present(value: t) } else { optional_absent() } + Found { target: binder_target } => + match binder_node_parts(n: binder_target) { + Present { value: parts } => + match node_atom_identity_optional(node: parts.type_node) { + Present { value: tv } => + if vpw_symbol_in(xs: type_param_names(n: arrow), s: tv) { optional_present(value: parts.type_node) } else { optional_absent() } + Absent => optional_absent() + } Absent => optional_absent() } _ => optional_absent()