Workspace has no progress indicator for auto-digitize — user uploading a large image sees the canvas blank with no feedback while the service runs (could be 5-30s), no step number, no progress bar, no message #264
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#264
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/workspace/useWorkspace.ts:218definesprocessingStep: number(0-4) andprocessingMessage: string. The reducer dispatchesSET_PROCESSINGto set them. The values are read in tests but not in the UI.grep -rn 'processingStep\|processingMessage' src/components/workspace/returns matches in the types and tests only. The workspace's actual UI components don't render these.A user uploading a 4K image:
processingMessagebut never displayedThe polish move is a small overlay at the bottom of the canvas:
Where
src/components/workspace/types.ts:218(state, type says 0-4)grep -rn 'processingStep\|processingMessage' src/components/workspace/CanvasArea.tsxreturns 0processingMessageis dispatched but never renderedSuggested fix shape
Add the progress overlay to the workspace's canvas (or as a floating bottom-of-screen pill):
The progress indicator is dismissed when
processingStep === 0(which is set after digitize completes or fails).The 4 steps (per the type): 0=idle, 1=analyzing, 2=color reduction, 3=stitch generation, 4=done. Each transition is a
SET_PROCESSINGdispatch; the UI surfaces them as they happen.Severity
Medium. The user has no feedback during a 5-30s operation. Power users notice immediately.
Discovered by
Code review (2026-10-02) of workspace processing state.
Related
Fixed in commit
f932453(main).Change:
src/components/workspace/CanvasArea.tsxreplaces the full-screen digitize overlay (absolute inset-0with translucent panel + 4-step checklist) with a small floating bottom-of-canvas pill (absolute bottom-6 left-1/2 -translate-x-1/2 rounded-full). The image preview stays visible underneath while the service runs.Pill contents:
<Loader>rotating 360°)processingMessage || "Processing…"(#202 fallback contract preserved)Step {processingStep} of 4indicatorcancelAutoDigitizeprop, samedata-testid="cancel-auto-digitize"so existing call sites still find it)Pill visibility:
0 < processingStep < 4— present during processing, gone at step 4 (digitize done) so the user sees the result without a stale indicator.Scope notes:
PROCESSING_STEPS4-label checklist is gone —SET_PROCESSINGonly fires at step 1 (start) and step 4 (done), so the per-step labels were aspirational and never matched the dispatchedprocessingMessage. The pill surfaces the dispatched message as the headline, which is the actual source of truth.Verification:
npx vitest run→ 1409 pass, 1 skipped (pre-existing)npx tsc --noEmit -p tsconfig.app.json→ no new errors in CanvasAreanpx eslint→ clean on changed filessrc/components/workspace/issue-264.test.tsx(6 tests) pins: pill renders during processing with the dispatched message + Step indicator; pill hidden at step 0 (idle) and step 4 (done); pill renders theProcessing…fallback whenprocessingMessageis empty (#202 contract); Cancel button wirescancelAutoDigitize.