Skip to content

lowering_nested_lowerable

A :lowering form is a positional child of another :lowering form; container and child can’t both lower.

Container lowering puts :lowering on a container and leaves its children plain data: the one hook invocation consumes every child at once. If a child also declares :lowering, both hooks fire in the same layer (the container consumes the child while the child lowers itself) and their output overlaps or orphans (often surfacing later as a confusing duplicate_cross_ref_target).

Fix it by declaring :lowering on the container OR the child, never both. In container lowering the children stay data; only the container lowers. The check is emit-only, so lowering still runs; the diagnostic just names the contradiction at the child.


Run sjon explain lowering_nested_lowerable to read this at a terminal, browse every code, or work through diagnostics-driven repair if you want the habit rather than the answer.