Repository navigation
closure-Debug: transitive has_fn_fields closure → algebra tower derives Clone-only (E0277 −322) - #5583
Conversation
CI red is 100% inherited main breakage — not introduced by this PRThis PR changes exactly 4 files (
All three deterministic failures reproduce on This PR's own change is green by execution: |
…to emitter/closure-debug-derive
closure-Debug: transitive
has_fn_fieldsclosure (Lane A, carrier-independent emit-tail)has_fn(04_emit_info.dagbuild_type_summary) only flagged a direct arrow field,so it caught
Magma { op: fn }but missed the tower that embeds it —Semigroup{magma} → Monoid{semigroup} → CommutativeMonoid → Group— each of which stilltransitively carries
dyn Fnand therefore cannot#[derive(Debug/PartialEq/serde)].Fix: transitive closure
close_fn_fields(DFS overfield_type_mapedges, cycle-guarded),applied in
build_emit_graph_info(04_infer.dag). After it, the whole algebra tower emits#[derive(Clone)]only — verified by execution (805 files emitted, 0 diagnostics; all fivetower structs
Magma/Semigroup/Monoid/CommutativeMonoid/Groupnow#[derive(Clone)])..dag authority + hand-mirrored Rust seed (no regen gate yet, #5514 deferred).
Scoreboard (HostNative seed census, by execution)
could never hold are no longer emitted.
E0277 or surface an E0369
==; it cannot create a conflicting-impl (E0119) or unused-param(E0392). (Clean attribution via a same-tree control bypassing the
close_fn_fieldscall.)Honestly re-surfaced: cross-representation
==on the closure-tower (E0369)Removing the (always-broken)
PartialEqderive turns its==call-sites fromE0277-on-derive into E0369-on-
==. These are pre-existing — the impl never held — nowvisible at the call site. They belong to the value-grounding
==class (same family as theoperator's
Value::Null/ numeric-tower cross-representation-equality thread), and need a valueowner (stern-bat-782 is archived; capturing here so they have a home).
35 sites, all on
CommutativeSemiring<Magnitude>-bearing types, 9 files:std_measure.rs:127,139,149std_approximate_field.rs:36,37,40,41std_realization_measurement.rs:56,85,90,144std_realization_schedule.rs:38,39std_realization_width.rs:73,92,112,116extdeps_cpu_types.rs:59,60,62,67product_compute_fabric.rs:250,314,321,585,591,597,602,1444,1451,1466product_placement_supply.rs:21,22,23v2_workflow_ci_floor_plan.rs:371(The
v2_*/openapi==E0369 deltas in the raw census diff embed no closure and arebaseline drift, not attributable to this change.)
CI
fmt gate fix folded in: the hand-written
close_fn_fieldsfold closure in the seed mirror wasnot rustfmt-canonical (block-match → expr-match); logic byte-identical.