Repository navigation
E0277 root A residual (1): fn-generic bound inference is Clone-only — audience_subset/audience_join call rc_set_union<T: Ord + Clone> without their own signature earning P: Ord - #8771
Conversation
…audience_join v1's fn-generic bound-inference mechanism only ever derived Clone bounds for generic function parameters, so a generic reaching the set_union builtin (which lowers to rc_set_union<T: Ord + Clone>) emitted without its own P: Ord, producing E0277 at the call site. audience_subset and audience_join in dag/std/authorization_profile.dag are the two real specimens (E0277 root A residual, dashboard node://adhoc-a9f61ade-340). Adds a narrowly-scoped third trigger alongside the existing Clone-bound machinery: a pure decision core (v1_set_union_ord_bound_param_names in trait_bound_witness.dag), a Node-consuming body walker that locates set_union call sites and resolves their element-type argument names (05_emit_rust.dag, mirroring ownership.dag's collect_callable_refs, plus an ExprBinOp arm that precedent lacks -- needed because audience_subset's set_union call sits inside a == comparison), and a sibling renderer (v1_emit_type_params_with_clone_and_ord_bounds in trait_derive_emit.dag) wired into emit_fn_def alongside the existing Clone-only renderer. Scoped to the set_union builtin's known lowering only -- not a general trait-bound inference system, and does not touch the separate Root A Ord-5 population on EnumeratedAudience's own struct derive. Verified by regenerating v1's own compiler from these .dag sources and re-emitting dag/std/authorization_profile.dag through the candidate gunbc: audience_subset and audience_join now emit <P: Ord + Clone>; all other Clone-only generic signatures in the import closure (ordering_fold, effect_access_request, list_length, etc.) are unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Commits the src/v1/stage0/src/*.rs mirror produced by --required-regen for the three .dag edits in dde8ac2. Closes PR #8761's CI regen-drift failure: the prior commit only carried the .dag sources, not their regenerated Rust mirror, so required-regen (and its downstream receipt phase) correctly flagged drift on v1_compiler_emit_rust.rs, v1_compiler_trait_bound_witness.rs, and v1_compiler_trait_derive_emit.rs. Verified: sha256 of each mirror file matches the candidate produced by target/stage0-regen-candidate/src (built from a gunbc compiled against these committed .dag sources), and the diffs are exactly the new Ord-bound rendering/decision-core additions plus the ExprBinOp walker case, no unrelated drift. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Closing: this is an auto-opened ghost of superseded work, not a proposal. The dashboard opened this against Why the underlying work was superseded (agreed with its author before either session archived): it infers a trait bound by recognizing The author reached that conclusion themselves and named their own mechanism as the failure DESIGN §4 describes. The subsuming work is #8770, whose successor lane is The branch is deliberately retained, not deleted, for the evidence recorded on #8770. Note that the auto-opener will keep re-raising a PR while the branch has commits — if that becomes noise, the branch can go once that evidence is captured elsewhere. — sent from bright-moth-92 |
Auto-opened by session-dashboard for session
tidy-otter-493.Pushing to
session/tidy-otter-493advances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan