2.4 KiB
2.4 KiB
id, title, status, wave, depends_on, plan, spec, parallelism
| id | title | status | wave | depends_on | plan | spec | parallelism | |
|---|---|---|---|---|---|---|---|---|
| 04-consistent-confirmation-entrypoints | Consistent localized terminal confirmation | done | 4 |
|
plan.md | ../../specs/ui/requirements/terminal-close-feedback.md | sequential |
Task 04: Consistent localized terminal confirmation
Root cause
The add-panel terminal row retained window.confirm, context-menu Terminate bypassed the guarded
tab-close handler, and tab/tablet/phone close confirmation was conditional on client-only activity
tracking. Those independent paths produced a browser dialog in one place and no confirmation in
others.
Intent
Make destructive terminal confirmation predictable at every entry point while keeping it local to the initiating control and preserving immediate UI dismissal after confirmation.
Acceptance
- Dockview tab × always opens the compact close-anchored popover.
- Dockview context-menu Terminate opens that same popover and does not destroy before confirmation.
- Tablet close uses the same anchored popover.
- Phone close always morphs the row into touch-sized Cancel and Close actions.
- Add-panel rows open the shared close-anchored popover; parked-terminal rows morph inline into Cancel and Close actions.
- No task-terminal path calls browser-native
confirm(). - Confirmation still removes local UI before background teardown settles; failure alone toasts.
Files
apps/web/components/task/terminal-tab.tsxapps/web/components/task/terminal-reopen-menu.tsxapps/web/components/task/parked-terminals-menu.tsxapps/web/components/task/task-right-panel.tsxapps/web/components/task/mobile/mobile-terminals-section.tsx- Focused tests and terminal E2E specs
Verification
cd apps
pnpm --filter @kandev/web exec vitest run components/task/terminal-tab.test.tsx components/task/mobile/mobile-terminal-row.test.tsx
cd web
pnpm e2e:run tests/terminal/terminal-dockview-ui.spec.ts -- --grep "localized confirmation"
pnpm e2e:run --project mobile-chrome tests/terminal/mobile-terminal-close.spec.ts
Results
- Focused Vitest: 4 files, 12 tests passed.
- Frontend typecheck and targeted ESLint: passed.
- Desktop Chromium: tab ×, context-menu Terminate, and add-panel anchored confirmation passed.
- Mobile Chrome: inline confirmation and immediate removal passed.
- i18n checks, i18n new-code ratchet, and E2E sleep ratchet: passed.