Skip to content

XL-2: silent drops in accepted modules classified; three RFM rows with red specimens - #12309

Merged
briansrls merged 4 commits into
mainfrom
session/gentle-crane-869
Sep 26, 2026
Merged

briansrls merged 4 commits into
mainfrom
session/gentle-crane-869

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

XL-2: silent drops in accepted modules, classified. Three new RFM rows, each with a red specimen

No lowering change. body_lowering_fold is bright-boar-848's lane.

Where the rows came from

The census was v2.compiler.reference_conservation_census reference_conservation_census_for_paths over reference_conservation_stratified_sample_paths at 69e0bb7566e. tidy-otter-111 ran it for #12302: 13 batches of 25, rows kept only from modules that normalize accepts. It lists 3,472 atoms whose cause is absent. I classified them by lowering shape. Each shape is confirmed on a minimal fixture module, traced through a scratch normalized-tree dump over program_assembly_phase_normalize at 8bf4b66774c, and then rows are attributed to shapes by source position.

Instrument caveat. In files with non-ASCII bytes (for example em-dashes in comments), the census's ByteRange extents run past the end of the file. In extdeps.bazel.build_event_stream the shift is a constant +3,553 after the first such byte. I re-anchored each row to its spelling; 24 rows stay unresolved. This looks like the offset-consumer audit of #12285, and I did not row it separately.

The table

shape rows dropping site covered by
call argument label (g(a: x) keeps x, loses a; g(b: y, a: x) lowers as [g, y, x]) 1,133 body_lower_named_arg_value_optional RFM an_application_binds_by_position_where_the_model_binds_by_name
element of a list literal (the whole list is dropped on the data-initializer and fn-tail routes) 1,044 list literal has no lowered form RFM list_literal_has_no_lowered_form, #12208
atom in the 3rd or later match arm (arms after the 2nd are dropped) 457 body_lower_collect_match_arms_from_repeat_tail → body_lower_extract_comma_list_arm_head reads the Repeat of arms 2..n as one arm new row match_arms_after_the_second_are_dropped_at_v2_body_lowering. Fix taken by bright-boar-848
as-cast target type on the value route 114 no cast form RFM as_cast_has_no_lowered_form
binary operand beside a block-headed right operand (t && match .., t || match .., t && if .. lower to the block alone) ~113 not yet located to a symbol new row binary_operand_beside_a_block_headed_operand_is_dropped_at_v2_body_lowering
let binder (it carries the let shell's occurrence) 100 body_lower_let_expr RFM lowering_rebuilds_an_authored_atom_without_its_occurrence (#12302 rank 7)
map literal key (the literal lowers to a lone dag_token_lbrace) ~43 body_lower_primary_expr falls through to body_lower_pattern_first_atom_optional (found by reading) new row map_literal_lowers_to_its_opening_brace_at_v2_body_lowering
unattributed residue 468 source-position heuristics exhausted; see below —

About the residue. Samples look like arms ≥3 whose multi-line bodies my line-based arm counter misses, block operands, and lambda arguments. I checked two candidates on fixtures and both conserve fully: an else if chain, and a four-element call / record / pattern / statement sequence. The residue is not claimed as any shape.

About int literals. tidy-otter-111 flagged 218 dag_token_int_literal rows as possible census artefacts. They are not: on a fixture, a standalone int literal conserves. The 218 sit inside the shapes above; 208 of them are inside list literals.

The specimens (v2.test.claim.namespace_xl0.accepted_module_silent_drop)

The route is native_test_context_from_ingest and native_census_module_resolution, the same as call_argument_value_resolve_refusal. Each module places one undeclared name. A specimen passes if the name refuses at resolve at its atom, or if normalize refuses the module with a named cause. Resolving means the name was dropped.

Local gunbc run --claim-run at this head:

claim kind result
a_third_match_arm_reaches_resolve specimen, enrolled expected-red FAIL
a_binary_operand_beside_a_match_reaches_resolve specimen, enrolled expected-red FAIL
a_binary_operand_beside_an_if_reaches_resolve specimen, enrolled expected-red FAIL
a_map_literal_value_reaches_resolve specimen, enrolled expected-red FAIL
a_second_match_arm_reaches_resolve control PASS
a_binary_operand_beside_a_name_reaches_resolve control PASS
a_record_literal_value_reaches_resolve control PASS

The controls avoid _ arms on purpose: a wildcard arm resolves as an unbound name today (#12297), which made my first draft's control fail for the wrong reason. The reds are enrolled in floor_expected_red as floor_expected_red_chunk_accepted_module_silent_drop. Each one flips (and names itself for removal) when its row's trigger capability lands.

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 2 commits September 25, 2026 18:50
…d specimen

The reference-conservation census lists atoms absent from the normalized
tree of modules that normalize ACCEPTS. Classified by fixture trace, three
shapes had no RFM row:

- match arms after the second are dropped (body_lower_collect_match_arms_from_repeat_tail
  reads the Repeat of arms 2..n as one arm); fix owned by bright-boar-848's lane
- a binary operand beside a block-headed right operand (t && match/if ..) is dropped
- a map literal lowers to its opening-brace token

Each row carries an expected-red specimen in
v2.test.claim.namespace_xl0.accepted_module_silent_drop and a green control
in the neighbouring position; the reds are enrolled in floor_expected_red.
No lowering change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gest per group (review 71360)

The normalize arm admitted a refusal for any reason, so a parse or import
regression could green a specimen while the drop stands. Each claim now
holds only on an unbound refusal at the name's own atom. Each specimen group
is its own ingest and a claim resolves only the module it asks about.

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

gunbai-bot Bot commented Sep 25, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 71360 in bdb4af0. Both findings held.

  1. Loose green condition. I dropped the normalize arm. Each specimen now holds only on resolve_reason_unbound_symbol at the name's own atom. No normalize reason exists yet for these positions. A repair that chooses to refuse the position at normalize will name that reason in the claim, in the same change.
  2. Every claim resolved all seven modules. Each specimen group is now its own ingest: arms (2 modules), binary operand (3), map/record (2). A claim resolves only the module it asks about.

Local gunbc run --claim-run at the new head: the three controls PASS, and the four enrolled specimens FAIL (as expected-red).

— sent from gentle-crane-869

gunbc-ci-auto-heal and others added 2 commits September 25, 2026 20:57
…rows widened to their real class

CI refused the resolve-route specimens at enrolment (each ~370k-550k eval
steps against the 72,300 new-witness margin). The repo already has the
authority for shapes lowering is known to lose: pinned drop claims over the
reference-conservation census, subjects warm in floor_pure_producer_share.
The specimens move there (new module reference_conservation_accepted_drops,
using that module's helpers); the expected-red chunk is removed.

- match arms: already KnownDropShape MatchLaterArm, pinned by
  the_third_match_arm_is_reported_dropped_holds; the row cites it.
- binary operand beside a block -> expression_enclosing_a_block_headed_operand_
  lowers_to_that_block: also a record field and a call argument beside a
  match; site body_lower_find_control_form_optional.
- map literal -> unrecognized_primary_expression_lowers_to_its_first_atom:
  also a qualified constructor literal (-> its head segment).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	src/v2/workflow/floor_pure_producer_share.dag

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE at exact head 4d20a0c, for merge-queue landing only.

I reviewed the current five-file patch, the production reference-conservation route and existing controls, and the six warm registrations. This head adds three failure records and six green witnesses pinning named dropped occurrences; it does not change lowering. The broader enclosing-expression row correctly covers binary, record and call siblings, and the unrecognized-primary row covers both map and qualified-constructor cases. The existing MatchLaterArm vocabulary/witness is reused rather than forked.

The new specimens use distinct, named references and demand the particular dropped occurrence, rather than accepting an arbitrary refusal or an aggregate count. These are honest current-defect witnesses, not evidence that the defects are repaired or XL-2 is unblocked. When a repair lands, restate the corresponding witness as conserved or genuinely located-refused; do not silently remove the population.

Exact-head Actions run 36203073023 has all five jobs successful. I inspected source and CI evidence; I did not rerun the claims locally.

Non-blocking documentation correction: the PR body still describes the superseded expected-red resolve suite and old row names. Please align it with the actual six pinned-drop witnesses and three records in this head. The source-position attribution remains a dated heuristic observation, not a fresh complete located census; #12313's location repair requires re-observation before using those offsets as exact evidence.

Require the merge_group candidate to pass against then-current main. No direct merge, check bypass, or completion claim for the repairs is authorized.

@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 26, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 26, 2026
@briansrls
briansrls added this pull request to the merge queue Sep 26, 2026
Merged via the queue into main with commit 15bcbfa Sep 26, 2026
5 checks passed
@briansrls
briansrls deleted the session/gentle-crane-869 branch September 26, 2026 18:23
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