Value validation for the references tool's params.
The dispatch layer checks that a required param is PRESENT but is blind to
what it holds, so these functions are the boundary's value checks: every
extracted scalar is type-checked before use, and each failure is a distinct
atom so YmerNode.Mcp.Tools.References.Errors can render specific recovery
guidance rather than one shrug for everything.
Summary
Functions
A watch's cadence and lifetime as integers. Only their type is judged here:
which values a watch takes is YmerNode.Schedules.watch/3's to refuse, by
name.
The character of a cut line a read window goes on from, from 1 — 1 when absent.
Normalizes a limit.
How many lines a read window holds at most — as many as fit when absent.
The line a read window starts at, from 1 — 1 when absent. A positive
numeric string is taken, as limit/1 takes one — off the wire only, as
there.
find needs at least one criterion — an empty find is not a table dump; that is list.
Checks a source token against the vocabulary the caller's declarations imply.
Functions
A watch's cadence and lifetime as integers. Only their type is judged here:
which values a watch takes is YmerNode.Schedules.watch/3's to refuse, by
name.
The character of a cut line a read window goes on from, from 1 — 1 when absent.
Normalizes a limit.
A positive numeric string is accepted, and an over-max value CLAMPS to the maximum rather than bouncing. A caller that asks for 500 wants as many as it can have, and refusing the call teaches it nothing it can act on.
Over the wire neither path is reached any more: since wymcp 0.9.0 the value
gate enforces the schema's integer type and its minimum/maximum before
the action runs, so a numeric string or an over-max limit is refused there.
Whether to keep the clamp — by dropping maximum from the schema — or
delete it is still open.
How many lines a read window holds at most — as many as fit when absent.
The line a read window starts at, from 1 — 1 when absent. A positive
numeric string is taken, as limit/1 takes one — off the wire only, as
there.
find needs at least one criterion — an empty find is not a table dump; that is list.
Checks a source token against the vocabulary the caller's declarations imply.
The declarations travel in rather than being fetched here: the action has read the seam already, and reading it again to validate one string would be a second query per call — for a token that is checked against the same answer the rest of the call is using.
The token stays a string all the way through. It cannot become an atom: a
declared source is an accepted script's name, which is user data, so
String.to_existing_atom/1 would fail on every newly accepted script and
String.to_atom/1 would let a caller grow the atom table at will.