Improve workflow editor and deployment experience - #6507
Conversation
Connection anchors: an output now always leaves a card from the right.
The cursor swell lets a drag start on any edge, but the left side is the
input, so anchoring an outgoing edge there drew a line out of the input
port and read as a second input. `normalizeCursorSourceHandleId` resolves
every drag to the right anchor, `normalizePositionedSourceHandleId`
collapses `source-left` alongside the legacy vertical anchors (so data
from the API, an older client, or a stale save self-heals on load), and
only the right-side source anchor is mounted.
Drops in `onConnectEnd` are always source -> target. The branch that
reversed the edge for a drag starting on an input could never run: the
`target` handle is `isConnectableStart={false}` and the positioned side
anchors are `isConnectable={false}`, so React Flow never reports an input
as a drag origin. Removed it and its now-unused imports.
A newly created block is centered once its node mounts and is measured,
so a card added from a drag-release, the block menu, or the toolbar is
never left off-screen or under the editor panel.
The editor panel's block icon uses the same type accent as the card's
badge instead of the block's legacy `bgColor`, which had left the panel
on the old per-integration brand colours.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Start card intermittently collapsed after load, squashing the action-menu tab so its icon row sat over the card. `.workflow-drag-handle` is the host the border renderer measures, and both it and the header row took their height from `blockHeight && blockHeight > 0`. `blockHeight` comes from the deterministic-dimensions pass and is already floored at MIN_PAINTED_HEIGHT (48), but it is absent on the first frames — and with no floor the host collapsed to its natural content height (25.5px for a header-only trigger, exactly the title's line box). The border builds its perimeter from `host.offsetHeight`, so that window painted a sub-floor card: too little straight edge remained on the vertical runs for the action-menu tab, which collapsed into the corner arcs. Whether you saw it depended purely on whether the dimension publish had landed, which is why it reproduced on one workflow and not another. Floor all three: the host, the header row (so `items-center` centres the title and type tag rather than pinning them to the top), and the border's own `offsetHeight` read. Also raise ACTION_MENU_CONTENT_READY_THRESHOLD to 0.9. At 0.8 the 24px icon row was revealed while the swell had only reached 22.4px of its 28px — shorter than the row it contains. Secondary to the above, but a real overflow window on its own. The test now pins the ratio rather than the constant. Tag palette moves to fixed brand values (hex, not derived oklch) with two inks — #F8F8F8 on dark fills, #1A1A1A on light. Tones are renamed to match what they render. `green` (2.55:1) and `orange` (3.15:1) sit under WCAG AA against their paired ink; both are deliberate brand decisions and are documented in the component. Deploy and Run take two new Button variants rather than className overrides, so `tertiary` stays green everywhere else. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Too many files changed for review (218 files, 100 file limit). Bypass the limit by tagging |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryMedium Risk Overview The workflow canvas chrome shifts to swell / inline action bars (play/stop, lock, duplicate, delete, note palette), a running-action sweep, and an on-canvas connection block selector after dropping a connection on the pane. Notes gain inline markdown editing, dynamic height, colors, and swell actions; flip handles is removed from the block menu. The right inspector is reorganized around sectioned block settings, an Available data panel (search, copy references, grouped upstream outputs), and Chip field primitives ( Reviewed by Cursor Bugbot for commit a018173. Bugbot is set up for automated code reviews on this repo. Configure here. |
| </Tooltip.Root> | ||
| <Chip variant='border' onClick={onDeployClick} disabled={isRegistryLoading || isDisabled}> | ||
| {getButtonLabel()} | ||
| </Chip> |
There was a problem hiding this comment.
Deploy disabled reasons hidden
Medium Severity
The Deploy control still disables for empty workflows, missing admin permission, lock state, and blocked readiness, but the tooltip that explained those reasons was removed with the Button/Tooltip wrapper. Users now see a disabled Chip with no indication why deploy is unavailable.
Reviewed by Cursor Bugbot for commit ceb0595. Configure here.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ac9be72. Configure here.
| > | ||
| {editorActions} | ||
| </div> | ||
| ) : null} |
There was a problem hiding this comment.
Hidden editor actions stay focusable
Medium Severity
When the Toolbar tab is active with a block still selected, editorActions stays mounted and is only hidden with opacity-0, pointer-events-none, and aria-hidden. The menu and close chips remain in tab order, so keyboard users can focus and activate invisible block actions, including delete, while browsing the catalog.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit ac9be72. Configure here.


Summary
Type of Change
Testing
bun run lintbun run check:api-validation:strictbun run type-checkChecklist