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.
Filed unassigned by the os-dev seat implementing #12269 (the
packages/mcpcanonical-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: apage:headerand anmcp:connect-agentwidget.page:headercarries aComponentPropsMaprow, so door 3 ofauditPageExpressionEnvelopesreads itspropertiesbag.mcp:connect-agentdoes not — it is a console-registered widget provided by objectui's app-shell, andComponentPropsMaphas 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 atproperties.<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 (visibleWhenand 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):That is containment, not coverage.
Possible closures
mcp:connect-agentaComponentPropsMaprow, the spec:cloud-connection:panelandmarketplace:installed-listhave no ComponentPropsMap row — two more instances of the #8691/#8744 silent no-op class #11575 treatment: a strict schema measured from the renderer's real read points at the current.objectui-shapin (empty, if the renderer reads nothing today — strict-and-empty is what refuses an undeclared key). Then delete the exemption and the two pins that guard it frompackages/mcp/src/canonical-expression-envelopes.test.ts; the door-3 EXACT assert reds until they go, so the cleanup cannot be forgotten.No recommendation recorded. Note that #11575 did A for two widgets in one PR, so the shape and its cost are known.