Why this fires¶
The selected builtin producer cannot prove a safe, exact implementation for the declaration, field or concrete generic instance. A derive request or method-shaped name does not prove a capability.
struct User { id: int, name: str } deriving Eq, Hash // admitted canonical case
struct Reading { value: float } deriving Eq, Hash
// ^^^^^^^^^^^^ builtin physical Hash has no admitted float laneBuiltin struct Hash admits exact int/string/bool recipes, losslessly cast small fixed integers, and actual borrowed pure nominal/generic Eq and Hash protocols. Its bounded fold is coherent with the admitted physical Eq comparisons. Builtin enum Eq compares actual variants and positional/named payloads. Actual nominal identity is preserved.
Gradual/unknown fields, accessors, unsupported containers, linear storage/owners, recursion, unproved bounds, wide fixed integer or float Hash recipes, and consuming/effectful protocols need an explicit implementation or a real selected custom producer. Builtin enum Hash and opaque bodyless physical derives are also explicitly unsupported. An erased nominal name cannot grant an invalid concrete generic instance a capability.
Kind/owner errors anchor the authored request identifier; field errors anchor the real physical field/type; invalid instantiations anchor the consumer call. Import transport preserves actual witnesses, arguments and source proof rather than guessing a canonical basename.
Write a checked trait implementation or select a real @derive_for(...) producer that supports the actual types. Existing custom producer result/scope/type checks still apply. There is no safe automatic edit: deleting the request removes the intended capability, and fabricated conversions or implementations invent behavior.