~jan0sch/smederee

Showing details for patch d46d959a113be4d42649c7f7907f5aa30b077452.
2025-05-31 (Sat), 5:16 AM - Jens Grassel - d46d959a113be4d42649c7f7907f5aa30b077452

Update scalafmt core to 3.9.7 and reformat code

Summary of changes
65 files modified with 624 lines added and 624 lines removed
  • .scalafmt.conf with 1 added and 1 removed lines
  • modules/darcs/src/test/scala/de/smederee/darcs/DarcsCommandsTest.scala with 5 added and 5 removed lines
  • modules/email/src/main/scala/de/smederee/email/EmailMiddleware.scala with 3 added and 3 removed lines
  • modules/email/src/test/scala/de/smederee/email/EmailMiddlewareTest.scala with 1 added and 1 removed lines
  • modules/email/src/test/scala/de/smederee/email/Generators.scala with 4 added and 4 removed lines
  • modules/html-utils/src/main/scala/de/smederee/html/ContentRenderer.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/AccountManagementRoutes.scala with 18 added and 18 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/AddPublicSshKeyForm.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/AuthenticationRoutes.scala with 4 added and 4 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/DoobieAuthenticationRepository.scala with 4 added and 4 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/DoobieOrganisationRepository.scala with 4 added and 4 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/DoobieResetPasswordRepository.scala with 3 added and 3 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/HubServer.scala with 14 added and 14 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/LandingPageRoutes.scala with 5 added and 5 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/OrganisationForm.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/OrganisationRoutes.scala with 22 added and 22 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/ResetPasswordRoutes.scala with 6 added and 6 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/SignupRoutes.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/VcsRepository.scala with 7 added and 7 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala with 60 added and 60 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryStatistics.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/config/SmedereeHubConfig.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/ssh/DarcsSftpFileSystemAccessor.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/ssh/DarcsSshCommand.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/ssh/PublicSshKey.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/ssh/SshAuthenticator.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/Assignee.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/DoobieLabelRepository.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/DoobieMilestoneRepository.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/DoobieTicketRepository.scala with 8 added and 8 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/LabelForm.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/LabelRoutes.scala with 16 added and 16 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/MilestoneForm.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/MilestoneRoutes.scala with 21 added and 21 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/Project.scala with 2 added and 2 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/Submitter.scala with 1 added and 1 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/TicketRoutes.scala with 27 added and 27 removed lines
  • modules/hub/src/main/scala/de/smederee/tickets/config/SmedereeTicketsConfiguration.scala with 1 added and 1 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/AuthenticationMiddlewareTest.scala with 5 added and 5 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/AuthenticationRoutesTest.scala with 2 added and 2 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/BaseSpec.scala with 17 added and 17 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DatabaseMigratorTest.scala with 1 added and 1 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieAccountManagementRepositoryTest.scala with 15 added and 15 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieAuthenticationRepositoryTest.scala with 26 added and 26 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieOrganisationRepositoryTest.scala with 21 added and 21 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieResetPasswordRepositoryTest.scala with 14 added and 14 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieSignupRepositoryTest.scala with 5 added and 5 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/DoobieVcsMetadataRepositoryTest.scala with 30 added and 30 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/Generators.scala with 4 added and 4 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/ResetPasswordRoutesTest.scala with 1 added and 1 removed lines
  • modules/hub/src/test/scala/de/smederee/hub/config/ServiceConfigTest.scala with 1 added and 1 removed lines
  • modules/hub/src/test/scala/de/smederee/ssh/DoobieSshAuthenticationRepositoryTest.scala with 1 added and 1 removed lines
  • modules/hub/src/test/scala/de/smederee/ssh/SshServerProviderTest.scala with 2 added and 2 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/BaseSpec.scala with 10 added and 10 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/DoobieLabelRepositoryTest.scala with 23 added and 23 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/DoobieMilestoneRepositoryTest.scala with 40 added and 40 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/DoobieProjectRepositoryTest.scala with 17 added and 17 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketRepositoryTest.scala with 108 added and 108 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketServiceApiTest.scala with 6 added and 6 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/Generators.scala with 3 added and 3 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/config/DatabaseMigratorTest.scala with 3 added and 3 removed lines
  • modules/hub/src/test/scala/de/smederee/tickets/config/SmedereeTicketsConfigurationTest.scala with 2 added and 2 removed lines
  • modules/security/src/main/scala/de/smederee/security/SignAndValidate.scala with 4 added and 4 removed lines
  • modules/security/src/main/scala/de/smederee/security/Username.scala with 1 added and 1 removed lines
  • modules/security/src/test/scala/de/smederee/security/PasswordTest.scala with 1 added and 1 removed lines
diff -rN -u old-smederee/modules/darcs/src/test/scala/de/smederee/darcs/DarcsCommandsTest.scala new-smederee/modules/darcs/src/test/scala/de/smederee/darcs/DarcsCommandsTest.scala
--- old-smederee/modules/darcs/src/test/scala/de/smederee/darcs/DarcsCommandsTest.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/darcs/src/test/scala/de/smederee/darcs/DarcsCommandsTest.scala	2025-06-20 12:12:52.687922007 +0000
@@ -29,7 +29,7 @@
         val expectedDirectory = workingDirectory.resolve(repo)
         val testPatch         = Paths.get(getClass().getClassLoader().getResource("test-patch.dpatch").toURI())
         val createRepository  = cmd.initialize(workingDirectory)(repo)(Chain.empty)
-        val test = for {
+        val test              = for {
             init  <- createRepository
             patch <- cmd.applyPatch(workingDirectory)(repo)(testPatch)(Chain.empty)
         } yield (init, patch)
@@ -48,7 +48,7 @@
         val cmd    = new DarcsCommands[IO](darcsBinary)
         val source = workingDirectory.resolve("source")
         val target = workingDirectory.resolve("target")
-        val test =
+        val test   =
             for {
                 init  <- cmd.initialize(workingDirectory)("source")(Chain.empty)
                 clone <- cmd.clone(source, target)(Chain.empty)
@@ -66,7 +66,7 @@
         val cmd    = new DarcsCommands[IO](darcsBinary)
         val source = workingDirectory.resolve("source-should-not-exist")
         val target = workingDirectory.resolve("target-should-not-be-created")
-        val test =
+        val test   =
             for {
                 clone <- cmd.clone(source, target)(Chain.empty)
             } yield clone
@@ -110,7 +110,7 @@
         val repo              = "test-repository-existing"
         val expectedDirectory = workingDirectory.resolve(repo)
         val _                 = Files.createDirectories(expectedDirectory)
-        val test = for {
+        val test              = for {
             _      <- cmd.initialize(workingDirectory)(repo)(Chain.empty)
             output <- cmd.initialize(workingDirectory)(repo)(Chain.empty)
         } yield output
@@ -126,7 +126,7 @@
         val expectedDirectory = workingDirectory.resolve(repo)
         val testPatch         = Paths.get(getClass().getClassLoader().getResource("test-patch.dpatch").toURI())
         val createRepository  = cmd.initialize(workingDirectory)(repo)(Chain.empty)
-        val test = for {
+        val test              = for {
             init   <- createRepository
             patch  <- cmd.applyPatch(workingDirectory)(repo)(testPatch)(Chain.empty)
             repair <- cmd.repair(workingDirectory)(repo)(Chain("--dry-run"))
diff -rN -u old-smederee/modules/email/src/main/scala/de/smederee/email/EmailMiddleware.scala new-smederee/modules/email/src/main/scala/de/smederee/email/EmailMiddleware.scala
--- old-smederee/modules/email/src/main/scala/de/smederee/email/EmailMiddleware.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/email/src/main/scala/de/smederee/email/EmailMiddleware.scala	2025-06-20 12:12:52.687922007 +0000
@@ -116,7 +116,7 @@
         val belowMaxLength = Option(source).filter(_.length <= 128)
         // The last part of the email address (usually the top level domain) must at least be 2 characters long.
         val lastPartValid = Option(source) match {
-            case None => None
+            case None         => None
             case Some(string) =>
                 val parts = string.split('.')
                 if (parts.lastOption.map(_.length >= 2).getOrElse(false))
@@ -184,7 +184,7 @@
         val belowMaxLength = Option(source).filter(_.length <= 128)
         // The last part of the email address (usually the top level domain) must at least be 2 characters long.
         val lastPartValid = Option(source) match {
-            case None => None
+            case None         => None
             case Some(string) =>
                 val parts = string.split('.')
                 if (parts.lastOption.map(_.length >= 2).getOrElse(false))
@@ -280,7 +280,7 @@
         val belowMaxLength = Option(source).filter(_.length <= 128)
         // The last part of the email address (usually the top level domain) must at least be 2 characters long.
         val lastPartValid = Option(source) match {
-            case None => None
+            case None         => None
             case Some(string) =>
                 val parts = string.split('.')
                 if (parts.lastOption.map(_.length >= 2).getOrElse(false))
diff -rN -u old-smederee/modules/email/src/test/scala/de/smederee/email/EmailMiddlewareTest.scala new-smederee/modules/email/src/test/scala/de/smederee/email/EmailMiddlewareTest.scala
--- old-smederee/modules/email/src/test/scala/de/smederee/email/EmailMiddlewareTest.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/email/src/test/scala/de/smederee/email/EmailMiddlewareTest.scala	2025-06-20 12:12:52.687922007 +0000
@@ -25,7 +25,7 @@
     property("EmailServerPassword.from must create correct instances") {
         forAll { (randomString: String) =>
             EmailServerPassword.from(randomString) match {
-                case None => fail("Could not create EmailServerPassword!")
+                case None           => fail("Could not create EmailServerPassword!")
                 case Some(password) =>
                     assert(java.util.Arrays.equals(password.toArray, randomString.getBytes(StandardCharsets.UTF_8)))
             }
diff -rN -u old-smederee/modules/email/src/test/scala/de/smederee/email/Generators.scala new-smederee/modules/email/src/test/scala/de/smederee/email/Generators.scala
--- old-smederee/modules/email/src/test/scala/de/smederee/email/Generators.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/email/src/test/scala/de/smederee/email/Generators.scala	2025-06-20 12:12:52.687922007 +0000
@@ -18,8 +18,8 @@
     private val validDomainNameChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-".toList
 
     val genValidFromAddress: Gen[FromAddress] = for {
-        prefix <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
-        domain <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
+        prefix         <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
+        domain         <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
         topLevelDomain <- Gen
             .nonEmptyListOf(Gen.oneOf(validDomainNameChars))
             .suchThat(_.length >= 2)
@@ -39,8 +39,8 @@
     given Arbitrary[TextBody] = Arbitrary(genValidTextBody)
 
     val genValidToAddress: Gen[ToAddress] = for {
-        prefix <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
-        domain <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
+        prefix         <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
+        domain         <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
         topLevelDomain <- Gen
             .nonEmptyListOf(Gen.oneOf(validDomainNameChars))
             .suchThat(_.length >= 2)
diff -rN -u old-smederee/modules/html-utils/src/main/scala/de/smederee/html/ContentRenderer.scala new-smederee/modules/html-utils/src/main/scala/de/smederee/html/ContentRenderer.scala
--- old-smederee/modules/html-utils/src/main/scala/de/smederee/html/ContentRenderer.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/html-utils/src/main/scala/de/smederee/html/ContentRenderer.scala	2025-06-20 12:12:52.687922007 +0000
@@ -92,7 +92,7 @@
                         log.debug(s"Found possible to correct local URI: $absolute, $relative, $formats")
                         val renderedLink = link.target.render(internalTargetsAbsolute = false)
                         localUrlPathPrefix.match {
-                            case None => link
+                            case None             => link
                             case Some(pathPrefix) =>
                                 if (renderedLink.startsWith(pathPrefix.toString))
                                     link
@@ -110,7 +110,7 @@
             }
             .rendering { case (fmt, text: Text) =>
                 ToDoTextCssMapping.isToDoItem.findFirstMatchIn(text.content) match {
-                    case None => text.content
+                    case None              => text.content
                     case Some(matchedItem) =>
                         if (matchedItem.group(4) === null) {
                             val prefix = matchedItem.group(1)
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/AccountManagementRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/AccountManagementRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/AccountManagementRoutes.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/AccountManagementRoutes.scala	2025-06-20 12:12:52.687922007 +0000
@@ -74,7 +74,7 @@
             _            <- Sync[F].delay(log.debug(s"Request to delete user dir: $userDirectory"))
             reposDirPath <- Sync[F].delay(configuration.darcs.repositoriesDirectory.toPath)
             isSubDir     <- Sync[F].delay(reposDirPath.equals(userDirectory.getParent()))
-            deleted <-
+            deleted      <-
                 Sync[F].delay {
                     if (isSubDir) {
                         Files.walkFileTree(
@@ -129,7 +129,7 @@
                     addAction     <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings/ssh/add"))
                     deleteAction  <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings/ssh/delete"))
                     keys          <- accountManagementRepo.listSshKeys(user.uid).compile.toList
-                    resp <- form match {
+                    resp          <- form match {
                         case Validated.Invalid(errors) =>
                             BadRequest(
                                 views.html.account
@@ -146,8 +146,8 @@
                             )
                         case Validated.Valid(validSshKeyForm) =>
                             for {
-                                id        <- Sync[F].delay(UUID.randomUUID())
-                                createdAt <- Sync[F].delay(OffsetDateTime.now(ZoneOffset.UTC))
+                                id           <- Sync[F].delay(UUID.randomUUID())
+                                createdAt    <- Sync[F].delay(OffsetDateTime.now(ZoneOffset.UTC))
                                 convertedKey <- Sync[F].delay(
                                     PublicSshKey.from(id)(user.uid)(createdAt)(validSshKeyForm.keyString)
                                 )
@@ -242,7 +242,7 @@
                     validateAction <- Sync[F].delay(
                         configuration.external.createFullUri(uri"user/settings/email/validate")
                     )
-                    passwordHash <- accountManagementRepo.findPasswordHash(user.uid)
+                    passwordHash    <- accountManagementRepo.findPasswordHash(user.uid)
                     passwordCorrect <- Sync[F].delay(
                         (passwordField, passwordHash)
                             .mapN { case (enteredPassword, hashFromDatabase) =>
@@ -266,7 +266,7 @@
                                             user.name.toString
                                         )
                                 )
-                                _ <- deleteUserDirectory(userDir)
+                                _        <- deleteUserDirectory(userDir)
                                 response <- ticketServiceApi.deleteUser(user.uid) *> accountManagementRepo
                                     .deleteAccount(
                                         user.uid
@@ -295,7 +295,7 @@
         case ar @ POST -> Root / "user" / "settings" / "ssh" / "delete" as user =>
             ar.req.decodeStrict[F, UrlForm] { urlForm =>
                 for {
-                    csrf <- Sync[F].delay(ar.req.getCsrfToken)
+                    csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     formData <- Sync[F].delay {
                         urlForm.values.map { t =>
                             val (key, values) = t
@@ -307,7 +307,7 @@
                     }
                     actionBaseUri <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings"))
                     userIsSure    <- Sync[F].delay(formData.get("i-am-sure").exists(_ === "yes"))
-                    sshKeyId <- Sync[F].delay {
+                    sshKeyId      <- Sync[F].delay {
                         Try(formData.get("ssh-key-id").map(UUID.fromString)) match {
                             case scala.util.Failure(error) =>
                                 log.error("Error while parsing ssh key id upon key delete request.", error)
@@ -336,11 +336,11 @@
                 to       <- Sync[F].delay(NonEmptyList.of(user.email.toToAddress))
                 uri      <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings/email/validate"))
                 subject  <- Sync[F].delay(SubjectLine("Smederee - Please validate your email address."))
-                body <- Sync[F].delay(
+                body     <- Sync[F].delay(
                     TextBody(views.txt.emails.validate(user, token, uri).toString)
                 ) // TODO: extension method?
-                message <- Sync[F].delay(EmailMessage(from, to, List.empty, List.empty, subject, body))
-                result  <- emailMiddleware.send(message)
+                message  <- Sync[F].delay(EmailMessage(from, to, List.empty, List.empty, subject, body))
+                result   <- emailMiddleware.send(message)
                 response <- result match {
                     case Left(error) => InternalServerError(s"An error occured: $error")
                     case Right(_)    => SeeOther(Location(configuration.external.createFullUri(uri"user/settings")))
@@ -352,7 +352,7 @@
         case ar @ POST -> Root / "user" / "settings" / "language" as user =>
             ar.req.decodeStrict[F, UrlForm] { urlForm =>
                 for {
-                    csrf <- Sync[F].delay(ar.req.getCsrfToken)
+                    csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     formData <- Sync[F].delay {
                         urlForm.values.map { t =>
                             val (key, values) = t
@@ -403,10 +403,10 @@
     private val showAccountOrganisations: AuthedRoutes[Account, F] = AuthedRoutes.of {
         case ar @ GET -> Root / "user" / "settings" / "organisations" as user =>
             for {
-                csrf          <- Sync[F].delay(ar.req.getCsrfToken)
-                language      <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                actionBaseUri <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings"))
-                orgs          <- organisationsRepo.allByOwner(user.uid).compile.toList
+                csrf                      <- Sync[F].delay(ar.req.getCsrfToken)
+                language                  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
+                actionBaseUri             <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings"))
+                orgs                      <- organisationsRepo.allByOwner(user.uid).compile.toList
                 organisationActionBaseUri <- Sync[F].delay(
                     configuration.external.createFullUri(uri"user/settings/organisations")
                 )
@@ -430,7 +430,7 @@
                 addAction     <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings/ssh/add"))
                 deleteAction  <- Sync[F].delay(configuration.external.createFullUri(uri"user/settings/ssh/delete"))
                 keys          <- accountManagementRepo.listSshKeys(user.uid).compile.toList
-                resp <- Ok(
+                resp          <- Ok(
                     views.html.account
                         .sshSettings(lang = language)(csrf, Option(s"Smederee/~${user.name} - SSH Settings"), user)(
                             actionBaseUri,
@@ -450,7 +450,7 @@
                 csrf    <- Sync[F].delay(req.getCsrfToken)
                 account <- accountManagementRepo.findByValidationToken(token)
                 _       <- account.traverse(user => accountManagementRepo.markAsValidated(user.uid))
-                _ <- account.traverse(user =>
+                _       <- account.traverse(user =>
                     ticketServiceApi.createOrUpdateUser(TicketsUser(user.uid, user.name, user.email, user.language))
                 )
                 resp <- SeeOther(Location(configuration.external.createFullUri(uri"/")))
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/AddPublicSshKeyForm.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/AddPublicSshKeyForm.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/AddPublicSshKeyForm.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/AddPublicSshKeyForm.scala	2025-06-20 12:12:52.687922007 +0000
@@ -27,7 +27,7 @@
 
     override def validate(data: Map[String, Chain[String]]): ValidatedNec[FormErrors, AddPublicSshKeyForm] = {
         val name = data.get(fieldName).fold(None.validNec)(name => name.headOption.flatMap(KeyComment.from).validNec)
-        val key = data
+        val key  = data
             .get(fieldKey)
             .fold(FormFieldError("No ssh public key given!").invalidNec)(string =>
                 string.headOption
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/AuthenticationRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/AuthenticationRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/AuthenticationRoutes.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/AuthenticationRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -101,7 +101,7 @@
                                 )
                             }
                             source <- Sync[F].delay(request.from.map(_.toString).getOrElse("UNKNOWN_ADDRESS"))
-                            login <- check match {
+                            login  <- check match {
                                 case None =>
                                     // No account was found!
                                     for {
@@ -164,8 +164,8 @@
                                                 OffsetDateTime.now(ZoneOffset.UTC)
                                             )
                                         )
-                                        _ <- repo.createUserSession(session)
-                                        _ <- repo.resetFailedAttempts(account.uid)
+                                        _     <- repo.createUserSession(session)
+                                        _     <- repo.resetFailedAttempts(account.uid)
                                         token <- Sync[F].delay(
                                             signAndValidate.signToken(session.id.toString)(clock.millis.toString)
                                         )
@@ -201,7 +201,7 @@
 
     private val showLoginForm: HttpRoutes[F] = HttpRoutes.of { case req @ GET -> Root / "login" =>
         for {
-            csrf <- Sync[F].delay(req.getCsrfToken)
+            csrf     <- Sync[F].delay(req.getCsrfToken)
             response <- Ok(
                 views.html.login()(loginPath, csrf, resetPath, title = "Smederee - Login to your account".some)()
             )
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/config/SmedereeHubConfig.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/config/SmedereeHubConfig.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/config/SmedereeHubConfig.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/config/SmedereeHubConfig.scala	2025-06-20 12:12:52.691921998 +0000
@@ -221,7 +221,7 @@
 
     given ConfigReader[EmailServerUsername] = ConfigReader.fromStringOpt[EmailServerUsername](EmailServerUsername.from)
     given ConfigReader[EmailServerPassword] = ConfigReader.fromStringOpt[EmailServerPassword](EmailServerPassword.from)
-    given ConfigReader[SmtpTransport] =
+    given ConfigReader[SmtpTransport]       =
         ConfigReader.fromStringOpt[SmtpTransport](string => Try(SmtpTransport.valueOf(string)).toOption)
 
     given ConfigReader[EmailMiddlewareConfiguration] =
@@ -390,7 +390,7 @@
 final case class TicketIntegrationConfiguration(baseUri: Uri, enabled: Boolean)
 
 object TicketIntegrationConfiguration {
-    given ConfigReader[Uri] = ConfigReader.fromStringOpt(s => Uri.fromString(s).toOption)
+    given ConfigReader[Uri]                            = ConfigReader.fromStringOpt(s => Uri.fromString(s).toOption)
     given ConfigReader[TicketIntegrationConfiguration] =
         ConfigReader.forProduct2("base-uri", "enabled")(TicketIntegrationConfiguration.apply)
 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieAuthenticationRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieAuthenticationRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieAuthenticationRepository.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieAuthenticationRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -29,8 +29,8 @@
     given Meta[UserId]       = Meta[UUID].timap(UserId.apply)(_.toUUID)
     given Meta[Username]     = Meta[String].timap(Username.apply)(_.toString)
 
-    private val lockedFilter    = fr"""locked_at IS NOT NULL"""
-    private val notLockedFilter = fr"""locked_at IS NULL"""
+    private val lockedFilter         = fr"""locked_at IS NOT NULL"""
+    private val notLockedFilter      = fr"""locked_at IS NULL"""
     private val selectAccountColumns =
         fr"""SELECT uid, name, email, full_name, validated_email, language FROM hub.accounts"""
 
@@ -70,14 +70,14 @@
     override def findLockedAccount(name: Username)(token: Option[UnlockToken]): F[Option[Account]] = {
         val nameFilter  = fr"""name = $name"""
         val tokenFilter = token.map(token => fr"""unlock_token = $token""")
-        val query =
+        val query       =
             selectAccountColumns ++ whereAndOpt(lockedFilter.some, nameFilter.some, tokenFilter) ++ fr"""LIMIT 1"""
         query.query[Account].option.transact(tx)
     }
 
     override def findPasswordHashAndAttempts(uid: UserId): F[Option[(PasswordHash, Int)]] = {
         val uidFilter = fr"""uid = $uid"""
-        val query = fr"""SELECT password, failed_attempts FROM hub.accounts""" ++ whereAnd(
+        val query     = fr"""SELECT password, failed_attempts FROM hub.accounts""" ++ whereAnd(
                 notLockedFilter,
                 uidFilter
             ) ++ fr"""LIMIT 1"""
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieOrganisationRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieOrganisationRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieOrganisationRepository.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieOrganisationRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -110,7 +110,7 @@
         val nameFilter           = fr"""name = $name"""
         val notLockedFilter      = fr"""locked_at IS NULL"""
         val validatedEmailFilter = fr"""validated_email IS TRUE"""
-        val query =
+        val query                =
             fr"""SELECT
                 uid,
                 name,
@@ -124,7 +124,7 @@
 
     override def findOwner(organisationId: OrganisationId): F[Option[Account]] = {
         val organisationFilter = fr"""organisations.id = $organisationId"""
-        val sqlQuery =
+        val sqlQuery           =
             fr"""SELECT
                    accounts.uid,
                    accounts.name,
@@ -140,7 +140,7 @@
 
     override def getAdministrators(organisationId: OrganisationId): Stream[F, Account] = {
         val organisationFilter = fr"""admins.organisation = $organisationId"""
-        val sqlQuery =
+        val sqlQuery           =
             fr"""SELECT
                    accounts.uid,
                    accounts.name,
@@ -156,7 +156,7 @@
 
     override def getMembers(organisationId: OrganisationId): Stream[F, Account] = {
         val organisationFilter = fr"""members.organisation = $organisationId"""
-        val sqlQuery =
+        val sqlQuery           =
             fr"""SELECT
                    accounts.uid,
                    accounts.name,
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieResetPasswordRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieResetPasswordRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieResetPasswordRepository.scala	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/DoobieResetPasswordRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -33,13 +33,13 @@
     private val resetTokenExpiryNotSetFilter = fr"""reset_expiry IS NULL"""
     private val resetTokenExpirySetFilter    = fr"""reset_expiry IS NOT NULL"""
     private val resetTokenNotExpiredFilter   = fr"""reset_expiry > NOW()"""
-    private val selectAccountColumns =
+    private val selectAccountColumns         =
         fr"""SELECT uid, name, email, full_name, validated_email, language FROM hub.accounts"""
 
     override def findByNameAndResetPasswordToken(name: Username, token: ResetToken): F[Option[Account]] = {
         val nameFilter       = fr"""name = $name"""
         val resetTokenFilter = fr"""reset_token = $token"""
-        val query = selectAccountColumns ++ whereAnd(
+        val query            = selectAccountColumns ++ whereAnd(
             notLockedFilter,
             nameFilter,
             resetTokenExpiryNotSetFilter,
@@ -50,7 +50,7 @@
 
     override def findByResetPasswordToken(token: ResetToken): F[Option[Account]] = {
         val resetTokenFilter = fr"""reset_token = $token"""
-        val query = selectAccountColumns ++ whereAnd(
+        val query            = selectAccountColumns ++ whereAnd(
             notLockedFilter,
             resetTokenExpirySetFilter,
             resetTokenNotExpiredFilter,
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/HubServer.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/HubServer.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/HubServer.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/HubServer.scala	2025-06-20 12:12:52.691921998 +0000
@@ -204,7 +204,7 @@
        |""".stripMargin
 
     def run(args: List[String]): IO[ExitCode] = {
-        val _ = Locale.setDefault(Locale.ENGLISH) // TODO: Make this configurable.
+        val _                = Locale.setDefault(Locale.ENGLISH) // TODO: Make this configurable.
         val hubConfiguration = ConfigSource
             .fromConfig(ConfigFactory.load(getClass.getClassLoader))
             .at(SmedereeHubConfig.location)
@@ -236,7 +236,7 @@
                                         val accountManagementRepo =
                                             new DoobieAccountManagementRepository[IO](hubTransactor)
                                         val dryRun = arguments.headOption.exists(_ === "--dry-run")
-                                        val name =
+                                        val name   =
                                             if (dryRun)
                                                 arguments.drop(1).headOption.flatMap(Username.from)
                                             else
@@ -299,7 +299,7 @@
                                             .as(ExitCode.Success)
                                     case HubSubcommand.lock =>
                                         val dryRun = arguments.headOption.exists(_ === "--dry-run")
-                                        val name =
+                                        val name   =
                                             if (dryRun)
                                                 arguments.drop(1).headOption.flatMap(Username.from)
                                             else
@@ -331,7 +331,7 @@
                                         } yield result
                                     case HubSubcommand.unlock =>
                                         val dryRun = arguments.headOption.exists(_ === "--dry-run")
-                                        val name =
+                                        val name   =
                                             if (dryRun)
                                                 arguments.drop(1).headOption.flatMap(Username.from)
                                             else
@@ -428,7 +428,7 @@
                     ticketMilestonesRepo = new DoobieMilestoneRepository[IO](ticketsTransactor)
                     ticketProjectsRepo   = new DoobieProjectRepository[IO](ticketsTransactor)
                     ticketsRepo          = new DoobieTicketRepository[IO](ticketsTransactor)
-                    ticketRoutes = new TicketRoutes[IO](
+                    ticketRoutes         = new TicketRoutes[IO](
                         ticketsConfiguration,
                         ticketLabelsRepo,
                         ticketMilestonesRepo,
@@ -465,7 +465,7 @@
                         .build
                     signAndValidate = SignAndValidate(hubConfiguration.service.authentication.cookieSecret)
                     assetsRoutes <- resourceServiceBuilder[IO](Constants.assetsPath.path.toAbsolute.toString).toRoutes
-                    authenticationRepo = new DoobieAuthenticationRepository[IO](hubTransactor)
+                    authenticationRepo            = new DoobieAuthenticationRepository[IO](hubTransactor)
                     authenticationWithFallThrough = AuthMiddleware.withFallThrough(
                         authenticateUserWithFallThrough(
                             authenticationRepo,
@@ -473,10 +473,10 @@
                             hubConfiguration.service.authentication.timeouts
                         )
                     )
-                    darcsWrapper          = new DarcsCommands[IO](hubConfiguration.service.darcs.executable)
-                    emailMiddleware       = new SimpleJavaMailMiddleware(hubConfiguration.service.email)
-                    orgRepo               = new DoobieOrganisationRepository[IO](hubTransactor)
-                    accountManagementRepo = new DoobieAccountManagementRepository[IO](hubTransactor)
+                    darcsWrapper            = new DarcsCommands[IO](hubConfiguration.service.darcs.executable)
+                    emailMiddleware         = new SimpleJavaMailMiddleware(hubConfiguration.service.email)
+                    orgRepo                 = new DoobieOrganisationRepository[IO](hubTransactor)
+                    accountManagementRepo   = new DoobieAccountManagementRepository[IO](hubTransactor)
                     accountManagementRoutes = new AccountManagementRoutes[IO](
                         accountManagementRepo,
                         hubConfiguration.service,
@@ -491,7 +491,7 @@
                         authenticationRepo,
                         signAndValidate
                     )
-                    resetPasswordRepo = new DoobieResetPasswordRepository[IO](hubTransactor)
+                    resetPasswordRepo   = new DoobieResetPasswordRepository[IO](hubTransactor)
                     resetPasswordRoutes = new ResetPasswordRoutes[IO](
                         hubConfiguration.service.authentication,
                         authenticationRepo,
@@ -504,7 +504,7 @@
                     landingPages    = new LandingPageRoutes[IO](hubConfiguration.service)
                     orgRoutes       = new OrganisationRoutes[IO](hubConfiguration.service, orgRepo)
                     vcsMetadataRepo = new DoobieVcsMetadataRepository[IO](hubTransactor)
-                    vcsRepoRoutes = new VcsRepositoryRoutes[IO](
+                    vcsRepoRoutes   = new VcsRepositoryRoutes[IO](
                         hubConfiguration.service,
                         darcsWrapper,
                         vcsMetadataRepo,
@@ -525,7 +525,7 @@
                     )
                     hubWebService = Router(
                         Constants.assetsPath.path.toAbsolute.toString -> assetsRoutes,
-                        "/" -> RequestId.httpRoutes(
+                        "/"                                           -> RequestId.httpRoutes(
                             RequestLogger.httpRoutes(
                                 logHeaders = true,
                                 logBody = true,
@@ -547,7 +547,7 @@
                     // Create our ssh server fiber (or an empty option if disabled).
                     sshServerProvider = hubConfiguration.service.ssh.enabled match {
                         case false => None
-                        case true =>
+                        case true  =>
                             Option(
                                 new SshServerProvider(
                                     hubConfiguration.service.darcs,
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/LandingPageRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/LandingPageRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/LandingPageRoutes.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/LandingPageRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -52,7 +52,7 @@
         for {
             csrf     <- Sync[F].delay(ar.req.getCsrfToken)
             language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-            resp <- Ok(
+            resp     <- Ok(
                 views.html.imprint(baseUri, lang = language)(csrf, "Smederee - Imprint / Impressum".some, user.some)
             )
         } yield resp
@@ -69,7 +69,7 @@
         for {
             csrf     <- Sync[F].delay(ar.req.getCsrfToken)
             language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-            resp <- Ok(
+            resp     <- Ok(
                 views.html
                     .index(baseUri, lang = language)()(signupUri, csrf, "Welcome to the Smederee!".some, user.some)
             )
@@ -88,7 +88,7 @@
             for {
                 csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                 language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                resp <- Ok(
+                resp     <- Ok(
                     views.html
                         .privacyPolicy(baseUri, lang = language)(csrf, "Smederee - Privacy Policy".some, user.some)
                 )
@@ -107,7 +107,7 @@
             for {
                 csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                 language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                resp <- Ok(
+                resp     <- Ok(
                     views.html
                         .publicAlpha(baseUri, lang = language)(
                             csrf,
@@ -130,7 +130,7 @@
             for {
                 csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                 language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                resp <- Ok(
+                resp     <- Ok(
                     views.html.termsOfUse(baseUri, lang = language)(csrf, "Smederee - Terms of Use".some, user.some)
                 )
             } yield resp
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationForm.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationForm.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationForm.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationForm.scala	2025-06-20 12:12:52.691921998 +0000
@@ -142,7 +142,7 @@
           *   A stringified map containing the data of the form.
           */
         def toMap: Map[String, Chain[String]] = {
-            val name = Map(OrganisationForm.fieldName.toString -> Chain(form.name.toString))
+            val name  = Map(OrganisationForm.fieldName.toString -> Chain(form.name.toString))
             val owner =
                 form.owner.fold(Map.empty)(owner => Map(OrganisationForm.fieldOwner.toString -> Chain(owner.toString)))
             val fullName = form.fullName.fold(Map.empty)(fullName =>
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationRoutes.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/OrganisationRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -58,7 +58,7 @@
             _            <- Sync[F].delay(log.debug(s"Request to delete organisation dir: $organisationDirectory"))
             reposDirPath <- Sync[F].delay(configuration.darcs.repositoriesDirectory.toPath)
             isSubDir     <- Sync[F].delay(reposDirPath.equals(organisationDirectory.getParent()))
-            deleted <-
+            deleted      <-
                 Sync[F].delay {
                     if (isSubDir) {
                         Files.walkFileTree(
@@ -123,7 +123,7 @@
             }
             // TODO: Replace with whatever we implement as proper permission model. ;-)
             result = currentUser match {
-                case None => orgaAndAdmins.filter(_._1.isPrivate === false)
+                case None       => orgaAndAdmins.filter(_._1.isPrivate === false)
                 case Some(user) =>
                     orgaAndAdmins.filter(tuple =>
                         tuple._1.isPrivate === false || tuple._1.owner === user.uid || tuple._2.exists(_ === user)
@@ -137,7 +137,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to create an organisation!"
                         ) // FIXME: Proper error handling!
@@ -147,7 +147,7 @@
                     // TODO: Cleanup the checking into something like `form.andThen(...)` or so.
                     orgExists <- form.traverse(validForm => orgRepo.findByName(validForm.name))
                     checkedForm = orgExists match {
-                        case Validated.Invalid(_) => form
+                        case Validated.Invalid(_)         => form
                         case Validated.Valid(possibleOrg) =>
                             possibleOrg.fold(form)(_ =>
                                 Map(
@@ -197,7 +197,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit an organisation!"
                         ) // FIXME: Proper error handling!
@@ -205,10 +205,10 @@
                     orgAndAdmins <- loadOrganisation(user.some)(organisationName)
                     orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                     response <- orgaData match {
-                        case None => NotFound()
+                        case None                           => NotFound()
                         case Some((organisation, _, owner)) =>
                             for {
-                                formData <- Sync[F].delay(urlForm.valuesWithoutEmptyStrings)
+                                formData   <- Sync[F].delay(urlForm.valuesWithoutEmptyStrings)
                                 userIsSure <- Sync[F].delay(
                                     formData.get("i-am-sure").exists(_.headOption.exists(_ === "yes"))
                                 )
@@ -227,8 +227,8 @@
                                                         organisation.name.toString
                                                     )
                                             )
-                                            _ <- deleteOrganisationDirectory(organisationDir)
-                                            _ <- orgRepo.delete(organisation.oid)
+                                            _        <- deleteOrganisationDirectory(organisationDir)
+                                            _        <- orgRepo.delete(organisation.oid)
                                             response <- SeeOther(
                                                 Location(linkConfig.createFullUri(Uri(path = Uri.Path.Root)))
                                             )
@@ -251,7 +251,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit an organisation!"
                         ) // FIXME: Proper error handling!
@@ -259,12 +259,12 @@
                     orgAndAdmins <- loadOrganisation(user.some)(organisationName)
                     orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                     resp <- orgaData match {
-                        case None => NotFound()
+                        case None                            => NotFound()
                         case Some((organisation, admins, _)) =>
                             for {
                                 formData <- Sync[F].delay(urlForm.valuesWithoutEmptyStrings)
                                 form     <- Sync[F].delay(OrganisationAdminsForm.validate(formData))
-                                resp <- form match {
+                                resp     <- form match {
                                     case Validated.Invalid(es) =>
                                         val actionBaseUri =
                                             uri"user/settings/organisations".addSegment(
@@ -326,7 +326,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit an organisation!"
                         ) // FIXME: Proper error handling!
@@ -335,13 +335,13 @@
                     orgMembers   <- orgAndAdmins.traverse(tuple => orgRepo.getMembers(tuple._1.oid).compile.toList)
                     orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                     resp <- orgaData match {
-                        case None => NotFound()
+                        case None                       => NotFound()
                         case Some((organisation, _, _)) =>
                             val members = orgMembers.getOrElse(Nil)
                             for {
                                 formData <- Sync[F].delay(urlForm.valuesWithoutEmptyStrings)
                                 form     <- Sync[F].delay(OrganisationMembersForm.validate(formData))
-                                resp <- form match {
+                                resp     <- form match {
                                     case Validated.Invalid(es) =>
                                         val actionBaseUri =
                                             uri"user/settings/organisations".addSegment(
@@ -401,7 +401,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit an organisation!"
                         ) // FIXME: Proper error handling!
@@ -409,13 +409,13 @@
                     orgAndAdmins <- loadOrganisation(user.some)(organisationName)
                     orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                     resp <- orgaData match {
-                        case None => NotFound()
+                        case None                                => NotFound()
                         case Some((organisation, admins, owner)) =>
                             val possibleOwners = (List(owner, user) ::: admins).distinct
                             for {
                                 formData <- Sync[F].delay(urlForm.valuesWithoutEmptyStrings)
                                 form     <- Sync[F].delay(OrganisationForm.validate(formData))
-                                resp <- form match {
+                                resp     <- form match {
                                     case Validated.Invalid(es) =>
                                         val actionBaseUri = uri"user/settings/organisations".addSegment(
                                             s"~${organisation.name.toString}"
@@ -471,7 +471,7 @@
             for {
                 csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                 language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                resp <- user.validatedEmail match {
+                resp     <- user.validatedEmail match {
                     case false =>
                         Forbidden(
                             views.html.errors
@@ -506,7 +506,7 @@
                 orgAndAdmins <- loadOrganisation(user.some)(organisationName)
                 orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                 resp <- orgaData match {
-                    case None => NotFound("Organisation not found!")
+                    case None                            => NotFound("Organisation not found!")
                     case Some((organisation, admins, _)) =>
                         user.validatedEmail match {
                             case false =>
@@ -549,7 +549,7 @@
                 orgMembers   <- orgAndAdmins.traverse(tuple => orgRepo.getMembers(tuple._1.oid).compile.toList)
                 orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                 resp <- orgaData match {
-                    case None => NotFound("Organisation not found!")
+                    case None                       => NotFound("Organisation not found!")
                     case Some((organisation, _, _)) =>
                         val members = orgMembers.getOrElse(Nil)
                         user.validatedEmail match {
@@ -592,7 +592,7 @@
                 orgAndAdmins <- loadOrganisation(user.some)(organisationName)
                 orgaData = orgAndAdmins.filter(tuple => tuple._1.owner === user.uid || tuple._2.exists(_ === user))
                 resp <- orgaData match {
-                    case None => NotFound("Organisation not found!")
+                    case None                                => NotFound("Organisation not found!")
                     case Some((organisation, admins, owner)) =>
                         user.validatedEmail match {
                             case false =>
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/ResetPasswordRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/ResetPasswordRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/ResetPasswordRoutes.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/ResetPasswordRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -80,14 +80,14 @@
                                     for {
                                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                                         token    <- Sync[F].delay(ResetToken.generate)
-                                        _ <- resetPasswordRepo
+                                        _        <- resetPasswordRepo
                                             .setResetPasswordToken(user.uid)(
                                                 token,
                                                 OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L)
                                             )
                                         from <- Sync[F].delay(FromAddress("noreply@smeder.ee"))
                                         to   <- Sync[F].delay(NonEmptyList.of(user.email.toToAddress))
-                                        uri <- Sync[F].delay(
+                                        uri  <- Sync[F].delay(
                                             external.createFullUri(resetChangePasswordPath.addSegment(token.toString))
                                         )
                                         subject <- Sync[F]
@@ -113,7 +113,7 @@
 
     private val requestPasswordReset: HttpRoutes[F] = HttpRoutes.of { case req @ GET -> Root / "forgot-password" =>
         for {
-            csrf <- Sync[F].delay(req.getCsrfToken)
+            csrf     <- Sync[F].delay(req.getCsrfToken)
             response <- Ok(
                 views.html.reset()(resetRequestPath, csrf, title = "Smederee - Reset your account password".some)()
             )
@@ -139,7 +139,7 @@
                 for {
                     csrf     <- Sync[F].delay(req.getCsrfToken)
                     formData <- Sync[F].delay(urlForm.values)
-                    form <- Sync[F].delay(
+                    form     <- Sync[F].delay(
                         ChangePasswordForm
                             .validate(formData)
                             .andThen(form =>
@@ -202,8 +202,8 @@
     private val changePasswordForm: HttpRoutes[F] = HttpRoutes.of {
         case req @ GET -> Root / "forgot-password" / "change-password" / ResetTokenPathParameter(token) =>
             for {
-                csrf <- Sync[F].delay(req.getCsrfToken)
-                user <- resetPasswordRepo.findByResetPasswordToken(token)
+                csrf     <- Sync[F].delay(req.getCsrfToken)
+                user     <- resetPasswordRepo.findByResetPasswordToken(token)
                 response <- user match {
                     case None =>
                         Sync[F].delay(log.debug(s"Requested password reset token $token was not found!")) *> NotFound()
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/SignupRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/SignupRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/SignupRoutes.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/SignupRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -89,7 +89,7 @@
                                 )
                             case Validated.Valid(signupForm) =>
                                 for {
-                                    uid <- Sync[F].delay(UserId.randomUserId)
+                                    uid     <- Sync[F].delay(UserId.randomUserId)
                                     account <- Sync[F].delay(
                                         Account(
                                             uid = uid,
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -89,9 +89,9 @@
         currentUser: Option[Account]
     )(repositoryOwnerName: Username, repositoryName: VcsRepositoryName): F[Option[(VcsRepository, VcsRepositoryId)]] =
         for {
-            owner <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
+            owner      <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
             loadedRepo <- owner match {
-                case None => Sync[F].pure(None)
+                case None        => Sync[F].pure(None)
                 case Some(owner) =>
                     (
                         vcsMetadataRepo.findVcsRepository(owner, repositoryName),
@@ -103,7 +103,7 @@
             }
             // TODO: Replace with whatever we implement as proper permission model. ;-)
             repoAndId = currentUser match {
-                case None => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
+                case None       => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
                 case Some(user) =>
                     loadedRepo.filter(tuple =>
                         tuple._1.isPrivate === false || tuple._1.owner === user.toVcsRepositoryOwner
@@ -125,12 +125,12 @@
         ownerName: Username
     )(repoDirectory: java.nio.file.Path): F[Boolean] =
         for {
-            _ <- Sync[F].delay(log.debug(s"Request to delete repository dir: $repoDirectory"))
+            _            <- Sync[F].delay(log.debug(s"Request to delete repository dir: $repoDirectory"))
             reposDirPath <- Sync[F].delay(
                 configuration.darcs.repositoriesDirectory.toPath.resolve(ownerName.toString)
             )
             isSubDir <- Sync[F].delay(reposDirPath.equals(repoDirectory.getParent()))
-            deleted <-
+            deleted  <-
                 Sync[F].delay {
                     if (isSubDir) {
                         Files.walkFileTree(
@@ -207,7 +207,7 @@
         ): F[(Int, Chain[String], Chain[String])] = {
             val targetFile = targetDirectory / s"${repositoryName}.tar.gz"
             for {
-                _ <- Sync[F].delay(Files.createDirectories(targetDirectory.toNIO))
+                _              <- Sync[F].delay(Files.createDirectories(targetDirectory.toNIO))
                 tempTargetFile <- Sync[F].delay(
                     Files.createTempFile(targetDirectory.toNIO, "download", s"${repositoryName}.tar.gz")
                 )
@@ -268,12 +268,12 @@
     private def doShowAllRepositories(csrf: Option[CsrfToken])(user: Option[Account]): F[Response[F]] =
         for {
             language <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
-            repos <- vcsMetadataRepo
+            repos    <- vcsMetadataRepo
                 .listAllRepositories(user)(VcsMetadataRepositoriesOrdering.NameAscending)
                 .compile
                 .toList
             actionBaseUri <- Sync[F].delay(linkConfig.createFullUri(uri"projects"))
-            resp <- Ok(
+            resp          <- Ok(
                 views.html.showAllRepositories(lang = language)(actionBaseUri, csrf, s"Smederee - Projects".some, user)(
                     repos
                 )
@@ -391,7 +391,7 @@
             }
             pageTitle = genPageTitleBase(repositoryOwnerName)(repositoryName.some)
             resp <- repo match {
-                case None => NotFound("Repository not found!")
+                case None       => NotFound("Repository not found!")
                 case Some(repo) =>
                     Ok(
                         views.html.showRepositoryBranches(baseUri, lang = language)(
@@ -439,7 +439,7 @@
             )
             sshUri <- sshConfig.enabled match {
                 case false => Sync[F].pure(None)
-                case true =>
+                case true  =>
                     Sync[F].delay(
                         s"SSH_PORT=${sshConfig.port.toString} darcs clone darcs@${sshConfig.host.toString}:${repositoryOwnerName.toString}/${repositoryName.toString}".some
                     )
@@ -479,7 +479,7 @@
                     }
                 )
             readmeData <- repo.traverse(repo => doLoadReadme(repo))
-            readme <- readmeData match {
+            readme     <- readmeData match {
                 case Some((lines, Some(_), Some(renderableContent))) =>
                     Sync[F].delay(
                         ContentRenderer
@@ -499,7 +499,7 @@
             }
             pageTitle = genPageTitleBase(repositoryOwnerName)(repositoryName.some)
             resp <- repo match {
-                case None => NotFound("Repository not found!")
+                case None       => NotFound("Repository not found!")
                 case Some(repo) =>
                     Ok(
                         views.html.showRepositoryOverview(baseUri, lang = language)(
@@ -579,7 +579,7 @@
                 )
             _        <- Sync[F].delay(log.debug(s"Requested to view file type: $fileType"))
             viewFile <- Sync[F].delay(fileType.exists(_.isText)) // Only display certain file types.
-            listing <-
+            listing  <-
                 requestedFilePath match {
                     case None                => Sync[F].delay(IndexedSeq.empty)
                     case Some(_) if viewFile => Sync[F].delay(IndexedSeq.empty)
@@ -587,11 +587,11 @@
                 }
             content <-
                 requestedFilePath match {
-                    case None => Sync[F].delay(IndexedSeq.empty)
+                    case None       => Sync[F].delay(IndexedSeq.empty)
                     case Some(path) =>
                         if (viewFile)
                             for {
-                                size <- Sync[F].delay(os.size(path))
+                                size   <- Sync[F].delay(os.size(path))
                                 stream <-
                                     if (size <= MaximumFileSize)
                                         Sync[F].delay(os.read.lines.stream(path))
@@ -626,7 +626,7 @@
             )
             renderableContent = RenderableContent.fromUri(actionBaseUri)
             fileContent <- renderableContent match {
-                case None => Sync[F].delay(content.toList)
+                case None              => Sync[F].delay(content.toList)
                 case Some(contentType) =>
                     Sync[F].delay(
                         ContentRenderer
@@ -641,9 +641,9 @@
             }
             titleBase = genPageTitleBase(repositoryOwnerName)(repositoryName.some)
             pageTitle <- Sync[F].delay(s"$titleBase: ${filePath.segments.map(_.decoded()).mkString("/")}")
-            resp <-
+            resp      <-
                 repo match {
-                    case None => NotFound("Repository not found!")
+                    case None       => NotFound("Repository not found!")
                     case Some(repo) =>
                         if (
                             filePath.segments.mkString
@@ -723,7 +723,7 @@
                 latestPatch.getOrElse(healthCheck.createdAt).compareTo(healthCheck.createdAt) <= 1
             ) match {
                 case Some(healthCheck) => Sync[F].pure(healthCheck)
-                case None =>
+                case None              =>
                     darcs
                         .repair(directory.toNIO)(repositoryName.toString)(options)
                         .map(check =>
@@ -779,7 +779,7 @@
             )
             pageTitle = genPageTitleBase(repositoryOwnerName)(repositoryName.some) |+| ": Health"
             resp <- repo match {
-                case None => NotFound()
+                case None       => NotFound()
                 case Some(repo) =>
                     Ok(
                         views.html.showRepositoryHealth(baseUri, lang = language)(
@@ -834,7 +834,7 @@
             numberOfChanges <- Sync[F].delay(countChanges.stdout.toList.mkString.trim.toInt)
             maxCount = 10
             from     = fromEntry.getOrElse(1)
-            to =
+            to       =
                 if ((from + maxCount > numberOfChanges) && (numberOfChanges > 0))
                     numberOfChanges
                 else
@@ -883,7 +883,7 @@
             )
             pageTitle = genPageTitleBase(repositoryOwnerName)(repositoryName.some) |+| ": Changes"
             resp <- repo match {
-                case None => NotFound()
+                case None       => NotFound()
                 case Some(repo) =>
                     Ok(
                         views.html.showRepositoryHistory(baseUri, lang = language)(
@@ -919,7 +919,7 @@
             repoAndId <- loadRepo(user)(repositoryOwnerName, repositoryName)
             repo = repoAndId.map(_._1)
             response <- repo match {
-                case None => NotFound()
+                case None       => NotFound()
                 case Some(repo) =>
                     for {
                         directory <- Sync[F].delay(
@@ -934,7 +934,7 @@
                         numberOfChanges <- Sync[F].delay(countChanges.stdout.toList.mkString.trim.toInt)
                         maxCount = 15
                         from     = 1
-                        to =
+                        to       =
                             if ((from + maxCount > numberOfChanges) && (numberOfChanges > 0))
                                 numberOfChanges
                             else
@@ -943,7 +943,7 @@
                         vcsLog <- darcs.log(directory.toNIO)(repositoryName.toString)(
                             Chain(s"--index=$from-$to", "--summary", "--xml-output")
                         )
-                        xmlLog <- Sync[F].delay(scala.xml.XML.loadString(vcsLog.stdout.toList.mkString))
+                        xmlLog  <- Sync[F].delay(scala.xml.XML.loadString(vcsLog.stdout.toList.mkString))
                         patches <- Sync[F].delay(
                             (xmlLog \ "patch").flatMap(VcsRepositoryPatchMetadata.fromDarcsXmlLog).toList
                         )
@@ -959,7 +959,7 @@
                                 )
                             )
                         )
-                        items = patches.map(_.toRssItem(repositoryBaseUri.addSegment("patch")))
+                        items   = patches.map(_.toRssItem(repositoryBaseUri.addSegment("patch")))
                         channel = RssChannel(
                             title = s"Smederee: ~$repositoryOwnerName/$repositoryName",
                             link = repositoryBaseUri.toString,
@@ -1036,7 +1036,7 @@
             )
             titleBase = genPageTitleBase(repositoryOwnerName)(repositoryName.some)
             resp <- repo match {
-                case None => NotFound()
+                case None       => NotFound()
                 case Some(repo) =>
                     Ok(
                         views.html.showRepositoryStatistics(baseUri, lang = language)(
@@ -1083,7 +1083,7 @@
                 Chain(s"--hash=${hash.toString}", "--summary", "--xml-output")
             )
             xmlLog <- Sync[F].delay(scala.xml.XML.loadString(vcsLog.stdout.toList.mkString))
-            patch <- Sync[F].delay(
+            patch  <- Sync[F].delay(
                 (xmlLog \ "patch").flatMap(VcsRepositoryPatchMetadata.fromDarcsXmlLog).toList.headOption
             )
             darcsDiff        <- darcs.diff(directory.toNIO)(repositoryName.toString)(hash)(Chain("--no-pause-for-gui"))
@@ -1113,7 +1113,7 @@
             titleBase = genPageTitleBase(repositoryOwnerName)(repositoryName.some)
             pageTitle = patch.map(_.name).map(patchName => titleBase |+| ": " |+| patchName.toString)
             resp <- repo match {
-                case None => NotFound()
+                case None       => NotFound()
                 case Some(repo) =>
                     Ok(
                         views.html
@@ -1145,7 +1145,7 @@
     private def doListFiles(directory: os.Path): F[IndexedSeq[(os.RelPath, os.StatInfo)]] =
         for {
             isDirectory <- Sync[F].delay(os.isDir(directory))
-            listing <-
+            listing     <-
                 if (isDirectory)
                     Sync[F].delay(
                         os.walk
@@ -1189,7 +1189,7 @@
             readme = files.find(_.last.matches("(?iu)^readme(\\..+)?$"))
             _ <- Sync[F].delay(log.debug(s"Found README at $readme."))
             renderableContent = readme.flatMap(path => RenderableContent.fromUri(Uri.unsafeFromString(path.toString)))
-            size <- readme.traverse(path => Sync[F].delay(os.size(path)))
+            size   <- readme.traverse(path => Sync[F].delay(os.size(path)))
             stream <- readme.traverse { path =>
                 if (size.getOrElse(0L) <= MaximumFileSize)
                     Sync[F].delay(os.read.lines.stream(path))
@@ -1204,8 +1204,8 @@
                 repositoryName
             ) /: filePath =>
             for {
-                csrf  <- Sync[F].delay(req.getCsrfToken)
-                owner <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
+                csrf       <- Sync[F].delay(req.getCsrfToken)
+                owner      <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
                 loadedRepo <- owner match {
                     case None        => Sync[F].pure(None)
                     case Some(owner) => vcsMetadataRepo.findVcsRepository(owner, repositoryName)
@@ -1250,7 +1250,7 @@
                 csrf <- Sync[F].delay(ar.req.getCsrfToken)
                 file <- doDownloadDistribution(user.some)(repositoryOwnerName, repositoryName)
                 resp <- file match {
-                    case None => NotFound()
+                    case None           => NotFound()
                     case Some(filePath) =>
                         StaticFile
                             .fromPath(filePath, ar.req.some)
@@ -1275,7 +1275,7 @@
                 csrf <- Sync[F].delay(req.getCsrfToken)
                 file <- doDownloadDistribution(None)(repositoryOwnerName, repositoryName)
                 resp <- file match {
-                    case None => NotFound()
+                    case None           => NotFound()
                     case Some(filePath) =>
                         StaticFile
                             .fromPath(filePath, req.some)
@@ -1300,7 +1300,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    resp <- user.validatedEmail match {
+                    resp     <- user.validatedEmail match {
                         case false =>
                             Forbidden(
                                 views.html.errors
@@ -1350,7 +1350,7 @@
                                     )
                                 )
                                 output <- targetRepository match {
-                                    case None => Sync[F].pure(0)
+                                    case None               => Sync[F].pure(0)
                                     case Some(repoMetadata) =>
                                         for {
                                             _ <- Sync[F].delay(
@@ -1402,14 +1402,14 @@
                 val response = for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to create a repository!"
                         ) // FIXME: Proper error handling!
                     )
                     formData <- Sync[F].delay(urlForm.values)
                     form     <- Sync[F].delay(NewVcsRepositoryForm.validate(formData))
-                    resp <- form match {
+                    resp     <- form match {
                         case Validated.Invalid(es) =>
                             BadRequest(
                                 views.html
@@ -1459,7 +1459,7 @@
                                                 if (output.exitValue === 0)
                                                     for {
                                                         written <- vcsMetadataRepo.createVcsRepository(newRepo)
-                                                        _ <- Option(newRepo)
+                                                        _       <- Option(newRepo)
                                                             .filter(_.ticketsEnabled)
                                                             .traverse(repo =>
                                                                 ticketsProjectRepo.createProject(repo.convert)
@@ -1504,7 +1504,7 @@
                     for {
                         csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                        resp <- InternalServerError(
+                        resp     <- InternalServerError(
                             views.html.errors.internalServerError(lang = language)(csrf, user.some)
                         )
                     } yield resp
@@ -1519,12 +1519,12 @@
             ar.req.decodeStrict[F, UrlForm] { urlForm =>
                 for {
                     csrf <- Sync[F].delay(ar.req.getCsrfToken)
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _    <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit a repository!"
                         ) // FIXME: Proper error handling!
                     )
-                    owner <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
+                    owner      <- vcsMetadataRepo.findVcsRepositoryOwner(repositoryOwnerName)
                     loadedRepo <- owner match {
                         case None        => Sync[F].pure(None)
                         case Some(owner) => vcsMetadataRepo.findVcsRepository(owner, repositoryName)
@@ -1536,7 +1536,7 @@
                     )
                     // You can only delete repositories that you own!
                     repo = loadedRepo.filter(_.owner === user.toVcsRepositoryOwner)
-                    _ <- Sync[F].raiseUnless(repo.nonEmpty)(new Error("Repository not found!"))
+                    _       <- Sync[F].raiseUnless(repo.nonEmpty)(new Error("Repository not found!"))
                     repoDir <- Sync[F].delay(
                         repo.map(repo =>
                             darcsConfig.repositoriesDirectory.toPath
@@ -1561,7 +1561,7 @@
                 for {
                     csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                     language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                    _ <- Sync[F].raiseUnless(user.validatedEmail)(
+                    _        <- Sync[F].raiseUnless(user.validatedEmail)(
                         new Error(
                             "An unvalidated account is not allowed to edit a repository!"
                         ) // FIXME: Proper error handling!
@@ -1573,7 +1573,7 @@
                         case _            => Sync[F].delay(List.empty)
                     }
                     resp <- repo match {
-                        case None => NotFound()
+                        case None       => NotFound()
                         case Some(repo) =>
                             for {
                                 editAction <- Sync[F].delay(
@@ -1603,7 +1603,7 @@
                                 )
                                 formData <- Sync[F].delay(urlForm.values)
                                 form     <- Sync[F].delay(EditVcsRepositoryForm.validate(formData))
-                                resp <- form match {
+                                resp     <- form match {
                                     case Validated.Invalid(errors) =>
                                         BadRequest(
                                             views.html.editRepository(lang = language)(
@@ -1677,7 +1677,7 @@
             for {
                 csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                 language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                resp <- user.validatedEmail match {
+                resp     <- user.validatedEmail match {
                     case false =>
                         Forbidden(
                             views.html.errors
@@ -1804,7 +1804,7 @@
                     )
                 )
                 formData <- Sync[F].delay(repo.map(EditVcsRepositoryForm.fromVcsRepository).map(_.toMap))
-                resp <- (formData, repo) match {
+                resp     <- (formData, repo) match {
                     case (Some(formData), Some(repo)) =>
                         Ok(
                             views.html.editRepository()(
@@ -1876,7 +1876,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -1898,7 +1898,7 @@
             for {
                 csrf      <- Sync[F].delay(req.getCsrfToken)
                 repoAndId <- loadRepo(None)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound()(
                             csrf = csrf,
@@ -1921,7 +1921,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -1943,7 +1943,7 @@
             for {
                 csrf      <- Sync[F].delay(req.getCsrfToken)
                 repoAndId <- loadRepo(None)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound()(
                             csrf = csrf,
@@ -1966,7 +1966,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -1989,7 +1989,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -2011,7 +2011,7 @@
             for {
                 csrf      <- Sync[F].delay(req.getCsrfToken)
                 repoAndId <- loadRepo(None)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound()(
                             csrf = csrf,
@@ -2044,7 +2044,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -2064,7 +2064,7 @@
                 repositoryName
             ) / "patch" / DarcsHashPathParameter(hash) =>
             for {
-                csrf <- Sync[F].delay(req.getCsrfToken)
+                csrf      <- Sync[F].delay(req.getCsrfToken)
                 repoAndId <- loadRepo(None)(
                     repositoryOwnerName,
                     repositoryName
@@ -2092,7 +2092,7 @@
                 csrf      <- Sync[F].delay(ar.req.getCsrfToken)
                 language  <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 repoAndId <- loadRepo(user.some)(repositoryOwnerName, repositoryName)
-                resp <- repoAndId.fold(
+                resp      <- repoAndId.fold(
                     NotFound(
                         views.html.errors.repositoryNotFound(lang = language)(
                             csrf = csrf,
@@ -2112,7 +2112,7 @@
                 repositoryName
             ) / "stats" =>
             for {
-                csrf <- Sync[F].delay(req.getCsrfToken)
+                csrf      <- Sync[F].delay(req.getCsrfToken)
                 repoAndId <- loadRepo(None)(
                     repositoryOwnerName,
                     repositoryName
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepository.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -133,7 +133,7 @@
     def validate(s: String): ValidatedNec[String, VcsRepositoryName] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length > 1)
                         input.validNec
@@ -412,7 +412,7 @@
     def fromDarcsXmlLog(darcsLogEntry: scala.xml.Node): Option[VcsPatchSummary] =
         Try {
             val summary = (darcsLogEntry \ "summary").headOption
-            val added = summary
+            val added   = summary
                 .map(summary => (summary \ "add_file").flatMap(file => VcsPatchFilename.from(file.text)).toList)
                 .getOrElse(List.empty)
             val modified = summary
@@ -421,7 +421,7 @@
                         val filename      = VcsPatchFilename.from(file.text)
                         val added_lines   = file \ "added_lines" \@ "num"
                         val removed_lines = file \ "removed_lines" \@ "num"
-                        val added =
+                        val added         =
                             if (added_lines.nonEmpty && added_lines.forall(_.isDigit))
                                 added_lines.toInt
                             else
@@ -492,13 +492,13 @@
       */
     def fromDarcsXmlLog(darcsLogEntry: scala.xml.Node): Option[VcsRepositoryPatchMetadata] =
         Try {
-            val author = VcsPatchAuthor.from(darcsLogEntry \@ "author")
+            val author  = VcsPatchAuthor.from(darcsLogEntry \@ "author")
             val comment = (darcsLogEntry \ "comment").headOption
                 .map(comment => DarcsCommentFilter.replaceFirstIn(comment.text, "").trim)
                 .flatMap(VcsPatchComment.from)
-            val hash    = VcsPatchHash.from(darcsLogEntry \@ "hash")
-            val name    = (darcsLogEntry \ "name").headOption.map(_.text).flatMap(VcsPatchName.from)
-            val summary = VcsPatchSummary.fromDarcsXmlLog(darcsLogEntry)
+            val hash      = VcsPatchHash.from(darcsLogEntry \@ "hash")
+            val name      = (darcsLogEntry \ "name").headOption.map(_.text).flatMap(VcsPatchName.from)
+            val summary   = VcsPatchSummary.fromDarcsXmlLog(darcsLogEntry)
             val timestamp =
                 VcsPatchTimestamp.from(
                     LocalDateTime.parse(darcsLogEntry \@ "date", DarcsDateFormat).atOffset(ZoneOffset.UTC)
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryStatistics.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryStatistics.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryStatistics.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryStatistics.scala	2025-06-20 12:12:52.691921998 +0000
@@ -66,7 +66,7 @@
     ): F[VcsRepositoryStatistics] =
         for {
             repositoryDirectory <- Sync[F].delay(ownerDirectory / repositoryName.toString)
-            languages <- Sync[F].delay(
+            languages           <- Sync[F].delay(
                 configuration.tokei.map(tokei =>
                     os.proc(tokei.toString).call(cwd = repositoryDirectory, check = false).out.text()
                 )
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSftpFileSystemAccessor.scala new-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSftpFileSystemAccessor.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSftpFileSystemAccessor.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSftpFileSystemAccessor.scala	2025-06-20 12:12:52.691921998 +0000
@@ -70,7 +70,7 @@
     @SuppressWarnings(Array("scalafix:DisableSyntax.throw"))
     override def resolveLocalFilePath(subsystem: SftpSubsystemProxy, rootDir: Path, remotePath: String): Path = {
         // FIXME: This works but is pretty clumsy/noisy. Find a way to kill the connection on the first illegal access.
-        val sshKeyOwnerId = subsystem.getServerSession().getAttribute(SshServerConfiguration.SshKeyOwnerIdAttribute)
+        val sshKeyOwnerId     = subsystem.getServerSession().getAttribute(SshServerConfiguration.SshKeyOwnerIdAttribute)
         val accessIsPermitted = remotePath match {
             case DarcsSftpFileSystemAccessor.ExtractRepositoryOwnerAndName(owner, repository, path) =>
                 log.debug("SFTP permission check for {} on {}/{} ({})", sshKeyOwnerId, owner, repository, path)
@@ -83,7 +83,7 @@
         }
         accessIsPermitted.filter(_ === true) match {
             case Some(true) => super.resolveLocalFilePath(subsystem, rootDir, remotePath)
-            case _ =>
+            case _          =>
                 throw new InvalidPathException(remotePath, "You are only allowed to access your own repositories!")
         }
     }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSshCommand.scala new-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSshCommand.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSshCommand.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/ssh/DarcsSshCommand.scala	2025-06-20 12:12:52.691921998 +0000
@@ -140,7 +140,7 @@
                 List("apply", "--all", "--debug", "--repodir", repoDir.toString)
             else
                 List("apply", "--all", "--repodir", repoDir.toString)
-        val cmd = os.proc(darcsConfiguration.executable.toString, options)
+        val cmd    = os.proc(darcsConfiguration.executable.toString, options)
         val thread = new Thread {
             override def run(): Unit = {
                 val result = commandLogic(cmd)
@@ -188,7 +188,7 @@
     override def start(channel: ChannelSession, env: Environment): Unit = {
         log.debug(s"DarcsTransferMode for $owner/$repository")
         val repoDir = Paths.get(owner.toString, repository.toString)
-        val cmd = os.proc(
+        val cmd     = os.proc(
             darcsConfiguration.executable.toString,
             List("transfer-mode", "--repodir", repoDir.toString)
         )
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/ssh/PublicSshKey.scala new-smederee/modules/hub/src/main/scala/de/smederee/ssh/PublicSshKey.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/ssh/PublicSshKey.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/ssh/PublicSshKey.scala	2025-06-20 12:12:52.691921998 +0000
@@ -238,7 +238,7 @@
       *   An option to the sucessfully created [[PublicSshKey]].
       */
     def from(id: UUID)(ownerId: UserId)(createdAt: OffsetDateTime)(sshKey: SshPublicKeyString): Option[PublicSshKey] = {
-        val keyType = SshKeyType.from(sshKey.toString)
+        val keyType   = SshKeyType.from(sshKey.toString)
         val base64Key = EncodedKeyBytes.from(
             sshKey.toString.dropWhile(char => !char.isWhitespace).trim.takeWhile(char => !char.isWhitespace)
         )
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/ssh/SshAuthenticator.scala new-smederee/modules/hub/src/main/scala/de/smederee/ssh/SshAuthenticator.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/ssh/SshAuthenticator.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/ssh/SshAuthenticator.scala	2025-06-20 12:12:52.691921998 +0000
@@ -54,7 +54,7 @@
                     )
                     convertedName   <- IO.delay(SshUsername.from(providedUsername))
                     usernameIsValid <- IO.delay(convertedName.exists(_ === genericUser))
-                    keyIsValid <-
+                    keyIsValid      <-
                         if (usernameIsValid)
                             for {
                                 fingerprint <- IO.delay(
@@ -68,7 +68,7 @@
                                     )
                                 )
                                 providedKeyBytes <- IO.delay(providedPublicKey.getEncoded())
-                                possibleUserKey <- fingerprint match {
+                                possibleUserKey  <- fingerprint match {
                                     case None              => IO.pure(None)
                                     case Some(fingerprint) => repository.findSshKey(fingerprint)
                                 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Assignee.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Assignee.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Assignee.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Assignee.scala	2025-06-20 12:12:52.691921998 +0000
@@ -105,7 +105,7 @@
     def validate(s: String): ValidatedNec[String, AssigneeName] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length >= 2)
                         input.validNec
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/config/SmedereeTicketsConfiguration.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/config/SmedereeTicketsConfiguration.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/config/SmedereeTicketsConfiguration.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/config/SmedereeTicketsConfiguration.scala	2025-06-20 12:12:52.695921989 +0000
@@ -19,7 +19,7 @@
 final case class HubIntegrationConfiguration(baseUri: Uri)
 
 object HubIntegrationConfiguration {
-    given ConfigReader[Uri] = ConfigReader.fromStringOpt(s => Uri.fromString(s).toOption)
+    given ConfigReader[Uri]                         = ConfigReader.fromStringOpt(s => Uri.fromString(s).toOption)
     given ConfigReader[HubIntegrationConfiguration] =
         ConfigReader.forProduct1("base-uri")(HubIntegrationConfiguration.apply)
 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieLabelRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieLabelRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieLabelRepository.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieLabelRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -46,7 +46,7 @@
 
     override def deleteLabel(label: Label): F[Int] =
         label.id match {
-            case None => Sync[F].pure(0)
+            case None     => Sync[F].pure(0)
             case Some(id) =>
                 sql"""DELETE FROM tickets.labels WHERE id = $id""".update.run.transact(tx)
         }
@@ -59,7 +59,7 @@
 
     override def updateLabel(label: Label): F[Int] =
         label.id match {
-            case None => Sync[F].pure(0)
+            case None     => Sync[F].pure(0)
             case Some(id) =>
                 sql"""UPDATE tickets.labels 
               SET name = ${label.name},
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieMilestoneRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieMilestoneRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieMilestoneRepository.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieMilestoneRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -66,7 +66,7 @@
         val milestoneFilter =
             fr""""tickets".id IN (SELECT ticket FROM "tickets".milestone_tickets AS "milestone_tickets" WHERE milestone = $milestoneId)"""
         val tickets = filter match {
-            case None => selectTicketColumns ++ whereAnd(milestoneFilter)
+            case None         => selectTicketColumns ++ whereAnd(milestoneFilter)
             case Some(filter) =>
                 val numberFilter = filter.number.toNel.map(numbers => Fragments.in(fr""""tickets".number""", numbers))
                 val statusFilter = filter.status.toNel.map(status => Fragments.in(fr""""tickets".status""", status))
@@ -122,7 +122,7 @@
 
     override def updateMilestone(milestone: Milestone): F[Int] =
         milestone.id match {
-            case None => Sync[F].pure(0)
+            case None     => Sync[F].pure(0)
             case Some(id) =>
                 sql"""UPDATE "tickets"."milestones"
               SET title = ${milestone.title},
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieTicketRepository.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieTicketRepository.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieTicketRepository.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/DoobieTicketRepository.scala	2025-06-20 12:12:52.691921998 +0000
@@ -106,7 +106,7 @@
 
     override def addLabel(projectId: ProjectId)(ticketNumber: TicketNumber)(label: Label): F[Int] =
         label.id match {
-            case None => Sync[F].pure(0)
+            case None          => Sync[F].pure(0)
             case Some(labelId) =>
                 sql"""INSERT INTO tickets.ticket_labels (
             ticket,
@@ -121,7 +121,7 @@
 
     override def addMilestone(projectId: ProjectId)(ticketNumber: TicketNumber)(milestone: Milestone): F[Int] =
         milestone.id match {
-            case None => Sync[F].pure(0)
+            case None              => Sync[F].pure(0)
             case Some(milestoneId) =>
                 sql"""INSERT INTO tickets.milestone_tickets (
                 ticket,
@@ -136,11 +136,11 @@
 
     override def allTickets(filter: Option[TicketFilter])(projectId: ProjectId): Stream[F, Ticket] = {
         val projectFilter = fr"""tickets.project = $projectId"""
-        val tickets = filter match {
-            case None => selectTicketColumns ++ whereAnd(projectFilter)
+        val tickets       = filter match {
+            case None         => selectTicketColumns ++ whereAnd(projectFilter)
             case Some(filter) =>
-                val numberFilter = filter.number.toNel.map(numbers => Fragments.in(fr"""tickets.number""", numbers))
-                val statusFilter = filter.status.toNel.map(status => Fragments.in(fr"""tickets.status""", status))
+                val numberFilter     = filter.number.toNel.map(numbers => Fragments.in(fr"""tickets.number""", numbers))
+                val statusFilter     = filter.status.toNel.map(status => Fragments.in(fr"""tickets.status""", status))
                 val resolutionFilter =
                     filter.resolution.toNel.map(resolutions => Fragments.in(fr"""tickets.resolution""", resolutions))
                 val submitterFilter =
@@ -264,7 +264,7 @@
 
     override def removeLabel(projectId: ProjectId)(ticket: Ticket)(label: Label): F[Int] =
         label.id match {
-            case None => Sync[F].pure(0)
+            case None          => Sync[F].pure(0)
             case Some(labelId) =>
                 val sqlQuery = withTicketId(projectId, ticket.number) ++
                     fr"""DELETE FROM tickets.ticket_labels AS labels
@@ -275,7 +275,7 @@
 
     override def removeMilestone(projectId: ProjectId)(ticket: Ticket)(milestone: Milestone): F[Int] =
         milestone.id match {
-            case None => Sync[F].pure(0)
+            case None              => Sync[F].pure(0)
             case Some(milestoneId) =>
                 val sqlQuery = withTicketId(projectId, ticket.number) ++
                     fr"""DELETE FROM tickets.milestone_tickets AS milestone_tickets
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelForm.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelForm.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelForm.scala	2025-06-20 12:12:52.675922034 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelForm.scala	2025-06-20 12:12:52.691921998 +0000
@@ -102,8 +102,8 @@
           */
         def toMap: Map[String, Chain[String]] =
             Map(
-                LabelForm.fieldId.toString   -> form.id.map(_.toString).fold(Chain.empty)(id => Chain(id)),
-                LabelForm.fieldName.toString -> Chain(form.name.toString),
+                LabelForm.fieldId.toString          -> form.id.map(_.toString).fold(Chain.empty)(id => Chain(id)),
+                LabelForm.fieldName.toString        -> Chain(form.name.toString),
                 LabelForm.fieldDescription.toString -> form.description
                     .map(_.toString)
                     .fold(Chain.empty)(d => Chain(d)),
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelRoutes.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/LabelRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -66,10 +66,10 @@
             _            <- Sync[F].delay(log.debug(s"doShowLabels: $csrf, $user, $projectOwnerName, $projectName"))
             language     <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
             projectAndId <- loadProject(user)(projectOwnerName, projectName)
-            resp <- projectAndId match {
+            resp         <- projectAndId match {
                 case Some((project, projectId)) =>
                     for {
-                        labels <- labelRepo.allLabels(projectId).compile.toList
+                        labels         <- labelRepo.allLabels(projectId).compile.toList
                         projectBaseUri <- Sync[F].delay(
                             linkConfig.createFullUri(
                                 Uri(path =
@@ -117,9 +117,9 @@
         currentUser: Option[Account]
     )(projectOwnerName: ProjectOwnerName, projectName: ProjectName): F[Option[(Project, ProjectId)]] =
         for {
-            owner <- projectRepo.findProjectOwner(projectOwnerName)
+            owner      <- projectRepo.findProjectOwner(projectOwnerName)
             loadedRepo <- owner match {
-                case None => Sync[F].pure(None)
+                case None        => Sync[F].pure(None)
                 case Some(owner) =>
                     (
                         projectRepo.findProject(owner, projectName),
@@ -131,7 +131,7 @@
             }
             // TODO: Replace with whatever we implement as proper permission model. ;-)
             projectAndId = currentUser match {
-                case None => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
+                case None       => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
                 case Some(user) =>
                     loadedRepo.filter(tuple =>
                         tuple._1.isPrivate === false || tuple._1.owner.uid === ProjectOwnerId.fromUserId(user.uid)
@@ -149,7 +149,7 @@
                         csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                         language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                         projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                        resp <- projectAndId match {
+                        resp         <- projectAndId match {
                             case Some(project, projectId) =>
                                 for {
                                     _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
@@ -157,7 +157,7 @@
                                     )
                                     formData <- Sync[F].delay(urlForm.values)
                                     form     <- Sync[F].delay(LabelForm.validate(formData))
-                                    labels <- projectAndId.traverse(tuple =>
+                                    labels   <- projectAndId.traverse(tuple =>
                                         labelRepo.allLabels(tuple._2).compile.toList
                                     )
                                     projectBaseUri <- Sync[F].delay(
@@ -194,7 +194,7 @@
                                                 Label(None, labelData.name, labelData.description, labelData.colour)
                                             for {
                                                 checkDuplicate <- labelRepo.findLabel(projectId)(labelData.name)
-                                                resp <- checkDuplicate match {
+                                                resp           <- checkDuplicate match {
                                                     case None =>
                                                         labelRepo.createLabel(projectId)(label) *> SeeOther(
                                                             Location(projectBaseUri.addSegment("labels"))
@@ -233,7 +233,7 @@
                     for {
                         csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                        resp <- InternalServerError(
+                        resp     <- InternalServerError(
                             views.html.errors.internalServerError(lang = language)(csrf, user.some)
                         )
                     } yield resp
@@ -249,17 +249,17 @@
                 for {
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some(project, projectId) =>
                             for {
                                 _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
                                     new Error("Only maintainers may add labels!")
                                 )
                                 label <- labelRepo.findLabel(projectId)(labelName)
-                                resp <- label match {
+                                resp  <- label match {
                                     case Some(label) =>
                                         for {
-                                            formData <- Sync[F].delay(urlForm.values)
+                                            formData       <- Sync[F].delay(urlForm.values)
                                             projectBaseUri <- Sync[F].delay(
                                                 linkConfig.createFullUri(
                                                     Uri(path =
@@ -296,7 +296,7 @@
                                             )
                                             resp <- (labelIdMatches && labelNameMatches && userIsSure) match {
                                                 case false => BadRequest("Invalid form data!")
-                                                case true =>
+                                                case true  =>
                                                     labelRepo.deleteLabel(label) *> SeeOther(
                                                         Location(projectBaseUri.addSegment("labels"))
                                                     )
@@ -321,7 +321,7 @@
                         csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                         language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                         projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                        label <- projectAndId match {
+                        label        <- projectAndId match {
                             case Some((_, projectId)) => labelRepo.findLabel(projectId)(labelName)
                             case _                    => Sync[F].delay(None)
                         }
@@ -428,7 +428,7 @@
                     for {
                         csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                        resp <- InternalServerError(
+                        resp     <- InternalServerError(
                             views.html.errors.internalServerError(lang = language)(csrf, user.some)
                         )
                     } yield resp
@@ -443,7 +443,7 @@
             for {
                 csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                 projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                label <- projectAndId match {
+                label        <- projectAndId match {
                     case Some((_, projectId)) => labelRepo.findLabel(projectId)(labelName)
                     case _                    => Sync[F].delay(None)
                 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneForm.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneForm.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneForm.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneForm.scala	2025-06-20 12:12:52.691921998 +0000
@@ -113,8 +113,8 @@
           */
         def toMap: Map[String, Chain[String]] =
             Map(
-                MilestoneForm.fieldId.toString    -> form.id.map(_.toString).fold(Chain.empty)(id => Chain(id)),
-                MilestoneForm.fieldTitle.toString -> Chain(form.title.toString),
+                MilestoneForm.fieldId.toString          -> form.id.map(_.toString).fold(Chain.empty)(id => Chain(id)),
+                MilestoneForm.fieldTitle.toString       -> Chain(form.title.toString),
                 MilestoneForm.fieldDescription.toString -> form.description
                     .map(_.toString)
                     .fold(Chain.empty)(d => Chain(d)),
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneRoutes.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/MilestoneRoutes.scala	2025-06-20 12:12:52.691921998 +0000
@@ -67,7 +67,7 @@
         for {
             language     <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
             projectAndId <- loadProject(user)(projectOwnerName, projectName)
-            milestone <- projectAndId match {
+            milestone    <- projectAndId match {
                 case Some((_, projectId)) => milestoneRepo.findMilestone(projectId)(milestoneTitle)
                 case _                    => Sync[F].delay(None)
             }
@@ -140,10 +140,10 @@
         for {
             language     <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
             projectAndId <- loadProject(user)(projectOwnerName, projectName)
-            resp <- projectAndId match {
+            resp         <- projectAndId match {
                 case Some((project, projectId)) =>
                     for {
-                        milestones <- milestoneRepo.allMilestones(projectId).compile.toList
+                        milestones     <- milestoneRepo.allMilestones(projectId).compile.toList
                         projectBaseUri <- Sync[F].delay(
                             linkConfig.createFullUri(
                                 Uri(path =
@@ -193,9 +193,9 @@
         currentUser: Option[Account]
     )(projectOwnerName: Username, projectName: ProjectName): F[Option[(Project, ProjectId)]] =
         for {
-            owner <- projectRepo.findProjectOwner(projectOwnerName)
+            owner      <- projectRepo.findProjectOwner(projectOwnerName)
             loadedRepo <- owner match {
-                case None => Sync[F].pure(None)
+                case None        => Sync[F].pure(None)
                 case Some(owner) =>
                     (
                         projectRepo.findProject(owner, projectName),
@@ -207,7 +207,7 @@
             }
             // TODO: Replace with whatever we implement as proper permission model. ;-)
             repoAndId = currentUser match {
-                case None => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
+                case None       => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
                 case Some(user) =>
                     loadedRepo.filter(tuple =>
                         tuple._1.isPrivate === false || tuple._1.owner.uid === ProjectOwnerId.fromUserId(user.uid)
@@ -224,14 +224,14 @@
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some(project, projectId) =>
                             for {
                                 _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
                                     new Error("Only maintainers may add milestones!")
                                 )
-                                formData <- Sync[F].delay(urlForm.values)
-                                form     <- Sync[F].delay(MilestoneForm.validate(formData))
+                                formData   <- Sync[F].delay(urlForm.values)
+                                form       <- Sync[F].delay(MilestoneForm.validate(formData))
                                 milestones <- projectAndId.traverse(tuple =>
                                     milestoneRepo.allMilestones(tuple._2).compile.toList
                                 )
@@ -322,14 +322,14 @@
                 for {
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some(project, projectId) =>
                             for {
                                 _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
                                     new Error("Only maintainers may close milestones!")
                                 )
                                 milestone <- milestoneRepo.findMilestone(projectId)(milestoneTitle)
-                                resp <- milestone match {
+                                resp      <- milestone match {
                                     case Some(milestone) =>
                                         for {
                                             formData <- Sync[F].delay {
@@ -367,7 +367,7 @@
                                             )
                                             resp <- (milestoneIdMatches && milestoneTitleMatches) match {
                                                 case false => BadRequest("Invalid form data!")
-                                                case true =>
+                                                case true  =>
                                                     milestone.id.traverse(milestoneRepo.closeMilestone) *> SeeOther(
                                                         Location(
                                                             projectBaseUri
@@ -394,14 +394,14 @@
                 for {
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some(project, projectId) =>
                             for {
                                 _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
                                     new Error("Only maintainers may add milestones!")
                                 )
                                 milestone <- milestoneRepo.findMilestone(projectId)(milestoneTitle)
-                                resp <- milestone match {
+                                resp      <- milestone match {
                                     case Some(milestone) =>
                                         for {
                                             formData <- Sync[F].delay {
@@ -440,7 +440,7 @@
                                             )
                                             resp <- (milestoneIdMatches && milestoneTitleMatches && userIsSure) match {
                                                 case false => BadRequest("Invalid form data!")
-                                                case true =>
+                                                case true  =>
                                                     milestoneRepo.deleteMilestone(milestone) *> SeeOther(
                                                         Location(projectBaseUri.addSegment("milestones"))
                                                     )
@@ -464,7 +464,7 @@
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    milestone <- projectAndId match {
+                    milestone    <- projectAndId match {
                         case Some((_, projectId)) => milestoneRepo.findMilestone(projectId)(milestoneTitle)
                         case _                    => Sync[F].delay(None)
                     }
@@ -489,7 +489,7 @@
                                 actionUri <- Sync[F].delay(
                                     projectBaseUri.addSegment("milestones").addSegment(milestone.title.toString)
                                 )
-                                formData <- Sync[F].delay(urlForm.values)
+                                formData           <- Sync[F].delay(urlForm.values)
                                 milestoneIdMatches <- Sync[F].delay(
                                     formData
                                         .get(MilestoneForm.fieldId)
@@ -584,14 +584,14 @@
                 for {
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some(project, projectId) =>
                             for {
                                 _ <- Sync[F].raiseUnless(project.owner.uid === ProjectOwnerId.fromUserId(user.uid))(
                                     new Error("Only maintainers may open milestones!")
                                 )
                                 milestone <- milestoneRepo.findMilestone(projectId)(milestoneTitle)
-                                resp <- milestone match {
+                                resp      <- milestone match {
                                     case Some(milestone) =>
                                         for {
                                             formData <- Sync[F].delay {
@@ -629,7 +629,7 @@
                                             )
                                             resp <- (milestoneIdMatches && milestoneTitleMatches) match {
                                                 case false => BadRequest("Invalid form data!")
-                                                case true =>
+                                                case true  =>
                                                     milestone.id.traverse(milestoneRepo.openMilestone) *> SeeOther(
                                                         Location(
                                                             projectBaseUri
@@ -656,7 +656,7 @@
                 csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                 language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                 projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                milestone <- projectAndId match {
+                milestone    <- projectAndId match {
                     case Some((_, projectId)) => milestoneRepo.findMilestone(projectId)(milestoneTitle)
                     case _                    => Sync[F].delay(None)
                 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Project.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Project.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Project.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Project.scala	2025-06-20 12:12:52.691921998 +0000
@@ -121,7 +121,7 @@
     def validate(s: String): ValidatedNec[String, ProjectName] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length > 1)
                         input.validNec
@@ -263,7 +263,7 @@
     def validate(s: String): ValidatedNec[String, ProjectOwnerName] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length >= 2)
                         input.validNec
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Submitter.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Submitter.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/Submitter.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/Submitter.scala	2025-06-20 12:12:52.691921998 +0000
@@ -103,7 +103,7 @@
     def validate(s: String): ValidatedNec[String, SubmitterName] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length >= 2)
                         input.validNec
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/tickets/TicketRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/tickets/TicketRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/tickets/TicketRoutes.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/tickets/TicketRoutes.scala	2025-06-20 12:12:52.695921989 +0000
@@ -72,9 +72,9 @@
         currentUser: Option[Account]
     )(projectOwnerName: ProjectOwnerName, projectName: ProjectName): F[Option[(Project, ProjectId)]] =
         for {
-            owner <- projectRepo.findProjectOwner(projectOwnerName)
+            owner      <- projectRepo.findProjectOwner(projectOwnerName)
             loadedRepo <- owner match {
-                case None => Sync[F].pure(None)
+                case None        => Sync[F].pure(None)
                 case Some(owner) =>
                     (
                         projectRepo.findProject(owner, projectName),
@@ -86,7 +86,7 @@
             }
             // TODO: Replace with whatever we implement as proper permission model. ;-)
             projectAndId = currentUser match {
-                case None => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
+                case None       => loadedRepo.filter(tuple => tuple._1.isPrivate === false)
                 case Some(user) =>
                     loadedRepo.filter(tuple =>
                         tuple._1.isPrivate === false || tuple._1.owner.uid === ProjectOwnerId.fromUserId(user.uid)
@@ -117,11 +117,11 @@
             language     <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
             projectAndId <- loadProject(user)(projectOwnerName, projectName)
             ticket       <- projectAndId.traverse(tuple => ticketRepo.findTicket(tuple._2)(ticketNumber))
-            resp <- (projectAndId, ticket.getOrElse(None)) match {
+            resp         <- (projectAndId, ticket.getOrElse(None)) match {
                 case (Some((project, projectId)), Some(ticket)) =>
                     for {
-                        labels     <- ticketRepo.loadLabels(projectId)(ticket.number).compile.toList
-                        milestones <- ticketRepo.loadMilestones(projectId)(ticket.number).compile.toList
+                        labels         <- ticketRepo.loadLabels(projectId)(ticket.number).compile.toList
+                        milestones     <- ticketRepo.loadMilestones(projectId)(ticket.number).compile.toList
                         projectBaseUri <- Sync[F].delay(
                             linkConfig.createFullUri(
                                 Uri(path =
@@ -186,10 +186,10 @@
             _ <- Sync[F].delay(log.debug(s"doShowTickets: $csrf, $user, $projectOwnerName, $projectName, $filter"))
             language     <- Sync[F].delay(user.flatMap(_.language).getOrElse(LanguageCode("en")))
             projectAndId <- loadProject(user)(projectOwnerName, projectName)
-            resp <- projectAndId match {
+            resp         <- projectAndId match {
                 case Some((project, projectId)) =>
                     for {
-                        tickets <- ticketRepo.allTickets(filter)(projectId).compile.toList
+                        tickets        <- ticketRepo.allTickets(filter)(projectId).compile.toList
                         projectBaseUri <- Sync[F].delay(
                             linkConfig.createFullUri(
                                 Uri(path =
@@ -239,7 +239,7 @@
                             csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                             language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                             projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                            resp <- projectAndId match {
+                            resp         <- projectAndId match {
                                 case Some((project, projectId)) =>
                                     for {
                                         _ <- Sync[F].raiseUnless(
@@ -247,10 +247,10 @@
                                         )(
                                             new Error("Only maintainers may add tickets!")
                                         )
-                                        labels     <- labelRepo.allLabels(projectId).compile.toList
-                                        milestones <- milestoneRepo.allMilestones(projectId).compile.toList
-                                        formData   <- Sync[F].delay(urlForm.values)
-                                        form       <- Sync[F].delay(TicketForm.validate(formData))
+                                        labels         <- labelRepo.allLabels(projectId).compile.toList
+                                        milestones     <- milestoneRepo.allMilestones(projectId).compile.toList
+                                        formData       <- Sync[F].delay(urlForm.values)
+                                        form           <- Sync[F].delay(TicketForm.validate(formData))
                                         projectBaseUri <- Sync[F].delay(
                                             linkConfig.createFullUri(
                                                 Uri(path =
@@ -286,7 +286,7 @@
                                                 )
                                             case Validated.Valid(ticketData) =>
                                                 for {
-                                                    timestamp <- Sync[F].delay(OffsetDateTime.now(ZoneOffset.UTC))
+                                                    timestamp    <- Sync[F].delay(OffsetDateTime.now(ZoneOffset.UTC))
                                                     ticketLabels <- ticketData.labels.traverse(name =>
                                                         labelRepo.findLabel(projectId)(name)
                                                     )
@@ -328,7 +328,7 @@
                     for {
                         csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                        resp <- InternalServerError(
+                        resp     <- InternalServerError(
                             views.html.errors.internalServerError(lang = language)(csrf, user.some)
                         )
                     } yield resp
@@ -348,7 +348,7 @@
                             language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                             projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
                             ticket <- projectAndId.traverse(tuple => ticketRepo.findTicket(tuple._2)(ticketNumber))
-                            resp <- (projectAndId, ticket.getOrElse(None)) match {
+                            resp   <- (projectAndId, ticket.getOrElse(None)) match {
                                 case (Some((project, projectId)), Some(ticket)) =>
                                     for {
                                         _ <- Sync[F].raiseUnless(
@@ -356,10 +356,10 @@
                                         )(
                                             new Error("Only maintainers may edit tickets!")
                                         )
-                                        labels     <- labelRepo.allLabels(projectId).compile.toList
-                                        milestones <- milestoneRepo.allMilestones(projectId).compile.toList
-                                        formData   <- Sync[F].delay(urlForm.values)
-                                        form       <- Sync[F].delay(TicketForm.validate(formData))
+                                        labels         <- labelRepo.allLabels(projectId).compile.toList
+                                        milestones     <- milestoneRepo.allMilestones(projectId).compile.toList
+                                        formData       <- Sync[F].delay(urlForm.values)
+                                        form           <- Sync[F].delay(TicketForm.validate(formData))
                                         projectBaseUri <- Sync[F].delay(
                                             linkConfig.createFullUri(
                                                 Uri(path =
@@ -414,7 +414,7 @@
                                                     labelsToRemove     = oldLabels.diff(ticketLabels.flatten)
                                                     milestonesToCreate = ticketMilestones.flatten.diff(oldMilestones)
                                                     milestonesToRemove = oldMilestones.diff(ticketMilestones.flatten)
-                                                    updatedTicket =
+                                                    updatedTicket      =
                                                         ticket.copy(
                                                             title = ticketData.title,
                                                             content = ticketData.content,
@@ -448,7 +448,7 @@
                     for {
                         csrf     <- Sync[F].delay(ar.req.getCsrfToken)
                         language <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
-                        resp <- InternalServerError(
+                        resp     <- InternalServerError(
                             views.html.errors.internalServerError(lang = language)(csrf, user.some)
                         )
                     } yield resp
@@ -465,11 +465,11 @@
                     csrf         <- Sync[F].delay(ar.req.getCsrfToken)
                     language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
-                    resp <- projectAndId match {
+                    resp         <- projectAndId match {
                         case Some((project, projectId)) =>
                             for {
-                                labels     <- labelRepo.allLabels(projectId).compile.toList
-                                milestones <- milestoneRepo.allMilestones(projectId).compile.toList
+                                labels         <- labelRepo.allLabels(projectId).compile.toList
+                                milestones     <- milestoneRepo.allMilestones(projectId).compile.toList
                                 projectBaseUri <- Sync[F].delay(
                                     linkConfig.createFullUri(
                                         Uri(path =
@@ -522,7 +522,7 @@
                     language     <- Sync[F].delay(user.language.getOrElse(LanguageCode("en")))
                     projectAndId <- loadProject(user.some)(projectOwnerName, projectName)
                     ticket       <- projectAndId.traverse(tuple => ticketRepo.findTicket(tuple._2)(ticketNumber))
-                    resp <- (projectAndId, ticket.getOrElse(None)) match {
+                    resp         <- (projectAndId, ticket.getOrElse(None)) match {
                         case (Some((project, projectId)), Some(ticket)) =>
                             for {
                                 ticketLabels <- ticketRepo
@@ -538,7 +538,7 @@
                                 form     <- Sync[F].delay(TicketForm.fromTicket(ticketLabels)(ticketMilestones)(ticket))
                                 formData <- Sync[F].delay(form.toMap)
                                 labels   <- labelRepo.allLabels(projectId).compile.toList
-                                milestones <- milestoneRepo.allMilestones(projectId).compile.toList
+                                milestones     <- milestoneRepo.allMilestones(projectId).compile.toList
                                 projectBaseUri <- Sync[F].delay(
                                     linkConfig.createFullUri(
                                         Uri(path =
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationMiddlewareTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationMiddlewareTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationMiddlewareTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationMiddlewareTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -26,8 +26,8 @@
 
     test("extractSessionId must return the session id".tag(NeedsDatabase)) {
         PropF.forAllF { (signAndValidate: SignAndValidate, sessionId: SessionId) =>
-            val clock = java.time.Clock.systemUTC
-            val token = signAndValidate.signToken(sessionId.toString)(clock.millis.toString)
+            val clock   = java.time.Clock.systemUTC
+            val token   = signAndValidate.signToken(sessionId.toString)(clock.millis.toString)
             val request = Request[IO](method = Method.GET)
                 .addCookie(RequestCookie(Constants.authenticationCookieName.toString, token.toString))
             val test = for {
@@ -48,7 +48,7 @@
             val session   = s.copy(uid = account.uid, createdAt = createdAt)
             val timeouts  = AuthenticationTimeouts(duration, duration, duration)
             val dbConfig  = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx        = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -77,7 +77,7 @@
             val session   = s.copy(uid = account.uid, createdAt = createdAt)
             val timeouts  = AuthenticationTimeouts(duration, duration, duration)
             val dbConfig  = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx        = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -101,7 +101,7 @@
             val session  = s.copy(uid = account.uid)
             val timeouts = AuthenticationTimeouts(duration, duration, duration)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationRoutesTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationRoutesTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationRoutesTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/AuthenticationRoutesTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -116,7 +116,7 @@
 
     test("POST /login must return 400 - Bad Request if the form data is invalid") {
         val expectedErrors = LoginForm.validate(Map.empty).leftMap(FormErrors.fromNec).swap.toOption.get
-        val expectedHtml =
+        val expectedHtml   =
             views.html.login()(loginPath, None, resetPath, title = "Smederee - Login to your account".some)(formErrors =
                 expectedErrors
             )
@@ -335,7 +335,7 @@
                 assertEquals(result.status, Status.SeeOther)
                 assert(body.isEmpty, "Response body must be empty!")
                 result.cookies.find(_.name === Constants.authenticationCookieName.toString).map(_.content) match {
-                    case None => fail("Authentication cookie not set!")
+                    case None          => fail("Authentication cookie not set!")
                     case Some(content) =>
                         assert(SignedToken.from(content).flatMap(signAndValidate.validate).nonEmpty)
                 }
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/BaseSpec.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/BaseSpec.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/BaseSpec.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/BaseSpec.scala	2025-06-20 12:12:52.695921989 +0000
@@ -57,8 +57,8 @@
       */
     private def connect(dbConfig: DatabaseConfig): IO[java.sql.Connection] =
         for {
-            _        <- IO(Class.forName(dbConfig.driver))
-            database <- IO(dbConfig.url.split("/").reverse.take(1).mkString)
+            _          <- IO(Class.forName(dbConfig.driver))
+            database   <- IO(dbConfig.url.split("/").reverse.take(1).mkString)
             connection <- IO(
                 java.sql.DriverManager
                     .getConnection(dbConfig.url.replace(database, "template1"), dbConfig.user, dbConfig.pass)
@@ -74,7 +74,7 @@
         db.use { connection =>
             for {
                 statement <- IO(connection.createStatement())
-                exists <- IO(
+                exists    <- IO(
                     statement.executeQuery(
                         s"""SELECT datname FROM pg_catalog.pg_database WHERE datname = '$database'"""
                     )
@@ -186,9 +186,9 @@
                 _ <- IO.delay(statement.setInt(6, attempts.getOrElse(1)))
                 _ <- IO.delay(statement.setBoolean(7, account.validatedEmail))
                 _ <- (unlockToken, validationToken) match {
-                    case (None, None)     => IO.unit
-                    case (Some(ut), None) => IO.delay(statement.setString(8, ut.toString))
-                    case (None, Some(vt)) => IO.delay(statement.setString(8, vt.toString))
+                    case (None, None)         => IO.unit
+                    case (Some(ut), None)     => IO.delay(statement.setString(8, ut.toString))
+                    case (None, Some(vt))     => IO.delay(statement.setString(8, vt.toString))
                     case (Some(ut), Some(vt)) =>
                         IO.delay {
                             statement.setString(8, ut.toString)
@@ -309,8 +309,8 @@
                         """SELECT uid, name, email, full_name, password, created_at, updated_at, validated_email, language FROM hub.accounts WHERE uid = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, uid))
-                result <- IO.delay(statement.executeQuery)
+                _       <- IO.delay(statement.setObject(1, uid))
+                result  <- IO.delay(statement.executeQuery)
                 account <- IO.delay {
                     if (result.next()) {
                         val language =
@@ -352,8 +352,8 @@
                 statement <- IO.delay(
                     con.prepareStatement("""SELECT password FROM hub.accounts WHERE uid = ? LIMIT 1""")
                 )
-                _      <- IO.delay(statement.setObject(1, uid))
-                result <- IO.delay(statement.executeQuery)
+                _        <- IO.delay(statement.setObject(1, uid))
+                result   <- IO.delay(statement.executeQuery)
                 password <- IO.delay {
                     if (result.next()) {
                         Option(result.getString("password")).flatMap(PasswordHash.from)
@@ -382,8 +382,8 @@
                         """SELECT reset_expiry, reset_token FROM hub.accounts WHERE uid = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, uid))
-                result <- IO.delay(statement.executeQuery)
+                _       <- IO.delay(statement.setObject(1, uid))
+                result  <- IO.delay(statement.executeQuery)
                 columns <- IO.delay {
                     if (result.next()) {
                         val expiry =
@@ -421,8 +421,8 @@
                         """SELECT validated_email, validation_token FROM hub.accounts WHERE uid = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, uid))
-                result <- IO.delay(statement.executeQuery)
+                _       <- IO.delay(statement.setObject(1, uid))
+                result  <- IO.delay(statement.executeQuery)
                 columns <- IO.delay {
                     if (result.next()) {
                         Option(
@@ -458,9 +458,9 @@
                         """SELECT id FROM hub.repositories WHERE owner = ? AND name = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, owner))
-                _      <- IO.delay(statement.setString(2, name.toString))
-                result <- IO.delay(statement.executeQuery)
+                _       <- IO.delay(statement.setObject(1, owner))
+                _       <- IO.delay(statement.setString(2, name.toString))
+                result  <- IO.delay(statement.executeQuery)
                 account <- IO.delay {
                     if (result.next()) {
                         VcsRepositoryId.from(result.getLong("id"))
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/config/ServiceConfigTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/config/ServiceConfigTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/config/ServiceConfigTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/config/ServiceConfigTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -76,7 +76,7 @@
             .at(s"${SmedereeHubConfig.location.toString}.service")
             .load[ServiceConfig] match {
                 case Left(errors) => fail(errors.toList.mkString(", "))
-                case Right(cfg) =>
+                case Right(cfg)   =>
                     val externalCfg = cfg.external
                     assert(externalCfg.host === cfg.host)
                     assert(externalCfg.port === Option(cfg.port))
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DatabaseMigratorTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DatabaseMigratorTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DatabaseMigratorTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DatabaseMigratorTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -31,7 +31,7 @@
     test("DatabaseMigrator must not update an up to date database".tag(NeedsDatabase)) {
         val dbConfig = configuration.database
         val migrator = new DatabaseMigrator[IO]
-        val test = for {
+        val test     = for {
             _ <- migrator.migrate(dbConfig.url, dbConfig.user, dbConfig.pass)
             r <- migrator.migrate(dbConfig.url, dbConfig.user, dbConfig.pass)
         } yield r
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAccountManagementRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAccountManagementRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAccountManagementRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAccountManagementRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -60,7 +60,7 @@
         PropF.forAllF { (account: Account) =>
             val sshKey   = sshKeyWithComment()
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -70,7 +70,7 @@
             val repo     = new DoobieAccountManagementRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _    <- createAccount(account, hash, None, Option(attempts))
                 w    <- repo.addSshKey(sshKey.copy(ownerId = account.uid))
                 keys <- repo.listSshKeys(account.uid).compile.toList
@@ -87,7 +87,7 @@
         PropF.forAllF { (account: Account) =>
             val sshKey   = sshKeyWithoutComment()
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -97,7 +97,7 @@
             val repo     = new DoobieAccountManagementRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _ <- createAccount(account, hash, None, Option(attempts))
                 _ <- repo.addSshKey(sshKey.copy(ownerId = account.uid))
                 _ <- repo.addSshKey(sshKey.copy(ownerId = account.uid))
@@ -111,7 +111,7 @@
     test("deleteAccount must remove the account from the database".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -121,7 +121,7 @@
             val repo     = new DoobieAccountManagementRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _ <- createAccount(account, hash, None, Option(attempts))
                 _ <- repo.deleteAccount(account.uid)
                 o <- loadAccount(account.uid)
@@ -137,7 +137,7 @@
             val account  = ac.copy(validatedEmail = true)
             val token    = ValidationToken.generate
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -157,7 +157,7 @@
     test("findPasswordHash must return correct hash".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -167,7 +167,7 @@
             val repo     = new DoobieAccountManagementRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _ <- createAccount(account, hash, None, Option(attempts))
                 o <- repo.findPasswordHash(account.uid)
             } yield o
@@ -182,7 +182,7 @@
             val sshKeyA  = sshKeyWithComment()
             val sshKeyB  = sshKeyWithoutComment()
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -192,7 +192,7 @@
             val repo     = new DoobieAccountManagementRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _    <- createAccount(account, hash, None, Option(attempts))
                 _    <- repo.addSshKey(sshKeyA.copy(ownerId = account.uid))
                 _    <- repo.addSshKey(sshKeyB.copy(ownerId = account.uid))
@@ -211,7 +211,7 @@
             val account  = ac.copy(validatedEmail = true)
             val token    = ValidationToken.generate
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -234,7 +234,7 @@
     test("setLanguage must set the language".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account, language: LanguageCode) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -257,7 +257,7 @@
     test("setLanguage must delete the language".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account, language: LanguageCode) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -282,7 +282,7 @@
         PropF.forAllF { (account: Account) =>
             val token    = ValidationToken.generate
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAuthenticationRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAuthenticationRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAuthenticationRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieAuthenticationRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -21,7 +21,7 @@
     override def scalaCheckTestParameters = super.scalaCheckTestParameters.withMinSuccessfulTests(1)
 
     override def beforeEach(context: BeforeEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -30,7 +30,7 @@
     }
 
     override def afterEach(context: AfterEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -41,7 +41,7 @@
         PropF.forAllF { (accounts: NonEmptyList[Account]) =>
             val expected = accounts.toList.map(_.copy(language = None))
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -66,7 +66,7 @@
         PropF.forAllF { (s: Session, account: Account) =>
             val session  = s.copy(uid = account.uid)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -90,7 +90,7 @@
     test("createUserSession must fail if the user does not exist".tag(NeedsDatabase)) {
         PropF.forAllF { (session: Session) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -110,7 +110,7 @@
         PropF.forAllF { (generatedSessions: NonEmptyList[Session], account: Account) =>
             val sessions = generatedSessions.toList.map(_.copy(uid = account.uid))
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -136,7 +136,7 @@
         PropF.forAllF { (s: Session, account: Account) =>
             val session  = s.copy(uid = account.uid)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -163,7 +163,7 @@
     test("findAccount must return an existing account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -184,7 +184,7 @@
     test("findAccount must not return a locked account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -210,7 +210,7 @@
     test("findAccountByEmail must return an existing account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -231,7 +231,7 @@
     test("findAccountByEmail must not return a locked account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -257,7 +257,7 @@
     test("findAccountByName must return an existing account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -278,7 +278,7 @@
     test("findAccountByName must not return a locked account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -304,7 +304,7 @@
     test("findLockedAccount must return a locked account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -313,7 +313,7 @@
             )
             val repo  = new DoobieAuthenticationRepository[IO](tx)
             val token = UnlockToken.generate
-            val test = for {
+            val test  = for {
                 _ <- createAccount(account, PasswordHash("I am not a password hash!"), Option(token), None)
                 o <- repo.findLockedAccount(account.name)(token.some)
             } yield o
@@ -326,7 +326,7 @@
     test("findLockedAccount must return a locked account if no token is given".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -335,7 +335,7 @@
             )
             val repo  = new DoobieAuthenticationRepository[IO](tx)
             val token = UnlockToken.generate
-            val test = for {
+            val test  = for {
                 _ <- createAccount(account, PasswordHash("I am not a password hash!"), Option(token), None)
                 o <- repo.findLockedAccount(account.name)(None)
             } yield o
@@ -348,7 +348,7 @@
     test("findPasswordHashAndAttempts must return correct values".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -358,7 +358,7 @@
             val repo     = new DoobieAuthenticationRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _ <- createAccount(account, hash, None, Option(attempts))
                 o <- repo.findPasswordHashAndAttempts(account.uid)
             } yield o
@@ -376,7 +376,7 @@
     test("findPasswordHashAndAttempts must not return values for locked accounts".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -386,7 +386,7 @@
             val repo     = new DoobieAuthenticationRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _ <- createAccount(account, hash, Option(UnlockToken.generate), Option(attempts))
                 o <- repo.findPasswordHashAndAttempts(account.uid)
             } yield o
@@ -400,7 +400,7 @@
         PropF.forAllF { (s: Session, account: Account) =>
             val session  = s.copy(uid = account.uid)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -422,7 +422,7 @@
     test("incrementFailedAttempts must increment failed attempts by 1".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -432,7 +432,7 @@
             val repo     = new DoobieAuthenticationRepository[IO](tx)
             val attempts = scala.util.Random.nextInt(128)
             val hash     = PasswordHash("Yet another weak password!")
-            val test = for {
+            val test     = for {
                 _      <- createAccount(account, hash, None, Option(attempts))
                 before <- repo.findPasswordHashAndAttempts(account.uid)
                 _      <- repo.incrementFailedAttempts(account.uid)
@@ -451,7 +451,7 @@
     test("lockAccount must lock an account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -460,7 +460,7 @@
             )
             val repo  = new DoobieAuthenticationRepository[IO](tx)
             val token = UnlockToken.generate
-            val test = for {
+            val test  = for {
                 _      <- createAccount(account, PasswordHash("I am not a password hash!"), None, None)
                 before <- repo.findAccount(account.uid)
                 _      <- repo.lockAccount(account.uid)(Option(token))
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieOrganisationRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieOrganisationRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieOrganisationRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieOrganisationRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -25,7 +25,7 @@
             val accounts     = genAccounts.toList.drop(1)
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -53,7 +53,7 @@
             val accounts     = genAccounts.toList.drop(1)
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -79,7 +79,7 @@
         PropF.forAllF { (account: Account, org: Organisation) =>
             val organisation = org.copy(owner = account.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -101,7 +101,7 @@
         PropF.forAllF { (owner: Account, member: Account, orgs: NonEmptyList[Organisation]) =>
             val organisations = orgs.toList.map(_.copy(owner = owner.uid))
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -130,7 +130,7 @@
         PropF.forAllF { (account: Account, orgs: NonEmptyList[Organisation]) =>
             val organisations = orgs.toList.map(_.copy(owner = account.uid))
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -156,7 +156,7 @@
         PropF.forAllF { (account: Account, org: Organisation) =>
             val organisation = org.copy(owner = account.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -183,7 +183,7 @@
         PropF.forAllF { (account: Account, org: Organisation) =>
             val organisation = org.copy(owner = account.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -208,7 +208,7 @@
         PropF.forAllF { (account: Account, org: Organisation) =>
             val organisation = org.copy(owner = account.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -233,7 +233,7 @@
         PropF.forAllF { (genAccount: Account) =>
             val account  = genAccount.copy(language = None, validatedEmail = true)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -256,7 +256,7 @@
             val account  = genAccount.copy(validatedEmail = true)
             val token    = UnlockToken.generate
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -279,7 +279,7 @@
             val account  = genAccount.copy(validatedEmail = false)
             val token    = ValidationToken.generate
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -301,7 +301,7 @@
         PropF.forAllF { (account: Account, org: Organisation) =>
             val organisation = org.copy(owner = account.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -326,7 +326,7 @@
         PropF.forAllF { (as: NonEmptyList[Account], org: Organisation) =>
             val owner    = as.head
             val accounts = as.tail
-            val admins = accounts.zipWithLongIndex.foldLeft(List.empty[Account])((acc, tuple) =>
+            val admins   = accounts.zipWithLongIndex.foldLeft(List.empty[Account])((acc, tuple) =>
                 if (tuple._2 % 2 === 0) {
                     tuple._1 :: acc
                 } else {
@@ -335,7 +335,7 @@
             )
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -344,7 +344,7 @@
             )
             val repo     = new DoobieOrganisationRepository[IO](tx)
             val addAdmin = repo.addAdministrator(organisation.oid)
-            val test = for {
+            val test     = for {
                 _ <- createAccount(owner, PasswordHash("I am not a password hash!"), None, None)
                 _ <- accounts.traverse(a => createAccount(a, PasswordHash("I am not a password hash!"), None, None))
                 written     <- repo.create(organisation)
@@ -364,7 +364,7 @@
         PropF.forAllF { (as: NonEmptyList[Account], org: Organisation) =>
             val owner    = as.head
             val accounts = as.tail
-            val members = accounts.zipWithLongIndex.foldLeft(List.empty[Account])((acc, tuple) =>
+            val members  = accounts.zipWithLongIndex.foldLeft(List.empty[Account])((acc, tuple) =>
                 if (tuple._2 % 2 === 0) {
                     tuple._1 :: acc
                 } else {
@@ -373,7 +373,7 @@
             )
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -382,7 +382,7 @@
             )
             val repo      = new DoobieOrganisationRepository[IO](tx)
             val addMember = repo.addMember(organisation.oid)
-            val test = for {
+            val test      = for {
                 _ <- createAccount(owner, PasswordHash("I am not a password hash!"), None, None)
                 _ <- accounts.traverse(a => createAccount(a, PasswordHash("I am not a password hash!"), None, None))
                 written      <- repo.create(organisation)
@@ -404,7 +404,7 @@
             val accounts     = as.tail
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -433,7 +433,7 @@
             val accounts     = as.tail
             val organisation = org.copy(owner = owner.uid)
             val dbConfig     = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx           = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -463,7 +463,7 @@
             val organisation        = org.copy(owner = account.uid)
             val updatedOrganisation = anotherOrg.copy(oid = organisation.oid, owner = organisation.owner)
             val dbConfig            = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx                  = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieResetPasswordRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieResetPasswordRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieResetPasswordRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieResetPasswordRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -24,7 +24,7 @@
     override def scalaCheckTestParameters = super.scalaCheckTestParameters.withMinSuccessfulTests(1)
 
     override def beforeEach(context: BeforeEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -33,7 +33,7 @@
     }
 
     override def afterEach(context: AfterEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -46,7 +46,7 @@
             val tokenExpiration = OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L)
             val expected        = user.copy(language = None)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -71,7 +71,7 @@
             val token           = ResetToken.generate
             val tokenExpiration = OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -96,7 +96,7 @@
             val tokenExpiration = OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L)
             val expected        = user.copy(language = None)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -120,7 +120,7 @@
             val token           = ResetToken.generate
             val tokenExpiration = OffsetDateTime.now(ZoneOffset.UTC).minusDays(3L)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -144,7 +144,7 @@
             val token           = ResetToken.generate
             val tokenExpiration = OffsetDateTime.now(ZoneOffset.UTC).minusDays(3L)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -166,12 +166,12 @@
 
     test("removeResetPasswordExpirationDate must remove the expiration date".tag(NeedsDatabase)) {
         PropF.forAllF { (user: Account) =>
-            val token = ResetToken.generate
+            val token           = ResetToken.generate
             val tokenExpiration =
                 OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L).withNano(0) // Nanos are troublesome!
             val expected = ((None, token.some)).some
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -193,12 +193,12 @@
 
     test("removeResetPasswordToken must remove the token and the expiration date".tag(NeedsDatabase)) {
         PropF.forAllF { (user: Account) =>
-            val token = ResetToken.generate
+            val token           = ResetToken.generate
             val tokenExpiration =
                 OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L).withNano(0) // Nanos are troublesome!
             val expected = ((None, None)).some
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -223,7 +223,7 @@
             val expected =
                 Password("This is not the password you're looking for!".getBytes(StandardCharsets.UTF_8)).encode
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -244,12 +244,12 @@
 
     test("setResetPasswordToken must set token and expiry date correctly".tag(NeedsDatabase)) {
         PropF.forAllF { (user: Account) =>
-            val token = ResetToken.generate
+            val token           = ResetToken.generate
             val tokenExpiration =
                 OffsetDateTime.now(ZoneOffset.UTC).plusDays(3L).withNano(0) // Nanos are troublesome!
             val expected = ((tokenExpiration.some, token.some)).some
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieSignupRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieSignupRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieSignupRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieSignupRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -21,7 +21,7 @@
     test("createAccount must create a new account".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -46,7 +46,7 @@
             val existingAccount = a
             val newAccount      = b.copy(email = a.email)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -74,7 +74,7 @@
             val existingAccount = a
             val newAccount      = b.copy(name = a.name)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -100,7 +100,7 @@
     test("findEmail must return an existing email".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -123,7 +123,7 @@
     test("findUsername must return an existing name".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieVcsMetadataRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieVcsMetadataRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieVcsMetadataRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/DoobieVcsMetadataRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -45,7 +45,7 @@
                 )
                 _      <- IO.delay(statement.setLong(1, originalRepoId.toLong))
                 result <- IO.delay(statement.executeQuery)
-                forks <- IO.delay {
+                forks  <- IO.delay {
                     var queue = Queue.empty[(VcsRepositoryId, VcsRepositoryId)]
                     while (result.next())
                         queue = queue :+ (
@@ -73,7 +73,7 @@
                     vcsRepositories.tail.size / 2
                 }
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -87,7 +87,7 @@
                 )
                 written  <- vcsRepositories.traverse(repo.createVcsRepository)
                 original <- loadVcsRepositoryId(vcsRepositories.head.owner.uid, vcsRepositories.head.name)
-                toFork <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
+                toFork   <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
                     loadVcsRepositoryId(vcsRepository.owner.uid, vcsRepository.name)
                 }
                 forked <- (original, toFork) match {
@@ -113,7 +113,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -134,7 +134,7 @@
     test("createVcsRepository must fail if the user does not exist".tag(NeedsDatabase)) {
         PropF.forAllF { (repository: VcsRepository) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -153,7 +153,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -174,7 +174,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository, health: VcsRepositoryHealth) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -204,7 +204,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -242,7 +242,7 @@
                     vcsRepositories.tail.size / 2
                 }
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -256,7 +256,7 @@
                 )
                 written  <- vcsRepositories.traverse(repo.createVcsRepository)
                 original <- loadVcsRepositoryId(vcsRepositories.head.owner.uid, vcsRepositories.head.name)
-                toFork <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
+                toFork   <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
                     loadVcsRepositoryId(vcsRepository.owner.uid, vcsRepository.name)
                 }
                 forked <- (original, toFork) match {
@@ -287,7 +287,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -315,7 +315,7 @@
         PropF.forAllF { (accounts: NonEmptyList[Account]) =>
             val expectedOwner = accounts.toList(scala.util.Random.nextInt(accounts.size)).toVcsRepositoryOwner
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -357,7 +357,7 @@
                     vcsRepositories.tail.size / 2
                 }
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -371,7 +371,7 @@
                 )
                 written  <- vcsRepositories.traverse(repo.createVcsRepository)
                 original <- loadVcsRepositoryId(vcsRepositories.head.owner.uid, vcsRepositories.head.name)
-                toFork <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
+                toFork   <- vcsRepositories.tail.take(numberOfForks).traverse { vcsRepository =>
                     loadVcsRepositoryId(vcsRepository.owner.uid, vcsRepository.name)
                 }
                 forked <- (original, toFork) match {
@@ -398,7 +398,7 @@
                 val organisation  = org.copy(owner = account.uid)
                 val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
                 val dbConfig      = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx            = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -428,7 +428,7 @@
             val organisation        = org.copy(owner = account.uid)
             val vcsRepository       = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig            = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx                  = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -452,7 +452,7 @@
     test("listAllRepositories must return only public repositories for guest users".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account, repositories: NonEmptyList[VcsRepository]) =>
             val vcsRepositories = repositories.toList
-            val accounts = vcsRepositories.map(repo =>
+            val accounts        = vcsRepositories.map(repo =>
                 Account(
                     repo.owner.uid,
                     repo.owner.name,
@@ -464,7 +464,7 @@
             )
             val expectedRepoList = vcsRepositories.filter(_.isPrivate === false)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -494,7 +494,7 @@
     test("listAllRepositories must return only public repositories of others for any user".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account, repositories: NonEmptyList[VcsRepository]) =>
             val vcsRepositories = repositories.toList
-            val accounts = vcsRepositories.map(repo =>
+            val accounts        = vcsRepositories.map(repo =>
                 Account(
                     repo.owner.uid,
                     repo.owner.name,
@@ -506,7 +506,7 @@
             )
             val expectedRepoList = vcsRepositories.filter(_.isPrivate === false)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -539,7 +539,7 @@
                 repositories.toList.filter(_.isPrivate === true).map(_.copy(owner = account.toVcsRepositoryOwner))
             val publicRepos     = repositories.toList.filter(_.isPrivate === false)
             val vcsRepositories = privateRepos ::: publicRepos
-            val accounts = publicRepos.map(repo =>
+            val accounts        = publicRepos.map(repo =>
                 Account(
                     repo.owner.uid,
                     repo.owner.name,
@@ -551,7 +551,7 @@
             )
             val expectedRepoList = vcsRepositories
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -583,7 +583,7 @@
             val vcsRepositories  = repositories.toList.map(_.copy(owner = account.toVcsRepositoryOwner))
             val expectedRepoList = vcsRepositories.filter(_.isPrivate === false).sortBy(_.name)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -614,7 +614,7 @@
             val vcsRepositories  = repositories.toList.map(_.copy(owner = account.toVcsRepositoryOwner))
             val expectedRepoList = vcsRepositories.sortBy(_.name)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -645,7 +645,7 @@
             val vcsRepositories  = repositories.toList.map(_.copy(owner = account.toVcsRepositoryOwner))
             val expectedRepoList = vcsRepositories.filter(_.isPrivate === false).sortBy(_.name)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -675,7 +675,7 @@
         PropF.forAllF { (account: Account, repository: VcsRepository, health: VcsRepositoryHealth) =>
             val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
             val dbConfig      = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -705,7 +705,7 @@
                 val organisation  = org.copy(owner = account.uid)
                 val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
                 val dbConfig      = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx            = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -741,7 +741,7 @@
                 val organisation  = org.copy(owner = account.uid)
                 val vcsRepository = repository.copy(owner = account.toVcsRepositoryOwner)
                 val dbConfig      = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx            = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -768,7 +768,7 @@
 
     test("updateVcsRepository must update all columns correctly".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account, repositories: NonEmptyList[VcsRepository]) =>
-            val repository = repositories.head
+            val repository      = repositories.head
             val vcsRepositories = repository.copy(owner = account.toVcsRepositoryOwner) :: repositories.toList
                 .drop(1)
                 .map(
@@ -782,7 +782,7 @@
                     website = Option(uri"https://updated.example.com")
                 )
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/Generators.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/Generators.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/Generators.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/Generators.scala	2025-06-20 12:12:52.695921989 +0000
@@ -47,7 +47,7 @@
             minute     <- Gen.choose(0, 59)
             second     <- Gen.choose(0, 59)
             nanosecond <- Gen.const(0) // Avoid issues with loosing information during saving and loading.
-            offset <- Gen.oneOf(
+            offset     <- Gen.oneOf(
                 ZoneId.getAvailableZoneIds.asScala.toList.map(ZoneId.of).map(ZonedDateTime.now).map(_.getOffset)
             )
         } yield OffsetDateTime.of(year, month, day, hour, minute, second, nanosecond, offset)
@@ -86,8 +86,8 @@
     private val validDomainNameChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-".toList
 
     val genValidEmail: Gen[EmailAddress] = for {
-        prefix <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
-        domain <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
+        prefix         <- Gen.nonEmptyListOf(Gen.oneOf(validEmailAddressPrefixChars)).map(_.take(64).mkString)
+        domain         <- Gen.nonEmptyListOf(Gen.oneOf(validDomainNameChars)).map(_.take(32).mkString)
         topLevelDomain <- Gen
             .nonEmptyListOf(Gen.oneOf(validDomainNameChars))
             .suchThat(_.length >= 2)
@@ -101,7 +101,7 @@
     val genValidUsername: Gen[Username] = for {
         length <- Gen.choose(2, 30)
         prefix <- Gen.alphaChar
-        chars <- Gen
+        chars  <- Gen
             .nonEmptyListOf(Gen.alphaNumChar)
             .map(_.take(length).mkString.toLowerCase(Locale.ROOT))
     } yield Username(prefix.toString.toLowerCase(Locale.ROOT) + chars)
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/hub/ResetPasswordRoutesTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/hub/ResetPasswordRoutesTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/hub/ResetPasswordRoutesTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/hub/ResetPasswordRoutesTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -33,7 +33,7 @@
         PropF.forAllF { (account: Account) =>
             val token             = ResetToken.generate
             val changePasswordUri = resetChangePasswordPath.addSegment(token.toString)
-            val expectedHtml = views.html
+            val expectedHtml      = views.html
                 .changePassword()(changePasswordUri, None, title = "Smederee - Change your password.".some, token)()
 
             val authenticationConfig = configuration.service.authentication
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/ssh/DoobieSshAuthenticationRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/ssh/DoobieSshAuthenticationRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/ssh/DoobieSshAuthenticationRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/ssh/DoobieSshAuthenticationRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -23,7 +23,7 @@
     test("findVcsRepositoryOwner must return the correct owner".tag(NeedsDatabase)) {
         PropF.forAllF { (account: Account) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/ssh/SshServerProviderTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/ssh/SshServerProviderTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/ssh/SshServerProviderTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/ssh/SshServerProviderTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -36,11 +36,11 @@
 
     freePort.test("run() must create and start a server with the given configuration") { port =>
         port match {
-            case None => fail("Could not find a free port for testing!")
+            case None             => fail("Could not find a free port for testing!")
             case Some(portNumber) =>
                 val keyfile     = serverKeyFile()
                 val darcsConfig = DarcsConfiguration(Paths.get("darcs"), DirectoryPath(repositoriesDirectory()))
-                val sshConfig = SshServerConfiguration(
+                val sshConfig   = SshServerConfiguration(
                     enabled = true,
                     genericUser = SshUsername("darcs"),
                     host = host"localhost",
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/BaseSpec.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/BaseSpec.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/BaseSpec.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/BaseSpec.scala	2025-06-20 12:12:52.695921989 +0000
@@ -54,8 +54,8 @@
       */
     private def connect(dbConfig: DatabaseConfig): IO[java.sql.Connection] =
         for {
-            _        <- IO(Class.forName(dbConfig.driver))
-            database <- IO(dbConfig.url.split("/").reverse.take(1).mkString)
+            _          <- IO(Class.forName(dbConfig.driver))
+            database   <- IO(dbConfig.url.split("/").reverse.take(1).mkString)
             connection <- IO(
                 java.sql.DriverManager
                     .getConnection(dbConfig.url.replace(database, "template1"), dbConfig.user, dbConfig.pass)
@@ -71,7 +71,7 @@
         db.use { connection =>
             for {
                 statement <- IO(connection.createStatement())
-                exists <- IO(
+                exists    <- IO(
                     statement.executeQuery(
                         s"""SELECT datname FROM pg_catalog.pg_database WHERE datname = '$database'"""
                     )
@@ -279,9 +279,9 @@
                         """SELECT id FROM tickets.projects WHERE owner = ? AND name = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, owner))
-                _      <- IO.delay(statement.setString(2, name.toString))
-                result <- IO.delay(statement.executeQuery)
+                _         <- IO.delay(statement.setObject(1, owner))
+                _         <- IO.delay(statement.setString(2, name.toString))
+                result    <- IO.delay(statement.executeQuery)
                 projectId <- IO.delay {
                     if (result.next()) {
                         ProjectId.from(result.getLong("id"))
@@ -311,9 +311,9 @@
                         """SELECT id FROM tickets.tickets WHERE project = ? AND number = ? LIMIT 1"""
                     )
                 )
-                _      <- IO.delay(statement.setLong(1, project.toLong))
-                _      <- IO.delay(statement.setInt(2, number.toInt))
-                result <- IO.delay(statement.executeQuery)
+                _        <- IO.delay(statement.setLong(1, project.toLong))
+                _        <- IO.delay(statement.setInt(2, number.toInt))
+                result   <- IO.delay(statement.executeQuery)
                 ticketId <- IO.delay {
                     if (result.next()) {
                         TicketId.from(result.getLong("id"))
@@ -341,7 +341,7 @@
                 )
                 _      <- IO.delay(statement.setObject(1, uid.toUUID))
                 result <- IO.delay(statement.executeQuery())
-                user <- IO.delay {
+                user   <- IO.delay {
                     if (result.next()) {
                         val language = LanguageCode.from(result.getString("language"))
                         (
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/DatabaseMigratorTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/DatabaseMigratorTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/DatabaseMigratorTest.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/DatabaseMigratorTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -14,7 +14,7 @@
 
 final class DatabaseMigratorTest extends BaseSpec {
     override def beforeEach(context: BeforeEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -22,7 +22,7 @@
     }
 
     override def afterEach(context: AfterEach): Unit = {
-        val dbConfig = configuration.database
+        val dbConfig       = configuration.database
         val flyway: Flyway =
             DatabaseMigrator.configureFlyway(dbConfig.url, dbConfig.user, dbConfig.pass).cleanDisabled(false).load()
         val _ = flyway.migrate()
@@ -39,7 +39,7 @@
     test("DatabaseMigrator must not update an up to date database".tag(NeedsDatabase)) {
         val dbConfig = configuration.database
         val migrator = new DatabaseMigrator[IO]
-        val test = for {
+        val test     = for {
             _ <- migrator.migrate(dbConfig.url, dbConfig.user, dbConfig.pass)
             r <- migrator.migrate(dbConfig.url, dbConfig.user, dbConfig.pass)
         } yield r
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/SmedereeTicketsConfigurationTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/SmedereeTicketsConfigurationTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/SmedereeTicketsConfigurationTest.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/config/SmedereeTicketsConfigurationTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -37,7 +37,7 @@
             .at(s"${SmedereeTicketsConfiguration.location.toString}")
             .load[SmedereeTicketsConfiguration] match {
                 case Left(errors) => fail(errors.toList.mkString(", "))
-                case Right(cfg) =>
+                case Right(cfg)   =>
                     val externalCfg = cfg.external
                     assertEquals(externalCfg.host, host"localhost")
                     assertEquals(externalCfg.port, Option(port"8080"))
@@ -52,7 +52,7 @@
             .at(s"${SmedereeTicketsConfiguration.location.toString}")
             .load[SmedereeTicketsConfiguration] match {
                 case Left(errors) => fail(errors.toList.mkString(", "))
-                case Right(cfg) =>
+                case Right(cfg)   =>
                     val expectedUri = uri"http://localhost:8080"
                     assertEquals(cfg.hub.baseUri, expectedUri)
             }
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieLabelRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieLabelRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieLabelRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieLabelRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -44,10 +44,10 @@
               |AND "labels".name = ?""".stripMargin
                     )
                 )
-                _      <- IO.delay(statement.setObject(1, owner))
-                _      <- IO.delay(statement.setString(2, vcsRepoName.toString))
-                _      <- IO.delay(statement.setString(3, labelName.toString))
-                result <- IO.delay(statement.executeQuery)
+                _       <- IO.delay(statement.setObject(1, owner))
+                _       <- IO.delay(statement.setString(2, vcsRepoName.toString))
+                _       <- IO.delay(statement.setString(3, labelName.toString))
+                result  <- IO.delay(statement.executeQuery)
                 account <- IO.delay {
                     if (result.next()) {
                         Option(result.getLong("id"))
@@ -63,7 +63,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, labels: NonEmptyList[Label]) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -71,10 +71,10 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
-                _         <- createProjectOwner(owner)
-                _         <- createTicketsProject(project)
-                projectId <- loadProjectId(owner.uid, project.name)
+            val test      = for {
+                _             <- createProjectOwner(owner)
+                _             <- createTicketsProject(project)
+                projectId     <- loadProjectId(owner.uid, project.name)
                 createdLabels <- projectId match {
                     case None            => IO.pure(List.empty)
                     case Some(projectId) => labels.toList.traverse(label => labelRepo.createLabel(projectId)(label))
@@ -99,7 +99,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, label: Label) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -107,7 +107,7 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
@@ -120,7 +120,7 @@
                 assert(projectId.nonEmpty, "No project id found!")
                 assert(createdLabels.exists(_ === 1), "Test label was not created!")
                 foundLabel.getOrElse(None) match {
-                    case None => fail("Created label not found!")
+                    case None             => fail("Created label not found!")
                     case Some(foundLabel) =>
                         assert(foundLabel.id.nonEmpty, "Label ID must not be empty!")
                         assertEquals(foundLabel.name, label.name)
@@ -135,7 +135,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, label: Label) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -143,7 +143,7 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
@@ -158,7 +158,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, label: Label) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -166,7 +166,7 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
@@ -191,7 +191,7 @@
             val project       = generatedProject.copy(owner = owner)
             val dbConfig      = configuration.database
             val expectedLabel = labels.toList(scala.util.Random.nextInt(labels.size))
-            val tx = Transactor.fromDriverManager[IO](
+            val tx            = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -199,11 +199,11 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
-                createdLabels <- projectId match {
+                createdLabels   <- projectId match {
                     case None            => IO.pure(List.empty)
                     case Some(projectId) => labels.toList.traverse(label => labelRepo.createLabel(projectId)(label))
                 }
@@ -224,7 +224,7 @@
             )
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -232,7 +232,7 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
@@ -265,7 +265,7 @@
             )
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -273,7 +273,7 @@
                 logHandler = None
             )
             val labelRepo = new DoobieLabelRepository[IO](tx)
-            val test = for {
+            val test      = for {
                 _               <- createProjectOwner(owner)
                 createdProjects <- createTicketsProject(project)
                 projectId       <- loadProjectId(owner.uid, project.name)
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieMilestoneRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieMilestoneRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieMilestoneRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieMilestoneRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -48,7 +48,7 @@
                 _      <- IO.delay(statement.setString(2, projectName.toString))
                 _      <- IO.delay(statement.setString(3, title.toString))
                 result <- IO.delay(statement.executeQuery)
-                owner <- IO.delay {
+                owner  <- IO.delay {
                     if (result.next()) {
                         Option(result.getLong("id"))
                     } else {
@@ -63,7 +63,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, milestones: NonEmptyList[Milestone]) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -71,12 +71,12 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
-                _            <- createProjectOwner(owner)
-                createdRepos <- createTicketsProject(project)
-                repoId       <- loadProjectId(owner.uid, project.name)
+            val test          = for {
+                _                 <- createProjectOwner(owner)
+                createdRepos      <- createTicketsProject(project)
+                repoId            <- loadProjectId(owner.uid, project.name)
                 createdMilestones <- repoId match {
-                    case None => IO.pure(List.empty)
+                    case None         => IO.pure(List.empty)
                     case Some(repoId) =>
                         milestones.toList.traverse(milestone => milestoneRepo.createMilestone(repoId)(milestone))
                 }
@@ -102,7 +102,7 @@
                 val project  = generatedProject.copy(owner = owner)
                 val tickets  = rawTickets.toList.map(_.copy(submitter = None))
                 val dbConfig = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx       = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -111,19 +111,19 @@
                 )
                 val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
                 val ticketRepo    = new DoobieTicketRepository[IO](tx)
-                val test = for {
-                    _      <- createProjectOwner(owner)
-                    _      <- createTicketsProject(project)
-                    repoId <- loadProjectId(owner.uid, project.name)
+                val test          = for {
+                    _            <- createProjectOwner(owner)
+                    _            <- createTicketsProject(project)
+                    repoId       <- loadProjectId(owner.uid, project.name)
                     foundTickets <- repoId match {
-                        case None => IO.pure(List.empty)
+                        case None            => IO.pure(List.empty)
                         case Some(projectId) =>
                             for {
                                 _ <- milestoneRepo.createMilestone(projectId)(milestone)
                                 _ <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
                                 createdMilestone <- milestoneRepo.findMilestone(projectId)(milestone.title)
-                                _ <- createdMilestone match {
-                                    case None => IO.pure(List.empty)
+                                _                <- createdMilestone match {
+                                    case None            => IO.pure(List.empty)
                                     case Some(milestone) =>
                                         tickets.traverse(ticket =>
                                             ticketRepo.addMilestone(projectId)(ticket.number)(milestone)
@@ -152,7 +152,7 @@
             val milestone = generatedMilestone.copy(closed = false)
             val project   = generatedProject.copy(owner = owner)
             val dbConfig  = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx        = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -160,12 +160,12 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _            <- createProjectOwner(owner)
                 createdRepos <- createTicketsProject(project)
                 repoId       <- loadProjectId(owner.uid, project.name)
-                milestones <- repoId match {
-                    case None => IO.pure((None, None))
+                milestones   <- repoId match {
+                    case None            => IO.pure((None, None))
                     case Some(projectId) =>
                         for {
                             _      <- milestoneRepo.createMilestone(projectId)(milestone)
@@ -188,7 +188,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, milestone: Milestone) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -196,7 +196,7 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _                 <- createProjectOwner(owner)
                 createdRepos      <- createTicketsProject(project)
                 repoId            <- loadProjectId(owner.uid, project.name)
@@ -209,7 +209,7 @@
                 assert(repoId.nonEmpty, "No vcs generatedProject id found!")
                 assert(createdMilestones.exists(_ === 1), "Test milestone was not created!")
                 foundMilestone.getOrElse(None) match {
-                    case None => fail("Created milestone not found!")
+                    case None                 => fail("Created milestone not found!")
                     case Some(foundMilestone) =>
                         assertEquals(foundMilestone, milestone.copy(id = foundMilestone.id))
                 }
@@ -221,7 +221,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, milestone: Milestone) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -229,7 +229,7 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _                 <- createProjectOwner(owner)
                 createdRepos      <- createTicketsProject(project)
                 repoId            <- loadProjectId(owner.uid, project.name)
@@ -244,7 +244,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, milestone: Milestone) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -252,7 +252,7 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _                 <- createProjectOwner(owner)
                 createdRepos      <- createTicketsProject(project)
                 repoId            <- loadProjectId(owner.uid, project.name)
@@ -279,7 +279,7 @@
             val project           = generatedProject.copy(owner = owner)
             val dbConfig          = configuration.database
             val expectedMilestone = milestones.toList(scala.util.Random.nextInt(milestones.size))
-            val tx = Transactor.fromDriverManager[IO](
+            val tx                = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -287,12 +287,12 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
-                _            <- createProjectOwner(owner)
-                createdRepos <- createTicketsProject(project)
-                repoId       <- loadProjectId(owner.uid, project.name)
+            val test          = for {
+                _                 <- createProjectOwner(owner)
+                createdRepos      <- createTicketsProject(project)
+                repoId            <- loadProjectId(owner.uid, project.name)
                 createdMilestones <- repoId match {
-                    case None => IO.pure(List.empty)
+                    case None         => IO.pure(List.empty)
                     case Some(repoId) =>
                         milestones.toList.traverse(milestone => milestoneRepo.createMilestone(repoId)(milestone))
                 }
@@ -309,7 +309,7 @@
             val milestone = generatedMilestone.copy(closed = true)
             val project   = generatedProject.copy(owner = owner)
             val dbConfig  = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx        = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -317,12 +317,12 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _            <- createProjectOwner(owner)
                 createdRepos <- createTicketsProject(project)
                 repoId       <- loadProjectId(owner.uid, project.name)
-                milestones <- repoId match {
-                    case None => IO.pure((None, None))
+                milestones   <- repoId match {
+                    case None            => IO.pure((None, None))
                     case Some(projectId) =>
                         for {
                             _      <- milestoneRepo.createMilestone(projectId)(milestone)
@@ -350,7 +350,7 @@
             )
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -358,7 +358,7 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _                 <- createProjectOwner(owner)
                 createdRepos      <- createTicketsProject(project)
                 repoId            <- loadProjectId(owner.uid, project.name)
@@ -393,7 +393,7 @@
             )
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -401,7 +401,7 @@
                 logHandler = None
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _                 <- createProjectOwner(owner)
                 createdRepos      <- createTicketsProject(project)
                 repoId            <- loadProjectId(owner.uid, project.name)
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieProjectRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieProjectRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieProjectRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieProjectRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -22,7 +22,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -30,7 +30,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _            <- createProjectOwner(owner)
                 _            <- projectRepo.createProject(project)
                 foundProject <- projectRepo.findProject(owner, project.name)
@@ -45,7 +45,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -53,7 +53,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _            <- createProjectOwner(owner)
                 _            <- createTicketsProject(project)
                 deleted      <- projectRepo.deleteProject(project)
@@ -71,7 +71,7 @@
         PropF.forAllF { (owner: ProjectOwner, projects: NonEmptyList[Project]) =>
             val project  = projects.head.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -79,7 +79,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _ <- createProjectOwner(owner)
                 _ <- createTicketsProject(project)
                 _ <- projects
@@ -97,7 +97,7 @@
         PropF.forAllF { (owner: ProjectOwner, projects: NonEmptyList[Project]) =>
             val project  = projects.head.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -105,7 +105,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _ <- createProjectOwner(owner)
                 _ <- createTicketsProject(project)
                 _ <- projects
@@ -125,7 +125,7 @@
         PropF.forAllF { (owners: NonEmptyList[ProjectOwner]) =>
             val owner    = owners.head
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -133,7 +133,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _          <- createProjectOwner(owner)
                 _          <- owners.filterNot(_.name === owner.name).traverse(createProjectOwner)
                 foundOwner <- projectRepo.findProjectOwner(owner.name)
@@ -148,7 +148,7 @@
         PropF.forAllF { (owner: ProjectOwner, firstProject: Project) =>
             val project  = firstProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -156,12 +156,12 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _         <- createProjectOwner(owner)
                 _         <- projectRepo.createProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => fail("Project was not created!")
+                result    <- projectId match {
+                    case None            => fail("Project was not created!")
                     case Some(projectId) =>
                         for {
                             before <- loadNextTicketNumber(projectId)
@@ -180,11 +180,11 @@
 
     test("updateProject must update a project".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, firstProject: Project, secondProject: Project) =>
-            val project = firstProject.copy(owner = owner)
+            val project        = firstProject.copy(owner = owner)
             val updatedProject =
                 project.copy(description = secondProject.description, isPrivate = secondProject.isPrivate)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -192,7 +192,7 @@
                 logHandler = None
             )
             val projectRepo = new DoobieProjectRepository[IO](tx)
-            val test = for {
+            val test        = for {
                 _            <- createProjectOwner(owner)
                 _            <- projectRepo.createProject(project)
                 written      <- projectRepo.updateProject(updatedProject)
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketRepositoryTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketRepositoryTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketRepositoryTest.scala	2025-06-20 12:12:52.679922025 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketRepositoryTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -44,9 +44,9 @@
                         """SELECT label FROM "tickets"."ticket_labels" AS "ticket_labels" JOIN "tickets"."tickets" ON "ticket_labels".ticket = "tickets".id WHERE "tickets".project = ? AND "tickets".number = ?"""
                     )
                 )
-                _      <- IO.delay(statement.setLong(1, projectId.toLong))
-                _      <- IO.delay(statement.setInt(2, ticketNumber.toInt))
-                result <- IO.delay(statement.executeQuery)
+                _        <- IO.delay(statement.setLong(1, projectId.toLong))
+                _        <- IO.delay(statement.setInt(2, ticketNumber.toInt))
+                result   <- IO.delay(statement.executeQuery)
                 labelIds <- IO.delay {
                     var queue = Queue.empty[LabelId]
                     while (result.next())
@@ -76,9 +76,9 @@
                         """SELECT milestone FROM "tickets"."milestone_tickets" AS "milestone_tickets" JOIN "tickets"."tickets" ON "milestone_tickets".ticket = "tickets".id WHERE "tickets".project = ? AND "tickets".number = ?"""
                     )
                 )
-                _      <- IO.delay(statement.setLong(1, projectId.toLong))
-                _      <- IO.delay(statement.setInt(2, ticketNumber.toInt))
-                result <- IO.delay(statement.executeQuery)
+                _            <- IO.delay(statement.setLong(1, projectId.toLong))
+                _            <- IO.delay(statement.setInt(2, ticketNumber.toInt))
+                result       <- IO.delay(statement.executeQuery)
                 milestoneIds <- IO.delay {
                     var queue = Queue.empty[MilestoneId]
                     while (result.next())
@@ -94,7 +94,7 @@
             val assignee = Assignee(AssigneeId(user.uid.toUUID), AssigneeName(user.name.toString))
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -102,7 +102,7 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- createTicketsUser(user)
                 _         <- createTicketsProject(project)
@@ -131,7 +131,7 @@
             ) =>
                 val project  = generatedProject.copy(owner = owner)
                 val dbConfig = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx       = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -139,7 +139,7 @@
                     logHandler = None
                 )
                 val ticketRepo = new DoobieTicketRepository[IO](tx)
-                val test = for {
+                val test       = for {
                     _         <- createProjectOwner(owner)
                     _         <- createTicketsUser(user)
                     _         <- createTicketsProject(project)
@@ -167,7 +167,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, label: Label) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -176,12 +176,12 @@
             )
             val labelRepo  = new DoobieLabelRepository[IO](tx)
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => fail("Project ID not found in database!")
+                result    <- projectId match {
+                    case None            => fail("Project ID not found in database!")
                     case Some(projectId) =>
                         for {
                             _            <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -208,7 +208,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, milestone: Milestone) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -217,12 +217,12 @@
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
             val ticketRepo    = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test          = for {
                 _         <- createProjectOwner(owner)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => fail("Project ID not found in database!")
+                result    <- projectId match {
+                    case None            => fail("Project ID not found in database!")
                     case Some(projectId) =>
                         for {
                             _                <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -248,14 +248,14 @@
     test("allTickets must return all tickets for the project".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, generatedTickets: NonEmptyList[Ticket]) =>
             val defaultTimestamp = OffsetDateTime.now()
-            val tickets =
+            val tickets          =
                 generatedTickets.toList
                     .sortBy(_.number)
                     .map(_.copy(createdAt = defaultTimestamp, updatedAt = defaultTimestamp))
             val submitters = tickets.map(_.submitter).flatten
             val project    = generatedProject.copy(owner = owner)
             val dbConfig   = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx         = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -263,13 +263,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((0, Nil))
+                result    <- projectId match {
+                    case None            => IO.pure((0, Nil))
                     case Some(projectId) =>
                         for {
                             writtenTickets <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -298,7 +298,7 @@
     test("allTickets must respect given filters for numbers".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, generatedTickets: NonEmptyList[Ticket]) =>
             val defaultTimestamp = OffsetDateTime.now()
-            val tickets =
+            val tickets          =
                 generatedTickets.toList
                     .sortBy(_.number)
                     .map(_.copy(createdAt = defaultTimestamp, updatedAt = defaultTimestamp))
@@ -307,7 +307,7 @@
             val submitters      = tickets.map(_.submitter).flatten
             val project         = generatedProject.copy(owner = owner)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -315,13 +315,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((0, Nil))
+                result    <- projectId match {
+                    case None            => IO.pure((0, Nil))
                     case Some(projectId) =>
                         for {
                             writtenTickets <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -345,7 +345,7 @@
     test("allTickets must respect given filters for status".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, generatedTickets: NonEmptyList[Ticket]) =>
             val defaultTimestamp = OffsetDateTime.now()
-            val tickets =
+            val tickets          =
                 generatedTickets.toList
                     .sortBy(_.number)
                     .map(_.copy(createdAt = defaultTimestamp, updatedAt = defaultTimestamp))
@@ -355,7 +355,7 @@
             val submitters      = tickets.map(_.submitter).flatten
             val project         = generatedProject.copy(owner = owner)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -363,13 +363,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((0, Nil))
+                result    <- projectId match {
+                    case None            => IO.pure((0, Nil))
                     case Some(projectId) =>
                         for {
                             writtenTickets <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -393,7 +393,7 @@
     test("allTickets must respect given filters for resolution".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, generatedTickets: NonEmptyList[Ticket]) =>
             val defaultTimestamp = OffsetDateTime.now()
-            val tickets =
+            val tickets          =
                 generatedTickets.toList
                     .sortBy(_.number)
                     .map(_.copy(createdAt = defaultTimestamp, updatedAt = defaultTimestamp))
@@ -403,7 +403,7 @@
             val submitters      = tickets.map(_.submitter).flatten
             val project         = generatedProject.copy(owner = owner)
             val dbConfig        = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx              = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -411,13 +411,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((0, Nil))
+                result    <- projectId match {
+                    case None            => IO.pure((0, Nil))
                     case Some(projectId) =>
                         for {
                             writtenTickets <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -441,7 +441,7 @@
     test("allTickets must respect given filters for submitter".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, generatedTickets: NonEmptyList[Ticket]) =>
             val defaultTimestamp = OffsetDateTime.now()
-            val tickets =
+            val tickets          =
                 generatedTickets.toList
                     .sortBy(_.number)
                     .map(_.copy(createdAt = defaultTimestamp, updatedAt = defaultTimestamp))
@@ -451,7 +451,7 @@
             val filter           = TicketFilter(Nil, Nil, Nil, submitter = wantedSubmitters.map(_.name))
             val project          = generatedProject.copy(owner = owner)
             val dbConfig         = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx               = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -459,13 +459,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((0, Nil))
+                result    <- projectId match {
+                    case None            => IO.pure((0, Nil))
                     case Some(projectId) =>
                         for {
                             writtenTickets <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -490,7 +490,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -498,7 +498,7 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _           <- createProjectOwner(owner)
                 _           <- ticket.submitter.traverse(createTicketsSubmitter)
                 _           <- createTicketsProject(project)
@@ -508,7 +508,7 @@
             } yield foundTicket.getOrElse(None)
             test.start.flatMap(_.joinWithNever).map { foundTicket =>
                 foundTicket match {
-                    case None => fail("Created ticket not found!")
+                    case None              => fail("Created ticket not found!")
                     case Some(foundTicket) =>
                         assertEquals(
                             foundTicket,
@@ -523,7 +523,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -531,7 +531,7 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _           <- createProjectOwner(owner)
                 _           <- ticket.submitter.traverse(createTicketsSubmitter)
                 _           <- createTicketsProject(project)
@@ -552,7 +552,7 @@
             val submitters     = tickets.toList.map(_.submitter).flatten
             val project        = generatedProject.copy(owner = owner)
             val dbConfig       = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx             = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -560,13 +560,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                _ <- projectId match {
-                    case None => IO.pure(Nil)
+                _         <- projectId match {
+                    case None            => IO.pure(Nil)
                     case Some(projectId) =>
                         tickets.toList.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
                 }
@@ -574,7 +574,7 @@
             } yield foundTicket.getOrElse(None)
             test.start.flatMap(_.joinWithNever).map { foundTicket =>
                 foundTicket match {
-                    case None => fail("Ticket not found!")
+                    case None              => fail("Ticket not found!")
                     case Some(foundTicket) =>
                         assertEquals(
                             foundTicket,
@@ -594,7 +594,7 @@
             val submitters     = tickets.toList.map(_.submitter).flatten
             val project        = generatedProject.copy(owner = owner)
             val dbConfig       = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx             = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -602,13 +602,13 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- submitters.traverse(createTicketsSubmitter)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => IO.pure((None, None))
+                result    <- projectId match {
+                    case None            => IO.pure((None, None))
                     case Some(projectId) =>
                         for {
                             _                <- tickets.traverse(ticket => ticketRepo.createTicket(projectId)(ticket))
@@ -632,7 +632,7 @@
                     users.toList.map(user => Assignee(AssigneeId(user.uid.toUUID), AssigneeName(user.name.toString)))
                 val project  = generatedProject.copy(owner = owner)
                 val dbConfig = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx       = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -640,14 +640,14 @@
                     logHandler = None
                 )
                 val ticketRepo = new DoobieTicketRepository[IO](tx)
-                val test = for {
-                    _         <- createProjectOwner(owner)
-                    _         <- users.traverse(createTicketsUser)
-                    _         <- createTicketsProject(project)
-                    projectId <- loadProjectId(owner.uid, project.name)
-                    _         <- ticket.submitter.traverse(createTicketsSubmitter)
+                val test       = for {
+                    _              <- createProjectOwner(owner)
+                    _              <- users.traverse(createTicketsUser)
+                    _              <- createTicketsProject(project)
+                    projectId      <- loadProjectId(owner.uid, project.name)
+                    _              <- ticket.submitter.traverse(createTicketsSubmitter)
                     foundAssignees <- projectId match {
-                        case None => fail("Project ID not found in database!")
+                        case None            => fail("Project ID not found in database!")
                         case Some(projectId) =>
                             for {
                                 _ <- ticketRepo.createTicket(projectId)(ticket)
@@ -684,7 +684,7 @@
                     )
                 val project  = generatedProject.copy(owner = owner)
                 val dbConfig = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx       = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -692,20 +692,20 @@
                     logHandler = None
                 )
                 val ticketRepo = new DoobieTicketRepository[IO](tx)
-                val test = for {
-                    _         <- createProjectOwner(owner)
-                    _         <- createTicketsUser(user)
-                    _         <- createTicketsProject(project)
-                    projectId <- loadProjectId(owner.uid, project.name)
-                    _         <- ticket.submitter.traverse(createTicketsSubmitter)
-                    _         <- projectId.traverse(projectId => ticketRepo.createTicket(projectId)(ticket))
+                val test       = for {
+                    _             <- createProjectOwner(owner)
+                    _             <- createTicketsUser(user)
+                    _             <- createTicketsProject(project)
+                    projectId     <- loadProjectId(owner.uid, project.name)
+                    _             <- ticket.submitter.traverse(createTicketsSubmitter)
+                    _             <- projectId.traverse(projectId => ticketRepo.createTicket(projectId)(ticket))
                     foundComments <- projectId match {
-                        case None => IO.pure(Nil)
+                        case None            => IO.pure(Nil)
                         case Some(projectId) =>
                             for {
                                 submitters <- IO(comments.map(_.submitter).flatten)
                                 _          <- submitters.traverse(createTicketsSubmitter)
-                                _ <- comments.traverse(comment =>
+                                _          <- comments.traverse(comment =>
                                     ticketRepo.addComment(projectId)(ticket.number)(comment)
                                 )
                                 foundComments <- ticketRepo.loadComments(projectId)(ticket.number).compile.toList
@@ -722,7 +722,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, labels: NonEmptyList[Label]) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -731,12 +731,12 @@
             )
             val labelRepo  = new DoobieLabelRepository[IO](tx)
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _         <- createProjectOwner(owner)
                 _         <- createTicketsProject(project)
                 projectId <- loadProjectId(owner.uid, project.name)
-                result <- projectId match {
-                    case None => fail("Project ID not found in database!")
+                result    <- projectId match {
+                    case None            => fail("Project ID not found in database!")
                     case Some(projectId) =>
                         for {
                             _             <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -760,7 +760,7 @@
             (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, milestones: NonEmptyList[Milestone]) =>
                 val project  = generatedProject.copy(owner = owner)
                 val dbConfig = configuration.database
-                val tx = Transactor.fromDriverManager[IO](
+                val tx       = Transactor.fromDriverManager[IO](
                     driver = dbConfig.driver,
                     url = dbConfig.url,
                     user = dbConfig.user,
@@ -769,12 +769,12 @@
                 )
                 val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
                 val ticketRepo    = new DoobieTicketRepository[IO](tx)
-                val test = for {
+                val test          = for {
                     _         <- createProjectOwner(owner)
                     _         <- createTicketsProject(project)
                     projectId <- loadProjectId(owner.uid, project.name)
-                    result <- projectId match {
-                        case None => fail("Project ID not found in database!")
+                    result    <- projectId match {
+                        case None            => fail("Project ID not found in database!")
                         case Some(projectId) =>
                             for {
                                 _ <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -783,7 +783,7 @@
                                     milestoneRepo.createMilestone(projectId)(milestone)
                                 )
                                 createdMilestones <- milestoneRepo.allMilestones(projectId).compile.toList
-                                _ <- createdMilestones.traverse(cm =>
+                                _                 <- createdMilestones.traverse(cm =>
                                     ticketRepo.addMilestone(projectId)(ticket.number)(cm)
                                 )
                                 foundMilestones <- ticketRepo.loadMilestones(projectId)(ticket.number).compile.toList
@@ -802,7 +802,7 @@
             val assignee = Assignee(AssigneeId(user.uid.toUUID), AssigneeName(user.name.toString))
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -810,14 +810,14 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
-                _         <- createProjectOwner(owner)
-                _         <- createTicketsUser(user)
-                _         <- createTicketsProject(project)
-                projectId <- loadProjectId(owner.uid, project.name)
-                _         <- ticket.submitter.traverse(createTicketsSubmitter)
+            val test       = for {
+                _              <- createProjectOwner(owner)
+                _              <- createTicketsUser(user)
+                _              <- createTicketsProject(project)
+                projectId      <- loadProjectId(owner.uid, project.name)
+                _              <- ticket.submitter.traverse(createTicketsSubmitter)
                 foundAssignees <- projectId match {
-                    case None => IO.pure(Nil)
+                    case None            => IO.pure(Nil)
                     case Some(projectId) =>
                         for {
                             _              <- ticketRepo.createTicket(projectId)(ticket)
@@ -837,7 +837,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, label: Label) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -846,12 +846,12 @@
             )
             val labelRepo  = new DoobieLabelRepository[IO](tx)
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
-                _         <- createProjectOwner(owner)
-                _         <- createTicketsProject(project)
-                projectId <- loadProjectId(owner.uid, project.name)
+            val test       = for {
+                _           <- createProjectOwner(owner)
+                _           <- createTicketsProject(project)
+                projectId   <- loadProjectId(owner.uid, project.name)
                 foundLabels <- projectId match {
-                    case None => fail("Project ID not found in database!")
+                    case None            => fail("Project ID not found in database!")
                     case Some(projectId) =>
                         for {
                             _            <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -874,7 +874,7 @@
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, milestone: Milestone) =>
             val project  = generatedProject.copy(owner = owner)
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -883,12 +883,12 @@
             )
             val milestoneRepo = new DoobieMilestoneRepository[IO](tx)
             val ticketRepo    = new DoobieTicketRepository[IO](tx)
-            val test = for {
-                _         <- createProjectOwner(owner)
-                _         <- createTicketsProject(project)
-                projectId <- loadProjectId(owner.uid, project.name)
+            val test          = for {
+                _               <- createProjectOwner(owner)
+                _               <- createTicketsProject(project)
+                projectId       <- loadProjectId(owner.uid, project.name)
                 foundMilestones <- projectId match {
-                    case None => fail("Project ID not found in database!")
+                    case None            => fail("Project ID not found in database!")
                     case Some(projectId) =>
                         for {
                             _                <- ticket.submitter.traverse(createTicketsSubmitter)
@@ -909,7 +909,7 @@
 
     test("updateTicket must update the ticket in the database".tag(NeedsDatabase)) {
         PropF.forAllF { (owner: ProjectOwner, generatedProject: Project, ticket: Ticket, anotherTicket: Ticket) =>
-            val project = generatedProject.copy(owner = owner)
+            val project       = generatedProject.copy(owner = owner)
             val updatedTicket =
                 ticket.copy(
                     title = anotherTicket.title,
@@ -917,7 +917,7 @@
                     submitter = anotherTicket.submitter
                 )
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
@@ -925,7 +925,7 @@
                 logHandler = None
             )
             val ticketRepo = new DoobieTicketRepository[IO](tx)
-            val test = for {
+            val test       = for {
                 _           <- createProjectOwner(owner)
                 _           <- ticket.submitter.traverse(createTicketsSubmitter)
                 _           <- updatedTicket.submitter.traverse(createTicketsSubmitter)
@@ -937,7 +937,7 @@
             } yield foundTicket.getOrElse(None)
             test.start.flatMap(_.joinWithNever).map { foundTicket =>
                 foundTicket match {
-                    case None => fail("Created ticket not found!")
+                    case None              => fail("Created ticket not found!")
                     case Some(foundTicket) =>
                         assertEquals(
                             foundTicket,
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketServiceApiTest.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketServiceApiTest.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketServiceApiTest.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/DoobieTicketServiceApiTest.scala	2025-06-20 12:12:52.695921989 +0000
@@ -19,14 +19,14 @@
     test("createOrUpdateUser must create new users".tag(NeedsDatabase)) {
         PropF.forAllF { (user: TicketsUser) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
                 password = dbConfig.pass,
                 logHandler = None
             )
-            val api = new DoobieTicketServiceApi[IO](tx)
+            val api  = new DoobieTicketServiceApi[IO](tx)
             val test = for {
                 written   <- api.createOrUpdateUser(user)
                 foundUser <- loadTicketsUser(user.uid)
@@ -43,14 +43,14 @@
         PropF.forAllF { (user: TicketsUser, anotherUser: TicketsUser) =>
             val updatedUser = anotherUser.copy(uid = user.uid)
             val dbConfig    = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx          = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
                 password = dbConfig.pass,
                 logHandler = None
             )
-            val api = new DoobieTicketServiceApi[IO](tx)
+            val api  = new DoobieTicketServiceApi[IO](tx)
             val test = for {
                 created   <- api.createOrUpdateUser(user)
                 updated   <- api.createOrUpdateUser(updatedUser)
@@ -68,14 +68,14 @@
     test("deleteUser must delete existing users".tag(NeedsDatabase)) {
         PropF.forAllF { (user: TicketsUser) =>
             val dbConfig = configuration.database
-            val tx = Transactor.fromDriverManager[IO](
+            val tx       = Transactor.fromDriverManager[IO](
                 driver = dbConfig.driver,
                 url = dbConfig.url,
                 user = dbConfig.user,
                 password = dbConfig.pass,
                 logHandler = None
             )
-            val api = new DoobieTicketServiceApi[IO](tx)
+            val api  = new DoobieTicketServiceApi[IO](tx)
             val test = for {
                 _         <- api.createOrUpdateUser(user)
                 deleted   <- api.deleteUser(user.uid)
diff -rN -u old-smederee/modules/hub/src/test/scala/de/smederee/tickets/Generators.scala new-smederee/modules/hub/src/test/scala/de/smederee/tickets/Generators.scala
--- old-smederee/modules/hub/src/test/scala/de/smederee/tickets/Generators.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/hub/src/test/scala/de/smederee/tickets/Generators.scala	2025-06-20 12:12:52.695921989 +0000
@@ -55,7 +55,7 @@
             minute     <- Gen.choose(0, 59)
             second     <- Gen.choose(0, 59)
             nanosecond <- Gen.const(0) // Avoid issues with loosing information during saving and loading.
-            offset <- Gen.oneOf(
+            offset     <- Gen.oneOf(
                 ZoneId.getAvailableZoneIds.asScala.toList.map(ZoneId.of).map(ZonedDateTime.now).map(_.getOffset)
             )
         } yield OffsetDateTime.of(year, month, day, hour, minute, second, nanosecond, offset)
@@ -76,7 +76,7 @@
     val genUsername: Gen[Username] = for {
         length <- Gen.choose(2, 30)
         prefix <- Gen.alphaChar
-        chars <- Gen
+        chars  <- Gen
             .nonEmptyListOf(Gen.alphaNumChar)
             .map(_.take(length).mkString.toLowerCase(Locale.ROOT))
     } yield Username(prefix.toString.toLowerCase(Locale.ROOT) + chars)
@@ -159,7 +159,7 @@
     val genProjectOwnerName: Gen[ProjectOwnerName] = for {
         length <- Gen.choose(2, 30)
         prefix <- Gen.alphaChar
-        chars <- Gen
+        chars  <- Gen
             .nonEmptyListOf(Gen.alphaNumChar)
             .map(_.take(length).mkString.toLowerCase(Locale.ROOT))
     } yield ProjectOwnerName(prefix.toString.toLowerCase(Locale.ROOT) + chars)
diff -rN -u old-smederee/modules/security/src/main/scala/de/smederee/security/SignAndValidate.scala new-smederee/modules/security/src/main/scala/de/smederee/security/SignAndValidate.scala
--- old-smederee/modules/security/src/main/scala/de/smederee/security/SignAndValidate.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/security/src/main/scala/de/smederee/security/SignAndValidate.scala	2025-06-20 12:12:52.695921989 +0000
@@ -112,10 +112,10 @@
       *   Option containing the pure token if the validation was successful.
       */
     def validate(signedToken: SignedToken): Option[String] = {
-        val parts     = signedToken.toString.split(SignedToken.Separator, 3)
-        val signature = parts.headOption
-        val nonce     = parts.drop(1).headOption
-        val token     = parts.drop(2).headOption
+        val parts      = signedToken.toString.split(SignedToken.Separator, 3)
+        val signature  = parts.headOption
+        val nonce      = parts.drop(1).headOption
+        val token      = parts.drop(2).headOption
         val comparison = (signature, nonce, token).mapN { case (signature, nonce, token) =>
             val reSigned = sign(s"$nonce${SignedToken.Separator}$token")
             if (MessageDigest.isEqual(signature.toBytes, reSigned.toBytes))
diff -rN -u old-smederee/modules/security/src/main/scala/de/smederee/security/Username.scala new-smederee/modules/security/src/main/scala/de/smederee/security/Username.scala
--- old-smederee/modules/security/src/main/scala/de/smederee/security/Username.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/security/src/main/scala/de/smederee/security/Username.scala	2025-06-20 12:12:52.695921989 +0000
@@ -54,7 +54,7 @@
     def validate(s: String): ValidatedNec[String, Username] =
         Option(s).map(_.trim.nonEmpty) match {
             case Some(true) =>
-                val input = s.trim
+                val input        = s.trim
                 val miniumLength =
                     if (input.length >= MinimumLength)
                         input.validNec
diff -rN -u old-smederee/modules/security/src/test/scala/de/smederee/security/PasswordTest.scala new-smederee/modules/security/src/test/scala/de/smederee/security/PasswordTest.scala
--- old-smederee/modules/security/src/test/scala/de/smederee/security/PasswordTest.scala	2025-06-20 12:12:52.683922016 +0000
+++ new-smederee/modules/security/src/test/scala/de/smederee/security/PasswordTest.scala	2025-06-20 12:12:52.699921980 +0000
@@ -24,7 +24,7 @@
         forAll { (s: String) =>
             val expected = s.getBytes(StandardCharsets.UTF_8)
             Password.from(s) match {
-                case None => fail("Must produce valid byte array from non null string!")
+                case None    => fail("Must produce valid byte array from non null string!")
                 case Some(p) =>
                     assert(p.toArray.sameElements(expected), "Generated byte array differs from expected one!")
             }
diff -rN -u old-smederee/.scalafmt.conf new-smederee/.scalafmt.conf
--- old-smederee/.scalafmt.conf	2025-06-20 12:12:52.671922044 +0000
+++ new-smederee/.scalafmt.conf	2025-06-20 12:12:52.687922007 +0000
@@ -1,4 +1,4 @@
-version        = "3.9.6"
+version        = "3.9.7"
 runner.dialect = scala3
 style          = "defaultWithAlign"
 # Other options...