Workspace's digitize overlay shows hard-coded 'Analyzing image...' text — the dispatched processingMessage is set in state but never read; same string is hard-coded in the UI #202
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#202
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.tsdispatches:The message lands in
state.processingMessage(per theWorkspaceStatetype attypes.ts:218). The dispatched message is'Analyzing image…'(with a horizontal ellipsis character…).grep -rn 'state\.processingMessage\|processingMessage' src/components/returns 0 matches. The dispatched message is never rendered.Meanwhile, the UI's digitize overlay (
src/components/workspace/CanvasArea.tsx:478-485) hard-codes:Three regular dots
..., not the ellipsis character…. The strings match in spirit but the abstraction is broken:A future change to the step labels has to be made in two places (the dispatch site AND the UI), with no type check to catch the drift.
Where
src/components/workspace/useWorkspace.ts(the SET_PROCESSING dispatch)src/components/workspace/types.ts:218(processingMessage: string)src/components/workspace/CanvasArea.tsx:478-485grep -rn 'processingMessage' src/components/returns 0 hitsSuggested fix shape
Two changes:
processingMessageas a prop toCanvasArea(or read it from auseWorkspace()consumer inside the canvas).The
processingStepis already passed (per the prop wiring).processingMessageis the missing piece.Optionally: drive the per-step labels from a single source of truth.
src/components/workspace/CanvasArea.tsx:486-510rendersPROCESSING_STEPS.map((step, i) => ...)— that constant is hard-coded too. A singlePROCESSING_STEPS_AND_MESSAGESarray with{ step, message }pairs would let the dispatched state drive both the checklist and the headline text.Severity
Low. The user sees "Analyzing image..." in the UI; the dispatched message is silent. The abstraction is broken; the visible output is fine.
Discovered by
Gap analysis (2026-10-02) of workspace state/UI symmetry.
Related
processingSteparray is also hard-coded in the UI; same family of bug.Fixed in commit
b05b113(main).Change:
src/components/workspace/CanvasArea.tsxnow destructuresprocessingMessagefromstateand renders{processingMessage || "Processing…"}in place of the hard-codedAnalyzing image.... The dispatchedSET_PROCESSINGmessage is now actually displayed; the fallbackProcessing…(with horizontal ellipsis) shows when no message is set.Verification:
tsc --noEmit -p tsconfig.app.jsoncleaneslintclean on changed filesvitest916/916 pass (was 914; +2 new tests for the headline contract — one pins the dispatch->render path, one pins the empty-message fallback)Scope note: The headline fix is the minimum change for this issue. The same family of bug exists for
PROCESSING_STEPS(the per-step labels in the checklist are still hard-coded in the UI). That is a separate issue — the per-step labels need a coordinated reducer change to push amessageper step, not just at step 1 / step 4. Worth filing as a follow-up if you want single-source-of-truth.