Repository navigation
fix(sessions): confirm permanent deletion in a modal - #135
Conversation
Adversarial review: checked pending close/reopen and duplicate submission, unmount navigation, keyboard and programmatic focus escape, initial safe focus and background restoration. Synchronous in-flight guard prevents parallel DELETE calls. Contextual review: follows existing invite modal portal/Card/focus pattern; preserves warning, button copy, role gating and API. Two session-delete files only, based on main7259485 including downloads move. Validation: npm run check passes lint, 58 files/910 tests, typecheck and production build. Focused DeleteSession suite10/10; diff --check passes. Independent final-head review requested before merge.
Pre-merge checks:
|
[Medium impact] The PR appears safe to merge.
|
|
Independent review at exact head Scope: only Checked:
Minor, non-blocking: if Escape closes the dialog while a request is pending and the request then fails, CI: check, amd64 image smoke and Greptile all pass; 0 unresolved threads. |
Clicking Delete session now opens a modal confirmation instead of expanding the warning beside Details/Resume. The warning, button copy, role gating, and DELETE API contract are unchanged.
The dialog follows the existing invite modal's portal, Card styling, background isolation and focus behavior (this webapp has no shared Dialog primitive). Cancel is focused initially; Tab stays inside; Escape and Cancel close it and restore focus. Pending, server-in-progress and error messages stay inside the modal. A synchronous in-flight guard prevents duplicate DELETE calls across rapid clicks or closing/reopening while the request is pending.
Validation:
npm run checkpasses (lint, 58 test files / 910 tests, TypeScript and production build). The 10 session-delete tests cover modal open, Cancel/Escape and restored focus, focus trapping and inert background, one DELETE across repeated clicks/reopening, pending/error placement, member gating and unchanged request encoding.git diff --checkpasses.Owner review: adversarial pass checked duplicate submits, pending dismissal, unmount/navigation, focus escape and background restoration. Contextual pass checked the existing invite dialog pattern, unchanged copy/API/authorization and exact two-file scope. Independent review by selfhost-usage-page passed on exact head
b926ab64(review). PR CI check, linux/amd64 container smoke and Greptile review all pass; no unresolved threads. Based on main7259485(includes the downloads move); no downloads files change.For the 2026.11.1 release. This PR does not publish an image, deploy, apply migrations or activate erasure flags.