positional_missing
Fewer positional children than a (head-set …) floor requires: the head’s :min, or the set’s :min-children.
The floor half of a (head …) count bound. Given
(head :name vertex :min 1) on the kind a form’s :positional
names, a form with no (vertex …) child reports here.
It is an end-of-children fact (you cannot know a head is absent
until the children run out) so it lands at the parent form’s
head with the parent’s path, exactly where missing_required_key
lands and for the same reason: there is no child to point at. One
diagnostic per unsatisfied head, each naming the head, the floor,
and what was actually found.
The repair is to add the missing child, or to lower :min if the
schema was stricter than the domain. :min 0 (the default) means
the head is allowed but not required.
:open true does not silence this either, which makes it the one
end-of-form sweep openness leaves alone. Every other one,
required keys, the discriminant gate, exclusive groups, key
dependencies, is about keywords, and that is the surface
:open widens. Positional children are a different surface, and
declaring :positional <bounded-kind> opts into their count.
The set has a floor too. :min-children on the
(head-set …) itself requires that many children of any head
in the set: “at least one of these, whichever”. No per-head
:min can express it: (head :name buffer :min 1) demands a
buffer specifically, which is a stricter and different claim.
A message naming a bracketed set
(at least 1 positional child from [buffer | sampler | texture])
is this level, and the repair is to add any one of them.
When a head’s own :min is also unmet, only the per-head report
fires, since it is the more actionable of the two, and the set’s floor
is reported on the next run if it is still short. So a set-level
message means every head that had to appear did, and the slot
is simply not full enough.
Run sjon explain positional_missing to read this at a terminal, browse every code, or work through diagnostics-driven repair if you want the habit rather than the answer.