Skip to content

[finding] app-shell's two action runtimes reset paramState differently when ActionParamDialog closes — the #6034 divergence, one dialog over #6431

Description

@claude

Found while executing #6034 (converge the two confirm runtimes' close handlers). Filed unassigned, observation-class — the same divergence, one dialog over, and nothing was verified against a running app.

Verified on origin/main @ 9602dc820.

The same close divergence, on ActionParamDialog instead of ActionConfirmDialog

app-shell mounts two action runtimes into two copies of ActionParamDialog. They agree on open and disagree on close, exactly as the confirm runtimes did:

openclose
packages/app-shell/src/hooks/useConsoleActionRuntime.tsx:264setParamState({ ... }):716setParamState({ open: false, params: [] })replaces the whole state
packages/app-shell/src/views/RecordDetailView.tsx:562setParamState({ ... }):2519setParamState(s => ({ ...s, open: false }))preserves fields

#6034 ruled the confirm pair onto the field-preserving shape, and the reason it gave transfers in form but not automatically in substance: Radix keeps dialog content mounted through its exit animation (data-[state=closed]:animate-out … duration-200 on AlertDialogContent / DialogContent), so whatever the runtime writes on close is what the dialog renders while it fades out.

Why this is filed rather than folded into #6034

#6034's fence is the CONFIRM path, and its dispatch was explicit that finding a further consumer changes the card rather than widening it.

It is also not the same mechanical call. ConfirmDialogState is four display-ish fields; ParamDialogState carries params and the collection's in-flight state, so "blank it on close" may be the deliberate choice there — dropping a stale form rather than re-rendering it for 200ms — or it may be the same mid-fade blanking defect. Deciding that needs a look at what ActionParamDialog reads off state after open flips false, and at whether any consumer depends on the params surviving. That is a ruling, not a cleanup.

Related: the third dialog in the same two runtimes, ActionResultDialog, does not diverge — both sides close with setResultDialogState({ open: false }) (useConsoleActionRuntime.tsx:722, RecordDetailView.tsx:2528), which is also its initial state. So the drift is two dialogs out of three.

Same family as #6034, #5610 and #3320RecordDetailView re-implementing a shared runtime and then diverging from it with nothing red in between.


Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatched

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions