Skip to content

mcp:connect-agent has no ComponentPropsMap row — door 3 of the canonical-envelope gate is blind to its props, and the gate now carries a standing exemption for it #12344

Description

@yinlianghui

Filed unassigned by the os-dev seat implementing #12269 (the packages/mcp canonical-envelope gate). Recording the residual the new gate had to exempt; not claiming it.

What

CONNECT_AGENT_PAGE (packages/mcp/src/connect-ui.ts) authors two components: a page:header and an mcp:connect-agent widget. page:header carries a ComponentPropsMap row, so door 3 of auditPageExpressionEnvelopes reads its properties bag. mcp:connect-agent does not — it is a console-registered widget provided by objectui's app-shell, and ComponentPropsMap has no entry for it.

Measured on the #12269 branch: the gate's door-3 precondition reported unmappedTypes: ['mcp:connect-agent'] the first time it ran, against an expectation of none.

Why it matters

Door 3 is the channel that reads expression keys authored inside a component's properties. With no props schema for this type there is no schema to read that bag with, so a bare predicate authored at properties.<something> on this widget is unread by the gate and reports the same green as a clean page. Doors 1 and 2 still cover the component-level positions (visibleWhen and friends), so the blind spot is props-level only.

What #12269 did instead

Exactly what cloud-connection's gate did between #11480 and #11575, and for the same reason (out of that card's declared surface):

  • the exemption is recorded and asserted EXACTLY, so any NEW unmapped type reds;
  • the exempted widget's props bag is pinned EMPTY — nothing authored is nothing to serve bare — so the moment it grows a real authored prop the pin reds and forces this decision;
  • a non-vacuity pin reds if the exempted type ever stops appearing on the page, so a stale exemption cannot sit there covering nothing.

That is containment, not coverage.

Possible closures

No recommendation recorded. Note that #11575 did A for two widgets in one PR, so the shape and its cost are known.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions