Why
Followup to #291. Phases A+B+C+E shipped (REST / gRPC / MCP / MQTT / WebSocket / SSE + streaming response pane). Phase D (GraphQL) was deferred to keep the initial #291 ship focused — the GraphQL layout has the most schema-discovery shape (Query/Mutation/Subscription + variables + selection-set picker) and warrants its own descriptor.
What's left
Composes with
Acceptance
Why
Followup to #291. Phases A+B+C+E shipped (REST / gRPC / MCP / MQTT / WebSocket / SSE + streaming response pane). Phase D (GraphQL) was deferred to keep the initial #291 ship focused — the GraphQL layout has the most schema-discovery shape (Query/Mutation/Subscription + variables + selection-set picker) and warrants its own descriptor.
What's left
requestBuilderLayout({ id: 'graphql', … })) registered via the rbLayouts registry that Hopp-bar: protocol picker (REST / gRPC / MQTT / WebSocket / SSE / GraphQL / MCP) with per-protocol sub-tab layout #291 introduced.buildGraphQLDefaultQuery,wrapAsGraphQLRequest,buildGraphQLSelectionSet,graphqlSelections) — they already power the workbench's GraphQL flow._formatHistoryVerbin request-builder.js) already returnsps.operation || 'query'for thegraphqlslot; wireps.operationthrough the layout.renderResponseoverride pattern that MQTT/WS/SSE use today.Composes with
Kuestenlogik.Bowire.Protocol.GraphQL) via/api/invokewithprotocol: 'graphql'Acceptance