Skip to content

Implement MSC4380: Invite blocking#19203

Merged
richvdh merged 5 commits intodevelopfrom
rav/invite_blocking
Nov 26, 2025
Merged

Implement MSC4380: Invite blocking#19203
richvdh merged 5 commits intodevelopfrom
rav/invite_blocking

Conversation

@richvdh
Copy link
Copy Markdown
Member

@richvdh richvdh commented Nov 18, 2025

MSC4380 aims to be a simplified implementation of MSC4155; the hope is that we can get it specced and rolled out rapidly, so that we can resolve the fact that matrix.org has enabled MSC4155.

The implementation leans heavily on what's already there for MSC4155.

It has its own experimental_features flag. If both MSC4155 and MSC4380 are enabled, and a user has both configurations set, then we prioritise the MSC4380 one.

Contributed wearing my 🎩 Spec Core Team hat.

Pull Request Checklist

  • Pull request is based on the develop branch
  • Pull request includes a changelog file. The entry should:
    • Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from EventStore to EventWorkerStore.".
    • Use markdown where necessary, mostly for code blocks.
    • End with either a period (.) or an exclamation mark (!).
    • Start with a capital letter.
    • Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry.
  • Code style is correct (run the linters)

@richvdh richvdh requested a review from a team as a code owner November 18, 2025 23:47
In particular, make `InviteRulesConfig` a base class which can have multiple
operations. To demonstarate it, use an `AllowAllInviteRulesConfig` class for
the common case where the user has no config.
An implementation of MSC4380, leaning heavily on what's already there for
MSC4155.

It has its own `experimental_features` flag. If both MSC4155 and MSC4380 are
enabled, and a user has both configurations set, then we prioritise the MSC4380
one.
@richvdh richvdh force-pushed the rav/invite_blocking branch from c491633 to 9df4502 Compare November 19, 2025 00:00
@MadLittleMods MadLittleMods changed the title Implement MSC4380 Implement MSC4380: Invite blocking Nov 19, 2025
Comment thread tests/handlers/test_room_member.py Outdated
self.bob_token = self.login("bob", "pass")

@override_config({"experimental_features": {"msc4380_enabled": True}})
def test_misc4380_block_invite_local(self) -> None:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels like we should just verify this behavior with some Complement tests instead

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't disagree that Complement tests would be nice to have (in addition), but having these tests mean we get a tighter development cycle and it's easier to test different combinations (eg what happens when msc4380 is disabled).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤷 We ran into this with the Sliding Sync tests. We naturally fell into writing Synapse tests but they would have much more benefit as Complement tests so other homeserver implementations can verify behavior.

(eg what happens when msc4380 is disabled).

Out-of-repo Complement tests can also be written for this kind of thing. For example, while we don't have this setup for the Synapse project, we do for the Secure Border Gateway, TI-Messenger Proxy, and Synapse Pro for small hosts. Something for the future here ⏩

Comment thread changelog.d/19203.feature Outdated
richvdh and others added 2 commits November 25, 2025 21:52
Co-authored-by: Eric Eastwood <erice@element.io>
@richvdh richvdh force-pushed the rav/invite_blocking branch from 0a2ba48 to 277619b Compare November 25, 2025 22:53
@richvdh
Copy link
Copy Markdown
Member Author

richvdh commented Nov 26, 2025

277619b makes some minor changes to the format of the account data, but I'm going to take the spirit of Eric's ✔️ and run with it.

@richvdh richvdh enabled auto-merge (squash) November 26, 2025 09:03
@richvdh richvdh merged commit c928347 into develop Nov 26, 2025
177 of 185 checks passed
@richvdh richvdh deleted the rav/invite_blocking branch November 26, 2025 16:12
reivilibre added a commit that referenced this pull request Dec 11, 2025
The team has decided to deprecate and stop publishing python wheels for MacOS.
Synapse docker images will continue to work on MacOS, as will building Synapse
from source (though note this requires a Rust compiler).

Admins using the unstable [MSC2666](matrix-org/matrix-spec-proposals#2666) endpoint (`/_matrix/client/unstable/uk.half-shot.msc2666/user/mutual_rooms`),
please check [the relevant section in the upgrade notes](https://github.com/element-hq/synapse/blob/develop/docs/upgrade.md#upgrading-to-v11440) as this release contains changes
that disable that endpoint by default.

No significant changes since 1.144.0rc1.

Admins using the unstable [MSC2666](matrix-org/matrix-spec-proposals#2666) endpoint (`/_matrix/client/unstable/uk.half-shot.msc2666/user/mutual_rooms`), please check [the relevant section in the upgrade notes](https://github.com/element-hq/synapse/blob/develop/docs/upgrade.md#upgrading-to-v11440) as this release contains changes that disable that endpoint by default.

- Add experimentatal implememntation of [MSC4380](matrix-org/matrix-spec-proposals#4380) (invite blocking). ([\#19203](#19203))
- Allow restarting delayed event timeouts on workers. ([\#19207](#19207))

- Fix a bug in the database function for fetching state deltas that could result in unnecessarily long query times. ([\#18960](#18960))
- Fix v12 rooms when running with `use_frozen_dicts: True`. ([\#19235](#19235))
- Fix bug where invalid `canonical_alias` content would return 500 instead of 400. ([\#19240](#19240))
- Fix bug where `Duration` was logged incorrectly. ([\#19267](#19267))

- Document in the `--config-path` help how multiple files are merged - by merging them shallowly. ([\#19243](#19243))

- Stop building release wheels for MacOS. ([\#19225](#19225))

- Improve event filtering for Simplified Sliding Sync. ([\#17782](#17782))
- Export `SYNAPSE_SUPPORTED_COMPLEMENT_TEST_PACKAGES` environment variable from `scripts-dev/complement.sh`. ([\#19208](#19208))
- Refactor `scripts-dev/complement.sh` logic to avoid `exit` to facilitate being able to source it from other scripts (composable). ([\#19209](#19209))
- Expire sliding sync connections that are too old or have too much pending data. ([\#19211](#19211))
- Require an experimental feature flag to be enabled in order for the unstable [MSC2666](matrix-org/matrix-spec-proposals#2666) endpoint (`/_matrix/client/unstable/uk.half-shot.msc2666/user/mutual_rooms`) to be available. ([\#19219](#19219))
- Prevent changelog check CI running on @dependabot's PRs even when a human has modified the branch. ([\#19220](#19220))
- Auto-fix trailing spaces in multi-line strings and comments when running the lint script. ([\#19221](#19221))
- Move towards using a dedicated `Duration` type. ([\#19223](#19223), [\#19229](#19229))
- Improve robustness of the SQL schema linting in CI. ([\#19224](#19224))
- Add log to determine whether clients are using `/messages` as expected. ([\#19226](#19226))
- Simplify README and add ESS Getting started section. ([\#19228](#19228), [\#19259](#19259))
- Add a unit test for ensuring associated refresh tokens are erased when a device is deleted. ([\#19230](#19230))
- Prompt user to consider adding future deprecations to the changelog in release script. ([\#19239](#19239))
- Fix check of the Rust compiled code being outdated when using source checkout and `.egg-info`. ([\#19251](#19251))
- Stop building macos wheels in CI pipeline. ([\#19263](#19263))

* Bump Swatinem/rust-cache from 2.8.1 to 2.8.2. ([\#19244](#19244))
* Bump actions/checkout from 5.0.0 to 6.0.0. ([\#19213](#19213))
* Bump actions/setup-go from 6.0.0 to 6.1.0. ([\#19214](#19214))
* Bump actions/setup-python from 6.0.0 to 6.1.0. ([\#19245](#19245))
* Bump attrs from 25.3.0 to 25.4.0. ([\#19215](#19215))
* Bump docker/metadata-action from 5.9.0 to 5.10.0. ([\#19246](#19246))
* Bump http from 1.3.1 to 1.4.0. ([\#19249](#19249))
* Bump pydantic from 2.12.4 to 2.12.5. ([\#19250](#19250))
* Bump pyopenssl from 25.1.0 to 25.3.0. ([\#19248](#19248))
* Bump rpds-py from 0.28.0 to 0.29.0. ([\#19216](#19216))
* Bump rpds-py from 0.29.0 to 0.30.0. ([\#19247](#19247))
* Bump sentry-sdk from 2.44.0 to 2.46.0. ([\#19218](#19218))
* Bump types-bleach from 6.2.0.20250809 to 6.3.0.20251115. ([\#19217](#19217))
* Bump types-jsonschema from 4.25.1.20250822 to 4.25.1.20251009. ([\#19252](#19252))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants