fix(plugins): steer Cloud tool availability from the engine's own MCP state - #2832
Conversation
… state The extensions-preview steering previously phoned home to the OpenWork server and asserted the server's health verdict to the model. Field incident: that verdict can disagree with the engine (corporate TLS broke the server's probe while the engine's MCP was connected), and the model obeyed the wrong claim — refusing tools it actually had. Invariant now enforced: tool-availability steering is computed from the same process that owns the tools. The plugin asks the engine's mcp status in-process (connected → ready, disabled → disabled, needs_auth → sign-in, failed → degraded), falls back to server connect-state only when the engine has no entry at all, and fails open to the neutral instruction on any engine error.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
fraimz — ✅ PASSED1 passed · 0 failed · 0 skipped — run Full frame proof with validated screenshots: ✅ windows-enterprise-ca-rootcause — Windows packaged app uses OS trust and engine-attested Cloud MCP readinessInternal demo
|
…sabled/neutral only
fraimz — ✅ PASSED1 passed · 0 failed · 0 skipped — run Full frame proof with validated screenshots: ✅ windows-enterprise-ca-error-state — Windows enterprise CA error state: old build fabricates outage, fixed build trusts engine truthInternal demo
|
Summary
Root-cause fix #1 from the corporate-TLS field incident (follow-up to #2823) plus removal of degraded steering entirely (maintainer decision after a second live incident where a false server verdict suppressed Cloud tool use while the engine was connected).
Steering now has exactly four outcomes — ready / sign-in / disabled / neutral — and is derived from the engine's own MCP state, in-process (
client.mcp.status, directory-scoped):connected→ ready instruction (the only instruction that tells the model to callopenwork-cloud_search_capabilities/execute_capability)needs_auth/needs_client_registration→ sign-indisabled→ disabledfailed/ unknown / engine error → neutral (fail open — never tell the model tools are unavailable based on a derived opinion)openwork-cloudentry → server/experimental/connect/statefallback, mapped with the same four outcomes; every non-ready/sign-in/disabled health state → neutralOPENWORK_CONNECT_DEGRADED_INSTRUCTION("not ready… Repair and test") is deleted; no steering output can ever instruct against tool use. The fix(server): cloud MCP probe transport failures fail open, never manufacture an outage #2823 probe_unreachable/cloud_tools_missing special-case is subsumed and removed.Validation
pnpm --filter openwork-server exec bun test src/opencode-plugins/— 26 pass / 0 fail (all four mappings; connected → ready with zero server fetches; failed/unknown/thrown → neutral; regression test iterates every composed output asserting no 'not ready' / anti-tool-use text)pnpm --filter openwork-server test— 452 pass / 7 skip / 0 fail; typecheck cleanParallel siblings: #2834 (engine-attested health), #2835 (OS-trust egress).