You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
packages/app-shell/src/views/ActionResultDialog.tsx renders one row per declared resultDialog.fields[] entry unconditionally. When a field's dot path does not resolve in the response payload (readPath returns undefined), the row still renders; the text/secret format guards see a non-string and degrade to JsonBlock, which prints the literal undefined under the field's label.
Real triggers (framework sys_user.create_user resultDialog)
Admin types the password manually → the create-user response has no temporaryPassword key (it is only present when the server mints one), yet the dialog shows a Temporary Password row with undefined — right under the copy-it-now warning text.
Resolve values when building the render plan and skip any entry whose non-empty path resolves to undefined. Keep the empty-path (path: '') whole-payload JSON fallback as-is. Declared fields become safe to use for response-shape-dependent keys.
Problem
packages/app-shell/src/views/ActionResultDialog.tsxrenders one row per declaredresultDialog.fields[]entry unconditionally. When a field's dotpathdoes not resolve in the response payload (readPathreturnsundefined), the row still renders; thetext/secretformat guards see a non-string and degrade toJsonBlock, which prints the literalundefinedunder the field's label.Real triggers (framework
sys_user.create_userresultDialog)temporaryPasswordkey (it is only present when the server mints one), yet the dialog shows a Temporary Password row withundefined— right under the copy-it-now warning text.user.phoneNumberecho to the dialog, but the response carriesphoneNumberonly for phone-based accounts — for email-only users the declared field would render a dirty row. Blocks feat(platform-objects): create_user result dialog should echo the sign-in phone number framework#3260.Proposed fix
Resolve values when building the render plan and skip any entry whose non-empty
pathresolves toundefined. Keep the empty-path (path: '') whole-payload JSON fallback as-is. Declared fields become safe to use for response-shape-dependent keys.🤖 Generated with Claude Code