diff --git a/CHANGES.md b/CHANGES.md
index 4a81a0462..0bce84f40 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,10 +1,34 @@
+Synapse 1.10.0 (2020-02-12)
+===========================
+
+**WARNING to client developers**: As of this release Synapse validates `client_secret` parameters in the Client-Server API as per the spec. See [\#6766](https://github.com/matrix-org/synapse/issues/6766) for details.
+
+Updates to the Docker image
+---------------------------
+
+- Update the docker images to Alpine Linux 3.11. ([\#6897](https://github.com/matrix-org/synapse/issues/6897))
+
+
+Synapse 1.10.0rc5 (2020-02-11)
+==============================
+
+Bugfixes
+--------
+
+- Fix the filtering introduced in 1.10.0rc3 to also apply to the state blocks returned by `/sync`. ([\#6884](https://github.com/matrix-org/synapse/issues/6884))
+
+Synapse 1.10.0rc4 (2020-02-11)
+==============================
+
+This release candidate was built incorrectly and is superceded by 1.10.0rc5.
+
 Synapse 1.10.0rc3 (2020-02-10)
 ==============================
 
 Features
 --------
 
-- Filter out m.room.aliases from the CS API to mitigate abuse while a better solution is specced. ([\#6878](https://github.com/matrix-org/synapse/issues/6878))
+- Filter out `m.room.aliases` from the CS API to mitigate abuse while a better solution is specced. ([\#6878](https://github.com/matrix-org/synapse/issues/6878))
 
 
 Internal Changes
@@ -32,9 +56,6 @@ Internal Changes
 Synapse 1.10.0rc1 (2020-01-31)
 ==============================
 
-**WARNING to client developers**: As of this release Synapse validates `client_secret` parameters in the Client-Server API as per the spec. See [\#6766](https://github.com/matrix-org/synapse/issues/6766) for details.
-
-
 Features
 --------
 
diff --git a/changelog.d/6877.removal b/changelog.d/6877.removal
new file mode 100644
index 000000000..9545e31fb
--- /dev/null
+++ b/changelog.d/6877.removal
@@ -0,0 +1,1 @@
+Remove `m.lazy_load_members` from `unstable_features` since lazy loading is in the stable Client-Server API version r0.5.0.
diff --git a/changelog.d/6887.misc b/changelog.d/6887.misc
new file mode 100644
index 000000000..b351d47c7
--- /dev/null
+++ b/changelog.d/6887.misc
@@ -0,0 +1,1 @@
+Fix the use of sed in the linting scripts when using BSD sed.
diff --git a/changelog.d/6891.doc b/changelog.d/6891.doc
new file mode 100644
index 000000000..2f46c385b
--- /dev/null
+++ b/changelog.d/6891.doc
@@ -0,0 +1,1 @@
+Spell out that the last event sent to a room won't be deleted by a purge. 
diff --git a/changelog.d/6901.misc b/changelog.d/6901.misc
new file mode 100644
index 000000000..b2f12bbe8
--- /dev/null
+++ b/changelog.d/6901.misc
@@ -0,0 +1,1 @@
+Return a 404 instead of 200 for querying information of a non-existant user through the admin API.
\ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 74eb29c5e..cdc3b1a5c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+matrix-synapse-py3 (1.10.0) stable; urgency=medium
+
+  * New synapse release 1.10.0.
+
+ -- Synapse Packaging team <packages@matrix.org>  Wed, 12 Feb 2020 12:18:54 +0000
+
 matrix-synapse-py3 (1.9.1) stable; urgency=medium
 
   * New synapse release 1.9.1.
diff --git a/docker/Dockerfile b/docker/Dockerfile
index e5a0d6d5f..93d61739a 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -16,7 +16,7 @@ ARG PYTHON_VERSION=3.7
 ###
 ### Stage 0: builder
 ###
-FROM docker.io/python:${PYTHON_VERSION}-alpine3.10 as builder
+FROM docker.io/python:${PYTHON_VERSION}-alpine3.11 as builder
 
 # install the OS build deps
 
diff --git a/docs/admin_api/purge_history_api.rst b/docs/admin_api/purge_history_api.rst
index f7be226fd..e2a620c54 100644
--- a/docs/admin_api/purge_history_api.rst
+++ b/docs/admin_api/purge_history_api.rst
@@ -8,6 +8,9 @@ Depending on the amount of history being purged a call to the API may take
 several minutes or longer. During this period users will not be able to
 paginate further back in the room from the point being purged from.
 
+Note that Synapse requires at least one message in each room, so it will never
+delete the last message in a room.
+
 The API is:
 
 ``POST /_synapse/admin/v1/purge_history/<room_id>[/<event_id>]``
diff --git a/docs/admin_api/user_admin_api.rst b/docs/admin_api/user_admin_api.rst
index eb146095d..6b02d963e 100644
--- a/docs/admin_api/user_admin_api.rst
+++ b/docs/admin_api/user_admin_api.rst
@@ -2,7 +2,8 @@ Create or modify Account
 ========================
 
 This API allows an administrator to create or modify a user account with a
-specific ``user_id``.
+specific ``user_id``. Be aware that ``user_id`` is fully qualified: for example,
+``@user:server.com``.
 
 This api is::
 
diff --git a/docs/message_retention_policies.md b/docs/message_retention_policies.md
index 4300809df..1dd60bdad 100644
--- a/docs/message_retention_policies.md
+++ b/docs/message_retention_policies.md
@@ -42,6 +42,10 @@ purged according to its room's policy, then the receiving server will
 process and store that event until it's picked up by the next purge job,
 though it will always hide it from clients.
 
+Synapse requires at least one message in each room, so it will never
+delete the last message in a room. It will, however, hide it from
+clients.
+
 
 ## Server configuration
 
diff --git a/scripts-dev/config-lint.sh b/scripts-dev/config-lint.sh
index 677a854c8..189ca6653 100755
--- a/scripts-dev/config-lint.sh
+++ b/scripts-dev/config-lint.sh
@@ -3,7 +3,8 @@
 # Exits with 0 if there are no problems, or another code otherwise.
 
 # Fix non-lowercase true/false values
-sed -i -E "s/: +True/: true/g; s/: +False/: false/g;" docs/sample_config.yaml
+sed -i.bak -E "s/: +True/: true/g; s/: +False/: false/g;" docs/sample_config.yaml
+rm docs/sample_config.yaml.bak
 
 # Check if anything changed
 git diff --exit-code docs/sample_config.yaml
diff --git a/synapse/__init__.py b/synapse/__init__.py
index 36c0cf557..9d285fca3 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -36,7 +36,7 @@ try:
 except ImportError:
     pass
 
-__version__ = "1.10.0rc3"
+__version__ = "1.10.0"
 
 if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
     # We import here so that we don't have to install a bunch of deps when
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index f8d60d32b..4324bc702 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -932,6 +932,7 @@ class SyncHandler(object):
             for e in sync_config.filter_collection.filter_room_state(
                 list(state.values())
             )
+            if e.type != EventTypes.Aliases  # until MSC2261 or alternative solution
         }
 
     async def unread_notifs_for_room_id(
diff --git a/synapse/rest/admin/users.py b/synapse/rest/admin/users.py
index e75c5f137..2107b5dc5 100644
--- a/synapse/rest/admin/users.py
+++ b/synapse/rest/admin/users.py
@@ -21,7 +21,7 @@ from six import text_type
 from six.moves import http_client
 
 from synapse.api.constants import UserTypes
-from synapse.api.errors import Codes, SynapseError
+from synapse.api.errors import Codes, NotFoundError, SynapseError
 from synapse.http.servlet import (
     RestServlet,
     assert_params_in_dict,
@@ -152,6 +152,9 @@ class UserRestServletV2(RestServlet):
 
         ret = await self.admin_handler.get_user(target_user)
 
+        if not ret:
+            raise NotFoundError("User not found")
+
         return 200, ret
 
     async def on_PUT(self, request, user_id):
diff --git a/synapse/rest/client/versions.py b/synapse/rest/client/versions.py
index 3d0fefb4d..3eeb3607f 100644
--- a/synapse/rest/client/versions.py
+++ b/synapse/rest/client/versions.py
@@ -52,7 +52,6 @@ class VersionsRestServlet(RestServlet):
                 ],
                 # as per MSC1497:
                 "unstable_features": {
-                    "m.lazy_load_members": True,
                     # as per MSC2190, as amended by MSC2264
                     # to be removed in r0.6.0
                     "m.id_access_token": True,

now LL is in CS 0.5, we should remove it from unstable-features in versions?
diff --git a/tests/rest/admin/test_user.py b/tests/rest/admin/test_user.py
index 3b5169b38..490ce8f55 100644
--- a/tests/rest/admin/test_user.py
+++ b/tests/rest/admin/test_user.py
@@ -401,6 +401,22 @@ class UserRestTestCase(unittest.HomeserverTestCase):
         self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"])
         self.assertEqual("You are not a server admin", channel.json_body["error"])
 
+    def test_user_does_not_exist(self):
+        """
+        Tests that a lookup for a user that does not exist returns a 404
+        """
+        self.hs.config.registration_shared_secret = None
+
+        request, channel = self.make_request(
+            "GET",
+            "/_synapse/admin/v2/users/@unknown_person:test",
+            access_token=self.admin_user_tok,
+        )
+        self.render(request)
+
+        self.assertEqual(404, channel.code, msg=channel.json_body)
+        self.assertEqual("M_NOT_FOUND", channel.json_body["errcode"])
+
     def test_requester_is_admin(self):
         """
         If the user is a server admin, a new user is created.

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest mock coverage
apt-get update apt-get install -y build-essential python3-dev libffi-dev
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==25.3.0
Automat==24.8.1
bcrypt==4.3.0
bleach==6.2.0
canonicaljson==2.0.0
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
constantly==23.10.4
coverage==7.8.0
cryptography==44.0.2
daemonize==2.5.0
exceptiongroup==1.2.2
frozendict==2.4.6
hyperlink==21.0.0
idna==3.10
incremental==24.7.2
iniconfig==2.1.0
Jinja2==3.1.6
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
MarkupSafe==3.0.2
-e git+https://github.com/matrix-org/synapse.git@a92e703ab9d78aecc062e797f941bb7e206650a5#egg=matrix_synapse
mock==5.2.0
msgpack==1.1.0
netaddr==1.3.0
packaging==24.2
phonenumbers==9.0.2
pillow==11.1.0
pluggy==1.5.0
prometheus_client==0.7.1
pyasn1==0.6.1
pyasn1_modules==0.4.2
pycparser==2.22
pymacaroons==0.13.0
PyNaCl==1.5.0
pyOpenSSL==25.0.0
pytest==8.3.5
PyYAML==6.0.2
referencing==0.36.2
requests==2.32.3
rpds-py==0.24.0
service-identity==24.2.0
signedjson==1.1.4
six==1.17.0
sortedcontainers==2.4.0
tomli==2.2.1
treq==24.9.1
Twisted==24.11.0
typing_extensions==4.13.0
unpaddedbase64==2.1.0
urllib3==2.3.0
webencodings==0.5.1
zope.interface==7.2

name: synapse
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==25.3.0
      - automat==24.8.1
      - bcrypt==4.3.0
      - bleach==6.2.0
      - canonicaljson==2.0.0
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - constantly==23.10.4
      - coverage==7.8.0
      - cryptography==44.0.2
      - daemonize==2.5.0
      - exceptiongroup==1.2.2
      - frozendict==2.4.6
      - hyperlink==21.0.0
      - idna==3.10
      - incremental==24.7.2
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - jsonschema==4.23.0
      - jsonschema-specifications==2024.10.1
      - markupsafe==3.0.2
      - matrix-synapse==1.10.0rc3
      - mock==5.2.0
      - msgpack==1.1.0
      - netaddr==1.3.0
      - packaging==24.2
      - phonenumbers==9.0.2
      - pillow==11.1.0
      - pluggy==1.5.0
      - prometheus-client==0.7.1
      - pyasn1==0.6.1
      - pyasn1-modules==0.4.2
      - pycparser==2.22
      - pymacaroons==0.13.0
      - pynacl==1.5.0
      - pyopenssl==25.0.0
      - pytest==8.3.5
      - pyyaml==6.0.2
      - referencing==0.36.2
      - requests==2.32.3
      - rpds-py==0.24.0
      - service-identity==24.2.0
      - signedjson==1.1.4
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tomli==2.2.1
      - treq==24.9.1
      - twisted==24.11.0
      - typing-extensions==4.13.0
      - unpaddedbase64==2.1.0
      - urllib3==2.3.0
      - webencodings==0.5.1
      - zope-interface==7.2
prefix: /opt/conda/envs/synapse

tests/rest/admin/test_user.py::UserRestTestCase::test_user_does_not_exist
tests/rest/admin/test_user.py::UserRegisterTestCase::test_disabled tests/rest/admin/test_user.py::UserRegisterTestCase::test_expired_nonce tests/rest/admin/test_user.py::UserRegisterTestCase::test_get_nonce tests/rest/admin/test_user.py::UserRegisterTestCase::test_missing_parts tests/rest/admin/test_user.py::UserRegisterTestCase::test_nonce_reuse tests/rest/admin/test_user.py::UserRegisterTestCase::test_register_correct_nonce tests/rest/admin/test_user.py::UserRegisterTestCase::test_register_incorrect_nonce tests/rest/admin/test_user.py::UsersListTestCase::test_all_users tests/rest/admin/test_user.py::UsersListTestCase::test_no_auth tests/rest/admin/test_user.py::UserRestTestCase::test_requester_is_admin tests/rest/admin/test_user.py::UserRestTestCase::test_requester_is_no_admin
changelog.d/6887.misc changelog.d/6877.removal debian/changelog CHANGES.md docs/message_retention_policies.md changelog.d/6901.misc docs/admin_api/user_admin_api.rst changelog.d/6891.doc scripts-dev/config-lint.sh synapse/__init__.py synapse/handlers/sync.py docker/Dockerfile synapse/rest/admin/users.py synapse/rest/client/versions.py docs/admin_api/purge_history_api.rst
changelog.d/6887.misc changelog.d/6877.removal debian/changelog CHANGES.md docs/message_retention_policies.md changelog.d/6901.misc docs/admin_api/user_admin_api.rst changelog.d/6891.doc scripts-dev/config-lint.sh synapse/__init__.py synapse/handlers/sync.py docker/Dockerfile synapse/rest/admin/users.py synapse/rest/client/versions.py docs/admin_api/purge_history_api.rst