Filed unassigned by the os-dev seat implementing #11480 (session session_01T9cDbY2NBiVJWYx3BpWfH2, PR #11574). Recording the gap; nothing is broken today. Not claimed, not queued.
What
Two console-registered widget types ship on published plugin pages with no ComponentPropsMap row in packages/spec/src/ui/component.zod.ts:
cloud-connection:panel — packages/cloud-connection/src/cloud-connection-ui.ts (CloudConnectionSettingsPage, region main)marketplace:installed-list — packages/cloud-connection/src/marketplace-ui.ts (MarketplaceInstalledPage, region main)
This is the mechanism #8691 recorded for record:reference_rail and #8744 then swept for record:alert / record:quick_actions / record:history: a registered renderer with a PageComponentType-reachable spelling (here via the open string arm) but no props-map row, so any authored key in its properties bag rides through every validator in silence — validate-component-props dispatches by the map and skips unregistered types, and door 3 of the #11480 canonical-envelope gate reports both types as unmapped (recorded as explicit exemptions in packages/cloud-connection/src/canonical-expression-envelopes.test.ts).
Why it is latent, not live
Measured while implementing #11480 (PR #11574, commit 1291491a36): both components author an EMPTY properties bag ({}), so there is nothing today for the missing rows to mis-handle. That PR's gate also pins the emptiness per exempted type — the first real key authored into either bag turns the gate red and forces this decision — so the exposure cannot grow silently. But the pin forces a decision; it does not make it: the durable fix is the row.
Fix shape (per #8744's precedent)
One ComponentPropsMap row per type, key set measured from the renderer's ACTUAL read points at the pinned .objectui-sha (never from the registration's declared-input claims — #8691/#8744 both record where those diverge). Then the exemptions (and the emptiness pins) in cloud-connection's envelope gate can be deleted, which the gate's own exact-set assert will demand in the same PR.
Filed unassigned by the os-dev seat implementing #11480 (session
session_01T9cDbY2NBiVJWYx3BpWfH2, PR #11574). Recording the gap; nothing is broken today. Not claimed, not queued.What
Two console-registered widget types ship on published plugin pages with no
ComponentPropsMaprow inpackages/spec/src/ui/component.zod.ts:cloud-connection:panel—packages/cloud-connection/src/cloud-connection-ui.ts(CloudConnectionSettingsPage, regionmain)marketplace:installed-list—packages/cloud-connection/src/marketplace-ui.ts(MarketplaceInstalledPage, regionmain)This is the mechanism #8691 recorded for
record:reference_railand #8744 then swept forrecord:alert/record:quick_actions/record:history: a registered renderer with aPageComponentType-reachable spelling (here via the open string arm) but no props-map row, so any authored key in itspropertiesbag rides through every validator in silence —validate-component-propsdispatches by the map and skips unregistered types, and door 3 of the #11480 canonical-envelope gate reports both types as unmapped (recorded as explicit exemptions inpackages/cloud-connection/src/canonical-expression-envelopes.test.ts).Why it is latent, not live
Measured while implementing #11480 (PR #11574, commit
1291491a36): both components author an EMPTYpropertiesbag ({}), so there is nothing today for the missing rows to mis-handle. That PR's gate also pins the emptiness per exempted type — the first real key authored into either bag turns the gate red and forces this decision — so the exposure cannot grow silently. But the pin forces a decision; it does not make it: the durable fix is the row.Fix shape (per #8744's precedent)
One
ComponentPropsMaprow per type, key set measured from the renderer's ACTUAL read points at the pinned.objectui-sha(never from the registration's declared-input claims — #8691/#8744 both record where those diverge). Then the exemptions (and the emptiness pins) in cloud-connection's envelope gate can be deleted, which the gate's own exact-set assert will demand in the same PR.