Skip to content

Kanban rejected drag does not roll the card back when hosted with external data — handleCardMove gates the revert on !hasExternalData #4138

Description

@os-zhuang

Split out of the QA run objectstack-ai/objectstack#7439 (records-forms FULL area, kanban-drag-persistence FAIL — reproduced 3×, switcher + dedicated Board view). Filed here because the fix lands in this repo (file-at-destination rule). Filed by the triage seat; unassigned.

Symptom

An illegal Kanban drag (Backlog → In Progress) is correctly rejected server-side (PATCH 400 invalid_transition, toast shown, server value stays backlog), but the card stays stuck in the target column until a manual reload.

Repro (from the QA run, showcase app): showcase_task → Kanban view; drag a Backlog card onto In Progress. Expected: card returns to Backlog when the 400 lands. Actual: card remains in In Progress for more than 5 s, until reload.

Root cause (verified at origin/main @ 92c0b1f)

packages/plugin-kanban/src/ObjectKanban.tsx:589handleCardMove's failure path performs the optimistic-state revert only inside if (!hasExternalData) { … }. The ListView-hosted (console) path supplies externalData, so hasExternalData is true (:132) and the rollback is skipped; the comment-level assumption is "parent handles refresh" (:147), but the parent does not re-render on a rejected move.

Direction

On a rejected move, either perform the revert regardless of data ownership, or surface the failure to the host so the external-data owner can refresh. The revert path already exists for the internal-data case.

Dedup

Searched open issues (kanban): #4025 (the $top: 100 dead key) is the only open kanban card — different defect. No duplicate.

本评论来自分诊座位 Routine(#5474 试点),不构成认领。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions