diff --git a/src/ahriman/application/handlers/setup.py b/src/ahriman/application/handlers/setup.py
index d2790053..ee631c47 100644
--- a/src/ahriman/application/handlers/setup.py
+++ b/src/ahriman/application/handlers/setup.py
@@ -160,7 +160,7 @@ class Setup(Handler):
         configuration = Configuration(allow_no_value=True)
         # preserve case
         # stupid mypy thinks that it is impossible
-        configuration.optionxform = lambda key: key  # type: ignore[method-assign]
+        configuration.optionxform = lambda optionstr: optionstr  # type: ignore[method-assign]
 
         # load default configuration first
         # we cannot use Include here because it will be copied to new chroot, thus no includes there
diff --git a/src/ahriman/core/alpm/pacman.py b/src/ahriman/core/alpm/pacman.py
index 0a891862..eb56c3c4 100644
--- a/src/ahriman/core/alpm/pacman.py
+++ b/src/ahriman/core/alpm/pacman.py
@@ -22,7 +22,7 @@ import shutil
 from collections.abc import Callable, Generator
 from functools import cached_property
 from pathlib import Path
-from pyalpm import DB, Handle, Package, SIG_PACKAGE, error as PyalpmError  # type: ignore[import]
+from pyalpm import DB, Handle, Package, SIG_PACKAGE, error as PyalpmError  # type: ignore[import-not-found]
 from string import Template
 
 from ahriman.core.configuration import Configuration
diff --git a/src/ahriman/core/auth/helpers.py b/src/ahriman/core/auth/helpers.py
index 14c38b2b..36135386 100644
--- a/src/ahriman/core/auth/helpers.py
+++ b/src/ahriman/core/auth/helpers.py
@@ -20,7 +20,7 @@
 from typing import Any
 
 try:
-    import aiohttp_security  # type: ignore[import]
+    import aiohttp_security  # type: ignore[import-untyped]
     _has_aiohttp_security = True
 except ImportError:
     _has_aiohttp_security = False
diff --git a/src/ahriman/core/configuration/validator.py b/src/ahriman/core/configuration/validator.py
index 2ba5d25b..e5aed2b7 100644
--- a/src/ahriman/core/configuration/validator.py
+++ b/src/ahriman/core/configuration/validator.py
@@ -19,7 +19,7 @@
 #
 import ipaddress
 
-from cerberus import TypeDefinition, Validator as RootValidator  # type: ignore[import]
+from cerberus import TypeDefinition, Validator as RootValidator  # type: ignore[import-untyped]
 from pathlib import Path
 from typing import Any
 from urllib.parse import urlparse
diff --git a/src/ahriman/core/log/journal_handler.py b/src/ahriman/core/log/journal_handler.py
index 64acf042..f6f6891d 100644
--- a/src/ahriman/core/log/journal_handler.py
+++ b/src/ahriman/core/log/journal_handler.py
@@ -42,6 +42,6 @@ class _JournalHandler(NullHandler):
 
 
 try:
-    from systemd.journal import JournalHandler  # type: ignore[import]
+    from systemd.journal import JournalHandler  # type: ignore[import-untyped]
 except ImportError:
     JournalHandler = _JournalHandler
diff --git a/src/ahriman/core/log/log_loader.py b/src/ahriman/core/log/log_loader.py
index 57189d44..4e2424eb 100644
--- a/src/ahriman/core/log/log_loader.py
+++ b/src/ahriman/core/log/log_loader.py
@@ -59,7 +59,7 @@ class LogLoader:
             return selected
 
         try:
-            from systemd.journal import JournalHandler  # type: ignore[import]
+            from systemd.journal import JournalHandler  # type: ignore[import-untyped]
             del JournalHandler
             return LogHandler.Journald  # journald import was found
         except ImportError:
diff --git a/src/ahriman/core/status/web_client.py b/src/ahriman/core/status/web_client.py
index d63b79e0..b256226c 100644
--- a/src/ahriman/core/status/web_client.py
+++ b/src/ahriman/core/status/web_client.py
@@ -98,7 +98,7 @@ class WebClient(Client, SyncHttpClient):
             requests.Session: generated session object
         """
         if use_unix_socket:
-            import requests_unixsocket  # type: ignore[import]
+            import requests_unixsocket  # type: ignore[import-untyped]
             session: requests.Session = requests_unixsocket.Session()
             session.headers["User-Agent"] = f"ahriman/{__version__}"
             return session
diff --git a/src/ahriman/core/upload/s3.py b/src/ahriman/core/upload/s3.py
index c7931344..9ef115e2 100644
--- a/src/ahriman/core/upload/s3.py
+++ b/src/ahriman/core/upload/s3.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import boto3  # type: ignore[import]
+import boto3  # type: ignore[import-untyped]
 import hashlib
 import mimetypes
 
diff --git a/src/ahriman/models/aur_package.py b/src/ahriman/models/aur_package.py
index 789d93ad..ea66c0ce 100644
--- a/src/ahriman/models/aur_package.py
+++ b/src/ahriman/models/aur_package.py
@@ -22,7 +22,7 @@ import inflection
 
 from collections.abc import Callable
 from dataclasses import dataclass, field, fields
-from pyalpm import Package  # type: ignore[import]
+from pyalpm import Package  # type: ignore[import-not-found]
 from typing import Any, Self
 
 from ahriman.core.util import filter_json, full_version
diff --git a/src/ahriman/models/package.py b/src/ahriman/models/package.py
index 628f5330..3b42c0c3 100644
--- a/src/ahriman/models/package.py
+++ b/src/ahriman/models/package.py
@@ -25,8 +25,8 @@ import copy
 from collections.abc import Callable, Generator, Iterable
 from dataclasses import dataclass
 from pathlib import Path
-from pyalpm import vercmp  # type: ignore[import]
-from srcinfo.parse import parse_srcinfo  # type: ignore[import]
+from pyalpm import vercmp  # type: ignore[import-not-found]
+from srcinfo.parse import parse_srcinfo  # type: ignore[import-untyped]
 from typing import Any, Self
 from urllib.parse import urlparse
 
diff --git a/src/ahriman/models/package_description.py b/src/ahriman/models/package_description.py
index bbb08c31..91e514dc 100644
--- a/src/ahriman/models/package_description.py
+++ b/src/ahriman/models/package_description.py
@@ -19,7 +19,7 @@
 #
 from dataclasses import dataclass, field, fields
 from pathlib import Path
-from pyalpm import Package  # type: ignore[import]
+from pyalpm import Package  # type: ignore[import-not-found]
 from typing import Any, Self
 
 from ahriman.core.util import dataclass_view, filter_json, trim_package
diff --git a/src/ahriman/models/repository_paths.py b/src/ahriman/models/repository_paths.py
index 866712cd..35d38168 100644
--- a/src/ahriman/models/repository_paths.py
+++ b/src/ahriman/models/repository_paths.py
@@ -144,10 +144,9 @@ class RepositoryPaths(LazyLogging):
         """
         return self.owner(self.root)
 
-    # TODO see https://github.com/python/mypy/issues/12534, remove type: ignore after release
     # pylint: disable=protected-access
     @classmethod
-    def known_architectures(cls, root: Path, name: str = "") -> set[str]:  # type: ignore[return]
+    def known_architectures(cls, root: Path, name: str = "") -> set[str]:
         """
         get known architecture names
 
diff --git a/src/ahriman/web/apispec.py b/src/ahriman/web/apispec.py
index a7ccc918..02436084 100644
--- a/src/ahriman/web/apispec.py
+++ b/src/ahriman/web/apispec.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import Application
 from typing import Any
diff --git a/src/ahriman/web/cors.py b/src/ahriman/web/cors.py
index 2d9f19cc..54908bfb 100644
--- a/src/ahriman/web/cors.py
+++ b/src/ahriman/web/cors.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_cors  # type: ignore[import]
+import aiohttp_cors  # type: ignore[import-untyped]
 
 from aiohttp.web import Application
 
diff --git a/src/ahriman/web/middlewares/auth_handler.py b/src/ahriman/web/middlewares/auth_handler.py
index ab741945..a3f32d62 100644
--- a/src/ahriman/web/middlewares/auth_handler.py
+++ b/src/ahriman/web/middlewares/auth_handler.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_security  # type: ignore[import]
+import aiohttp_security  # type: ignore[import-untyped]
 import socket
 import types
 
diff --git a/src/ahriman/web/views/base.py b/src/ahriman/web/views/base.py
index dca09e5a..dd15724a 100644
--- a/src/ahriman/web/views/base.py
+++ b/src/ahriman/web/views/base.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-from aiohttp_cors import CorsViewMixin  # type: ignore[import]
+from aiohttp_cors import CorsViewMixin  # type: ignore[import-untyped]
 from aiohttp.web import HTTPBadRequest, Request, StreamResponse, View
 from collections.abc import Awaitable, Callable
 from typing import Any, TypeVar
diff --git a/src/ahriman/web/views/v1/service/add.py b/src/ahriman/web/views/v1/service/add.py
index 6a13f362..6477befe 100644
--- a/src/ahriman/web/views/v1/service/add.py
+++ b/src/ahriman/web/views/v1/service/add.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/pgp.py b/src/ahriman/web/views/v1/service/pgp.py
index 2ccf4465..77db9870 100644
--- a/src/ahriman/web/views/v1/service/pgp.py
+++ b/src/ahriman/web/views/v1/service/pgp.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, HTTPNotFound, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/process.py b/src/ahriman/web/views/v1/service/process.py
index 849088fa..0ed53d81 100644
--- a/src/ahriman/web/views/v1/service/process.py
+++ b/src/ahriman/web/views/v1/service/process.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPNotFound, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/rebuild.py b/src/ahriman/web/views/v1/service/rebuild.py
index 728c4484..d9878ecb 100644
--- a/src/ahriman/web/views/v1/service/rebuild.py
+++ b/src/ahriman/web/views/v1/service/rebuild.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/remove.py b/src/ahriman/web/views/v1/service/remove.py
index 2f0fc73e..953f89c8 100644
--- a/src/ahriman/web/views/v1/service/remove.py
+++ b/src/ahriman/web/views/v1/service/remove.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/request.py b/src/ahriman/web/views/v1/service/request.py
index e1220a8a..385e1c56 100644
--- a/src/ahriman/web/views/v1/service/request.py
+++ b/src/ahriman/web/views/v1/service/request.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/search.py b/src/ahriman/web/views/v1/service/search.py
index 0718cdcf..ffa00c7f 100644
--- a/src/ahriman/web/views/v1/service/search.py
+++ b/src/ahriman/web/views/v1/service/search.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, HTTPNotFound, Response, json_response
 from collections.abc import Callable
diff --git a/src/ahriman/web/views/v1/service/update.py b/src/ahriman/web/views/v1/service/update.py
index 67108374..5e661833 100644
--- a/src/ahriman/web/views/v1/service/update.py
+++ b/src/ahriman/web/views/v1/service/update.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/service/upload.py b/src/ahriman/web/views/v1/service/upload.py
index 96a9dbd5..9744b74b 100644
--- a/src/ahriman/web/views/v1/service/upload.py
+++ b/src/ahriman/web/views/v1/service/upload.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 import shutil
 
 from aiohttp import BodyPartReader
diff --git a/src/ahriman/web/views/v1/status/logs.py b/src/ahriman/web/views/v1/status/logs.py
index 4d9a0b99..9b092945 100644
--- a/src/ahriman/web/views/v1/status/logs.py
+++ b/src/ahriman/web/views/v1/status/logs.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/status/package.py b/src/ahriman/web/views/v1/status/package.py
index cf9556fa..37d2471d 100644
--- a/src/ahriman/web/views/v1/status/package.py
+++ b/src/ahriman/web/views/v1/status/package.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/status/packages.py b/src/ahriman/web/views/v1/status/packages.py
index cb01c688..77a522dc 100644
--- a/src/ahriman/web/views/v1/status/packages.py
+++ b/src/ahriman/web/views/v1/status/packages.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 import itertools
 
 from collections.abc import Callable
diff --git a/src/ahriman/web/views/v1/status/status.py b/src/ahriman/web/views/v1/status/status.py
index bb625a36..b5252d84 100644
--- a/src/ahriman/web/views/v1/status/status.py
+++ b/src/ahriman/web/views/v1/status/status.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPBadRequest, HTTPNoContent, Response, json_response
 
diff --git a/src/ahriman/web/views/v1/user/login.py b/src/ahriman/web/views/v1/user/login.py
index 28a05c56..719cee00 100644
--- a/src/ahriman/web/views/v1/user/login.py
+++ b/src/ahriman/web/views/v1/user/login.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPFound, HTTPMethodNotAllowed, HTTPUnauthorized
 
diff --git a/src/ahriman/web/views/v1/user/logout.py b/src/ahriman/web/views/v1/user/logout.py
index be9fe0bc..00e8cd7a 100644
--- a/src/ahriman/web/views/v1/user/logout.py
+++ b/src/ahriman/web/views/v1/user/logout.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPFound, HTTPUnauthorized
 
diff --git a/src/ahriman/web/views/v2/status/logs.py b/src/ahriman/web/views/v2/status/logs.py
index a9e2fbbb..963dc6b0 100644
--- a/src/ahriman/web/views/v2/status/logs.py
+++ b/src/ahriman/web/views/v2/status/logs.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see .
 #
-import aiohttp_apispec  # type: ignore[import]
+import aiohttp_apispec  # type: ignore[import-untyped]
 
 from aiohttp.web import HTTPNotFound, Response, json_response
 
diff --git a/src/ahriman/web/web.py b/src/ahriman/web/web.py
index c7047ab6..2049df7e 100644
--- a/src/ahriman/web/web.py
+++ b/src/ahriman/web/web.py
@@ -167,7 +167,7 @@ def setup_service(repository_id: RepositoryId, configuration: Configuration, spa
     # application.logger.info("setup debug panel")
     # debug_enabled = configuration.getboolean("web", "debug", fallback=False)
     # if debug_enabled:
-    #     import aiohttp_debugtoolbar  # type: ignore[import]
+    #     import aiohttp_debugtoolbar  # type: ignore[import-untyped]
     #     aiohttp_debugtoolbar.setup(application,
     #                                hosts=configuration.getlist("web", "debug_allowed_hosts", fallback=[]),
     #                                check_host=configuration.getboolean("web", "debug_check_host", fallback=False))