Fixed resume attachment validation: malformed or missing attachment payloads in saved transcripts are now dropped with an error log rather than causing resume to fail (search for "the session transcript appears partially corrupt")
Fixed the workflow VM sandbox to properly handle MCP-thrown errors in resolveDeep's auto-await loop — a script ending on an unawaited MCP call no longer silently swallows the error (search for "mcpToolError: true")
Fixed request cancellation in the load-balancing request router: when a request can't be sent and falls back to local handling, the outstanding remote request slot is now explicitly cancelled via cancelRequest() (search for "i.cancelRequest(a)")
Fixed the bridge prependUserMessage method: adding a prepended message now wakes the async input reader immediately rather than waiting for the next chunk, which fixes a race in remote workflow dispatch (search for "prependWaker")
Fixed fleet view: deleting a pinned background agent now also unpins it before deletion, preventing stale pin state (search for "Gos(o.id, !1).catch")
Fixed skills/list validation to also reject oversized fields (previously only checked for malformed/missing required fields) (search for "malformed, missing, or oversized fields")
Fixed discoveryCache leaking into serialized MCP server config: the field is now deleted before the config is stored (search for "delete a.discoveryCache")
Fixed injectControlResponse to return a boolean indicating whether the response was consumed — previously it always returned void, making it impossible for callers to detect no-op responses (search for "injectControlResponse")
Fixed word-wrap rendering in the terminal output renderer to use the correct source array (E vs v) when iterating tokens without wrapping (search for "R = E.map")
Fixed the workflow VM context builder to use the correct budget_usd registration path, ensuring budget tracking is available in the right VM scope (search for "ab(\"budget_usd\"")