Split out of #6795 by the domain:ui execution seat (PM session session_01CRJge11jso9TpXRWFt1Z49) after that card's measurement round. #6795 keeps only its registry-observability question (a published-contract change, now needs-user-decision); this card is the half that stands on its own and touches no contract.
⛔ This card is NOT a lazy conversion and must not become one. It changes what four studio-design consumers say when a metadata registry read returns undefined. No registry, no bundling, no sideEffects, no eager-closure ceiling.
What was measured
#6795's implementer drove all four consumers against genuinely empty registries — the probes assert emptiness first (listMetadataPreviewTypes() and listMetadataInspectorTypes() both [], all three getMetadataDefaultInspector reads undefined) rather than assuming it. Observed renders:
| consumer | state on an empty registry | verdict |
|---|
ObjectSettingsPanel | prints "No default object inspector registered." | ✅ already honest — leave it |
ObjectHooksPanel | falls back to a working generic SchemaForm | ✅ already honest — leave it |
ObjectActionsPanel | renders only the action's own label — no editor, no explanation | ⚠️ silent |
StudioDesignSurface interfaces canvas | prints "design support is in progress" | ⛔ factually wrong |
StudioDesignSurface.tsx:3076 | selecting a FIELD with getMetadataInspector('object') undefined ⇒ aside count 0 | ⛔ clicking a field does nothing at all |
⭐ Note the first two rows: #6795's card body claimed all four were silently empty, and two of them were not. Anyone repairing this should re-drive the probes rather than trusting any table, this one included.
The three repairs
StudioDesignSurface.tsx:3076 — the real defect. A field click renders nothing: no inspector, no message, no indication anything was clicked. ⭐ This is a genuine latent bug and it is only unreachable today by accident — registration happens eagerly at module scope, so the undefined branch is never taken in production. It is one lazy conversion, one registration-order change, or one plugin-load failure away from being live.ObjectActionsPanel — say why there is no editor, rather than rendering a bare label that reads as a finished surface.- The interfaces canvas message — "design support is in progress" is not true; the support exists and the registry is empty. A wrong explanation is worse than none, because it sends the reader to the wrong place.
Acceptance
Contention note
Lands entirely in packages/app-shell/src/views/studio-design/. ⚠️packages/app-shell currently sits under seven unmerged PRs, so keep the diff tight; the file-level overlap with those PRs is nil today but the package is hot.
Provenance
#6795 (parent, needs-user-decision on registry observability) · #6795's measurement comment carries the full probe output, the reproduced subtree byte figures, and the recovery probe showing a consumer that reads an empty registry never recovers when registration lands later — which is why "just make it lazy" was refused.
Generated by Claude Code
Split out of #6795 by the
domain:uiexecution seat (PM sessionsession_01CRJge11jso9TpXRWFt1Z49) after that card's measurement round. #6795 keeps only its registry-observability question (a published-contract change, nowneeds-user-decision); this card is the half that stands on its own and touches no contract.⛔ This card is NOT a lazy conversion and must not become one. It changes what four studio-design consumers say when a metadata registry read returns
undefined. No registry, no bundling, nosideEffects, no eager-closure ceiling.What was measured
#6795's implementer drove all four consumers against genuinely empty registries — the probes assert emptiness first (
listMetadataPreviewTypes()andlistMetadataInspectorTypes()both[], all threegetMetadataDefaultInspectorreadsundefined) rather than assuming it. Observed renders:ObjectSettingsPanelObjectHooksPanelSchemaFormObjectActionsPanelStudioDesignSurfaceinterfaces canvasStudioDesignSurface.tsx:3076getMetadataInspector('object')undefined ⇒asidecount 0⭐ Note the first two rows: #6795's card body claimed all four were silently empty, and two of them were not. Anyone repairing this should re-drive the probes rather than trusting any table, this one included.
The three repairs
StudioDesignSurface.tsx:3076— the real defect. A field click renders nothing: no inspector, no message, no indication anything was clicked. ⭐ This is a genuine latent bug and it is only unreachable today by accident — registration happens eagerly at module scope, so the undefined branch is never taken in production. It is one lazy conversion, one registration-order change, or one plugin-load failure away from being live.ObjectActionsPanel— say why there is no editor, rather than rendering a bare label that reads as a finished surface.Acceptance
Contention note
Lands entirely in⚠️
packages/app-shell/src/views/studio-design/.packages/app-shellcurrently sits under seven unmerged PRs, so keep the diff tight; the file-level overlap with those PRs is nil today but the package is hot.Provenance
#6795 (parent,
needs-user-decisionon registry observability) · #6795's measurement comment carries the full probe output, the reproduced subtree byte figures, and the recovery probe showing a consumer that reads an empty registry never recovers when registration lands later — which is why "just make it lazy" was refused.Generated by Claude Code