Every door reads one surface

Every door reads one surfaceThe sealed data surface at the top; the form, HTTP and OpenAPI, and the tool read it directly; the React page walks through HTTP, and MCP and ECA through the tool. Every door keeps one accepted document, one refusal list, and no schema stricter than the runtime. The sealed data surface built once, then only read Form Draws each key with a widget chosen from its definition. A refusal lands under the key that caused it. HTTP and OpenAPI Serves both documents at the resource's path; the method is the operation. An OpenAPI 3.1 document describes every path. Tool One tool per operation, its inputs the contract's. A dry run answers the accepted values. Read the surface directly Walk through one of those React page Draws the resource from the schema alone, knowing nothing else of it. MCP and ECA MCP lists the tool, input schema included. An ECA action runs the tool, so a model cannot save what the form refuses. Settings pages and plugin settings forms are drawn through it. Every door keeps, for the same values sent: One accepted document One refusal list, by pointer and code No advertised schema stricter than the runtime Every door reads one surfaceThe sealed data surface; the form, HTTP and OpenAPI, and the tool read it directly; the React page walks through HTTP, and MCP and ECA through the tool. Every door keeps one accepted document, one refusal list, and no schema stricter than the runtime. The sealed data surface built once, then only read Read the surface directly Form Draws each key with a widget chosen from its definition. A refusal lands under the key that caused it. Settings pages and plugin settings forms are drawn through it. HTTP and OpenAPI Serves both documents at the resource's path; the method is the operation. An OpenAPI 3.1 document describes every path. React page Draws the resource from the schema alone, knowing nothing else of it. Tool One tool per operation, its inputs the contract's. A dry run answers the accepted values. MCP and ECA MCP lists the tool, input schema included. An ECA action runs the tool, so a model cannot save what the form refuses. Every door keeps, for the same values sent: One accepted document One refusal list, by pointer and code No advertised schema stricter than the runtime

Every door reads the one sealed data surface and nothing else: the form, the tool and through it MCP and ECA, HTTP with its OpenAPI document and through it the React page. The same values sent through any door give one accepted document and one refusal list, by pointer and code, because nothing an operation runs reads the request; and no schema a door advertises is stricter than what the pipeline accepts.

Read more Surface API, No door-specific context, Never stricter than the runtime, Testing a resource. Decisions Nothing an operation runs reads the request, One result at every door, Two documents, never stricter than the runtime.

Part of Surface API; see the full explainer.