block / block/buzz

Desktop: allow local hiding of message-deletion audit rows

Open
#5,651 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.