summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Robertson <davidr@element.io>2022-05-10 13:17:56 +0100
committerDavid Robertson <davidr@element.io>2022-05-10 13:17:56 +0100
commit2aad0ae57fc4fa4a57b2764065687e00b99de82a (patch)
tree4428b17d06a6a036a37fc104e9713d18a584808a
parentMove free functions into PushRuleEvaluatorForEvent. (#12677) (diff)
parentother fixes (diff)
downloadsynapse-2aad0ae57fc4fa4a57b2764065687e00b99de82a.tar.xz
Merge tag 'v1.59.0rc1' into develop
Synapse 1.59.0rc1 (2022-05-10)
==============================

This release makes several changes that server administrators should be aware of:

- Device name lookup over federation is now disabled by default. ([\#12616](https://github.com/matrix-org/synapse/issues/12616))
- The `synapse.app.appservice` and `synapse.app.user_dir` worker application types are now deprecated. ([\#12452](https://github.com/matrix-org/synapse/issues/12452), [\#12654](https://github.com/matrix-org/synapse/issues/12654))

See [the upgrade notes](https://github.com/matrix-org/synapse/blob/develop/docs/upgrade.md#upgrading-to-v1590) for more details.

Additionally, this release removes the non-standard `m.login.jwt` login type from Synapse. It can be replaced with `org.matrix.login.jwt` for identical behaviour. This is only used if `jwt_config.enabled` is set to `true` in the configuration. ([\#12597](https://github.com/matrix-org/synapse/issues/12597))

Features
--------

- Support [MSC3266](https://github.com/matrix-org/matrix-doc/pull/3266) room summaries over federation. ([\#11507](https://github.com/matrix-org/synapse/issues/11507))
- Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner. ([\#12168](https://github.com/matrix-org/synapse/issues/12168), [\#12635](https://github.com/matrix-org/synapse/issues/12635), [\#12636](https://github.com/matrix-org/synapse/issues/12636), [\#12670](https://github.com/matrix-org/synapse/issues/12670))
- Extend the [module API](https://github.com/matrix-org/synapse/blob/release-v1.59/synapse/module_api/__init__.py) to allow modules to change actions for existing push rules of local users. ([\#12406](https://github.com/matrix-org/synapse/issues/12406))
- Add the `notify_appservices_from_worker` configuration option (superseding `notify_appservices`) to allow a generic worker to be designated as the worker to send traffic to Application Services. ([\#12452](https://github.com/matrix-org/synapse/issues/12452))
- Add the `update_user_directory_from_worker` configuration option (superseding `update_user_directory`) to allow a generic worker to be designated as the worker to update the user directory. ([\#12654](https://github.com/matrix-org/synapse/issues/12654))
- Add new `enable_registration_token_3pid_bypass` configuration option to allow registrations via token as an alternative to verifying a 3pid. ([\#12526](https://github.com/matrix-org/synapse/issues/12526))
- Implement [MSC3786](https://github.com/matrix-org/matrix-spec-proposals/pull/3786): Add a default push rule to ignore `m.room.server_acl` events. ([\#12601](https://github.com/matrix-org/synapse/issues/12601))
- Add new `mau_appservice_trial_days` configuration option to specify a different trial period for users registered via an appservice. ([\#12619](https://github.com/matrix-org/synapse/issues/12619))

Bugfixes
--------

- Fix a bug introduced in Synapse 1.48.0 where the latest thread reply provided failed to include the proper bundled aggregations. ([\#12273](https://github.com/matrix-org/synapse/issues/12273))
- Fix a bug introduced in Synapse 1.22.0 where attempting to send a large amount of read receipts to an application service all at once would result in duplicate content and abnormally high memory usage. Contributed by Brad & Nick @ Beeper. ([\#12544](https://github.com/matrix-org/synapse/issues/12544))
- Fix a bug introduced in Synapse 1.57.0 which could cause `Failed to calculate hosts in room` errors to be logged for outbound federation. ([\#12570](https://github.com/matrix-org/synapse/issues/12570))
- Fix a long-standing bug where status codes would almost always get logged as `200!`, irrespective of the actual status code, when clients disconnect before a request has finished processing. ([\#12580](https://github.com/matrix-org/synapse/issues/12580))
- Fix race when persisting an event and deleting a room that could lead to outbound federation breaking. ([\#12594](https://github.com/matrix-org/synapse/issues/12594))
- Fix a bug introduced in Synapse 1.53.0 where bundled aggregations for annotations/edits were incorrectly calculated. ([\#12633](https://github.com/matrix-org/synapse/issues/12633))
- Fix a long-standing bug where rooms containing power levels with string values could not be upgraded. ([\#12657](https://github.com/matrix-org/synapse/issues/12657))
- Prevent memory leak from reoccurring when presence is disabled. ([\#12656](https://github.com/matrix-org/synapse/issues/12656))

Updates to the Docker image
---------------------------

- Explicitly opt-in to using [BuildKit-specific features](https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md) in the Dockerfile. This fixes issues with building images in some GitLab CI environments. ([\#12541](https://github.com/matrix-org/synapse/issues/12541))
- Update the "Build docker images" GitHub Actions workflow to use `docker/metadata-action` to generate docker image tags, instead of a custom shell script. Contributed by @henryclw. ([\#12573](https://github.com/matrix-org/synapse/issues/12573))

Improved Documentation
----------------------

- Update SQL statements and replace use of old table `user_stats_historical` in docs for Synapse Admins. ([\#12536](https://github.com/matrix-org/synapse/issues/12536))
- Add missing linebreak to `pipx` install instructions. ([\#12579](https://github.com/matrix-org/synapse/issues/12579))
- Add information about the TCP replication module to docs. ([\#12621](https://github.com/matrix-org/synapse/issues/12621))
- Fixes to the formatting of `README.rst`. ([\#12627](https://github.com/matrix-org/synapse/issues/12627))
- Fix docs on how to run specific Complement tests using the `complement.sh` test runner. ([\#12664](https://github.com/matrix-org/synapse/issues/12664))

Deprecations and Removals
-------------------------

- Remove unstable identifiers from [MSC3069](https://github.com/matrix-org/matrix-doc/pull/3069). ([\#12596](https://github.com/matrix-org/synapse/issues/12596))
- Remove the unspecified `m.login.jwt` login type and the unstable `uk.half-shot.msc2778.login.application_service` from
  [MSC2778](https://github.com/matrix-org/matrix-doc/pull/2778). ([\#12597](https://github.com/matrix-org/synapse/issues/12597))
- Synapse now requires at least Python 3.7.1 (up from 3.7.0), for compatibility with the latest Twisted trunk. ([\#12613](https://github.com/matrix-org/synapse/issues/12613))

Internal Changes
----------------

- Use supervisord to supervise Postgres and Caddy in the Complement image to reduce restart time. ([\#12480](https://github.com/matrix-org/synapse/issues/12480))
- Immediately retry any requests that have backed off when a server comes back online. ([\#12500](https://github.com/matrix-org/synapse/issues/12500))
- Use `make_awaitable` instead of `defer.succeed` for return values of mocks in tests. ([\#12505](https://github.com/matrix-org/synapse/issues/12505))
- Consistently check if an object is a `frozendict`. ([\#12564](https://github.com/matrix-org/synapse/issues/12564))
- Protect module callbacks with read semantics against cancellation. ([\#12568](https://github.com/matrix-org/synapse/issues/12568))
- Improve comments and error messages around access tokens. ([\#12577](https://github.com/matrix-org/synapse/issues/12577))
- Improve docstrings for the receipts store. ([\#12581](https://github.com/matrix-org/synapse/issues/12581))
- Use constants for read-receipts in tests. ([\#12582](https://github.com/matrix-org/synapse/issues/12582))
- Log status code of cancelled requests as 499 and avoid logging stack traces for them. ([\#12587](https://github.com/matrix-org/synapse/issues/12587), [\#12663](https://github.com/matrix-org/synapse/issues/12663))
- Remove special-case for `twisted` logger from default log config. ([\#12589](https://github.com/matrix-org/synapse/issues/12589))
- Use `getClientAddress` instead of the deprecated `getClientIP`. ([\#12599](https://github.com/matrix-org/synapse/issues/12599))
- Add link to documentation in Grafana Dashboard. ([\#12602](https://github.com/matrix-org/synapse/issues/12602))
- Reduce log spam when running multiple event persisters. ([\#12610](https://github.com/matrix-org/synapse/issues/12610))
- Add extra debug logging to federation sender. ([\#12614](https://github.com/matrix-org/synapse/issues/12614))
- Prevent remote homeservers from requesting local user device names by default. ([\#12616](https://github.com/matrix-org/synapse/issues/12616))
- Add a consistency check on events which we read from the database. ([\#12620](https://github.com/matrix-org/synapse/issues/12620))
- Remove use of the `constantly` library and switch to enums for `EventRedactBehaviour`. Contributed by @andrewdoh. ([\#12624](https://github.com/matrix-org/synapse/issues/12624))
- Remove unused code related to receipts. ([\#12632](https://github.com/matrix-org/synapse/issues/12632))
- Minor improvements to the scripts for running Synapse in worker mode under Complement. ([\#12637](https://github.com/matrix-org/synapse/issues/12637))
- Move `pympler` back in to the `all` extras. ([\#12652](https://github.com/matrix-org/synapse/issues/12652))
- Fix spelling of `M_UNRECOGNIZED` in comments. ([\#12665](https://github.com/matrix-org/synapse/issues/12665))
- Release script: confirm the commit to be tagged before tagging. ([\#12556](https://github.com/matrix-org/synapse/issues/12556))
- Fix a typo in the announcement text generated by the Synapse release development script. ([\#12612](https://github.com/matrix-org/synapse/issues/12612))

- Fix scripts-dev to pass typechecking. ([\#12356](https://github.com/matrix-org/synapse/issues/12356))
- Add some type hints to datastore. ([\#12485](https://github.com/matrix-org/synapse/issues/12485))
- Remove unused `# type: ignore`s. ([\#12531](https://github.com/matrix-org/synapse/issues/12531))
- Allow unused `# type: ignore` comments in bleeding edge CI jobs. ([\#12576](https://github.com/matrix-org/synapse/issues/12576))
- Remove redundant lines of config from `mypy.ini`. ([\#12608](https://github.com/matrix-org/synapse/issues/12608))
- Update to mypy 0.950. ([\#12650](https://github.com/matrix-org/synapse/issues/12650))
- Use `Concatenate` to better annotate `_do_execute`. ([\#12666](https://github.com/matrix-org/synapse/issues/12666))
- Use `ParamSpec` to refine type hints. ([\#12667](https://github.com/matrix-org/synapse/issues/12667))
- Fix mypy against latest pillow stubs. ([\#12671](https://github.com/matrix-org/synapse/issues/12671))
-rw-r--r--CHANGES.md103
-rw-r--r--changelog.d/11507.feature1
-rw-r--r--changelog.d/12168.feature1
-rw-r--r--changelog.d/12273.bugfix1
-rw-r--r--changelog.d/12356.misc1
-rw-r--r--changelog.d/12406.feature1
-rw-r--r--changelog.d/12452.feature1
-rw-r--r--changelog.d/12480.misc1
-rw-r--r--changelog.d/12485.misc1
-rw-r--r--changelog.d/12500.misc1
-rw-r--r--changelog.d/12505.misc1
-rw-r--r--changelog.d/12526.feature1
-rw-r--r--changelog.d/12531.misc1
-rw-r--r--changelog.d/12536.doc1
-rw-r--r--changelog.d/12541.docker1
-rw-r--r--changelog.d/12544.bugfix1
-rw-r--r--changelog.d/12556.misc1
-rw-r--r--changelog.d/12564.misc1
-rw-r--r--changelog.d/12568.misc1
-rw-r--r--changelog.d/12570.bugfix1
-rw-r--r--changelog.d/12573.docker1
-rw-r--r--changelog.d/12576.misc1
-rw-r--r--changelog.d/12577.misc1
-rw-r--r--changelog.d/12579.doc1
-rw-r--r--changelog.d/12580.bugfix1
-rw-r--r--changelog.d/12581.misc1
-rw-r--r--changelog.d/12582.misc1
-rw-r--r--changelog.d/12587.misc1
-rw-r--r--changelog.d/12589.misc1
-rw-r--r--changelog.d/12594.bugfix1
-rw-r--r--changelog.d/12596.removal1
-rw-r--r--changelog.d/12597.removal2
-rw-r--r--changelog.d/12599.misc1
-rw-r--r--changelog.d/12601.feature1
-rw-r--r--changelog.d/12602.misc1
-rw-r--r--changelog.d/12608.misc1
-rw-r--r--changelog.d/12610.misc1
-rw-r--r--changelog.d/12612.bugfix1
-rw-r--r--changelog.d/12613.removal1
-rw-r--r--changelog.d/12614.misc1
-rw-r--r--changelog.d/12616.misc1
-rw-r--r--changelog.d/12619.feature1
-rw-r--r--changelog.d/12620.misc1
-rw-r--r--changelog.d/12621.doc1
-rw-r--r--changelog.d/12624.misc1
-rw-r--r--changelog.d/12627.doc1
-rw-r--r--changelog.d/12632.misc1
-rw-r--r--changelog.d/12633.bugfix1
-rw-r--r--changelog.d/12635.feature1
-rw-r--r--changelog.d/12636.feature1
-rw-r--r--changelog.d/12637.misc1
-rw-r--r--changelog.d/12639.bugfix1
-rw-r--r--changelog.d/12650.misc1
-rw-r--r--changelog.d/12652.misc1
-rw-r--r--changelog.d/12656.misc1
-rw-r--r--changelog.d/12657.bugfix1
-rw-r--r--changelog.d/12663.misc1
-rw-r--r--changelog.d/12664.doc1
-rw-r--r--changelog.d/12665.misc1
-rw-r--r--changelog.d/12666.misc1
-rw-r--r--changelog.d/12667.misc1
-rw-r--r--changelog.d/12670.feature1
-rw-r--r--changelog.d/12671.misc1
-rw-r--r--debian/changelog5
-rw-r--r--docs/upgrade.md25
-rw-r--r--docs/workers.md26
-rw-r--r--pyproject.toml2
-rw-r--r--synapse/app/admin_cmd.py2
-rw-r--r--synapse/app/generic_worker.py16
-rw-r--r--synapse/config/server.py4
-rw-r--r--synapse/config/workers.py7
-rw-r--r--synapse/handlers/user_directory.py2
-rw-r--r--tests/config/test_workers.py27
73 files changed, 179 insertions, 103 deletions
diff --git a/CHANGES.md b/CHANGES.md
index 88b053897e..c625e4d561 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,8 +1,105 @@
-Synapse 1.59.0
-==============
+Synapse 1.59.0rc1 (2022-05-10)
+==============================
+
+This release makes several changes that server administrators should be aware of:
+
+- Device name lookup over federation is now disabled by default. ([\#12616](https://github.com/matrix-org/synapse/issues/12616))
+- The `synapse.app.appservice` and `synapse.app.user_dir` worker application types are now deprecated. ([\#12452](https://github.com/matrix-org/synapse/issues/12452), [\#12654](https://github.com/matrix-org/synapse/issues/12654))
+
+See [the upgrade notes](https://github.com/matrix-org/synapse/blob/develop/docs/upgrade.md#upgrading-to-v1590) for more details.
+
+Additionally, this release removes the non-standard `m.login.jwt` login type from Synapse. It can be replaced with `org.matrix.login.jwt` for identical behaviour. This is only used if `jwt_config.enabled` is set to `true` in the configuration. ([\#12597](https://github.com/matrix-org/synapse/issues/12597))
+
+Features
+--------
+
+- Support [MSC3266](https://github.com/matrix-org/matrix-doc/pull/3266) room summaries over federation. ([\#11507](https://github.com/matrix-org/synapse/issues/11507))
+- Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner. ([\#12168](https://github.com/matrix-org/synapse/issues/12168), [\#12635](https://github.com/matrix-org/synapse/issues/12635), [\#12636](https://github.com/matrix-org/synapse/issues/12636), [\#12670](https://github.com/matrix-org/synapse/issues/12670))
+- Extend the [module API](https://github.com/matrix-org/synapse/blob/release-v1.59/synapse/module_api/__init__.py) to allow modules to change actions for existing push rules of local users. ([\#12406](https://github.com/matrix-org/synapse/issues/12406))
+- Add the `notify_appservices_from_worker` configuration option (superseding `notify_appservices`) to allow a generic worker to be designated as the worker to send traffic to Application Services. ([\#12452](https://github.com/matrix-org/synapse/issues/12452))
+- Add the `update_user_directory_from_worker` configuration option (superseding `update_user_directory`) to allow a generic worker to be designated as the worker to update the user directory. ([\#12654](https://github.com/matrix-org/synapse/issues/12654))
+- Add new `enable_registration_token_3pid_bypass` configuration option to allow registrations via token as an alternative to verifying a 3pid. ([\#12526](https://github.com/matrix-org/synapse/issues/12526))
+- Implement [MSC3786](https://github.com/matrix-org/matrix-spec-proposals/pull/3786): Add a default push rule to ignore `m.room.server_acl` events. ([\#12601](https://github.com/matrix-org/synapse/issues/12601))
+- Add new `mau_appservice_trial_days` configuration option to specify a different trial period for users registered via an appservice. ([\#12619](https://github.com/matrix-org/synapse/issues/12619))
+
+
+Bugfixes
+--------
+
+- Fix a bug introduced in Synapse 1.48.0 where the latest thread reply provided failed to include the proper bundled aggregations. ([\#12273](https://github.com/matrix-org/synapse/issues/12273))
+- Fix a bug introduced in Synapse 1.22.0 where attempting to send a large amount of read receipts to an application service all at once would result in duplicate content and abnormally high memory usage. Contributed by Brad & Nick @ Beeper. ([\#12544](https://github.com/matrix-org/synapse/issues/12544))
+- Fix a bug introduced in Synapse 1.57.0 which could cause `Failed to calculate hosts in room` errors to be logged for outbound federation. ([\#12570](https://github.com/matrix-org/synapse/issues/12570))
+- Fix a long-standing bug where status codes would almost always get logged as `200!`, irrespective of the actual status code, when clients disconnect before a request has finished processing. ([\#12580](https://github.com/matrix-org/synapse/issues/12580))
+- Fix race when persisting an event and deleting a room that could lead to outbound federation breaking. ([\#12594](https://github.com/matrix-org/synapse/issues/12594))
+- Fix a bug introduced in Synapse 1.53.0 where bundled aggregations for annotations/edits were incorrectly calculated. ([\#12633](https://github.com/matrix-org/synapse/issues/12633))
+- Fix a long-standing bug where rooms containing power levels with string values could not be upgraded. ([\#12657](https://github.com/matrix-org/synapse/issues/12657))
+- Prevent memory leak from reoccurring when presence is disabled. ([\#12656](https://github.com/matrix-org/synapse/issues/12656))
+
+
+Updates to the Docker image
+---------------------------
+
+- Explicitly opt-in to using [BuildKit-specific features](https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md) in the Dockerfile. This fixes issues with building images in some GitLab CI environments. ([\#12541](https://github.com/matrix-org/synapse/issues/12541))
+- Update the "Build docker images" GitHub Actions workflow to use `docker/metadata-action` to generate docker image tags, instead of a custom shell script. Contributed by @henryclw. ([\#12573](https://github.com/matrix-org/synapse/issues/12573))
+
+
+Improved Documentation
+----------------------
+
+- Update SQL statements and replace use of old table `user_stats_historical` in docs for Synapse Admins. ([\#12536](https://github.com/matrix-org/synapse/issues/12536))
+- Add missing linebreak to `pipx` install instructions. ([\#12579](https://github.com/matrix-org/synapse/issues/12579))
+- Add information about the TCP replication module to docs. ([\#12621](https://github.com/matrix-org/synapse/issues/12621))
+- Fixes to the formatting of `README.rst`. ([\#12627](https://github.com/matrix-org/synapse/issues/12627))
+- Fix docs on how to run specific Complement tests using the `complement.sh` test runner. ([\#12664](https://github.com/matrix-org/synapse/issues/12664))
 
-The non-standard `m.login.jwt` login type has been removed from Synapse. It can be replaced with `org.matrix.login.jwt` for identical behaviour. This is only used if `jwt_config.enabled` is set to `true` in the configuration.
 
+Deprecations and Removals
+-------------------------
+
+- Remove unstable identifiers from [MSC3069](https://github.com/matrix-org/matrix-doc/pull/3069). ([\#12596](https://github.com/matrix-org/synapse/issues/12596))
+- Remove the unspecified `m.login.jwt` login type and the unstable `uk.half-shot.msc2778.login.application_service` from 
+  [MSC2778](https://github.com/matrix-org/matrix-doc/pull/2778). ([\#12597](https://github.com/matrix-org/synapse/issues/12597))
+- Synapse now requires at least Python 3.7.1 (up from 3.7.0), for compatibility with the latest Twisted trunk. ([\#12613](https://github.com/matrix-org/synapse/issues/12613))
+
+
+Internal Changes
+----------------
+
+- Use supervisord to supervise Postgres and Caddy in the Complement image to reduce restart time. ([\#12480](https://github.com/matrix-org/synapse/issues/12480))
+- Immediately retry any requests that have backed off when a server comes back online. ([\#12500](https://github.com/matrix-org/synapse/issues/12500))
+- Use `make_awaitable` instead of `defer.succeed` for return values of mocks in tests. ([\#12505](https://github.com/matrix-org/synapse/issues/12505))
+- Consistently check if an object is a `frozendict`. ([\#12564](https://github.com/matrix-org/synapse/issues/12564))
+- Protect module callbacks with read semantics against cancellation. ([\#12568](https://github.com/matrix-org/synapse/issues/12568))
+- Improve comments and error messages around access tokens. ([\#12577](https://github.com/matrix-org/synapse/issues/12577))
+- Improve docstrings for the receipts store. ([\#12581](https://github.com/matrix-org/synapse/issues/12581))
+- Use constants for read-receipts in tests. ([\#12582](https://github.com/matrix-org/synapse/issues/12582))
+- Log status code of cancelled requests as 499 and avoid logging stack traces for them. ([\#12587](https://github.com/matrix-org/synapse/issues/12587), [\#12663](https://github.com/matrix-org/synapse/issues/12663))
+- Remove special-case for `twisted` logger from default log config. ([\#12589](https://github.com/matrix-org/synapse/issues/12589))
+- Use `getClientAddress` instead of the deprecated `getClientIP`. ([\#12599](https://github.com/matrix-org/synapse/issues/12599))
+- Add link to documentation in Grafana Dashboard. ([\#12602](https://github.com/matrix-org/synapse/issues/12602))
+- Reduce log spam when running multiple event persisters. ([\#12610](https://github.com/matrix-org/synapse/issues/12610))
+- Add extra debug logging to federation sender. ([\#12614](https://github.com/matrix-org/synapse/issues/12614))
+- Prevent remote homeservers from requesting local user device names by default. ([\#12616](https://github.com/matrix-org/synapse/issues/12616))
+- Add a consistency check on events which we read from the database. ([\#12620](https://github.com/matrix-org/synapse/issues/12620))
+- Remove use of the `constantly` library and switch to enums for `EventRedactBehaviour`. Contributed by @andrewdoh. ([\#12624](https://github.com/matrix-org/synapse/issues/12624))
+- Remove unused code related to receipts. ([\#12632](https://github.com/matrix-org/synapse/issues/12632))
+- Minor improvements to the scripts for running Synapse in worker mode under Complement. ([\#12637](https://github.com/matrix-org/synapse/issues/12637))
+- Move `pympler` back in to the `all` extras. ([\#12652](https://github.com/matrix-org/synapse/issues/12652))
+- Fix spelling of `M_UNRECOGNIZED` in comments. ([\#12665](https://github.com/matrix-org/synapse/issues/12665))
+- Release script: confirm the commit to be tagged before tagging. ([\#12556](https://github.com/matrix-org/synapse/issues/12556))
+- Fix a typo in the announcement text generated by the Synapse release development script. ([\#12612](https://github.com/matrix-org/synapse/issues/12612))
+
+### Typechecking
+
+- Fix scripts-dev to pass typechecking. ([\#12356](https://github.com/matrix-org/synapse/issues/12356))
+- Add some type hints to datastore. ([\#12485](https://github.com/matrix-org/synapse/issues/12485))
+- Remove unused `# type: ignore`s. ([\#12531](https://github.com/matrix-org/synapse/issues/12531))
+- Allow unused `# type: ignore` comments in bleeding edge CI jobs. ([\#12576](https://github.com/matrix-org/synapse/issues/12576))
+- Remove redundant lines of config from `mypy.ini`. ([\#12608](https://github.com/matrix-org/synapse/issues/12608))
+- Update to mypy 0.950. ([\#12650](https://github.com/matrix-org/synapse/issues/12650))
+- Use `Concatenate` to better annotate `_do_execute`. ([\#12666](https://github.com/matrix-org/synapse/issues/12666))
+- Use `ParamSpec` to refine type hints. ([\#12667](https://github.com/matrix-org/synapse/issues/12667))
+- Fix mypy against latest pillow stubs. ([\#12671](https://github.com/matrix-org/synapse/issues/12671))
 
 Synapse 1.58.1 (2022-05-05)
 ===========================
diff --git a/changelog.d/11507.feature b/changelog.d/11507.feature
deleted file mode 100644
index 72c5690cca..0000000000
--- a/changelog.d/11507.feature
+++ /dev/null
@@ -1 +0,0 @@
-Support [MSC3266](https://github.com/matrix-org/matrix-doc/pull/3266) room summaries over federation.
diff --git a/changelog.d/12168.feature b/changelog.d/12168.feature
deleted file mode 100644
index cd5c45029e..0000000000
--- a/changelog.d/12168.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner.
diff --git a/changelog.d/12273.bugfix b/changelog.d/12273.bugfix
deleted file mode 100644
index f8d7b6c889..0000000000
--- a/changelog.d/12273.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug introduced in Synapse v1.48.0 where latest thread reply provided failed to include the proper bundled aggregations.
diff --git a/changelog.d/12356.misc b/changelog.d/12356.misc
deleted file mode 100644
index 43e1929106..0000000000
--- a/changelog.d/12356.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix scripts-dev to pass typechecking.
\ No newline at end of file
diff --git a/changelog.d/12406.feature b/changelog.d/12406.feature
deleted file mode 100644
index e345afdee7..0000000000
--- a/changelog.d/12406.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add a module API to allow modules to change actions for existing push rules of local users.
diff --git a/changelog.d/12452.feature b/changelog.d/12452.feature
deleted file mode 100644
index 22f054d344..0000000000
--- a/changelog.d/12452.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add the `notify_appservices_from_worker` configuration option (superseding `notify_appservices`) to allow a generic worker to be designated as the worker to send traffic to Application Services.
\ No newline at end of file
diff --git a/changelog.d/12480.misc b/changelog.d/12480.misc
deleted file mode 100644
index 18a85e7b15..0000000000
--- a/changelog.d/12480.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use supervisord to supervise Postgres and Caddy in the Complement image to reduce restart time.
\ No newline at end of file
diff --git a/changelog.d/12485.misc b/changelog.d/12485.misc
deleted file mode 100644
index e793d08e5e..0000000000
--- a/changelog.d/12485.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add some type hints to datastore.
\ No newline at end of file
diff --git a/changelog.d/12500.misc b/changelog.d/12500.misc
deleted file mode 100644
index dbe3f7f5d1..0000000000
--- a/changelog.d/12500.misc
+++ /dev/null
@@ -1 +0,0 @@
-Immediately retry any requests that have backed off when a server comes back online.
diff --git a/changelog.d/12505.misc b/changelog.d/12505.misc
deleted file mode 100644
index a691d7962f..0000000000
--- a/changelog.d/12505.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use `make_awaitable` instead of `defer.succeed` for return values of mocks in tests.
diff --git a/changelog.d/12526.feature b/changelog.d/12526.feature
deleted file mode 100644
index c01596282c..0000000000
--- a/changelog.d/12526.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add new `enable_registration_token_3pid_bypass` configuration option to allow registrations via token as an alternative to verifying a 3pid.
\ No newline at end of file
diff --git a/changelog.d/12531.misc b/changelog.d/12531.misc
deleted file mode 100644
index 412fc9b6dc..0000000000
--- a/changelog.d/12531.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove unused `# type: ignore`s.
diff --git a/changelog.d/12536.doc b/changelog.d/12536.doc
deleted file mode 100644
index 4034c42076..0000000000
--- a/changelog.d/12536.doc
+++ /dev/null
@@ -1 +0,0 @@
-Update SQL statements and replace use of old table `user_stats_historical` in docs for Synapse Admins.
diff --git a/changelog.d/12541.docker b/changelog.d/12541.docker
deleted file mode 100644
index c3b9c31657..0000000000
--- a/changelog.d/12541.docker
+++ /dev/null
@@ -1 +0,0 @@
-Explicitly opt-in to using [BuildKit-specific features](https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md) in the Dockerfile. This fixes issues with building images in some GitLab CI environments.
diff --git a/changelog.d/12544.bugfix b/changelog.d/12544.bugfix
deleted file mode 100644
index b5169cd831..0000000000
--- a/changelog.d/12544.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug where attempting to send a large amount of read receipts to an application service all at once would result in duplicate content and abnormally high memory usage. Contributed by Brad & Nick @ Beeper.
diff --git a/changelog.d/12556.misc b/changelog.d/12556.misc
deleted file mode 100644
index dc245397fb..0000000000
--- a/changelog.d/12556.misc
+++ /dev/null
@@ -1 +0,0 @@
-Release script: confirm the commit to be tagged before tagging.
diff --git a/changelog.d/12564.misc b/changelog.d/12564.misc
deleted file mode 100644
index 207c322464..0000000000
--- a/changelog.d/12564.misc
+++ /dev/null
@@ -1 +0,0 @@
-Consistently check if an object is a `frozendict`.
diff --git a/changelog.d/12568.misc b/changelog.d/12568.misc
deleted file mode 100644
index f64dc67c4f..0000000000
--- a/changelog.d/12568.misc
+++ /dev/null
@@ -1 +0,0 @@
-Protect module callbacks with read semantics against cancellation.
diff --git a/changelog.d/12570.bugfix b/changelog.d/12570.bugfix
deleted file mode 100644
index 1038646f35..0000000000
--- a/changelog.d/12570.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug introduced in Synapse 1.57 which could cause `Failed to calculate hosts in room` errors to be logged for outbound federation.
diff --git a/changelog.d/12573.docker b/changelog.d/12573.docker
deleted file mode 100644
index 5cc8de50ac..0000000000
--- a/changelog.d/12573.docker
+++ /dev/null
@@ -1 +0,0 @@
-Update the "Build docker images" GitHub Actions workflow to use `docker/metadata-action` to generate docker image tags, instead of a custom shell script. Contributed by henryclw.
\ No newline at end of file
diff --git a/changelog.d/12576.misc b/changelog.d/12576.misc
deleted file mode 100644
index 71022c8633..0000000000
--- a/changelog.d/12576.misc
+++ /dev/null
@@ -1 +0,0 @@
-Allow unused `#type: ignore` comments in bleeding edge CI jobs.
diff --git a/changelog.d/12577.misc b/changelog.d/12577.misc
deleted file mode 100644
index 8c4c47ad52..0000000000
--- a/changelog.d/12577.misc
+++ /dev/null
@@ -1 +0,0 @@
-Improve comments and error messages around access tokens.
\ No newline at end of file
diff --git a/changelog.d/12579.doc b/changelog.d/12579.doc
deleted file mode 100644
index bcec5fe1af..0000000000
--- a/changelog.d/12579.doc
+++ /dev/null
@@ -1 +0,0 @@
-Add missing linebreak to pipx install instructions.
diff --git a/changelog.d/12580.bugfix b/changelog.d/12580.bugfix
deleted file mode 100644
index bedce405e2..0000000000
--- a/changelog.d/12580.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a long standing bug where status codes would almost always get logged as 200!, irrespective of the actual status code, when clients disconnect before a request has finished processing.
diff --git a/changelog.d/12581.misc b/changelog.d/12581.misc
deleted file mode 100644
index 38d40b262b..0000000000
--- a/changelog.d/12581.misc
+++ /dev/null
@@ -1 +0,0 @@
-Improve docstrings for the receipts store.
diff --git a/changelog.d/12582.misc b/changelog.d/12582.misc
deleted file mode 100644
index 5fa9c9afe8..0000000000
--- a/changelog.d/12582.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use constants for read-receipts in tests.
diff --git a/changelog.d/12587.misc b/changelog.d/12587.misc
deleted file mode 100644
index 3b466f1ddf..0000000000
--- a/changelog.d/12587.misc
+++ /dev/null
@@ -1 +0,0 @@
-Log status code of cancelled requests as 499 and avoid logging stack traces for them.
diff --git a/changelog.d/12589.misc b/changelog.d/12589.misc
deleted file mode 100644
index d362828d2e..0000000000
--- a/changelog.d/12589.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove special-case for `twisted` logger from default log config.
diff --git a/changelog.d/12594.bugfix b/changelog.d/12594.bugfix
deleted file mode 100644
index 7411d9c079..0000000000
--- a/changelog.d/12594.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix race when persisting an event and deleting a room that could lead to outbound federation breaking.
diff --git a/changelog.d/12596.removal b/changelog.d/12596.removal
deleted file mode 100644
index 14fbfb3954..0000000000
--- a/changelog.d/12596.removal
+++ /dev/null
@@ -1 +0,0 @@
-Remove unstable identifiers from [MSC3069](https://github.com/matrix-org/matrix-doc/pull/3069).
diff --git a/changelog.d/12597.removal b/changelog.d/12597.removal
deleted file mode 100644
index 7927f1d68d..0000000000
--- a/changelog.d/12597.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Remove the unspecified `m.login.jwt` login type and the unstable `uk.half-shot.msc2778.login.application_service` from 
-[MSC2778](https://github.com/matrix-org/matrix-doc/pull/2778).
diff --git a/changelog.d/12599.misc b/changelog.d/12599.misc
deleted file mode 100644
index d01278bbce..0000000000
--- a/changelog.d/12599.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use `getClientAddress` instead of the deprecated `getClientIP`.
diff --git a/changelog.d/12601.feature b/changelog.d/12601.feature
deleted file mode 100644
index c13360ff35..0000000000
--- a/changelog.d/12601.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement MSC3786: Add a default push rule to ignore m.room.server_acl events.
diff --git a/changelog.d/12602.misc b/changelog.d/12602.misc
deleted file mode 100644
index cdccc5c316..0000000000
--- a/changelog.d/12602.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add link to documentation in Grafana Dashboard.
diff --git a/changelog.d/12608.misc b/changelog.d/12608.misc
deleted file mode 100644
index 38272118fb..0000000000
--- a/changelog.d/12608.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove redundant lines of config from `mypy.ini`.
\ No newline at end of file
diff --git a/changelog.d/12610.misc b/changelog.d/12610.misc
deleted file mode 100644
index 02efe0c72f..0000000000
--- a/changelog.d/12610.misc
+++ /dev/null
@@ -1 +0,0 @@
-Reduce log spam when running multiple event persisters.
diff --git a/changelog.d/12612.bugfix b/changelog.d/12612.bugfix
deleted file mode 100644
index c39e97f0cb..0000000000
--- a/changelog.d/12612.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a typo in the announcement text generated by the Synapse release development script.
\ No newline at end of file
diff --git a/changelog.d/12613.removal b/changelog.d/12613.removal
deleted file mode 100644
index b1a9e207b0..0000000000
--- a/changelog.d/12613.removal
+++ /dev/null
@@ -1 +0,0 @@
-Synapse now requires at least Python 3.7.1 (up from 3.7.0), for compatibility with the latest Twisted trunk.
diff --git a/changelog.d/12614.misc b/changelog.d/12614.misc
deleted file mode 100644
index 79022df127..0000000000
--- a/changelog.d/12614.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add extra debug logging to federation sender.
diff --git a/changelog.d/12616.misc b/changelog.d/12616.misc
deleted file mode 100644
index d17ce24cdf..0000000000
--- a/changelog.d/12616.misc
+++ /dev/null
@@ -1 +0,0 @@
-Prevent remote homeservers from requesting local user device names by default.
\ No newline at end of file
diff --git a/changelog.d/12619.feature b/changelog.d/12619.feature
deleted file mode 100644
index b0fc0f5fed..0000000000
--- a/changelog.d/12619.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add new `mau_appservice_trial_days` configuration option to specify a different trial period for users registered via an appservice.
diff --git a/changelog.d/12620.misc b/changelog.d/12620.misc
deleted file mode 100644
index 63f8e540c3..0000000000
--- a/changelog.d/12620.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add a consistency check on events which we read from the database.
diff --git a/changelog.d/12621.doc b/changelog.d/12621.doc
deleted file mode 100644
index d29fb9cb99..0000000000
--- a/changelog.d/12621.doc
+++ /dev/null
@@ -1 +0,0 @@
-Add information about the TCP replication module to docs.
diff --git a/changelog.d/12624.misc b/changelog.d/12624.misc
deleted file mode 100644
index 8772d40fa7..0000000000
--- a/changelog.d/12624.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove use of constantly library and switch to enums for EventRedactBehaviour. Contributed by @andrewdoh.
diff --git a/changelog.d/12627.doc b/changelog.d/12627.doc
deleted file mode 100644
index 3a787dfef2..0000000000
--- a/changelog.d/12627.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fixes to the formatting of README.rst.
diff --git a/changelog.d/12632.misc b/changelog.d/12632.misc
deleted file mode 100644
index 9e4ba79c79..0000000000
--- a/changelog.d/12632.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove unused code related to receipts.
diff --git a/changelog.d/12633.bugfix b/changelog.d/12633.bugfix
deleted file mode 100644
index 32332acd9a..0000000000
--- a/changelog.d/12633.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug introduced in Synapse v1.53.0 where bundled aggregations for annotations/edits were incorrectly calculated.
diff --git a/changelog.d/12635.feature b/changelog.d/12635.feature
deleted file mode 100644
index cd5c45029e..0000000000
--- a/changelog.d/12635.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner.
diff --git a/changelog.d/12636.feature b/changelog.d/12636.feature
deleted file mode 100644
index cd5c45029e..0000000000
--- a/changelog.d/12636.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner.
diff --git a/changelog.d/12637.misc b/changelog.d/12637.misc
deleted file mode 100644
index 735257787f..0000000000
--- a/changelog.d/12637.misc
+++ /dev/null
@@ -1 +0,0 @@
-Minor improvements to the scripts for running Synapse in worker mode under Complement.
diff --git a/changelog.d/12639.bugfix b/changelog.d/12639.bugfix
deleted file mode 100644
index c01596282c..0000000000
--- a/changelog.d/12639.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Add new `enable_registration_token_3pid_bypass` configuration option to allow registrations via token as an alternative to verifying a 3pid.
\ No newline at end of file
diff --git a/changelog.d/12650.misc b/changelog.d/12650.misc
deleted file mode 100644
index 07bb4ce5a9..0000000000
--- a/changelog.d/12650.misc
+++ /dev/null
@@ -1 +0,0 @@
-Update to mypy 0.950.
\ No newline at end of file
diff --git a/changelog.d/12652.misc b/changelog.d/12652.misc
deleted file mode 100644
index 7b7c1cf5ff..0000000000
--- a/changelog.d/12652.misc
+++ /dev/null
@@ -1 +0,0 @@
-Move `pympler` back in to the `all` extras.
diff --git a/changelog.d/12656.misc b/changelog.d/12656.misc
deleted file mode 100644
index 8a8743e614..0000000000
--- a/changelog.d/12656.misc
+++ /dev/null
@@ -1 +0,0 @@
-Prevent memory leak from reoccurring when presence is disabled.
diff --git a/changelog.d/12657.bugfix b/changelog.d/12657.bugfix
deleted file mode 100644
index 7547ca40a7..0000000000
--- a/changelog.d/12657.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a long-standing bug where rooms containing power levels with string values could not be upgraded.
diff --git a/changelog.d/12663.misc b/changelog.d/12663.misc
deleted file mode 100644
index 3b466f1ddf..0000000000
--- a/changelog.d/12663.misc
+++ /dev/null
@@ -1 +0,0 @@
-Log status code of cancelled requests as 499 and avoid logging stack traces for them.
diff --git a/changelog.d/12664.doc b/changelog.d/12664.doc
deleted file mode 100644
index 142d18037a..0000000000
--- a/changelog.d/12664.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fix docs on how to run specific Complement tests using the `complement.sh` test runner.
diff --git a/changelog.d/12665.misc b/changelog.d/12665.misc
deleted file mode 100644
index 37b96fea37..0000000000
--- a/changelog.d/12665.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix spelling of `M_UNRECOGNIZED` in comments.
diff --git a/changelog.d/12666.misc b/changelog.d/12666.misc
deleted file mode 100644
index 96268e33f5..0000000000
--- a/changelog.d/12666.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use `Concatenate` to better annotate `_do_execute`.
diff --git a/changelog.d/12667.misc b/changelog.d/12667.misc
deleted file mode 100644
index 2b17502d6b..0000000000
--- a/changelog.d/12667.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use `ParamSpec` to refine type hints.
diff --git a/changelog.d/12670.feature b/changelog.d/12670.feature
deleted file mode 100644
index cd5c45029e..0000000000
--- a/changelog.d/12670.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement [changes](https://github.com/matrix-org/matrix-spec-proposals/pull/2285/commits/4a77139249c2e830aec3c7d6bd5501a514d1cc27) to [MSC2285 (hidden read receipts)](https://github.com/matrix-org/matrix-spec-proposals/pull/2285). Contributed by @SimonBrandner.
diff --git a/changelog.d/12671.misc b/changelog.d/12671.misc
deleted file mode 100644
index 56df4e3831..0000000000
--- a/changelog.d/12671.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix mypy against latest pillow stubs.
diff --git a/debian/changelog b/debian/changelog
index 5b21e0d369..fabc690bae 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,11 @@
-matrix-synapse-py3 (1.58.2) UNRELEASED; urgency=medium
+matrix-synapse-py3 (1.59.0~rc1) stable; urgency=medium
 
   * Adjust how the `exported-requirements.txt` file is generated as part of
     the process of building these packages. This affects the package
     maintainers only; end-users are unaffected.
+  * New Synapse release 1.59.0rc1.
 
- -- Synapse Packaging team <packages@matrix.org>  Fri, 06 May 2022 13:49:29 +0100
+ -- Synapse Packaging team <packages@matrix.org>  Tue, 10 May 2022 10:45:08 +0100
 
 matrix-synapse-py3 (1.58.1) stable; urgency=medium
 
diff --git a/docs/upgrade.md b/docs/upgrade.md
index 18c33a4198..fa4b3ef590 100644
--- a/docs/upgrade.md
+++ b/docs/upgrade.md
@@ -101,29 +101,36 @@ To re-enable this functionality, set the
 homeserver config option to `true`.
 
 
-## Deprecation of the `synapse.app.appservice` worker application type
+## Deprecation of the `synapse.app.appservice` and `synapse.app.user_dir` worker application types
 
 The `synapse.app.appservice` worker application type allowed you to configure a
 single worker to use to notify application services of new events, as long
 as this functionality was disabled on the main process with `notify_appservices: False`.
+Further, the `synapse.app.user_dir` worker application type allowed you to configure
+a single worker to be responsible for updating the user directory, as long as this
+was disabled on the main process with `update_user_directory: False`.
 
 To unify Synapse's worker types, the `synapse.app.appservice` worker application
 type and the `notify_appservices` configuration option have been deprecated.
+The `synapse.app.user_dir` worker application type and `update_user_directory`
+configuration option have also been deprecated.
 
-To get the same functionality, it's now recommended that the `synapse.app.generic_worker`
-worker application type is used and that the `notify_appservices_from_worker` option
-is set to the name of a worker.
+To get the same functionality as was provided by the deprecated options, it's now recommended that the `synapse.app.generic_worker`
+worker application type is used and that the `notify_appservices_from_worker` and/or
+`update_user_directory_from_worker` options are set to the name of a worker.
 
-For the time being, `notify_appservices_from_worker` can be used alongside
-`synapse.app.appservice` and `notify_appservices` to make it easier to transition
-between the two configurations, however please note that:
+For the time being, the old options can be used alongside the new options to make
+it easier to transition between the two configurations, however please note that:
 
 - the options must not contradict each other (otherwise Synapse won't start); and
-- the `notify_appservices` option will be removed in a future release of Synapse.
+- the `notify_appservices` and `update_user_directory` options will be removed in a future release of Synapse.
 
-Please see [the relevant section of the worker documentation][v1_59_notify_ases_from] for more information.
+Please see the [*Notifying Application Services*][v1_59_notify_ases_from] and
+[*Updating the User Directory*][v1_59_update_user_dir] sections of the worker
+documentation for more information.
 
 [v1_59_notify_ases_from]: workers.md#notifying-application-services
+[v1_59_update_user_dir]: workers.md#updating-the-user-directory
 
 
 # Upgrading to v1.58.0
diff --git a/docs/workers.md b/docs/workers.md
index 1d049b6c4f..553792d238 100644
--- a/docs/workers.md
+++ b/docs/workers.md
@@ -426,7 +426,7 @@ the shared configuration would include:
 run_background_tasks_on: background_worker
 ```
 
-You might also wish to investigate the `update_user_directory` and
+You might also wish to investigate the `update_user_directory_from_worker` and
 `media_instance_running_background_jobs` settings.
 
 An example for a dedicated background worker instance:
@@ -435,9 +435,26 @@ An example for a dedicated background worker instance:
 {{#include systemd-with-workers/workers/background_worker.yaml}}
 ```
 
+#### Updating the User Directory
+
+You can designate one generic worker to update the user directory.
+
+Specify its name in the shared configuration as follows:
+
+```yaml
+update_user_directory_from_worker: worker_name
+```
+
+This work cannot be load-balanced; please ensure the main process is restarted
+after setting this option in the shared configuration!
+
+This style of configuration supersedes the legacy `synapse.app.user_dir`
+worker application type.
+
+
 #### Notifying Application Services
 
-You can designate one worker to send output traffic to Application Services.
+You can designate one generic worker to send output traffic to Application Services.
 
 Specify its name in the shared configuration as follows:
 
@@ -470,7 +487,7 @@ pusher_instances:
 
 ### `synapse.app.appservice`
 
-**Deprecated as of Synapse v1.58.** [Use `synapse.app.generic_worker` with the
+**Deprecated as of Synapse v1.59.** [Use `synapse.app.generic_worker` with the
 `notify_appservices_from_worker` option instead.](#notifying-application-services)
 
 Handles sending output traffic to Application Services. Doesn't handle any
@@ -540,6 +557,9 @@ Note that if a reverse proxy is used , then `/_matrix/media/` must be routed for
 
 ### `synapse.app.user_dir`
 
+**Deprecated as of Synapse v1.59.** [Use `synapse.app.generic_worker` with the
+`update_user_directory_from_worker` option instead.](#updating-the-user-directory)
+
 Handles searches in the user directory. It can handle REST endpoints matching
 the following regular expressions:
 
diff --git a/pyproject.toml b/pyproject.toml
index 2c4b7eb08e..e3d81ae5f1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -54,7 +54,7 @@ skip_gitignore = true
 
 [tool.poetry]
 name = "matrix-synapse"
-version = "1.58.1"
+version = "1.59.0rc1"
 description = "Homeserver for the Matrix decentralised comms protocol"
 authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
 license = "Apache-2.0"
diff --git a/synapse/app/admin_cmd.py b/synapse/app/admin_cmd.py
index 2b0d92cbae..2a4c2e59cd 100644
--- a/synapse/app/admin_cmd.py
+++ b/synapse/app/admin_cmd.py
@@ -210,7 +210,7 @@ def start(config_options: List[str]) -> None:
         config.logging.no_redirect_stdio = True
 
     # Explicitly disable background processes
-    config.server.update_user_directory = False
+    config.worker.should_update_user_directory = False
     config.worker.run_background_tasks = False
     config.worker.start_pushers = False
     config.worker.pusher_shard_config.instances = []
diff --git a/synapse/app/generic_worker.py b/synapse/app/generic_worker.py
index 07dddc0b13..2a9480a5c1 100644
--- a/synapse/app/generic_worker.py
+++ b/synapse/app/generic_worker.py
@@ -441,22 +441,6 @@ def start(config_options: List[str]) -> None:
         "synapse.app.user_dir",
     )
 
-    if config.worker.worker_app == "synapse.app.user_dir":
-        if config.server.update_user_directory:
-            sys.stderr.write(
-                "\nThe update_user_directory must be disabled in the main synapse process"
-                "\nbefore they can be run in a separate worker."
-                "\nPlease add ``update_user_directory: false`` to the main config"
-                "\n"
-            )
-            sys.exit(1)
-
-        # Force the pushers to start since they will be disabled in the main config
-        config.server.update_user_directory = True
-    else:
-        # For other worker types we force this to off.
-        config.server.update_user_directory = False
-
     synapse.events.USE_FROZEN_DICTS = config.server.use_frozen_dicts
     synapse.util.caches.TRACK_MEMORY_USAGE = config.caches.track_memory_usage
 
diff --git a/synapse/config/server.py b/synapse/config/server.py
index 1e709c7cf5..005a3ee48c 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -319,10 +319,6 @@ class ServerConfig(Config):
                 self.presence_router_config,
             ) = load_module(presence_router_config, ("presence", "presence_router"))
 
-        # Whether to update the user directory or not. This should be set to
-        # false only if we are updating the user directory in a worker
-        self.update_user_directory = config.get("update_user_directory", True)
-
         # whether to enable the media repository endpoints. This should be set
         # to false if the media repository is running as a separate endpoint;
         # doing so ensures that we will not run cache cleanup jobs on the
diff --git a/synapse/config/workers.py b/synapse/config/workers.py
index a9dbcc6d3d..e1569b3c14 100644
--- a/synapse/config/workers.py
+++ b/synapse/config/workers.py
@@ -311,6 +311,13 @@ class WorkerConfig(Config):
             new_option_name="notify_appservices_from_worker",
         )
 
+        self.should_update_user_directory = self._should_this_worker_perform_duty(
+            config,
+            legacy_master_option_name="update_user_directory",
+            legacy_worker_app_name="synapse.app.user_dir",
+            new_option_name="update_user_directory_from_worker",
+        )
+
     def _should_this_worker_perform_duty(
         self,
         config: Dict[str, Any],
diff --git a/synapse/handlers/user_directory.py b/synapse/handlers/user_directory.py
index 048fd4bb82..74f7fdfe6c 100644
--- a/synapse/handlers/user_directory.py
+++ b/synapse/handlers/user_directory.py
@@ -60,7 +60,7 @@ class UserDirectoryHandler(StateDeltasHandler):
         self.clock = hs.get_clock()
         self.notifier = hs.get_notifier()
         self.is_mine_id = hs.is_mine_id
-        self.update_user_directory = hs.config.server.update_user_directory
+        self.update_user_directory = hs.config.worker.should_update_user_directory
         self.search_all_users = hs.config.userdirectory.user_directory_search_all_users
         self.spam_checker = hs.get_spam_checker()
         # The current position in the current_state_delta stream
diff --git a/tests/config/test_workers.py b/tests/config/test_workers.py
index da81bb9655..ef6294ecb2 100644
--- a/tests/config/test_workers.py
+++ b/tests/config/test_workers.py
@@ -286,3 +286,30 @@ class WorkerDutyConfigTestCase(TestCase):
                 "notify_appservices_from_worker",
             )
         )
+
+    def test_worker_duty_configs(self) -> None:
+        """
+        Additional tests for the worker duties
+        """
+
+        worker1_config = self._make_worker_config(
+            worker_app="synapse.app.generic_worker",
+            worker_name="worker1",
+            extras={
+                "notify_appservices_from_worker": "worker2",
+                "update_user_directory_from_worker": "worker1",
+            },
+        )
+        self.assertFalse(worker1_config.should_notify_appservices)
+        self.assertTrue(worker1_config.should_update_user_directory)
+
+        worker2_config = self._make_worker_config(
+            worker_app="synapse.app.generic_worker",
+            worker_name="worker2",
+            extras={
+                "notify_appservices_from_worker": "worker2",
+                "update_user_directory_from_worker": "worker1",
+            },
+        )
+        self.assertTrue(worker2_config.should_notify_appservices)
+        self.assertFalse(worker2_config.should_update_user_directory)