Repository navigation
feat(ui): the board dims the lanes a card's state machine closes and refuses a drop into one - #26253
Merged
Merged
Conversation
…ses and refuses a drop into one Claude-Session: https://claude.ai/code/session_015Kzn5VKHAGKe251waHoUqj Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Kzn5VKHAGKe251waHoUqj Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Kzn5VKHAGKe251waHoUqj Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
Author
|
ACCEPT · seat 2 · 2026-10-26T17:14Z · PR #26253 head
Ablation evidence from the report (gate unset → 3 red; guard forced false → exactly the refusal red) is accepted as stated. Main's Test UI 48≠47 red was #26218, repaired by #26231 at 2026-10-26T17:10Z. Seat's route: ready + auto-merge. |
This was referenced Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Fixes #25933 — the board half. The edit form half landed in #26033.
Clause-②: yes
Metadata-protocol: none
What changes
On a board grouped by a field that an error-severity
state_machinevalidation governs (the showcase Task Board'sstatus), abacklogcard could be dragged onto any column. The server refused the move and the board rolled it back with a toast, which works correctly, and nothing during the drag marked the columns the card could not enter. Now:opacity-40) and draws no drop highlight, witharia-disabledanddata-kanban-drop-blockedon the lane. This covers the flat layout (KanbanColumnView) and every swimlane row's cells.handleDragEnd, before the optimistic move and beforeonCardMove, so nothing is written and the card stays in its column. A newonDragCancelhandler clears the dimming when a drag is cancelled. Before this PR the board had no cancel handler, andactiveCardstayed set after Escape.canDropCard(fromColumnId, toColumnId), onKanbanBoardProps(KanbanImpl.tsx), forwarded byKanbanBoardCore.tsx.ObjectKanban.tsxderives it fromobjectDef.validationsthroughstateMachineNextValues(@object-ui/core, from feat(ui): an edit form's state-machine select offers only the moves the server accepts #26033). A lane is an option value ofgroupBy, so only a rule on the board's owngroupByfield can close a lane, and only one the server enforces on update:severityerror(the default),active,eventscoveringupdate. An undeclared from-state stays open. The Uncategorized lane also stays open, because the mover writes nothing for a drop into it.KanbanRenderer(a host-mounted board) passes no gate and is unchanged.handleCardMove's rollback stays. No new visible text, so no i18n.Tests
Run at head
c0333981fromui/under the verify lock:packages/plugin-kanban/src/ObjectKanban.stateMachineDropGate-25933.test.tsx(new, 6, driven throughDndContext's captured handlers like the rollback test). Dragging abacklogcard dims only Done. A drop on Done writes nothing, shows no toast, leaves the card in Backlog and clears the dimming. A drop on To Do writes{ status: 'todo' }. A cancelled drag clears the dimming. CONTROLS: a warning-severity machine closes no lane and the drop is written, and so does a machine on a field the board does not group by.packages/plugin-kanban/src/ObjectKanban.rejectedMoveRollback.test.tsx: still green, so the server-refusal rollback is untouched.@object-ui/plugin-kanbanpackage: 79 files, 531 tests, all green.pnpm --filter @object-ui/plugin-kanban run type-check(source and test configs) exits 0. Both ran in the same locked run that re-recordedscripts/sdui-manifest.sources/plugin-kanban.json;node scripts/check-sdui-manifest.mjsexits 0 at the head.Ablations (fix committed first;
scripts/ablation-replace.mjs, mutation proven on disk, restored to the HEAD blob each time):canDropCard={undefined}inObjectKanban.tsxturned 3 pins red: the dimming, the refusal and the cancel. The 3 that expect an open lane stayed green.handleDragEndguard replaced byfalseinKanbanImpl.tsxturned exactly the refusal pin red. The dimming stays driven by the gate, so the refusal is pinned on its own.Gates.
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 47 commands atc0333981. All 47 exited 0 there.--ranreconciliation: 47 derived, 47 run, 0 NOT-MEASURED (a derived zero: every row carries its exit code). Repo-wide scans (pnpm lint, the fullcheck:*farm) and the Console build are left to CI.Acceptance notes
aria-disabled.collisionDetectionwould be a deeper change to the dnd wiring.state_machinerules are read. A machine nested in aconditionalrule leaves lanes open, never stricter than the server.Session:
session_015Kzn5VKHAGKe251waHoUqj(card thread,domain:ui#2)Generated by Claude Code