Action implementations for the scripts tool — the boundary over
YmerNode.Scripts.
This is a trust boundary, and it takes the shape
YmerNode.Mcp.Tools.Notebook.Actions takes rather than the one
YmerNode.Mcp.Tools.References.Actions takes: every extracted scalar is
guarded on the head, and each guarded head is followed by a wrong-typed
twin that answers a message. There is no Validate layer because there is
nothing here to validate beyond type — no ranges, no vocabularies, no id that
may arrive as either an integer or its string form. The values are four
strings and a map, and the action's own JSON Schema, which
YmerNode.Scripts.Runner applies, is what judges their content; info's
one vocabulary, the promised package names, is judged by
YmerNode.Scripts.PackageDocs, which refuses an unknown name naming every
accepted one.
The twins are what make that a boundary rather than a crash. YmerNode.Scripts
and YmerNode.Scripts.Runner both guard is_binary(action), so a wire call
carrying action: 123 would raise FunctionClauseError and answer a caller
nothing it could act on. Grouped after the guarded heads, never before: a twin
that ran first would swallow every good call.
describe's hint context carries a runnable action only when the script is
both accepted and compiled, and code: true whenever the code was asked for
— see YmerNode.Mcp.Tools.Scripts.Hints for why the decision is made here
and not there.