Editor's Node Properties has no 'break handles' or 'link handles' toggle — user with a smooth node wanting to make the two handles independent (smooth) or mirrored (symmetric) has no UI to toggle this #361
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#361
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finding
grep -rn 'breakHandles\|linkHandles\|handleLinked' src/components/editor/returns 0. The editor has no break/link handles toggle.A user with a smooth node:
Wait, smooth vs symmetric in the editor:
So smooth already allows independent handle lengths. Symmetric enforces equal.
The "break handles" / "link handles" is a different concept:
The current smooth/symmetric dichotomy is binary. Real Bezier editors have a "broken" mode (independent) and a "linked" mode (mirrored).
The fix is to add a third node type: "broken smooth" (smooth but handles can be different lengths, no mirror).
Where
src/components/editor/EditorRightPanel.tsxgrep -rn 'broken' src/components/editor/returns 0Suggested fix shape
Type: the node type can be 'corner' | 'smooth' | 'symmetric' | 'broken' (or 'independent').
UI: in the Convert Node Type submenu, add "Broken smooth" as a 4th option.
Use cases:
Severity
Low. The user can choose smooth or symmetric. Power users notice.
Discovered by
Gap analysis (2026-10-02) of editor node type UI.
Related
Closing as a stale gap-analysis finding — the behaviour this issue asks for already exists as the
smoothnode type.The body of #361 conflates two different concepts. After re-reading:
smooth= "linked" (handles mirror when one moves).smoothis "broken": handles do not mirror — moving one does not move the other. The canvas drag handler insrc/pages/Editor.tsx(handleUpdateControlPoint, ~lines 1977-2041) only writes the opposite handle whentarget.type === 'symmetric'; forsmoothit touches only the requested handle.Cited evidence:
Canvas drag behaviour (
src/pages/Editor.tsx:2017-2034): the symmetric-mirror branch is gated ontarget.type === 'symmetric'. The smooth branch only sets[field], leaving[otherField]alone. Comment at line 1984: "Smooth nodes only touch the requested handle."Numeric-input behaviour (same handler): "For symmetric nodes we mirror the change onto the opposite handle so the bezier stays anti-symmetric around the anchor — same rule the canvas drag already obeys". Smooth: just
return { ...n, [field]: ... }.In-UI tooltip text added in #359 (commit
07db222):Definition (
src/components/editor/types.ts:3):export type NodeType = 'corner' | 'smooth' | 'symmetric'— three options, withsmoothalready being the "broken, handles can differ" case the issue asks for.The body's suggested fix ("add a fourth type: 'broken' or 'independent'") would be a synonym for
smooth— same semantics, different label. That would add a 4th button to the tri-button widget that maps to behaviour already covered by Smooth, making the UI more confusing rather than less. The intent of the issue (the user wanted to move one handle without dragging the other) is already whatsmoothdoes — nobreakHandles/linkHandlestoggle is needed; switching to smooth is the answer.If the original report was driven by a specific path where moving one handle seemed to move the other, the most likely explanation is the node was
symmetricand the user wantedsmooth— the existing Node Type tri-button (corner / smooth / symmetric) in the right panel is exactly that toggle. If there's a concrete reproduction where asmoothnode's handles are mirroring, that would be a real bug and worth a new issue with the path + steps.