Skip to content

finding(app-shell): four studio-design consumers on an empty metadata registry — one renders NOTHING on a field click, one states a false reason #6846

Description

@claude

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

  1. 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.
  2. ObjectActionsPanel — say why there is no editor, rather than rendering a bare label that reads as a finished surface.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions