element-hq / synapse

Synapse: Matrix homeserver written in Python/Twisted.
https://element-hq.github.io/synapse
GNU Affero General Public License v3.0
1.26k stars 155 forks source link

Sliding Sync: Add `is_tombstoned: false` filter in the defaults #17540

Open Hywan opened 1 month ago

Hywan commented 1 month ago

Description

Sliding Sync has default filter. is_tombstoned: false should be part of them.

Context https://github.com/element-hq/element-x-ios/issues/3105

Steps to reproduce

See https://github.com/element-hq/element-x-ios/issues/3105

Homeserver

matrix.org

Synapse Version

1.113.0rc1 (b=matrix-org-hotfixes,4907b7d459)

Installation Method

I don't know

Database

I don't know.

Workers

I don't know

Platform

I don't know.

Configuration

No response

Relevant log output

See https://github.com/element-hq/element-x-ios/issues/3105.

Anything else that would be useful to know?

No response

MadLittleMods commented 1 month ago

For reference, we've currently opted for the simple solution of including all rooms. I've asked previously about whether is_tombstoned matters with no response.

I assume you're actually after the include_old_rooms functionality vs an is_tombstoned filter which is specifically called out as something we shouldn't do in the spec. There is an important distinction between the two, include_old_rooms makes it so that when a room is upgraded, it doesn't suddenly disappear if you haven't joined the successor yet.

When include_old_rooms is implemented, the default is to not include old rooms. And if you want to include old rooms, you can request them by adding the include_old_rooms option. The only way to tell old rooms apart from other rooms is by requesting m.room.tombstone in the required_state and checking it.

{
  "lists": {
    "foo-list": {
      "ranges": [ [0,99] ],
      "required_state": [],
      "timeline_limit": 10,
      "include_old_rooms": {
        "timeline_limit": 1,
        "required_state": [ ["m.room.tombstone", ""], ["m.room.create", ""] ],
      }
    }
  }
}

But you can mimic this same functionality today by requesting "required_state": [ ["m.room.tombstone", ""] ] and doing the same checks yourself on the client.

This is currently prioritized under a "nice to have" in the project board.

Hywan commented 1 month ago

I've fixed my description… we need is_tombstoned: false, not true. The problem we have is that some users see old rooms that are tombstoned. Since the is_tombstoned filter has been removed, we can no longer control this.

In https://github.com/element-hq/element-x-ios/issues/3105, the user sees tombstoned rooms. We may filter them out on the client side, but it makes no sense to receive them at first.