# Next ownership work: source facts and unresolved design constraints

The working-map binding fix is a prerequisite. It does not migrate mapping search or add Recipe ownership choices. Do not treat the alternatives considered below as an implemented design.

- `compile.rs` has the separate mapping attempt (roughly lines 205-239), alongside `State.mapping` and `mapping_checked`. `evaluate_candidate` passes mapping into `compile/screen.rs`, which calls `compile/placement::map_tiles` after expansion. This endpoint must disappear for source-graph compilation; mid values must already carry the selected assignments.
- `compile/placement::model_mapping` derives block-transpose candidates from low shard layouts. `exchange/traffic.rs::MappingTraffic` scores one global bijection and its inverse. It cannot score independent source/destination embeddings by reusing that single global argument. Existing whole-graph proposals can become ordinary joint Recipe changes, without adding local-map search immediately.
- `append_fragment` now receives `working: &OwnerMap` for unbound groups. Input and output groups keep their separately supplied bindings. It still binds a computed template result directly to the caller result: if future requests distinguish final compute ownership from the resident output home, binding may need an explicit output copy. Merely changing one shared value's owners cannot represent both requests.
- The family cache stores executable fragments by selected plan and tensor input/output types. Avoid adding another selected-fragment representation, hidden deferred implementation, or a second graph. Actual bindings and explicit policies should remain the relevant inputs.
- `FragmentBuilder::materialize` currently returns the input for identity/equivalent storage before emitting a named copy. `cast` similarly skips equal precision. A scoped decision must either be applied before affected elision or be represented by another real binding choice that inserts the required movement. Do not claim that scanning only emitted copy sites exposes every possible preparation choice.
- Retaining every identity copy without further work changes costing: `estimate/mid.rs` currently charges Copy local work and does not unify identity Copy allocations in its alias accounting. It also changes rewrite single-use analysis. The old constructor elides equivalent storage even when `reuse_local` is false; do not silently turn that into a forced allocation or disguise the changed semantics.
- `mid::bind_compute_owners` already inserts copies for kernel/product operands and allocation aliases when result ownership requires them; Sum retains distributed contributor traffic. Its production invocation currently lives inside `planner/parameter_homes::assign_parameter_tiles` and runs only if parameter rotations changed. General ownership binding needs its own explicit place in construction.
- `assign_parameter_tiles` scores loads by `(logical + offset) % tile_count` and later applies `owners.with_rotation(offset)`. This assumes the identity/full-device embedding for its load estimate. Explicit parameter homes must remain consistent across Repeat sequence groups and either be fixed or scored on their actual embedding; do not discard a requested rotation or model a subset as the whole device.
- `Builder::region` also resets parameter-origin temporaries to independent storage groups and default owners after `emit_selected` (near build.rs:560). `ensure_format` creates canonical boundary values with default owners. Both need attention when wiring scoped choices, or those choices can be silently erased.
- `PackageConfig.tile_mapping` is also accepted by the separate entry point compiling user-supplied mid. That path has no high graph/Recipe provenance. Compatibility can apply a requested remap to mid values before expansion; it should not preserve the old low-graph mutation endpoint.

Required coverage includes arbitrary working/output subsets, distinct product partial/reduction maps, explicit boundary movement, persistent homes, Repeat bindings, stale-site rejection, checkpoint migration/replay, and hardware/default-package compatibility. The goal remains the full proposal, including the other unresolved storage/copy/cache contracts.
