Upgrade impact: none (additive). No lint codes added/removed and no behavior change to existing skills — a lint advisory's guidance changed, and RemoteMcpConnector now honors the cancellation signal it previously ignored.
Sharpens how you bound external work, after a real autonomous gather (perry-brief-gather) hung ~2 min on a slow remote leg. The levers were already there — this makes the framework point at the right one.
- The
unbounded-no-deadlineadvisory was steering authors to the wrong lever. It nudged toward# Deadline:— a whole-run, uncatchable cap that aborts every leg including healthy ones — even for a partial-tolerant gather, and even when a leg was already bounded. Reframed: a$leg carrying its owntimeout=N(catchable, per-leg) or a skill with# Timeout:no longer trips it, and the message/remediation now lead with per-optimeout=N+(fallback:)as the everyday bound, framing# Deadline:as the separate hard-total-ceiling tool.help({topic: "frontmatter"})/ lint-codes reworked to the two-levers distinction. timeout=Nworks on any$connector op — it always has (the runtime enforces it regardless of whether the remote tool's own schema lists a timeout; the kwarg is consumed by the runtime, not forwarded), now documented so it's discoverable. A timed-out leg throws a catchable error, so(fallback:)degrades gracefully and the rest of the run continues — the right tool for a partial-tolerant gather.RemoteMcpConnectorhonors cancellation. An aborted dispatch (per-optimeout=or run# Deadline:) now cancels the in-flight RPC promptly instead of leaving it pending on the subprocess until the connector's internalcallTimeoutMs— matters for a serial-subprocess connector where a hung request could delay the next dispatch.