From bd0756c6ca6edd83149bfaf30a874d09bd9cbf0b Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 17 Feb 2026 17:41:14 +0100 Subject: [PATCH] Revert "Fix `/sync` missing membership in `state_after`" (#19474) Reverts element-hq/synapse#19463 The complement tests haven't been reviewed and require more testing. Discussed in the internal [backend team lobby](https://matrix.to/#/!SGNQGPGUwtcPBUotTL:matrix.org/$XDARK2u2iLL5wWaxiL6tJYkLg80Sn6yWWEQib8ahl5Q?via=jki.re&via=element.io&via=matrix.org) room. --- changelog.d/19463.bugfix | 1 - synapse/handlers/sync.py | 15 +++------------ 2 files changed, 3 insertions(+), 13 deletions(-) delete mode 100644 changelog.d/19463.bugfix diff --git a/changelog.d/19463.bugfix b/changelog.d/19463.bugfix deleted file mode 100644 index fe44c2ddf6..0000000000 --- a/changelog.d/19463.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix `/sync` missing membership event in `state_after` (experimental [MSC4222](https://github.com/matrix-org/matrix-spec-proposals/pull/4222) implementation) in some scenarios. diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index ab050adb26..72e91d66ac 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -1041,18 +1041,9 @@ class SyncHandler: if event.sender not in first_event_by_sender_map: first_event_by_sender_map[event.sender] = event - # When using `state_after`, there is no special treatment with - # regards to state also being in the `timeline`. Always fetch - # relevant membership regardless of whether the state event is in - # the `timeline`. - if sync_config.use_state_after: - members_to_fetch.add(event.sender) - # For `state`, the client is supposed to do a flawed re-construction - # of state over time by starting with the given `state` and layering - # on state from the `timeline` as you go (flawed because state - # resolution). In this case, we only need their membership in - # `state` when their membership isn't already in the `timeline`. - elif (EventTypes.Member, event.sender) not in timeline_state: + # We need the event's sender, unless their membership was in a + # previous timeline event. + if (EventTypes.Member, event.sender) not in timeline_state: members_to_fetch.add(event.sender) # FIXME: we also care about invite targets etc.