diff --git a/.copier-answers.yml b/.copier-answers.yml
index 3ed43b27963b7fe5f79f8aad916e087c747af914..34ffd2287588e48bdee09fbb746bd143f7d61b5f 100644
--- a/.copier-answers.yml
+++ b/.copier-answers.yml
@@ -1,5 +1,5 @@
 # Changes here will be overwritten by Copier
-_commit: v0.1.5
+_commit: v0.1.6
 _src_path: https://gitlab.softwareheritage.org/swh/devel/swh-py-template.git
 description: Software Heritage data model
 distribution_name: swh-model
diff --git a/.gitignore b/.gitignore
index 035b13951e98580e45e6b453c2bb6fa9aef9a59f..d44f090faaff2efa7c3dfa14d2a402ae0d6b4eaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,5 +8,9 @@
 __pycache__
 build/
 dist/
+# these are symlinks created by a hook in swh-docs' main sphinx conf.py
 docs/README.rst
 docs/README.md
+# this should be a symlink for people who want to build the sphinx doc
+# without using tox, generally created by the swh-env/bin/update script
+docs/Makefile.sphinx
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 44882702188264afb4d255160c59b98cc4f25d85..8957bec6128b471c890816598b471a0116b18f7e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -28,6 +28,9 @@ repos:
       - id: codespell
         name: Check source code spelling
         stages: [commit]
+      - id: codespell
+        name: Check commit message spelling
+        stages: [commit-msg]
 
   - repo: local
     hooks:
diff --git a/docs/Makefile b/docs/Makefile
index ae6cc1946535661d9d3175fc38fc084be5daa85d..5e57d15d9e950b11d45d4f1241e9eadc67ecbd38 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -1,7 +1,2 @@
-ifdef SWH_PACKAGE_DOC_TOX_BUILD
-include swh-docs/Makefile.sphinx
-else
-include ../../swh-docs/Makefile.sphinx
-endif
-
+include Makefile.sphinx
 -include Makefile.local
diff --git a/pyproject.toml b/pyproject.toml
index 8dfbe9f211a0ddb2dd7dbe1fd9aa33c947984e59..dc4a8fdbcfa318a976278be5dac404f5fde26591 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -58,3 +58,4 @@ use_parentheses = true
 ensure_newline_before_comments = true
 line_length = 88
 force_sort_within_sections = true
+known_first_party = ['swh']
diff --git a/pytest.ini b/pytest.ini
index 10242f24f0323cac877764b3d4db78b11aa182f7..1782940443bf7d2776787ba40c5344c1989ff032 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -1,8 +1,12 @@
 [pytest]
-addopts = --doctest-modules -p no:pytest_swh_core
 norecursedirs = build docs .*
+asyncio_mode = strict
+# There is not --import-mode=importlib below because it is incompatible
+# with the tox-in-tox hack we use for now to run tests.
+addopts =
+    --doctest-modules
+    -p no:pytest_swh_core
+
 markers =
     fs: tests that involve filesystem ios
     requires_optional_deps: tests in test_cli.py that should not run if optional dependencies are not installed
-
-asyncio_mode = strict
diff --git a/tox.ini b/tox.ini
index c6ba7d065a593c94a53fde20bb1b99afcbb17cab..394f961c9cf461ed145ea3cc2df876b7b9b10b56 100644
--- a/tox.ini
+++ b/tox.ini
@@ -31,7 +31,7 @@ commands =
 [testenv:black]
 skip_install = true
 deps =
-  black==22.10.0
+  black==23.1.0
 commands =
   {envpython} -m black --check swh
 
@@ -67,4 +67,4 @@ setenv =
   # turn warnings into errors
   SPHINXOPTS = -W
 commands =
-  make -I {env_dir}/share/ -C docs
+  make -I {env_dir}/share/swh-docs -C docs