Skip to content

feat(dm): "Hidden conversations" sub-menu to un-hide DM threads #266

@sanity

Description

@sanity

Problem

PR #265 (issue #261) implemented the local-only hide-stale-DM-threads filter for the left rail. The original issue marked a "Hidden conversations" sub-menu as optional for v1, so it was deferred — but it should be tracked.

Today, a thread can be un-hidden only by:

  1. Sending an outbound DM to the peer (calls unhide_dm_thread via the Codex P1 fix).
  2. Receiving a new inbound DM from the peer (strict > on last_any_ts revives the thread via the filter).

There is no UI path to un-hide a thread if the user just changed their mind. The hidden entry persists across reloads (it rides OUTBOUND_DMS_STORAGE_KEY) and across devices, so a misclick on Hide is recoverable only via one of the two implicit paths above.

Approach

The infrastructure is already in place:

  • unhide_dm_thread(room_owner_vk, peer) in ui/src/components/app/chat_delegate.rs is implemented, tombstoned-against-late-hydration (Codex P3), and unit-tested.
  • HIDDEN_DM_THREADS is a GlobalSignal<HashMap<(VerifyingKey, MemberId), HiddenDmThreadEntry>> so a submenu can iterate it directly.
  • The HiddenDmThreadEntry carries room_owner_vk + peer + hidden_at_ts. Resolving the room display name + peer nickname goes through the same path DmRailSection uses.

Suggested UX (open to revision):

  • Settings → "Hidden conversations" panel (or kebab menu in the DM rail header).
  • One row per hidden entry, showing room name + peer nickname + relative "hidden N days ago".
  • Click "Show again" → unhide_dm_thread(...) and the thread reappears in the rail.

Scope notes

References

[AI-assisted - Claude]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions