Skip to content

[finding] RecordDetailView carries a second confirm runtime whose options bag no feeder ever fills #5835

Description

@os-zhuang

Observation recorded while executing the 2026-08-22 ruling on #5205 (keep ConfirmationHandler's options parameter, document its out-of-runner producer). Filed unassigned, observation-class — nothing user-reachable is broken. Recording it here because #5205 closes with that PR and these two facts would otherwise leave the tracker with it; both were noted in that card's thread but never triaged on their own.

Verified on origin/main @ 5da008463.

1. app-shell has two near-duplicate confirm runtimes feeding one dialog

  • packages/app-shell/src/hooks/useConsoleActionRuntime.tsxconfirmHandler typed ConfirmationHandler, sets { open, message, options, resolve }.
  • packages/app-shell/src/views/RecordDetailView.tsx — a second confirmHandler, declared with the inline shape (message: string, options?: { title?: string; confirmText?: string; cancelText?: string }) rather than the published ConfirmationHandler type, setting the same state shape.

Both feed ActionConfirmDialog. This is the same duplication family as #5610 (RecordDetailView's second copy of the param dialog's action?.title fallback) and #3320RecordDetailView re-implementing a shared runtime and then drifting from it.

2. On the RecordDetailView path, options really is always undefined

The #5205 ruling turns on a live producer — handleDeleteView in ObjectView.tsx calls its handler with all three fields localized. RecordDetailView's handler has no such producer: it is passed only as onConfirm={confirmHandler} into the action runner, and the runner invokes the confirm handler with one argument (the structured confirm arm that used to forward a bag was retired in #4314). So its options parameter, and the dialog's reads on that path, are dead-in-practice.

The parameter is therefore live on the ObjectView path and inert on the RecordDetailView path — which is why a whole-repo liveness question about ConfirmationHandler has no single answer, and why #5205's card title read as true from one angle.

Not a request to remove anything

⛔ The ConfirmationHandler signature itself is settled: keep, per the 2026-08-22 ruling on #5205; that is not reopened here. What is unresolved is whether RecordDetailView should keep its own copy of the confirm runtime at all — if it consumed useConsoleActionRuntime instead, both facts above disappear at once, and the inline type would stop shadowing the published one. Shape and appetite are a triage call, not decided here.


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