Author-facing gap
At main 14c9822bc6c01d8ff2788454d0e1dc7861bc3816, the App workspace says Calling… until controller.invoke() resolves, then creates the App preview from the completed result. An author cannot use that primary workspace to see the App's initial input/loading behavior or cancel its long-running opening call.
This is a source-observed workflow limitation, not a claim that the recently fixed pending bridge/harness is still broken. #741/#743 delivered underlying pending/terminal behavior; the primary workspace has not adopted the same lifecycle.
Evidence
- application/app-route-workspace.tsx:
callTool awaits the terminal result before setCall, and <McpAppPreview> only mounts when call exists. No cancel action is exposed. Promise success/error/finally setters do not check that the controller/session/epoch is still current.
- mcp/mcp-app-preview.tsx: the artifact preview options still require a completed
result.
- test/browser.ts: the public browser harness now supports omitted
toolResult while opening is in flight and subsequent result/cancel publication. Reuse the real binding/bridge semantics it exercises, not a new mock-only protocol.
Direction
For a tool whose listing binds this App, create one authorized preview binding for the opening invocation and carry it from pending input to its one terminal outcome. Add a visible cancellation action. Where the artifact preview endpoint lacks the needed seam, extend that existing owner narrowly; do not create a second App renderer, MCP client or application-local pending map.
Preview must not automatically rerun an opening mutation to obtain its result. Retain native permission/consent, result-schema handling, route identity and build-epoch retirement.
Acceptance
Keep input, Run/Cancel, rendered App and useful status central. Session IDs, epoch IDs, correlation data and host profile controls are secondary diagnostics—not setup a first-time author must interpret before seeing their page. #747 separately owns valid launch selection; this issue owns lifecycle reuse and the actual preview experience.
Source-only review: no browser/native-host execution was performed here.
Author-facing gap
At main
14c9822bc6c01d8ff2788454d0e1dc7861bc3816, the App workspace saysCalling…untilcontroller.invoke()resolves, then creates the App preview from the completed result. An author cannot use that primary workspace to see the App's initial input/loading behavior or cancel its long-running opening call.This is a source-observed workflow limitation, not a claim that the recently fixed pending bridge/harness is still broken. #741/#743 delivered underlying pending/terminal behavior; the primary workspace has not adopted the same lifecycle.
Evidence
callToolawaits the terminal result beforesetCall, and<McpAppPreview>only mounts whencallexists. No cancel action is exposed. Promise success/error/finally setters do not check that the controller/session/epoch is still current.result.toolResultwhile opening is in flight and subsequent result/cancel publication. Reuse the real binding/bridge semantics it exercises, not a new mock-only protocol.Direction
For a tool whose listing binds this App, create one authorized preview binding for the opening invocation and carry it from pending input to its one terminal outcome. Add a visible cancellation action. Where the artifact preview endpoint lacks the needed seam, extend that existing owner narrowly; do not create a second App renderer, MCP client or application-local pending map.
Preview must not automatically rerun an opening mutation to obtain its result. Retain native permission/consent, result-schema handling, route identity and build-epoch retirement.
Acceptance
Keep input, Run/Cancel, rendered App and useful status central. Session IDs, epoch IDs, correlation data and host profile controls are secondary diagnostics—not setup a first-time author must interpret before seeing their page. #747 separately owns valid launch selection; this issue owns lifecycle reuse and the actual preview experience.
Source-only review: no browser/native-host execution was performed here.