Repository navigation
Preserve whole-value reads across ownership branch joins - #11354
Merged
Merged
Conversation
Atomic sources and 18 generated mirrors from regenB0.SJqrpc; main seed ed853cf, install/rebuild passed, required-regen-fixed-point fixed_point_equal=true. Three scoped ownership claims pass. Per-path last-use evidence remains the trigger for removing conservative clones.
Required regen-fixed-point covers corpus-grain mirror behavior. Fixture-grain controls remain executable with src/v1 roots but have no required harness; declare that gap and its capability trigger without widening floor roots or adding quarantine.
Install regenB0c.3wJWlT transaction output atomically with the source-route change: remove the authored fixture mirror and its registrations; rebuilt seed reports 155/155 first_generation_equal=true and fixed_point_equal=true. Four local integration tests pass; required clippy compiles but CI does not run these tests. Harness trigger node://adhoc-babdd2de-8db restores candidate-bound .dag fixture execution.
This was referenced Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A branch with more projections could replace another branch's entire binding-usage list, discarding its whole-value
Read. With a preceding return,build_movable_setthen classified the binding as movable and emitted Rust moved anRcbefore a later projection. Rustc refused with E0382.ownership.max_usage_by_fan_outretains reads from either binding usage and deduplicates shared-prefix evidence.Projectedstays distinct. The emitter uses its existing clone decision; no emitter rule changes. This ownership root precedes the Optional representation migration, whose newly triggering source needs a seed carrying the repaired fold.Validation and coverage:
required-ci: phase regen-fixed-point (second generation vs first). Executing build phase. It re-derives the committed compiler mirrors and refuses divergence.regenB0c.3wJWlTintentionally removes the authored .dag fixture and its emitted mirror/registrations. After rebuilding, it reports 155 planned/executed/adjudicated,first_generation_equal=true, andfixed_point_equal=true. Sources and generated deletions land together. Full instrument including the initial removal refusal.cargo test --release -p v1-compiler --test ownership_branch_read -j2passed 4/4 locally under a 22 GiB address-space bound. The three original BindingUsage fixtures cover smaller-branch Read retention, Projected-before-Consumed movability, and conservative whole-Read behavior. The fourth test invokescompile_sourceson baseline and both constructor orders and asserts their emitted clone bytes. Local execution receipt. The post-cleanup rerun ond5830737419also passes 4/4 (0.04s test execution). Final-tree execution receipt.Some(item.clone()). Native recipe and GREEN, emitted move-first.The Rust integration tests are compiled by required clippy
--all-targetsbut not executed by any CI step.gunbc.rung_drop.rust_unit_tests_off_the_merge_pathdeclares that execution drop. Their named executing route is the local cargo test command above; this is landing evidence, not scheduled coverage. The attempted .dag placement could not supply required execution and has been removed together with its generated fixture mirror. No floor roots, exclusions, or quarantine rows change.The fixtures return to .dag when a required seed-rooted phase writes same-identity, candidate-bound terminals into the disposition receipt. Work item
node://adhoc-babdd2de-8db, owned by eager-raven-113, carries that model-first harness in an existing lane without global root widening. The recurring failure-mode row names this capability; the missing harness is a next-rung trigger, not a permanent ceiling.The safety defect was loudly mitigated by rustc. Branch-Read retention is now constructed at the ownership join and mechanically preventable at corpus grain through required regeneration. Both constructor orders conservatively clone because
Readis non-tail residue, not a last-use proof. This is bounded cost, not a correctness gap; per-path last-use evidence at the ownership fold is its separate next-rung trigger.Hand-written Rust is confined to
tests/ownership_branch_read.rs: fixture helpersusageandmovable, plus the four testsbranch_read_survives_larger_projection_path,projected_before_consumed_stays_movable,whole_read_then_consume_stays_non_movable, andauthored_constructor_orders_emit_clones. These test the emitted seed, not a second production ownership implementation. Production Rust changes are transaction-generated mirrors.The original transaction changes 18 mirrors (+172/-120), with 147 changed lines mentioning
clone(). This is a changed-line census, not a count of new clone operations.max_usage_by_fan_outis the generated repair itself; the other declarations carry its conservative-clone consequences. The temporary fixture mirror and registrations are absent from the final change.extdeps_container_oci_digestoci_digest_algorithm_syntax_validextdeps_version_semversemver_version_labelstd_dissolutiondissolution_trigger_firedstd_inductioncompose_sub_value_relations,cost_bound_params_intostd_natnat_range_accumulatestd_occurrence_identityoccurrence_transport_role_index_buildstd_terminationdescent_evidence_lattice_join,optional_evidence_meetv1_compiler_compilecensus_retain_modulev1_compiler_emitapply_char_sanitization,emit_typed_cast_shared,emit_unified_typed_func_body,escape_emoji_codepoints_inner,int_to_upper_hex_inner,render_named_type_base,shared_tco_blockv1_compiler_emit_core_supportapply_named_template_nested,to_string_helperv1_compiler_emit_rustcli_option_rust_type,emit_enum_from_children,emit_func_body,emit_rust_tco_block,emit_struct_from_children,emit_type_def_from_connective,emit_variant_pattern,emit_variant_pattern_rc_aware,maybe_mark_shared_typev1_compiler_inferalias_chain_carrier,borrowed_callable_call_type,maybe_insert_composed_field_relation,substitute_genericsv1_compiler_infer_patternsrender_constructor_witnessv1_compiler_infer_resolveresolve_paramless_generic_use_declv1_compiler_infer_typesextract_optional_inner_node,node_type_shape_argument_listv1_compiler_ownershipmax_usage_by_fan_outv1_compiler_parseint_to_string_acc,last_consumed_token_end,parse_letv1_compiler_trait_derive_emitv1_clone_bound_fixpoint_loop