Skip to content

MSC4446: Allow moving the fully read marker to older events #19940

Description

@SpiritCroc

Tracking issue for MSC4446: Proposal for allowing the fully read marker to be moved from newer to older events.

Context

Historically, synapse would prevent read markers from being moved backwards. However this has not been explicitly required by the spec.

There's use cases for either behavior:

  • A client that advances the read marker automatically while the user scrolls and reads messages typically appreciates a server-side sanity check, such that stale clients do not move the marker towards older events by accident.
  • A client that exposes manual read marker control to the user may want to allow users to move it backwards explicitly, e.g. the user may long-press a message and decide to manually mark it as unread. Then this explicit action justifies bypassing the check and allow moving backwards as well.

Thus MSC4446 adds a allow_backward parameter (com.beeper.allow_backward while unstable) for clients to configure which behavior they prefer, when calling either of the client-server API endpoints that allow moving the read marker.

Current design in synapse

Once #19663 is merged, MSC support can be configured using

experimental_features:
  msc4446_enabled: True

When the flag is off, allow_backward is ignored from the endpoints, and synapse keeps enforcing that read markers may only be moved forward.
When the flag is on, allow_backward is respected as specified in the MSC.

When to remove

  • Immediately upon MSC rejection.
  • When the MSC is accepted and merged into a future spec version, and synapse is ready to advertize support for the respective spec version via the /_matrix/client/versions endpoints, such that clients can still figure out that this feature is available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-ExperimentalFeatureTracking issues for experimental features in Synapse

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions