Skip to content

Member events for sender of events in sync timeline missing from state_after #19455

@dbkr

Description

@dbkr

Description

In an initial /sync request, the state_after events don't include the member events for the heroes in a room. This causes Element Web to be missing display name / avatar data for DM targets.

Spawning from https://github.com/element-hq/customer-success/issues/656 but I also have a local reproduction now.

Also discussed in the internal backend team lobby room.

Steps to reproduce

  1. Have a synapse with state_after enabled and a recent Element Web
  2. Create DM with someone
  3. Accept the invite to the DM on whatever other client
  4. Have another room, focus that room
  5. Refresh Element Web

Notice that, in the room list, the room is now listed as the raw user_id of the DM target.

Alternatively, do sync request like this:

http://localhost:8008/_matrix/client/v3/sync?filter=%7B%22room%22%3A%7B%22timeline%22%3A%7B%22unread_thread_notifications%22%3Atrue%2C%22limit%22%3A20%7D%2C%22state%22%3A%7B%22lazy_load_members%22%3Atrue%7D%7D%7D&timeout=0&org.matrix.msc4222.use_state_after=true&_cacheBuster=1770830976329

In that sync response, observe that the target of the DM appears in heroes but their member event does not appear in state_after.

From the spec, I believe heroes should always be included in the state for a room in the initial sync (whether it's state or state_after).

Homeserver

localhost

Synapse Version

52fb6e9

Installation Method

Other (please mention below)

Database

sqlite

Workers

Single process

Platform

ESS + running locally from develop source

Configuration

No response

Relevant log output

2026-02-11 18:18:55,705 - synapse.config.logger - 377 - WARNING - main - ***** STARTING SERVER *****
2026-02-11 18:18:55,705 - synapse.config.logger - 378 - WARNING - main - Server /Users/dave/matrix/synapse/synapse/app/homeserver.py version 1.147.0 (b=develop,52fb6e98ac)
2026-02-11 18:18:55,705 - synapse.config.logger - 383 - WARNING - main - Copyright (c) 2023 New Vector, Inc
2026-02-11 18:18:55,705 - synapse.config.logger - 384 - WARNING - main - Licensed under the AGPL 3.0 license. Website: https://github.com/element-hq/synapse
2026-02-11 18:18:55,705 - synapse.config.logger - 387 - INFO - main - Server hostname: localhost
2026-02-11 18:18:55,705 - synapse.config.logger - 388 - INFO - main - Public Base URL: https://localhost/
2026-02-11 18:18:55,705 - synapse.config.logger - 389 - INFO - main - Instance name: master
2026-02-11 18:18:55,705 - synapse.config.logger - 390 - INFO - main - Twisted reactor: SelectReactor
2026-02-11 18:18:55,705 - synapse.app.homeserver - 417 - INFO - main - Setting up server
2026-02-11 18:18:55,705 - synapse.server - 634 - INFO - main - Setting up.
2026-02-11 18:18:55,706 - synapse.storage.databases - 92 - INFO - main - [database config 'master']: Checking database server
2026-02-11 18:18:55,706 - synapse.storage.databases - 95 - INFO - main - [database config 'master']: Preparing for databases ['main', 'state']
2026-02-11 18:18:55,707 - synapse.storage.prepare_database - 132 - INFO - main - ['main', 'state']: Checking existing schema version
2026-02-11 18:18:55,707 - synapse.storage.prepare_database - 136 - INFO - main - ['main', 'state']: Existing schema is 93 (+5 deltas)
2026-02-11 18:18:55,707 - synapse.storage.databases.main - 401 - INFO - main - Checking database for consistency with configuration...
2026-02-11 18:18:55,707 - synapse.storage.prepare_database - 430 - INFO - main - Applying schema deltas for v93
2026-02-11 18:18:55,707 - synapse.storage.prepare_database - 565 - INFO - main - Schema now up to date
2026-02-11 18:18:55,708 - synapse.storage.databases - 110 - INFO - main - [database config 'master']: Starting 'main' database
2026-02-11 18:18:55,710 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for push_rules(id): 1
2026-02-11 18:18:55,712 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for push_rules_enable(id): 1
2026-02-11 18:18:55,712 - synapse.storage.databases.main.event_push_actions - 1238 - INFO - main - Searching for stream ordering 1 month ago
2026-02-11 18:18:55,712 - synapse.storage.databases.main.event_push_actions - 1242 - INFO - main - Found stream ordering 1 month ago: it's 10
2026-02-11 18:18:55,712 - synapse.storage.databases.main.event_push_actions - 1245 - INFO - main - Searching for stream ordering 1 day ago
2026-02-11 18:18:55,712 - synapse.storage.databases.main.event_push_actions - 1249 - INFO - main - Found stream ordering 1 day ago: it's 10
2026-02-11 18:18:55,713 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for access_tokens(id): 2
2026-02-11 18:18:55,713 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for refresh_tokens(id): 1
2026-02-11 18:18:55,713 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for event_reports(id): 1
2026-02-11 18:18:55,713 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for room_reports(id): 1
2026-02-11 18:18:55,713 - synapse.storage.util.id_generators - 91 - INFO - main - Initialising stream generator for user_reports(id): 1
2026-02-11 18:18:55,713 - synapse.storage.databases - 127 - INFO - main - [database config 'master']: Starting 'state' database
2026-02-11 18:18:55,714 - synapse.storage.databases - 143 - INFO - main - [database config 'master']: prepared
2026-02-11 18:18:55,714 - synapse.server - 637 - INFO - main - Finished setting up.
2026-02-11 18:18:55,714 - twisted - 273 - INFO - main - Redirected stdout/stderr to logs
2026-02-11 18:18:55,714 - synapse.app.homeserver - 213 - INFO - main - Running
2026-02-11 18:18:55,714 - synapse.app.homeserver - 36 - INFO - main - Set file limit to: 9223372036854775807
2026-02-11 18:18:55,714 - synapse.metrics._gc - 130 - INFO - main - Collecting gc 2
2026-02-11 18:18:55,762 - synapse.push.pusher - 45 - INFO - call_when_running - email enable notifs: False
2026-02-11 18:18:55,776 - synapse.federation.federation_server - 1449 - INFO - call_when_running - Registering federation query handler for 'profile'
2026-02-11 18:18:55,776 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.device_list_update'
2026-02-11 18:18:55,776 - synapse.util.caches.lrucache - 241 - INFO - call_when_running - Expiring LRU caches after 1800 seconds
2026-02-11 18:18:55,778 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.presence'
2026-02-11 18:18:55,778 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.typing'
2026-02-11 18:18:55,778 - synapse.federation.federation_server - 1449 - INFO - call_when_running - Registering federation query handler for 'directory'
2026-02-11 18:18:55,780 - synapse.handlers.deactivate_account - 281 - INFO - user_parter_loop-0 - Starting user parter
2026-02-11 18:18:55,780 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.receipt'
2026-02-11 18:18:55,781 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.signing_key_update'
2026-02-11 18:18:55,781 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'org.matrix.signing_key_update'
2026-02-11 18:18:55,781 - synapse.federation.federation_server - 1449 - INFO - call_when_running - Registering federation query handler for 'client_keys'
2026-02-11 18:18:55,781 - synapse.federation.federation_server - 1429 - INFO - call_when_running - Registering federation EDU handler for 'm.direct_to_device'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.health.HealthResource object at 0x10d1a4c20> to path b'/health'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.ClientRestResource object at 0x10d1a4d70> to path b'/_matrix/client'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <twisted.web.resource.Resource object at 0x10d23ba10> to path b'/.well-known'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.http.server.JsonResource object at 0x10d22aba0> to path b'/_synapse/admin'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.synapse.client.pick_idp.PickIdpResource object at 0x10d23be00> to path b'/_synapse/client/pick_idp'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <twisted.web.resource.Resource object at 0x10d230690> to path b'/_synapse/client/pick_username'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.synapse.client.new_user_consent.NewUserConsentResource object at 0x10d240440> to path b'/_synapse/client/new_user_consent'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.synapse.client.sso_register.SsoRegisterResource object at 0x10d240590> to path b'/_synapse/client/sso_register'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.synapse.client.unsubscribe.UnsubscribeResource object at 0x10d2406e0> to path b'/_synapse/client/unsubscribe'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching FilePath('/Users/dave/matrix/synapse/synapse/static') to path b'/_matrix/static'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.media.media_repository_resource.MediaRepositoryResource object at 0x10d240ad0> to path b'/_matrix/media/r0'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.media.media_repository_resource.MediaRepositoryResource object at 0x10d240ad0> to path b'/_matrix/media/v3'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.media.media_repository_resource.MediaRepositoryResource object at 0x10d240ad0> to path b'/_matrix/media/v1'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.federation.transport.server.TransportLayerServer object at 0x10d241400> to path b'/_matrix/federation'
2026-02-11 18:18:55,784 - synapse.util.httpresourcetree - 55 - INFO - call_when_running - Attaching <synapse.rest.key.v2.KeyResource object at 0x10d258050> to path b'/_matrix/key'
2026-02-11 18:18:55,786 - twisted - 273 - INFO - call_when_running - SynapseSite starting on 8008
2026-02-11 18:18:55,786 - twisted - 273 - INFO - call_when_running - SynapseSite starting on 8008
2026-02-11 18:18:55,786 - synapse.app._base - 509 - INFO - call_when_running - Synapse now listening on TCP port 8008
2026-02-11 18:18:55,820 - synapse.storage.background_updates - 416 - INFO - background_updates-0 - Starting background schema updates for database master
2026-02-11 18:18:55,821 - synapse.handlers.deactivate_account - 291 - INFO - user_parter_loop-0 - User parter finished: stopping
2026-02-11 18:18:55,821 - synapse.push.pusherpool - 382 - INFO - start_pushers-0 - Started pushers
2026-02-11 18:18:55,822 - synapse.storage.background_updates - 434 - INFO - background_updates-0 - No more background updates to do. Unscheduling background update task.
2026-02-11 18:18:56,153 - synapse.access.http.8008 - 641 - INFO - GET-0 - ::1 - 8008 - {@davetest:localhost} Processed request: 0.024sec/0.000sec (0.000sec, 0.000sec) (0.007sec/0.012sec/50) 18292B 200 "GET /_matrix/client/v3/sync?filter=%7B%22room%22%3A%7B%22timeline%22%3A%7B%22unread_thread_notifications%22%3Atrue%2C%22limit%22%3A20%7D%2C%22state%22%3A%7B%22lazy_load_members%22%3Atrue%7D%7D%7D&timeout=0&org.matrix.msc4222.use_state_after=true&_cacheBuster=1770830976329 HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" [18 dbevts]
2026-02-11 18:18:57,389 - synapse.access.http.8008 - 641 - INFO - GET-1 - ::1 - 8008 - {None} Processed request: 0.000sec/0.000sec (0.000sec, 0.000sec) (0.000sec/0.000sec/0) 1210B 200 "GET /_matrix/client/versions HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" [0 dbevts]
2026-02-11 18:18:57,481 - synapse.access.http.8008 - 641 - INFO - GET-3 - ::1 - 8008 - {@davetest:localhost} Processed request: 0.002sec/0.000sec (0.000sec, 0.000sec) (0.000sec/0.000sec/4) 159B 200 "GET /_matrix/client/v3/sync?filter=0&timeout=0&org.matrix.msc4222.use_state_after=true&set_presence=unavailable&since=s27_1753_0_63_57_1_2_21_0_1_1_1 HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" [0 dbevts]
2026-02-11 18:18:57,954 - twisted - 273 - INFO - sentinel - Received SIGINT, shutting down.
2026-02-11 18:18:57,955 - synapse.storage.databases.main.lock - 117 - INFO - LockStore._on_shutdown-0 - Dropping held locks due to shutdown
2026-02-11 18:18:57,955 - synapse.storage.databases.main.lock - 128 - INFO - LockStore._on_shutdown-0 - Dropped locks due to shutdown
2026-02-11 18:18:57,956 - synapse.handlers.presence - 910 - INFO - PresenceHandler._on_shutdown-0 - Performing _on_shutdown. Persisting 1 unpersisted changes
2026-02-11 18:18:57,956 - synapse.app._base - 740 - INFO - log_shutdown - Shutting down...
2026-02-11 18:18:57,956 - synapse.http.site - 553 - INFO - GET-5 - Connection from client lost before response was sent
2026-02-11 18:18:57,956 - twisted - 273 - INFO - sentinel - (TCP Port 8008 Closed)
2026-02-11 18:18:57,956 - twisted - 273 - INFO - sentinel - (TCP Port 8008 Closed)
2026-02-11 18:18:57,958 - twisted - 273 - INFO - sentinel - Main loop terminated.

Anything else that would be useful to know?

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions