Skip to content

spec: bulk delete chat history (#10359)#10457

Open
lonexreb wants to merge 1 commit intowarpdotdev:masterfrom
lonexreb:spec/10359-bulk-delete-chat-history
Open

spec: bulk delete chat history (#10359)#10457
lonexreb wants to merge 1 commit intowarpdotdev:masterfrom
lonexreb:spec/10359-bulk-delete-chat-history

Conversation

@lonexreb
Copy link
Copy Markdown
Contributor

@lonexreb lonexreb commented May 8, 2026

Summary

Spec-only PR proposing multi-select and bulk-delete affordances for
the conversation list, with a 5-second undo window after each bulk
delete (matching macOS Finder's "Recover" semantics).

Resolves intent of #10359.

What's in this PR

  • specs/GH10359/SPEC.md — full behavior contract, keyboard map,
    acceptance criteria, tests, telemetry plan, and open questions.

No code changes. This PR is for spec review only.

Highlights

  • Selection mode entered via a "Select" header button or row
    context menu, with checkbox + Cmd-click + Shift-click semantics.
  • Single confirmation for bulk delete that ALWAYS prompts —
    even when the per-row skip-confirmation preference is set —
    because the blast radius is larger.
  • 5-second undo snackbar, modeled on macOS Finder's "Recover"
    pattern. Within the window, deletions are reversible; after, they
    are permanent.
  • Full keyboard parity: Space, Shift+Arrow, Cmd/Ctrl+A,
    Cmd/Ctrl+Shift+A, Delete, Esc.
  • Active-conversation refocus so deleting the active row in a
    batch lands cleanly on the next-most-recent conversation.
  • No persisted selection across restarts; pending deletions
    commit on shutdown so there are no zombie undo affordances.

Telemetry

No new event. Extends the existing conversation.delete event with
count, bulk, and undone fields. Bulk events fire after the
undo window closes so undone is always known.

Triage request

Requesting ready-to-implement once Q1 (Preview-channel feature
flag) and Q4 (server-side batch endpoint vs client fan-out) are
resolved.

Test plan

  • Spec reviewed by a conversation-list maintainer.
  • Spec reviewed by a storage-layer maintainer to confirm the
    tombstone-window approach is acceptable.
  • Open questions Q1–Q4 resolved before promoting to
    ready-to-implement.

@cla-bot cla-bot Bot added the cla-signed label May 8, 2026
@github-actions github-actions Bot added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label May 8, 2026
@oz-for-oss
Copy link
Copy Markdown
Contributor

oz-for-oss Bot commented May 8, 2026

@lonexreb

I'm starting a first review of this spec-only pull request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This spec proposes conversation-list multi-select, bulk delete, undo, keyboard coverage, storage changes, tests, and telemetry. The scope is appropriate for the issue, but several requirements remain ambiguous or unresolved enough to risk an incorrect or unsafe implementation.

Concerns

  • The scope and implementation contract for Select all is ambiguous, especially with active filters/search and virtualized rows.
  • The storage/API decision for bulk delete is still open and the client fan-out proposal does not define failure, retry, atomicity, or undo semantics.
  • The skip-confirmation wording is internally inconsistent and the fixed 5-second undo window needs accessibility requirements.

Security

  • Client-side fan-out for an unbounded bulk destructive action needs explicit limits or failure semantics so a single user action cannot create unbounded work or partially committed destructive state.

Verdict

Found: 0 critical, 2 important, 2 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread specs/GH10359/SPEC.md
- Header controls:
- "Select all visible" — selects only currently rendered rows
(respects active filter / search).
- "Select all" — selects every conversation, including
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] Define whether Select all means all conversations globally, all conversations matching the active filter/search, or all currently loaded conversations, and require how the exact count/IDs are computed before confirmation.

Comment thread specs/GH10359/SPEC.md
- Disabled when N == 0.
- When N > 0 and the user has any existing
"skip delete confirmations" preference set, that preference
is **still respected**, but bulk delete ALWAYS confirms,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 [SUGGESTION] This says the skip-confirmation preference is respected and then ignored; rewrite to say single-row deletes keep the preference while bulk deletes always confirm.

Comment thread specs/GH10359/SPEC.md
- Q1. Should bulk-delete be gated behind a feature flag for the
first preview rollout? Proposal: **yes**, gate to the Preview
channel for one cycle, then promote to Stable.
- Q2. Should the snackbar duration be user-configurable? V1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 [SUGGESTION] If the undo window stays fixed at 5 seconds, add accessibility requirements for keyboard focus, screen-reader announcement, and whether users who miss the snackbar have any alternate recovery path.

Comment thread specs/GH10359/SPEC.md
dialog already shows the count.
- Q4. Does the storage layer need a server-side bulk-delete
endpoint, or is per-row deletion fanned-out client-side
acceptable for V1? Proposal: V1 fans out client-side; if
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] [SECURITY] Client-side fan-out for bulk deletion leaves partial failure, retry, cancellation, and undo consistency undefined; resolve Q4 with bounded batch semantics or a server-side API contract before implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant