Editor has no 'thickness' or 'stroke width' slider for satin paths — satin stitch width is a critical parameter (1-3mm typical), but the editor uses a fixed default, no user control #314
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#314
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
src/components/editor/EditorRightPanel.tsx's Path Properties section has stitch type, density, but no "thickness" or "stroke width" for satin paths.grep -rn 'satinWidth' src/components/editor/returns 0.Satin stitch is characterized by:
The editor's density slider controls the second but not the first. The width is a fixed value somewhere (let me check the canvasRenderer).
A user designing a logo:
The fix is a "Satin width" input for satin-type paths.
Where
src/components/editor/EditorRightPanel.tsxgrep -rn 'satinWidth' src/components/editor/returns 0src/lib/easystitch-client.ts:exportPES(might have width)Suggested fix shape
Type: add
satinWidth?: numberto the StitchPath type.Render: in the canvas, render the satin column at the specified width (the spacing between the two parallel stitch lines).
Export: the export service uses the
satinWidthto compute the actual stitch count.Default: 2.0mm is the typical default.
Severity
Medium. Satin width is a critical parameter. Power users with embroidery work notice.
Discovered by
Gap analysis (2026-10-02) of editor path properties.
Related
Shipped as commit
59e8b24onmain(rebased onto2e6c263).What's in this slice:
satinWidth?: numberfield onStitchPath(optional, so designs persisted before this commit still open with the 2.0 mm fallback).EditorRightPanelrenders a third slider row in Path Properties — gated onselectedPath.stitchType === 'satin'. Same?? 2.0fallback for legacy paths, same Mixed-(primary X.X) label + apply-to-all button as the density slider (#188 / #212), and the same live-vs-commit history split as #298 so a 0.1 mm-step drag pushes ONE history entry, not dozens.Editor.tsxwires the three handlers (onUpdateSelectedPathSatinWidth,onCommitSelectedPathSatinWidth,onApplyToAllPathsSatinWidth). New paths getsatinWidth: 2.0by default when the user is creating a satin path; non-satin paths leave the field absent so a future type switch back to satin finds the default.svgImport.tsstampssatinWidth: 2.0on freshly imported SVG paths so the slider shows a non-fallback value out of the box.src/components/editor/issue-314.test.tsxpin the slider rendering, the live/commit split, the satin-only gate, the back-compat path with no commit handler, and the apply-to-all wiring.npm run lintclean,npx tsc -bclean for the touched files, 237/237 editor tests pass.What is NOT in this slice (follow-up work, not in scope of this card):
src/components/editor/canvasRenderer.ts) still draws a flat polyline at fixed stroke width — it doesn't honoursatinWidthyet.src/lib/easystitch-client.ts→easystitch-service) takes its ownsatinStitchSpacingMmfrom the engine; the per-pathsatinWidthisn't forwarded end-to-end yet.Those two are bigger surfaces: the canvas side needs a real satin-column renderer (perpendicular walk), and the export side needs the service to accept a per-stitch-object width override. Filing the editor affordance + persistence layer first lets users set the value while the engine / canvas catch up.
CI status: Forgejo Actions run #7577 on
59e8b24is queued (status: waiting, self-hosted runner appears to be unresponsive — recent runs #7576 and #292 also stuck waiting/cancelled). The push landed cleanly; the runner substrate is the blocker, not the code.Closes #314.
gradient: { startColor, endColor }field to StitchPath type (#350 type layer) #393gradient: { startColor, endColor }field to StitchPath type (#350 type layer) #393