Desktop: allow local hiding of message-deletion audit rows
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
**Motivation**
Deleting a channel message correctly leaves a relay-generated `message_deleted` system row such as “Clara removed a message.” That preserves the shared audit trail, but it also means a user who prefers a clean channel has no way to clear the resulting visual clutter.
Deleting the system row is not a solution: the relay processes that deletion by emitting another `message_deleted` row, so the number of visible stubs does not decrease.
**Proposed solution**
Add a Desktop action to **Hide for me** on an individual `message_deleted` system row.
The action should:
- affect only the current user and device/account preference;
- leave the relay event and shared audit record untouched;
- remove the selected row from that user’s timeline;
- provide a way to restore hidden system rows, either through an immediate Undo action or a small settings surface.
Suggested implementation shape: persist a bounded set of hidden system-event IDs, scoped by community and channel, and filter those IDs before rendering the timeline. This is presentation state, not event deletion.
**Alternatives considered**
- **Delete the audit row:** does not work because the relay emits a replacement `message_deleted` row after every successful deletion.
- **Suppress deletion rows globally:** removes useful audit context for every channel member and changes shared behavior for a personal display preference.
- **Automatically expire deletion rows:** reduces clutter but introduces a global retention policy and gives the user no direct control.
**Additional context**
- Reproduced on Buzz Desktop 0.5.10.
- Current rendering path: `desktop/src/features/messages/ui/SystemMessageRow.tsx` renders `message_deleted` as “removed a message.”
- Current relay path: `crates/buzz-relay/src/handlers/side_effects.rs` soft-deletes the target and emits a new `message_deleted` kind:40099 system event.
- Searched open issues and PRs for “removed a message,” `message_deleted`, system-message hiding, and tombstone hiding; no direct duplicate found.
- Closest related issue: #5512 notes that deleting membership/system rows produces a visible deletion tombstone, but its requested fix is import-specific suppression rather than a user-controlled local hide.
**Acceptance criteria**
- A user can hide one `message_deleted` row without publishing a deletion event.
- The row remains visible to other channel members unless they hide it themselves.
- The hidden state survives a Desktop restart.
- The user can restore the row.
- Hidden-row storage is bounded or pruned so it does not grow indefinitely.
Contributor guide
Research direction
Start at desktop/src/features/messages/ui/SystemMessageRow.tsx and the relay behavior in crates/buzz-relay/src/handlers/side_effects.rs, then trace how Desktop persists account or channel display preferences and filters timeline rows. Done means a bounded, restart-persistent local hide and restore flow for individual message_deleted rows, without publishing or changing the shared relay event.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, typescript
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100