Upgrade impact: none (additive). Four new pipe filters, a lint false-positive removed, and a discovery surface widened — no behavior change to existing skills.
Pipe filters — line-slice family + pluck (Perry build spec; each cleared the project's "a real authored skill demonstrated the gap" bar):
head:"N"/tail:"N"/lines:"M-N"— line-slice a string (one shared impl). Split on\n, CRLF-tolerant, and a terminal newline's trailing empty line is dropped (sotail:"1"of"a\nb\n"is"b", not"");lines:"M-N"is a 1-indexed inclusive range. Never throws — a bad / negative / out-of-range count clamps to what exists or yields"". Security payoff:file_read(spool) -> Lthen${L|tail:"N"}tails a log fs-read-only, with notail/grepshell-binary allowlist grant and nounsafe=true; afile_readhelp cross-reference now points authors to it.pluck:"field"— project one field from each element of an array of objects → the array of field values (emitted as a JSON-array string, so it composes within/not in/|length/|contains, all JSON-string-of-array tolerant). Omits an element whose field is absent/null or that isn't an object; single-level field only. Turns a hand-rolled dedup-by-id loop into a clean projection. Current idiom binds the projection then membership-tests ($set IDS = "${SEEN|pluck:"id"}"thenif ${M.id} not in ${IDS}:); an inline filter chain on theinRHS is a pending grammar extension.- Both operate on the stringified input (the filter layer is type-blind);
pluckadditionally content-parses and throws on non-array input.
approved= no longer flags as unknown-connector-arg. The mutation-gate auth kwarg is popped by the runtime before the connector sees args, so validating it against the tool's input schema was a false positive that directly contradicted unconfirmed-mutation's "add approved=" remediation. timeout= and approved= are now a named reserved-dispatch-kwarg set, exempt from arg validation.
observed_output_shape now rides runtime_capabilities({tool}). The last-observed return shape was surfaced only in skill_preflight (which needs a skill already referencing the tool); it now also attaches to the tool fetch authors reach for to answer "what does this return?", and the tool description advertises it.