Skip to content

Fix main: four namespace_xl0 test modules read the removed NativeTestFileRefusal.fatal_reason (use the chain-derived accessor) - #13400

Merged
gunbai-bot[bot] merged 1 commit into
mainfrom
session/bold-lynx-438-fatal-readers
Oct 7, 2026
Merged

gunbai-bot[bot] merged 1 commit into
mainfrom
session/bold-lynx-438-fatal-readers

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Fixes a silent red on main from #13364 (457d06d). #13364 removed NativeTestFileRefusal's stored fatal_reason, but four test modules still read refusal.fatal_reason, so they no longer typecheck. Each module sits outside the floor's gate closure, which is why #13364's CI stayed green.

Change

Each reader now calls the chain-derived accessor v2.compiler.native_test_vocabulary native_test_file_refusal_fatal_reason(fr: refusal), with an explicit import. The four modules:

  • v2.test.claim.namespace_xl0.let_match_early_return (named by the manager)
  • v2.test.claim.namespace_xl0.return_tail_position (named by the manager)
  • v2.test.claim.namespace_xl0.call_argument_value_resolve_refusal (found by the grep below)
  • v2.test.claim.namespace_xl0.if_arm_and_statement_lowering_refusal (found by the grep below)

Corpus-wide check (the floor won't report this)

Command:

grep -rnE "\.(fatal_reason|head_reason)\b" src/v2 dag src/v1 --include=*.dag --include=*.rs | grep -v "recurring_failure_mode\|rung_drop"

Zero of the remaining hits read a NativeTestFileRefusal:

  • whole_tree_census_resolve_test and v2.compiler.compile (line ~4444) read the census group and member types, which carry their own fatal_reason / head_reason fields.
  • Every native_lane_runner.rs hit reads the host's own decoded struct NativeFileRefusalObserved, which is filled from the chain.

Direct evidence: every test fn of all four modules (the floor does not plan these modules)

claim_batch (built from this branch) was run locally at head 3375a50, once per module, over every test fn the module declares:

target/release/claim_batch --source-root dag --source-root src/v2 --entry src/v2/test/claim/namespace_xl0/<module>_test.dag --functions <every test fn in that file>

Every module resolves (typechecks) and exits 0, with 70 / 70 PASS:

v2.test.claim.namespace_xl0.let_match_early_return: 18 PASS, 0 FAIL
  • PASS a_let_match_with_one_binding_arm_and_returning_arms_is_accepted
  • PASS the_rest_after_a_let_match_is_read_and_refuses_unbound_at_its_atom
  • PASS a_returning_arm_operand_is_read_and_refuses_unbound_at_its_atom
  • PASS a_binder_free_binding_arm_value_is_read_and_refuses_unbound_at_its_atom
  • PASS a_let_match_in_the_rest_of_another_is_accepted
  • PASS two_binding_arms_refuse_as_needing_a_join_point
  • PASS a_let_match_outside_a_tail_spine_still_refuses_as_not_in_tail_position
  • PASS a_return_inside_the_binding_arm_still_refuses_as_not_in_tail_position
  • PASS a_let_match_in_a_fn_value_exits_only_the_fn_value_and_is_accepted
  • PASS the_rest_does_not_see_the_binding_arms_binders
  • PASS a_bare_constructor_binding_arm_stays_a_constructor_pattern
  • PASS an_arm_binder_hiding_an_outer_parameter_still_refuses
  • PASS a_nested_constructor_in_a_field_pattern_is_classified_by_resolve
  • PASS a_literal_binding_arm_is_accepted
  • PASS the_uri_path_segment_parser_is_admitted_by_body_lowering
  • PASS a_binding_arm_value_may_use_its_binders_and_is_accepted
  • PASS the_rest_after_a_let_match_appears_exactly_once_in_the_lowered_tree
  • PASS every_returning_arm_of_a_let_match_keeps_its_operand_in_the_lowered_tree
v2.test.claim.namespace_xl0.return_tail_position: 17 PASS, 0 FAIL
  • PASS a_return_inside_a_let_bound_if_refuses_rather_than_binding_its_operand
  • PASS a_return_followed_by_a_statement_refuses_as_not_in_tail_position
  • PASS a_return_before_another_statement_in_a_fn_value_refuses
  • PASS an_else_less_if_that_falls_through_still_refuses_as_unlowered
  • PASS an_else_less_if_as_the_last_statement_still_refuses_as_unlowered
  • PASS a_guard_in_a_non_tail_spine_still_refuses_as_unlowered
  • PASS a_tail_return_of_a_fn_body_is_accepted
  • PASS a_tail_return_after_a_let_is_accepted
  • PASS a_tail_return_of_a_fn_value_block_body_is_accepted
  • PASS a_tail_return_operand_is_read_and_refuses_unbound_at_its_atom
  • PASS a_return_in_an_arm_of_a_tail_if_is_accepted
  • PASS a_guard_followed_by_statements_is_accepted
  • PASS a_guard_arm_return_operand_is_read_and_refuses_unbound_at_its_atom
  • PASS the_statements_after_a_guard_are_read_and_refuse_unbound_at_their_atom
  • PASS a_return_in_an_arm_of_a_tail_match_is_accepted
  • PASS a_tail_match_arm_return_operand_is_read_and_refuses_unbound_at_its_atom
  • PASS a_return_in_an_arm_of_a_match_nested_in_a_tail_match_arm_is_accepted
v2.test.claim.namespace_xl0.call_argument_value_resolve_refusal: 21 PASS, 0 FAIL
  • PASS a_named_list_argument_reaches_resolve
  • PASS a_positional_list_argument_reaches_resolve
  • PASS an_undeclared_name_in_a_nested_call_argument_refuses_at_resolve_at_its_atom
  • PASS a_list_inside_a_nested_call_argument_reaches_resolve
  • PASS an_undeclared_name_in_a_positional_nested_call_argument_refuses_at_resolve_at_its_atom
  • PASS an_undeclared_name_in_a_record_literal_argument_refuses_at_resolve_at_its_atom
  • PASS a_list_inside_a_record_literal_argument_reaches_resolve
  • PASS an_undeclared_name_in_a_parenthesised_argument_refuses_at_resolve_at_its_atom
  • PASS literal_and_string_arguments_resolve
  • PASS a_nullary_call_argument_resolves
  • PASS declared_names_inside_nested_call_and_record_arguments_resolve
  • PASS an_undeclared_plain_name_argument_refuses_at_resolve_at_its_atom
  • PASS an_undeclared_name_in_a_call_match_scrutinee_refuses_at_resolve_at_its_atom
  • PASS a_call_match_scrutinee_resolves
  • PASS a_multi_line_call_match_scrutinee_resolves
  • PASS a_match_with_a_call_scrutinee_nested_in_an_arm_resolves
  • PASS an_undeclared_name_in_a_parenthesised_call_operand_refuses_at_resolve_at_its_atom
  • PASS a_parenthesised_call_operand_resolves
  • PASS a_caret_symbol_operand_resolves_without_lookup
  • PASS an_as_cast_operand_resolves
  • PASS an_else_less_if_guard_resolves
v2.test.claim.namespace_xl0.if_arm_and_statement_lowering_refusal: 14 PASS, 0 FAIL
  • PASS a_call_argument_in_a_then_arm_refuses_at_resolve_at_its_atom
  • PASS a_call_argument_in_an_else_arm_refuses_at_resolve_at_its_atom
  • PASS a_call_argument_in_a_nested_if_arm_refuses_at_resolve_at_its_atom
  • PASS a_bare_name_in_an_if_arm_refuses_at_resolve_at_its_atom
  • PASS a_statement_followed_by_another_in_a_fn_body_refuses_at_normalize
  • PASS a_statement_followed_by_another_in_an_if_arm_refuses_at_normalize
  • PASS a_statement_after_a_let_followed_by_another_refuses_at_normalize
  • PASS a_literal_statement_followed_by_a_declared_name_refuses_at_normalize
  • PASS declared_call_arguments_in_if_arms_resolve
  • PASS declared_call_arguments_in_nested_if_arms_resolve
  • PASS a_let_block_in_an_if_arm_resolves
  • PASS a_let_followed_by_its_body_resolves
  • PASS a_match_in_an_if_arm_resolves
  • PASS a_match_binder_used_in_a_nested_if_in_an_if_arm_resolves

There are no failures at this head, so no merge-base comparison is needed. At the merge base (main after #13364) these four modules do not typecheck at all: they read the removed fatal_reason field, so none of their claims reaches a verdict.

🤖 Generated with Claude Code

…est_file_refusal_fatal_reason (the stored field was removed by #13364; the modules sit outside the floor's gate closure)

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
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 5, 2026
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 6, 2026
@gunbai-bot
gunbai-bot Bot removed this pull request from the merge queue due to a manual request Oct 6, 2026
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 6, 2026
Merged via the queue into main with commit 7edcb2c Oct 7, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/bold-lynx-438-fatal-readers branch October 7, 2026 03:21
gunbai-bot Bot pushed a commit that referenced this pull request Oct 7, 2026
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