4.9 KiB
4.9 KiB
spec, created, status
| spec | created | status |
|---|---|---|
| docs/specs/ui/requirements/clarification-submit-feedback.md | 2026-08-20 | done |
Implementation Plan: Clarification submit feedback
Overview
Update the shared clarification overlay header to use the existing design-system
Spinner while a multi-question answer submission is pending. Extend the
existing desktop clarification E2E coverage and add the same pending-state
assertion to the mobile clarification flow. No backend, state, translation, or
responsive composition changes are required.
Frontend
Shared clarification submit button
apps/web/components/task/chat/clarification-overlay-header.tsx- Import
Spinnerfrom@kandev/ui/spinner. - Render the spinner instead of
IconCheckwhenisSubmittingis true. - Mark the decorative spinner
aria-hiddenso the translated submitting label remains the accessible status without exposing the shared EnglishLoadinglabel. - Preserve the existing translated labels, disabled state, tooltip gating, button dimensions, and idle check icon.
- Import
- The component is shared by task chat and Quick Chat, so both surfaces inherit
the same behavior. No
useResponsiveBreakpointbranch is needed because the change is an inline status indicator inside an existing control.
Mobile parity contract
- Desktop outcome: the operator can see that the batch answer request is still in flight and cannot submit it again.
- Mobile entry point: the existing clarification overlay Submit button in the shared chat panel; no new navigation or surface is introduced.
- Nearest shipped exemplar: existing
Spinnerusage inside submit controls inapps/web/components/settings/system/bundle-customizer.tsx. - Mobile hierarchy, scroll owner, safe area, and touch target remain unchanged; the status icon stays inside the existing reachable button.
- Shared state and handler logic remain in
useClarificationGroupand the existingClarificationHeaderActionsprops.
Tests
- What: The shared submit button shows an animated loading status, keeps the
Submitting...label, remains disabled, and hides the idle check icon while a response is held. File:apps/web/e2e/tests/chat/clarification.spec.tsHow: Extend the existing “question shortcuts stay disabled while answers are submitting” test, which already holds the response route open, to assert arole="status"spinner insideclarification-submit. - What: The same loading status is reachable and contained on a phone.
File:
apps/web/e2e/tests/chat/mobile-clarification.spec.tsHow: Add a focused multi-question mobile scenario that answers the bundle, holds the response route, and asserts the spinner inside the Submit button before releasing the response.
E2E Tests
- Scenario: GIVEN a multi-question clarification is fully answered on
desktop, WHEN its response is held in flight, THEN the Submit button shows
Submitting..., is disabled, and contains the loading status. File:apps/web/e2e/tests/chat/clarification.spec.ts - Scenario: GIVEN the same fully answered clarification is shown on a
Pixel 5 viewport, WHEN its response is held in flight, THEN the Submit button
remains visible and contains the loading status without page overflow.
File:
apps/web/e2e/tests/chat/mobile-clarification.spec.ts
Verification Results
Passed.
cd apps && pnpm install --frozen-lockfilepassed.cd apps/web && pnpm run typecheckpassed.cd apps/web && pnpm run lintpassed with no errors or warnings.cd apps/web && pnpm exec prettier --check components/task/chat/clarification-overlay-header.tsx e2e/tests/chat/clarification.spec.ts e2e/tests/chat/mobile-clarification.spec.tspassed.cd apps/web && pnpm e2e:run --project chromium tests/chat/clarification.spec.ts -- --grep "question shortcuts stay disabled while answers are submitting"passed (1 test).cd apps/web && pnpm e2e:run --project mobile-chrome tests/chat/mobile-clarification.spec.ts -- --grep "loading spinner"passed (1 test).cd ../.. && git diff --checkpassed.- The managed E2E runs rebuilt the backend and pseudo-locale Vite assets and cleaned their isolated test artifacts. No blockers remain.
- Fresh phone and desktop pending-state screenshots were captured with synthetic E2E data, visually inspected, compressed, and validated through
apps/web/.pr-assets/manifest.json; the disposable capture specs were removed afterward. - Fixup: addressed the P2 accessibility review by hiding the decorative spinner from assistive technology; the translated
Submitting...button text remains exposed. - Fixup verification:
cd apps/web && pnpm run typecheck,cd apps/web && pnpm run lint, and the focused desktop/mobile E2E commands above all passed.
Implementation Waves And Parallel Candidates
Wave 1:
The task is sequential because the component and both E2E assertions form one small vertical slice.
Open Questions
None.