Repository: 7mind/izumi
Pull request #1131 (2020-07-02 14:34:13)

Update to latest dependencies, zio-RC21-2, pureconfig-0.13.0, Scala 2.13.3

codecov-commenter: # [Codecov](https://codecov.io/gh/7mind/izumi/pull/1131?src=pr&el=h1) Report
> Merging [#1131](https://codecov.io/gh/7mind/izumi/pull/1131?src=pr&el=desc) into [develop](https://codecov.io/gh/7mind/izumi/commit/b293e056918559fa8e20055980e77349f948cc33&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `54.16%`.


```diff
@@             Coverage Diff             @@
##           develop    #1131      +/-   ##
===========================================
- Coverage    61.07%   61.05%   -0.03%     
===========================================
  Files          384      384              
  Lines         7171     7185      +14     
  Branches       356      357       +1     
===========================================
+ Hits          4380     4387       +7     
- Misses        2791     2798       +7     
```


Patch:
diff --git a/build.sbt b/build.sbt
index e85ab7aa0..5c6e16afd 100644
--- a/build.sbt
+++ b/build.sbt
@@ -67,7 +67,7 @@ lazy val `fundamentals-collections` = project.in(file("fundamentals/fundamentals
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -86,7 +86,7 @@ lazy val `fundamentals-collections` = project.in(file("fundamentals/fundamentals
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -94,7 +94,7 @@ lazy val `fundamentals-collections` = project.in(file("fundamentals/fundamentals
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -165,7 +165,7 @@ lazy val `fundamentals-platform` = project.in(file("fundamentals/fundamentals-pl
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -184,7 +184,7 @@ lazy val `fundamentals-platform` = project.in(file("fundamentals/fundamentals-pl
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -192,7 +192,7 @@ lazy val `fundamentals-platform` = project.in(file("fundamentals/fundamentals-pl
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -279,7 +279,7 @@ lazy val `fundamentals-language` = project.in(file("fundamentals/fundamentals-la
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -298,7 +298,7 @@ lazy val `fundamentals-language` = project.in(file("fundamentals/fundamentals-la
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -306,7 +306,7 @@ lazy val `fundamentals-language` = project.in(file("fundamentals/fundamentals-la
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -378,7 +378,7 @@ lazy val `fundamentals-reflection` = project.in(file("fundamentals/fundamentals-
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -397,7 +397,7 @@ lazy val `fundamentals-reflection` = project.in(file("fundamentals/fundamentals-
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -405,7 +405,7 @@ lazy val `fundamentals-reflection` = project.in(file("fundamentals/fundamentals-
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -471,7 +471,7 @@ lazy val `fundamentals-functional` = project.in(file("fundamentals/fundamentals-
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -490,7 +490,7 @@ lazy val `fundamentals-functional` = project.in(file("fundamentals/fundamentals-
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -498,7 +498,7 @@ lazy val `fundamentals-functional` = project.in(file("fundamentals/fundamentals-
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -570,7 +570,7 @@ lazy val `fundamentals-bio` = project.in(file("fundamentals/fundamentals-bio"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -589,7 +589,7 @@ lazy val `fundamentals-bio` = project.in(file("fundamentals/fundamentals-bio"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -597,7 +597,7 @@ lazy val `fundamentals-bio` = project.in(file("fundamentals/fundamentals-bio"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -672,7 +672,7 @@ lazy val `fundamentals-json-circe` = project.in(file("fundamentals/fundamentals-
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -691,7 +691,7 @@ lazy val `fundamentals-json-circe` = project.in(file("fundamentals/fundamentals-
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -699,7 +699,7 @@ lazy val `fundamentals-json-circe` = project.in(file("fundamentals/fundamentals-
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -773,7 +773,7 @@ lazy val `distage-core-api` = project.in(file("distage/distage-core-api"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -792,7 +792,7 @@ lazy val `distage-core-api` = project.in(file("distage/distage-core-api"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -800,7 +800,7 @@ lazy val `distage-core-api` = project.in(file("distage/distage-core-api"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -870,7 +870,7 @@ lazy val `distage-core-proxy-cglib` = project.in(file("distage/distage-core-prox
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -889,7 +889,7 @@ lazy val `distage-core-proxy-cglib` = project.in(file("distage/distage-core-prox
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -897,7 +897,7 @@ lazy val `distage-core-proxy-cglib` = project.in(file("distage/distage-core-prox
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -970,7 +970,7 @@ lazy val `distage-core` = project.in(file("distage/distage-core"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -989,7 +989,7 @@ lazy val `distage-core` = project.in(file("distage/distage-core"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -997,7 +997,7 @@ lazy val `distage-core` = project.in(file("distage/distage-core"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1070,7 +1070,7 @@ lazy val `distage-extension-config` = project.in(file("distage/distage-extension
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1089,7 +1089,7 @@ lazy val `distage-extension-config` = project.in(file("distage/distage-extension
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1097,7 +1097,7 @@ lazy val `distage-extension-config` = project.in(file("distage/distage-extension
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1170,7 +1170,7 @@ lazy val `distage-extension-plugins` = project.in(file("distage/distage-extensio
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1189,7 +1189,7 @@ lazy val `distage-extension-plugins` = project.in(file("distage/distage-extensio
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1197,7 +1197,7 @@ lazy val `distage-extension-plugins` = project.in(file("distage/distage-extensio
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1269,7 +1269,7 @@ lazy val `distage-extension-logstage` = project.in(file("distage/distage-extensi
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1288,7 +1288,7 @@ lazy val `distage-extension-logstage` = project.in(file("distage/distage-extensi
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1296,7 +1296,7 @@ lazy val `distage-extension-logstage` = project.in(file("distage/distage-extensi
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1365,7 +1365,7 @@ lazy val `distage-framework-api` = project.in(file("distage/distage-framework-ap
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1384,7 +1384,7 @@ lazy val `distage-framework-api` = project.in(file("distage/distage-framework-ap
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1392,7 +1392,7 @@ lazy val `distage-framework-api` = project.in(file("distage/distage-framework-ap
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1471,7 +1471,7 @@ lazy val `distage-framework` = project.in(file("distage/distage-framework"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1490,7 +1490,7 @@ lazy val `distage-framework` = project.in(file("distage/distage-framework"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1498,7 +1498,7 @@ lazy val `distage-framework` = project.in(file("distage/distage-framework"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1575,7 +1575,7 @@ lazy val `distage-framework-docker` = project.in(file("distage/distage-framework
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1594,7 +1594,7 @@ lazy val `distage-framework-docker` = project.in(file("distage/distage-framework
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1602,7 +1602,7 @@ lazy val `distage-framework-docker` = project.in(file("distage/distage-framework
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1677,7 +1677,7 @@ lazy val `distage-testkit-core` = project.in(file("distage/distage-testkit-core"
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1696,7 +1696,7 @@ lazy val `distage-testkit-core` = project.in(file("distage/distage-testkit-core"
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1704,7 +1704,7 @@ lazy val `distage-testkit-core` = project.in(file("distage/distage-testkit-core"
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1780,7 +1780,7 @@ lazy val `distage-testkit-scalatest` = project.in(file("distage/distage-testkit-
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1799,7 +1799,7 @@ lazy val `distage-testkit-scalatest` = project.in(file("distage/distage-testkit-
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1807,7 +1807,7 @@ lazy val `distage-testkit-scalatest` = project.in(file("distage/distage-testkit-
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1881,7 +1881,7 @@ lazy val `logstage-core` = project.in(file("logstage/logstage-core"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1900,7 +1900,7 @@ lazy val `logstage-core` = project.in(file("logstage/logstage-core"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -1908,7 +1908,7 @@ lazy val `logstage-core` = project.in(file("logstage/logstage-core"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -1978,7 +1978,7 @@ lazy val `logstage-rendering-circe` = project.in(file("logstage/logstage-renderi
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -1997,7 +1997,7 @@ lazy val `logstage-rendering-circe` = project.in(file("logstage/logstage-renderi
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -2005,7 +2005,7 @@ lazy val `logstage-rendering-circe` = project.in(file("logstage/logstage-renderi
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -2078,7 +2078,7 @@ lazy val `logstage-adapter-slf4j` = project.in(file("logstage/logstage-adapter-s
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -2097,7 +2097,7 @@ lazy val `logstage-adapter-slf4j` = project.in(file("logstage/logstage-adapter-s
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -2105,7 +2105,7 @@ lazy val `logstage-adapter-slf4j` = project.in(file("logstage/logstage-adapter-s
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -2176,7 +2176,7 @@ lazy val `logstage-sink-slf4j` = project.in(file("logstage/logstage-sink-slf4j")
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -2195,7 +2195,7 @@ lazy val `logstage-sink-slf4j` = project.in(file("logstage/logstage-sink-slf4j")
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -2203,7 +2203,7 @@ lazy val `logstage-sink-slf4j` = project.in(file("logstage/logstage-sink-slf4j")
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -2362,7 +2362,7 @@ lazy val `microsite` = project.in(file("doc/microsite"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -2381,7 +2381,7 @@ lazy val `microsite` = project.in(file("doc/microsite"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -2389,7 +2389,7 @@ lazy val `microsite` = project.in(file("doc/microsite"))
     } },
     scalaVersion := crossScalaVersions.value.head,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     )
   )
@@ -2458,7 +2458,7 @@ lazy val `sbt-izumi-deps` = project.in(file("sbt-plugins/sbt-izumi-deps"))
         "-Ycache-plugin-class-loader:always",
         "-Ycache-macro-class-loader:last-modified"
       )
-      case (_, "2.13.1") => Seq(
+      case (_, "2.13.3") => Seq(
         "-Xlint:_,-eta-sam",
         "-Ybackend-parallelism",
         math.min(16, math.max(1, sys.runtime.availableProcessors() - 1)).toString,
@@ -2477,7 +2477,7 @@ lazy val `sbt-izumi-deps` = project.in(file("sbt-plugins/sbt-izumi-deps"))
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
-      case (false, "2.13.1") => Seq(
+      case (false, "2.13.3") => Seq(
         "-opt:l:inline",
         "-opt-inline-from:izumi.**"
       )
@@ -2495,7 +2495,7 @@ lazy val `fundamentals` = (project in file(".agg/fundamentals-fundamentals"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2515,7 +2515,7 @@ lazy val `fundamentals-jvm` = (project in file(".agg/fundamentals-fundamentals-j
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2535,7 +2535,7 @@ lazy val `distage` = (project in file(".agg/distage-distage"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2559,7 +2559,7 @@ lazy val `distage-jvm` = (project in file(".agg/distage-distage-jvm"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2583,7 +2583,7 @@ lazy val `logstage` = (project in file(".agg/logstage-logstage"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2600,7 +2600,7 @@ lazy val `logstage-jvm` = (project in file(".agg/logstage-logstage-jvm"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2617,7 +2617,7 @@ lazy val `doc` = (project in file(".agg/doc-doc"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2631,7 +2631,7 @@ lazy val `doc-jvm` = (project in file(".agg/doc-doc-jvm"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2665,7 +2665,7 @@ lazy val `izumi-jvm` = (project in file(".agg/.agg-jvm"))
   .settings(
     skip in publish := true,
     crossScalaVersions := Seq(
-      "2.13.1",
+      "2.13.3",
       "2.12.11"
     ),
     scalaVersion := crossScalaVersions.value.head
@@ -2710,7 +2710,7 @@ lazy val `izumi` = (project in file("."))
       s"-Xmacro-settings:sbt-version=${sbtVersion.value}"
     ),
     crossScalaVersions := Nil,
-    scalaVersion := "2.13.1",
+    scalaVersion := "2.13.3",
     organization in ThisBuild := "io.7mind.izumi",
     sonatypeProfileName := "io.7mind",
     sonatypeSessionName := s"[sbt-sonatype] ${name.value} ${version.value} ${java.util.UUID.randomUUID}",
diff --git a/distage/distage-core-api/src/main/scala/izumi/distage/constructors/macros/AnyConstructorMacro.scala b/distage/distage-core-api/src/main/scala/izumi/distage/constructors/macros/AnyConstructorMacro.scala
index 3dd8d1630..ab38da66d 100644
--- a/distage/distage-core-api/src/main/scala/izumi/distage/constructors/macros/AnyConstructorMacro.scala
+++ b/distage/distage-core-api/src/main/scala/izumi/distage/constructors/macros/AnyConstructorMacro.scala
@@ -1,6 +1,6 @@
 package izumi.distage.constructors.macros
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.distage.constructors.{AnyConstructor, AnyConstructorOptionalMakeDSL, DebugProperties}
 import izumi.distage.model.definition.dsl.ModuleDefDSL
 import izumi.distage.model.reflection.universe.StaticDIUniverse
@@ -10,7 +10,7 @@ import izumi.fundamentals.reflection.{ReflectionUtil, TrivialMacroLogger}
 import scala.reflect.api.Universe
 import scala.reflect.macros.blackbox
 
-@silent("deprecated.*since 2.11")
+@nowarn("msg=deprecated.*since 2.11")
 object AnyConstructorMacro {
 
   def make[B[_], T: c.WeakTypeTag](c: blackbox.Context): c.Expr[B[T]] = {
@@ -47,32 +47,33 @@ object AnyConstructorMacro {
 
     val maybeNonwhiteListedMethods = maybeTree.map(_.collect {
       case Select(lhs, TermName(method))
-        if !ModuleDefDSL.MakeDSLNoOpMethodsWhitelist.contains(method) &&
+          if !ModuleDefDSL.MakeDSLNoOpMethodsWhitelist.contains(method) &&
           lhs.exists(_.pos == positionOfMakeCall) =>
         method
     })
 
-    logger.log(
-      s"""Got tree: $maybeTree
-         |Result of search: $maybeNonwhiteListedMethods
-         |Searched for position: $positionOfMakeCall
-         |Positions: ${c.macroApplication.pos -> c.enclosingMacros.map(_.macroApplication.pos)}
-         |enclosingUnit contains macro call (can be non-true for inline typechecks): ${c.enclosingUnit.body.exists(_.pos == positionOfMakeCall)}
-         |""".stripMargin)
+    logger.log(s"""Got tree: $maybeTree
+                  |Result of search: $maybeNonwhiteListedMethods
+                  |Searched for position: $positionOfMakeCall
+                  |Positions: ${c.macroApplication.pos -> c.enclosingMacros.map(_.macroApplication.pos)}
+                  |enclosingUnit contains macro call (can be non-true for inline typechecks): ${c.enclosingUnit.body.exists(_.pos == positionOfMakeCall)}
+                  |""".stripMargin)
 
     val tpe = weakTypeOf[T]
 
     c.Expr[AnyConstructorOptionalMakeDSL.Impl[T]] {
       maybeNonwhiteListedMethods match {
         case None =>
-          c.abort(c.enclosingPosition,
+          c.abort(
+            c.enclosingPosition,
             s"""Couldn't find position of the `make` call when summoning AnyConstructorOptionalMakeDSL[$tpe]
                |Got tree: $maybeTree
                |Result of search: $maybeNonwhiteListedMethods
                |Searched for position: $positionOfMakeCall
                |Positions: ${c.macroApplication.pos -> c.enclosingMacros.map(_.macroApplication.pos)}
                |enclosingUnit contains macro call (can be non-true for inline typechecks): ${c.enclosingUnit.body.exists(_.pos == positionOfMakeCall)}
-               |""".stripMargin)
+               |""".stripMargin,
+          )
         case Some(nonwhiteListedMethods) =>
           if (nonwhiteListedMethods.isEmpty) {
             logger.log(s"""For $tpe found no `.from`-like calls in $maybeTree""".stripMargin)
@@ -106,7 +107,7 @@ object AnyConstructorMacro {
       c.abort(
         c.enclosingPosition,
         s"""AnyConstructor failure: couldn't generate a constructor for $targetType!
-           |It's neither a concrete class, nor a factory, nor a trait!""".stripMargin
+           |It's neither a concrete class, nor a factory, nor a trait!""".stripMargin,
       )
     }
   }
diff --git a/distage/distage-core-api/src/main/scala/izumi/distage/model/plan/repr/KeyMinimizer.scala b/distage/distage-core-api/src/main/scala/izumi/distage/model/plan/repr/KeyMinimizer.scala
index ec51d2264..ac825c52b 100644
--- a/distage/distage-core-api/src/main/scala/izumi/distage/model/plan/repr/KeyMinimizer.scala
+++ b/distage/distage-core-api/src/main/scala/izumi/distage/model/plan/repr/KeyMinimizer.scala
@@ -1,6 +1,6 @@
 package izumi.distage.model.plan.repr
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.distage.model.reflection._
 import izumi.fundamentals.collections.IzCollections._
 import izumi.reflect.macrortti.LightTypeTagRef.SymName
@@ -8,7 +8,7 @@ import izumi.reflect.macrortti.{LTTRenderables, LightTypeTagRef, RuntimeAPI}
 
 class KeyMinimizer(allKeys: Set[DIKey]) {
 
-  @silent("Unused import")
+  @nowarn("msg=Unused import")
   private[this] val index: Map[String, Int] = {
     import scala.collection.compat._
     allKeys
diff --git a/distage/distage-core-api/src/main/scala/izumi/distage/model/provisioning/Provision.scala b/distage/distage-core-api/src/main/scala/izumi/distage/model/provisioning/Provision.scala
index 3ac941edd..481093a46 100644
--- a/distage/distage-core-api/src/main/scala/izumi/distage/model/provisioning/Provision.scala
+++ b/distage/distage-core-api/src/main/scala/izumi/distage/model/provisioning/Provision.scala
@@ -4,7 +4,7 @@ import izumi.distage.model.provisioning.PlanInterpreter.Finalizer
 import izumi.distage.model.references.IdentifiedRef
 import izumi.distage.model.reflection.DIKey
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.collection.{Map, Seq, mutable}
 
 trait Provision[+F[_]] {
@@ -24,8 +24,7 @@ trait Provision[+F[_]] {
 
 object Provision {
 
-  final case class ProvisionMutable[F[_]]
-  (
+  final case class ProvisionMutable[F[_]](
     instances: mutable.LinkedHashMap[DIKey, Any] = mutable.LinkedHashMap[DIKey, Any](),
     imports: mutable.LinkedHashMap[DIKey, Any] = mutable.LinkedHashMap[DIKey, Any](),
     finalizers: mutable.ListBuffer[Finalizer[F]] = mutable.ListBuffer[Finalizer[F]](),
@@ -43,14 +42,13 @@ object Provision {
     }
   }
 
-  final case class ProvisionImmutable[+F[_]]
-  (
+  final case class ProvisionImmutable[+F[_]](
     instances: Map[DIKey, Any],
     imports: Map[DIKey, Any],
     finalizers: Seq[Finalizer[F]],
   ) extends Provision[F] {
 
-    @silent("Unused import")
+    @nowarn("msg=Unused import")
     override def narrow(allRequiredKeys: Set[DIKey]): Provision[F] = {
       import scala.collection.compat._
       ProvisionImmutable(
diff --git a/distage/distage-core-api/src/main/scala/izumi/distage/model/reflection/universe/WithDIWiring.scala b/distage/distage-core-api/src/main/scala/izumi/distage/model/reflection/universe/WithDIWiring.scala
index caf646025..272cc250c 100644
--- a/distage/distage-core-api/src/main/scala/izumi/distage/model/reflection/universe/WithDIWiring.scala
+++ b/distage/distage-core-api/src/main/scala/izumi/distage/model/reflection/universe/WithDIWiring.scala
@@ -1,14 +1,9 @@
 package izumi.distage.model.reflection.universe
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 
 trait WithDIWiring {
-  this: DIUniverseBase
-    with WithDISafeType
-    with WithDIKey
-    with WithDIAssociation
-    with WithDISymbolInfo
-  =>
+  this: DIUniverseBase with WithDISafeType with WithDIKey with WithDIAssociation with WithDISymbolInfo =>
 
   sealed trait Wiring
   object Wiring {
@@ -22,13 +17,15 @@ trait WithDIWiring {
       case class Class(instanceType: TypeNative, classParameters: List[List[Association.Parameter]], prefix: Option[DIKey]) extends SingletonWiring {
         override lazy val associations: List[Association] = classParameters.flatten
       }
-      case class Trait(instanceType: TypeNative, classParameters: List[List[Association.Parameter]], methods: List[Association.AbstractMethod], prefix: Option[DIKey]) extends SingletonWiring {
+      case class Trait(instanceType: TypeNative, classParameters: List[List[Association.Parameter]], methods: List[Association.AbstractMethod], prefix: Option[DIKey])
+        extends SingletonWiring {
         override lazy val associations: List[Association] = classParameters.flatten ++ methods
       }
     }
 
-    case class Factory(factoryMethods: List[Factory.FactoryMethod], classParameters: List[List[Association.Parameter]], methods: List[Association.AbstractMethod]) extends Wiring {
-      @silent("Unused import")
+    case class Factory(factoryMethods: List[Factory.FactoryMethod], classParameters: List[List[Association.Parameter]], methods: List[Association.AbstractMethod])
+      extends Wiring {
+      @nowarn("msg=Unused import")
       final def factoryProductDepsFromObjectGraph: List[Association] = {
         import izumi.fundamentals.collections.IzCollections._
         val fieldKeys = methods.map(_.key).toSet
diff --git a/distage/distage-core/src/main/scala/izumi/distage/planning/PlanAnalyzerDefaultImpl.scala b/distage/distage-core/src/main/scala/izumi/distage/planning/PlanAnalyzerDefaultImpl.scala
index fa9c23af2..d8f9bbef4 100644
--- a/distage/distage-core/src/main/scala/izumi/distage/planning/PlanAnalyzerDefaultImpl.scala
+++ b/distage/distage-core/src/main/scala/izumi/distage/planning/PlanAnalyzerDefaultImpl.scala
@@ -9,26 +9,26 @@ import izumi.distage.model.plan.topology.{DependencyGraph, PlanTopology}
 import izumi.distage.model.planning.PlanAnalyzer
 import izumi.distage.model.reflection._
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.collection.mutable
 
-@silent("Unused import")
+@nowarn("msg=Unused import")
 class PlanAnalyzerDefaultImpl extends PlanAnalyzer {
   import scala.collection.compat._
 
   def topology(ops: Seq[ExecutableOp]): PlanTopology = {
     computeTopology(
-      ops
-      , (_) => (_) => false
-      , _ => true
+      ops,
+      (_) => (_) => false,
+      _ => true,
     )
   }
 
   def topologyFwdRefs(plan: Iterable[ExecutableOp]): PlanTopology = {
     computeTopology(
-      plan
-      , (acc) => (key) => acc.contains(key)
-      , _._2.nonEmpty
+      plan,
+      acc => key => acc.contains(key),
+      _._2.nonEmpty,
     )
   }
 
@@ -61,16 +61,17 @@ class PlanAnalyzerDefaultImpl extends PlanAnalyzer {
   private type PostFilter = ((DIKey, mutable.Set[DIKey])) => Boolean
 
   private def computeTopology(plan: Iterable[ExecutableOp], refFilter: RefFilter, postFilter: PostFilter): PlanTopology = {
-    val dependencies = plan.toList.foldLeft(new Accumulator) {
-      case (acc, op: InstantiationOp) =>
-        val filtered = requirements(op).filterNot(refFilter(acc)) // it's important NOT to update acc before we computed deps
-        acc.getOrElseUpdate(op.target, mutable.Set.empty) ++= filtered
-        acc
-
-      case (acc, op) =>
-        acc.getOrElseUpdate(op.target, mutable.Set.empty)
-        acc
-    }
+    val dependencies = plan
+      .toList.foldLeft(new Accumulator) {
+        case (acc, op: InstantiationOp) =>
+          val filtered = requirements(op).filterNot(refFilter(acc)) // it's important NOT to update acc before we computed deps
+          acc.getOrElseUpdate(op.target, mutable.Set.empty) ++= filtered
+          acc
+
+        case (acc, op) =>
+          acc.getOrElseUpdate(op.target, mutable.Set.empty)
+          acc
+      }
       .filter(postFilter)
       .view
       .mapValues(_.toSet).toMap
@@ -79,7 +80,7 @@ class PlanAnalyzerDefaultImpl extends PlanAnalyzer {
     PlanTopologyImmutable(DependencyGraph(dependants, DependencyKind.Required), DependencyGraph(dependencies, DependencyKind.Depends))
   }
 
-  @silent("deprecated")
+  @nowarn("msg=deprecated")
   private def reverseReftable(dependencies: Map[DIKey, Set[DIKey]]): Map[DIKey, Set[DIKey]] = {
     val dependants = dependencies.foldLeft(new Accumulator with mutable.MultiMap[DIKey, DIKey]) {
       case (acc, (reference, referencee)) =>
diff --git a/distage/distage-core/src/main/scala/izumi/distage/planning/PlannerDefaultImpl.scala b/distage/distage-core/src/main/scala/izumi/distage/planning/PlannerDefaultImpl.scala
index d2429b418..dd3c1652d 100644
--- a/distage/distage-core/src/main/scala/izumi/distage/planning/PlannerDefaultImpl.scala
+++ b/distage/distage-core/src/main/scala/izumi/distage/planning/PlannerDefaultImpl.scala
@@ -1,6 +1,6 @@
 package izumi.distage.planning
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.distage.model.definition.ModuleBase
 import izumi.distage.model.exceptions.{SanityCheckFailedException, UnsupportedOpException}
 import izumi.distage.model.plan.ExecutableOp.WiringOp.ReferenceKey
@@ -103,7 +103,7 @@ final class PlannerDefaultImpl(
       .get
   }
 
-  @silent("Unused import")
+  @nowarn("msg=Unused import")
   private[this] def addImports(plan: SemiPlan): SemiPlan = {
     import scala.collection.compat._
 
@@ -234,12 +234,12 @@ final class PlannerDefaultImpl(
 
   private[this] def effectKey(key: DIKey): Boolean = key match {
     case _: DIKey.ResourceKey | _: DIKey.EffectKey => true
-    case _                                         => false
+    case _ => false
   }
 
   private[this] def referenceOp(s: SemiplanOp): Boolean = s match {
     case _: ReferenceKey /*| _: MonadicOp */ => true
-    case _                                   => false
+    case _ => false
   }
 
 }
diff --git a/distage/distage-extension-config/src/main/scala/izumi/distage/config/codec/PureconfigInstances.scala b/distage/distage-extension-config/src/main/scala/izumi/distage/config/codec/PureconfigInstances.scala
index 4979f13f9..e6c43a2c4 100644
--- a/distage/distage-extension-config/src/main/scala/izumi/distage/config/codec/PureconfigInstances.scala
+++ b/distage/distage-extension-config/src/main/scala/izumi/distage/config/codec/PureconfigInstances.scala
@@ -2,9 +2,10 @@ package izumi.distage.config.codec
 
 import com.typesafe.config.{ConfigMemorySize, ConfigValue}
 import pureconfig.ConfigReader.Result
-import pureconfig.error.CannotConvert
-import pureconfig.generic.{CoproductHint, ProductHint}
 import pureconfig._
+import pureconfig.error.{CannotConvert, ConfigReaderFailures, ThrowableFailure}
+import pureconfig.generic.error.{InvalidCoproductOption, NoValidCoproductOptionFound}
+import pureconfig.generic.{CoproductHint, ProductHint}
 
 import scala.reflect.classTag
 import scala.util.control.NonFatal
@@ -12,7 +13,7 @@ import scala.util.control.NonFatal
 object PureconfigInstances extends PureconfigInstances
 
 trait PureconfigInstances {
-  /** Override pureconfig's default `snake-case` fields – force CamelCase product-hint */
+  /** Override pureconfig's default `kebab-case` fields – force CamelCase product-hint */
   @inline implicit final def forceCamelCaseProductHint[T]: ProductHint[T] = camelCaseProductHint.asInstanceOf[ProductHint[T]]
 
   /** Override pureconfig's default `type` field type discriminator for sealed traits.
@@ -36,18 +37,39 @@ trait PureconfigInstances {
     */
   @inline implicit final def forceCirceLikeCoproductHint[T]: CoproductHint[T] = circeLikeCoproductHint.asInstanceOf[CoproductHint[T]]
 
-  private[this] final val camelCaseProductHint: ProductHint[Any] = ProductHint(fieldMapping = ConfigFieldMapping(CamelCase, CamelCase))
+  private[this] final val camelCaseProductHint: ProductHint[Any] = ProductHint(ConfigFieldMapping(CamelCase, CamelCase))
   private[this] final val circeLikeCoproductHint: CoproductHint[Any] = new CoproductHint[Any] {
-    override def from(cur: ConfigCursor, name: String): Result[Option[ConfigCursor]] = {
+    override def from(cur: ConfigCursor, options: Seq[String]): Result[CoproductHint.Action] = {
       for {
         objCur <- cur.asObjectCursor
-      } yield objCur.atKey(name).toOption.filter(_ => objCur.keys.size == 1)
+        _ <-
+          if (objCur.keys.size == 1) {
+            Right(())
+          } else {
+            val msg = s"""Invalid format for sealed trait, found multiple or no keys in object. Expected a single-key object like `{ "$$K": {} }`
+                         |where `$$K` can be one of ${options.mkString}""".stripMargin
+            Left(
+              ConfigReaderFailures(
+                objCur.failureFor(
+                  NoValidCoproductOptionFound(objCur.value, Seq("_invalid_format_" -> ConfigReaderFailures(ThrowableFailure(new RuntimeException(msg), None))))
+                )
+              )
+            )
+          }
+        res <- {
+          val key = objCur.keys.head
+          if (options.contains(key)) {
+            objCur.atKey(key).map(CoproductHint.Use(_, key))
+          } else {
+            Left(ConfigReaderFailures(objCur.failureFor(InvalidCoproductOption(key))))
+          }
+        }
+      } yield res
     }
-    override def to(cv: ConfigValue, name: String): Result[ConfigValue] = {
+    override def to(cv: ConfigValue, name: String): ConfigValue = {
       import pureconfig.syntax._
-      Right(Map(name -> cv).toConfig)
+      Map(name -> cv).toConfig
     }
-    override def tryNextOnFail(name: String): Boolean = false
   }
 
   // use `Exported` so that if user imports their own instances, user instances will have higher priority
diff --git a/distage/distage-extension-config/src/main/scala/izumi/distage/config/extractor/ConfigPathExtractor.scala b/distage/distage-extension-config/src/main/scala/izumi/distage/config/extractor/ConfigPathExtractor.scala
index 17a77e653..7d1a43479 100644
--- a/distage/distage-extension-config/src/main/scala/izumi/distage/config/extractor/ConfigPathExtractor.scala
+++ b/distage/distage-extension-config/src/main/scala/izumi/distage/config/extractor/ConfigPathExtractor.scala
@@ -1,6 +1,6 @@
 package izumi.distage.config.extractor
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import com.typesafe.config.{Config, ConfigFactory}
 import izumi.distage.config.extractor.ConfigPathExtractor.{ConfigPath, ExtractConfigPath, ResolvedConfig}
 import izumi.distage.model.definition.BindingTag.ConfTag
@@ -15,9 +15,10 @@ import scala.jdk.CollectionConverters._
 class ConfigPathExtractor extends PlanningHook {
 
   override def phase20Customization(plan: SemiPlan): SemiPlan = {
-    val paths = plan.steps.collect {
-      case ExtractConfigPath(configPath) => configPath
-    }.toSet
+    val paths = plan
+      .steps.collect {
+        case ExtractConfigPath(configPath) => configPath
+      }.toSet
 
     val addResolvedConfigOp = resolvedConfigOp(paths)
 
@@ -27,11 +28,12 @@ class ConfigPathExtractor extends PlanningHook {
   private def resolvedConfigOp(paths: Set[ConfigPath]): ExecutableOp.WiringOp.UseInstance = {
     val resolvedConfig = ResolvedConfig(paths)
     val target = DIKey.get[ResolvedConfig]
-    ExecutableOp.WiringOp.UseInstance(
-      target = target,
-      wiring = Instance(target.tpe, resolvedConfig),
-      origin = OperationOrigin.Unknown,
-    )
+    ExecutableOp
+      .WiringOp.UseInstance(
+        target = target,
+        wiring = Instance(target.tpe, resolvedConfig),
+        origin = OperationOrigin.Unknown,
+      )
   }
 
 }
@@ -52,13 +54,14 @@ object ConfigPathExtractor {
   }
 
   final case class ResolvedConfig(requiredPaths: Set[ConfigPath]) {
-    @silent("Unused import")
+    @nowarn("msg=Unused import")
     def minimized(source: Config): Config = {
       import scala.collection.compat._
       val paths = requiredPaths.map(_.toPath)
 
       ConfigFactory.parseMap {
-        source.root().unwrapped().asScala
+        source
+          .root().unwrapped().asScala
           .view
           .filterKeys(key => paths.exists(_.startsWith(key)))
           .toMap
diff --git a/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala b/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala
index 319a6e634..0cdaeff6a 100644
--- a/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala
+++ b/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala
@@ -57,9 +57,9 @@ object PluginLoaderDefaultImpl {
 
   def doLoad[T](base: String, whitelistClasses: Seq[String], enabledPackages: Seq[String], disabledPackages: Seq[String], debug: Boolean): Seq[T] = {
     val scanResult = Value(new ClassGraph())
-      .map(_.whitelistPackages(enabledPackages: _*))
-      .map(_.whitelistClasses(whitelistClasses :+ base: _*))
-      .map(_.blacklistPackages(disabledPackages: _*))
+      .map(_.acceptPackages(enabledPackages: _*))
+      .map(_.acceptClasses(whitelistClasses :+ base: _*))
+      .map(_.rejectPackages(disabledPackages: _*))
       .map(_.enableClassInfo())
       .map(if (debug) _.verbose() else identity)
       .map(_.scan())
diff --git a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/ContainerResource.scala b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/ContainerResource.scala
index 40e279183..42b6be00d 100644
--- a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/ContainerResource.scala
+++ b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/ContainerResource.scala
@@ -4,7 +4,7 @@ import java.util.concurrent.{TimeUnit, TimeoutException}
 
 import com.github.dockerjava.api.command.InspectContainerResponse
 import com.github.dockerjava.api.model._
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.distage.docker.Docker._
 import izumi.distage.docker.DockerClientWrapper.ContainerDestroyMeta
 import izumi.distage.docker.healthcheck.ContainerHealthCheck.{HealthCheckResult, VerifiedContainerConnectivity}
@@ -227,7 +227,7 @@ case class ContainerResource[F[_], T](
 
     for {
       out <- F.maybeSuspend {
-        @silent("method.*Bind.*deprecated")
+        @nowarn("msg=method.*Bind.*deprecated")
         val cmd = Value(baseCmd)
           .mut(config.name) { case (n, c) => c.withName(n) }
           .mut(ports.nonEmpty)(_.withExposedPorts(ports.map(_.binding.getExposedPort).asJava))
diff --git a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/DockerClientWrapper.scala b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/DockerClientWrapper.scala
index 0f5ca33ae..36613f37d 100644
--- a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/DockerClientWrapper.scala
+++ b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/DockerClientWrapper.scala
@@ -18,6 +18,7 @@ import izumi.logstage.api.IzLogger
 
 import scala.jdk.CollectionConverters._
 import com.github.dockerjava.api.model.Container
+import scala.annotation.nowarn
 
 class DockerClientWrapper[F[_]](
   val rawClient: DockerClient,
@@ -85,6 +86,7 @@ object DockerClientWrapper {
       )
       .get.build()
 
+    @nowarn("msg=deprecated")
     private[this] lazy val client = DockerClientBuilder
       .getInstance(rawClientConfig)
       .withDockerCmdExecFactory(factory)
diff --git a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/modules/package.scala b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/modules/package.scala
index b4962ca78..d5e6ce18f 100644
--- a/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/modules/package.scala
+++ b/distage/distage-framework-docker/src/main/scala/izumi/distage/docker/modules/package.scala
@@ -1,10 +1,10 @@
 package izumi.distage.docker
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import distage.TagK
 
 package object modules {
-  @silent("package object")
+  @nowarn("msg=package object")
   @deprecated("DockerContainerModule has been renamed to `DockerSupportModule`", "old name will be deleted in 0.11.1")
   class DockerContainerModule[F[_]: TagK] extends DockerSupportModule[F]
   @deprecated("DockerContainerModule has been renamed to `DockerSupportModule`", "old name will be deleted in 0.11.1")
diff --git a/distage/distage-framework/src/main/scala/izumi/distage/roles/bundled/ConfigWriter.scala b/distage/distage-framework/src/main/scala/izumi/distage/roles/bundled/ConfigWriter.scala
index f88f30700..7a8ef6ed8 100644
--- a/distage/distage-framework/src/main/scala/izumi/distage/roles/bundled/ConfigWriter.scala
+++ b/distage/distage-framework/src/main/scala/izumi/distage/roles/bundled/ConfigWriter.scala
@@ -3,7 +3,7 @@ package izumi.distage.roles.bundled
 import java.nio.charset.StandardCharsets
 import java.nio.file.{Files, Paths}
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import com.typesafe.config.{Config, ConfigFactory, ConfigRenderOptions}
 import izumi.distage.config.extractor.ConfigPathExtractor.ResolvedConfig
 import izumi.distage.config.extractor.ConfigPathExtractorModule
@@ -26,9 +26,7 @@ import izumi.logstage.distage.LogstageModule
 
 import scala.util._
 
-
-class ConfigWriter[F[_]: DIEffect]
-(
+class ConfigWriter[F[_]: DIEffect](
   logger: IzLogger,
   launcherVersion: ArtifactVersion @Id("launcher-version"),
   roleInfo: RolesInfo,
@@ -57,28 +55,29 @@ class ConfigWriter[F[_]: DIEffect]
       writeConfig(options, commonComponent, None, commonConfig)
     }
 
-    roleInfo.availableRoleBindings.foreach { role =>
-      val component = ConfigurableComponent(role.descriptor.id, role.source.map(_.version))
-      val refConfig = buildConfig(options, component.copy(parent = Some(commonConfig)))
-      val version = if (options.useLauncherVersion) {
-        Some(ArtifactVersion(launcherVersion.version))
-      } else {
-        component.version
-      }
-      val versionedComponent = component.copy(version = version)
-
-      try {
-        writeConfig(options, versionedComponent, None, refConfig)
-        minimizedConfig(refConfig, role)
-          .foreach {
-            cfg =>
-              writeConfig(options, versionedComponent, Some("minimized"), cfg)
-          }
-      } catch {
-        case exception: Throwable =>
-          logger.crit(s"Cannot process role ${role.descriptor.id}")
-          throw exception
-      }
+    roleInfo.availableRoleBindings.foreach {
+      role =>
+        val component = ConfigurableComponent(role.descriptor.id, role.source.map(_.version))
+        val refConfig = buildConfig(options, component.copy(parent = Some(commonConfig)))
+        val version = if (options.useLauncherVersion) {
+          Some(ArtifactVersion(launcherVersion.version))
+        } else {
+          component.version
+        }
+        val versionedComponent = component.copy(version = version)
+
+        try {
+          writeConfig(options, versionedComponent, None, refConfig)
+          minimizedConfig(refConfig, role)
+            .foreach {
+              cfg =>
+                writeConfig(options, versionedComponent, Some("minimized"), cfg)
+            }
+        } catch {
+          case exception: Throwable =>
+            logger.crit(s"Cannot process role ${role.descriptor.id}")
+            throw exception
+        }
     }
   }
 
@@ -86,19 +85,19 @@ class ConfigWriter[F[_]: DIEffect]
     val referenceConfig = s"${cmp.componentId}-reference.conf"
     logger.info(s"[${cmp.componentId}] Resolving $referenceConfig... with ${config.includeCommon -> "shared sections"}")
 
-    val reference = cmp.parent
+    val reference = cmp
+      .parent
       .filter(_ => config.includeCommon)
       .fold(
         ConfigFactory.parseResourcesAnySyntax(referenceConfig)
-      )(parent =>
-        ConfigFactory.parseResourcesAnySyntax(referenceConfig).withFallback(parent)
-      ).resolve()
+      )(parent => ConfigFactory.parseResourcesAnySyntax(referenceConfig).withFallback(parent)).resolve()
 
     if (reference.isEmpty) {
       logger.warn(s"[${cmp.componentId}] Reference config is empty.")
     }
 
-    val resolved = ConfigFactory.systemProperties()
+    val resolved = ConfigFactory
+      .systemProperties()
       .withFallback(reference)
       .resolve()
 
@@ -165,7 +164,7 @@ class ConfigWriter[F[_]: DIEffect]
   }
 
   // TODO: sdk?
-  @silent("Unused import")
+  @nowarn("msg=Unused import")
   private[this] def cleanupEffectiveAppConfig(effectiveAppConfig: Config, reference: Config): Config = {
     import scala.jdk.CollectionConverters._
     import scala.collection.compat._
@@ -205,17 +204,17 @@ object ConfigWriter extends RoleDescriptor {
     * @param includeCommon Append shared sections from `common-reference.conf` into every written config
     */
   case class WriteReference(
-                             asJson: Boolean,
-                             targetDir: String,
-                             includeCommon: Boolean,
-                             useLauncherVersion: Boolean,
-                           )
+    asJson: Boolean,
+    targetDir: String,
+    includeCommon: Boolean,
+    useLauncherVersion: Boolean,
+  )
 
   final case class ConfigurableComponent(
-                                          componentId: String,
-                                          version: Option[ArtifactVersion],
-                                          parent: Option[Config] = None,
-                                        )
+    componentId: String,
+    version: Option[ArtifactVersion],
+    parent: Option[Config] = None,
+  )
 
   object Options extends ParserDef {
     final val targetDir = arg("target", "t", "target directory", "<path>")
diff --git a/fundamentals/fundamentals-bio/.jvm/src/main/scala/izumi/functional/bio/BIORunner.scala b/fundamentals/fundamentals-bio/.jvm/src/main/scala/izumi/functional/bio/BIORunner.scala
index 68ad0bebc..0fb2e9684 100644
--- a/fundamentals/fundamentals-bio/.jvm/src/main/scala/izumi/functional/bio/BIORunner.scala
+++ b/fundamentals/fundamentals-bio/.jvm/src/main/scala/izumi/functional/bio/BIORunner.scala
@@ -6,7 +6,7 @@ import java.util.concurrent.atomic.AtomicInteger
 import izumi.functional.bio.BIOExit.ZIOExit
 import zio.internal.tracing.TracingConfig
 import zio.internal.{Executor, Platform, Tracing}
-import zio.{Cause, IO, Runtime}
+import zio.{Cause, IO, Runtime, Supervisor}
 
 trait BIORunner[F[_, _]] {
   def unsafeRun[E, A](io: => F[E, A]): A
@@ -21,11 +21,11 @@ object BIORunner {
   def createZIO(platform: Platform): ZIORunner = new ZIORunner(platform)
 
   def createZIO(
-                 cpuPool: ThreadPoolExecutor
-               , handler: FailureHandler = FailureHandler.Default
-               , yieldEveryNFlatMaps: Int = 1024
-               , tracingConfig: TracingConfig = TracingConfig.enabled
-               ): ZIORunner = {
+    cpuPool: ThreadPoolExecutor,
+    handler: FailureHandler = FailureHandler.Default,
+    yieldEveryNFlatMaps: Int = 1024,
+    tracingConfig: TracingConfig = TracingConfig.enabled,
+  ): ZIORunner = {
     new ZIORunner(new ZIOPlatform(cpuPool, handler, yieldEveryNFlatMaps, tracingConfig))
   }
 
@@ -39,8 +39,7 @@ object BIORunner {
     final case class Custom(handler: BIOExit.Failure[Any] => Unit) extends FailureHandler
   }
 
-  class ZIORunner
-  (
+  class ZIORunner(
     val platform: Platform
   ) extends BIORunner[IO] {
 
@@ -66,17 +65,16 @@ object BIORunner {
     }
   }
 
-  class ZIOPlatform
-  (
-    cpuPool: ThreadPoolExecutor
-  , handler: FailureHandler
-  , yieldEveryNFlatMaps: Int
-  , tracingConfig: TracingConfig
+  class ZIOPlatform(
+    cpuPool: ThreadPoolExecutor,
+    handler: FailureHandler,
+    yieldEveryNFlatMaps: Int,
+    tracingConfig: TracingConfig,
   ) extends Platform {
 
     override val executor: Executor = Executor.fromThreadPoolExecutor(_ => yieldEveryNFlatMaps)(cpuPool)
-
     override val tracing: Tracing = Tracing.enabledWith(tracingConfig)
+    override val supervisor: Supervisor[Any] = Supervisor.none
 
     override def reportFailure(cause: Cause[Any]): Unit = {
       handler match {
@@ -106,7 +104,7 @@ object BIORunner {
 
     private val threadGroup = new ThreadGroup(parentGroup, name)
     private val threadCount = new AtomicInteger(1)
-    private val threadHash  = Integer.toUnsignedString(this.hashCode())
+    private val threadHash = Integer.toUnsignedString(this.hashCode())
 
     override def newThread(r: Runnable): Thread = {
       val newThreadNumber = threadCount.getAndIncrement()
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
index 19a2344f2..46b4371f5 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
@@ -4,7 +4,7 @@ import java.util.concurrent.CompletionStage
 
 import izumi.functional.bio.BIOExit.ZIOExit
 import izumi.functional.bio.{BIOAsync3, BIOExit, BIOFiber, BIOFiber3, BIOLocal, BIOMonad3, __PlatformSpecific}
-import zio.ZIO.ZIOWithFilterOps
+import zio.ZIO.{CanFilter, ZIOWithFilterOps}
 import zio.internal.ZIOSucceedNow
 import zio.{NeedsEnv, ZIO}
 
@@ -47,8 +47,9 @@ class BIOAsyncZio extends BIOAsync3[ZIO] with BIOLocal[ZIO] {
   @inline override final def redeem[R, E, A, E2, B](r: ZIO[R, E, A])(err: E => ZIO[R, E2, B], succ: A => ZIO[R, E2, B]): ZIO[R, E2, B] = r.foldM(err, succ)
   @inline override final def catchAll[R, E, A, E2](r: ZIO[R, E, A])(f: E => ZIO[R, E2, A]): ZIO[R, E2, A] = r.catchAll(f)
   @inline override final def catchSome[R, E, A, E1 >: E](r: ZIO[R, E, A])(f: PartialFunction[E, ZIO[R, E1, A]]): ZIO[R, E1, A] = r.catchSome(f)
-  @inline override final def withFilter[R, E, A](r: ZIO[R, E, A])(predicate: A => Boolean)(implicit ev: NoSuchElementException <:< E): ZIO[R, E, A] =
-    new ZIOWithFilterOps(r).withFilter(predicate)(ev)
+  @inline override final def withFilter[R, E, A](r: ZIO[R, E, A])(predicate: A => Boolean)(implicit ev: NoSuchElementException <:< E): ZIO[R, E, A] = {
+    new ZIOWithFilterOps(r).withFilter(predicate)(ZIO.CanFilter.canFilter[Any].asInstanceOf[CanFilter[E]])
+  }
 
   @inline override final def guarantee[R, E, A](f: ZIO[R, E, A], cleanup: ZIO[R, Nothing, Unit]): ZIO[R, E, A] = f.ensuring(cleanup)
   @inline override final def attempt[R, E, A](r: ZIO[R, E, A]): ZIO[R, Nothing, Either[E, A]] = r.either
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/mono/Entropy.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/mono/Entropy.scala
index bfba699e1..ea76aba32 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/mono/Entropy.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/mono/Entropy.scala
@@ -2,7 +2,7 @@ package izumi.functional.mono
 
 import java.util.UUID
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.fundamentals.platform.functional.Identity
 import izumi.fundamentals.platform.uuid.UUIDGen
 
@@ -22,7 +22,7 @@ trait Entropy[+F[_]] {
   def nextTimeUUID(): F[UUID]
   def nextUUID(): F[UUID]
 
-  @silent("CanBuildFrom")
+  @nowarn("msg=CanBuildFrom")
   def shuffle[T, CC[X] <: IterableOnce[X]](xs: CC[T])(implicit bf: CanBuildFrom[CC[T], T, CC[T]]): F[CC[T]]
 }
 
@@ -56,7 +56,7 @@ object Entropy {
       override def nextTimeUUID(): F[UUID] = F.syncSafe(impureEntropy.nextTimeUUID())
       override def nextUUID(): F[UUID] = F.syncSafe(impureEntropy.nextUUID())
 
-      @silent("CanBuildFrom")
+      @nowarn("msg=CanBuildFrom")
       override def shuffle[T, CC[X] <: IterableOnce[X]](xs: CC[T])(implicit bf: CanBuildFrom[CC[T], T, CC[T]]): F[CC[T]] =
         F.syncSafe(impureEntropy.shuffle[T, CC](xs))
     }
@@ -65,7 +65,7 @@ object Entropy {
   trait ScalaEntropy extends Entropy[Identity] {
     protected def random: scala.util.Random
 
-    @silent("CanBuildFrom")
+    @nowarn("msg=CanBuildFrom")
     def shuffle[T, CC[X] <: IterableOnce[X]](xs: CC[T])(implicit bf: CanBuildFrom[CC[T], T, CC[T]]): CC[T] = {
       random.shuffle(xs)
     }
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/fundamentals/platform/uuid/UUIDGen.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/fundamentals/platform/uuid/UUIDGen.scala
index ec58e758d..38b52d364 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/fundamentals/platform/uuid/UUIDGen.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/fundamentals/platform/uuid/UUIDGen.scala
@@ -46,7 +46,7 @@ object UUIDGen {
 
   private val MIN_CLOCK_SEQ_AND_NODE: Long = 0x8080808080808080L
 
-  private val MAX_CLOCK_SEQ_AND_NODE: Long = 0x7f7f7f7f7f7f7f7fL
+  private val MAX_CLOCK_SEQ_AND_NODE: Long = 0x7F7F7F7F7F7F7F7FL
 
   private val secureRandom: SecureRandom = new SecureRandom()
 
@@ -101,8 +101,7 @@ object UUIDGen {
   def getRandomTimeUUIDFromMicros(whenInMicros: Long): UUID = {
     val whenInMillis: Long = whenInMicros / 1000
     val nanos: Long = (whenInMicros - (whenInMillis * 1000)) * 10
-    new UUID(createTime(fromUnixTimestamp(whenInMillis, nanos)),
-      secureRandom.nextLong())
+    new UUID(createTime(fromUnixTimestamp(whenInMillis, nanos)), secureRandom.nextLong())
   }
 
   def getTimeUUID(when: Long, nanos: Long): UUID =
@@ -245,8 +244,7 @@ object UUIDGen {
     */
   def getAdjustedTimestamp(uuid: UUID): Long = {
     if (uuid.version() != 1)
-      throw new IllegalArgumentException(
-        "incompatible with uuid version: " + uuid.version())
+      throw new IllegalArgumentException("incompatible with uuid version: " + uuid.version())
     (uuid.timestamp() / 10000) + START_EPOCH
   }
 
@@ -264,9 +262,9 @@ object UUIDGen {
 
   private def createTime(nanosSince: Long): Long = {
     var msb: Long = 0L
-    msb |= (0x00000000ffffffffL & nanosSince) << 32
-    msb |= (0x0000ffff00000000L & nanosSince) >>> 16
-    msb |= (0xffff000000000000L & nanosSince) >>> 48
+    msb |= (0x00000000FFFFFFFFL & nanosSince) << 32
+    msb |= (0x0000FFFF00000000L & nanosSince) >>> 16
+    msb |= (0xFFFF000000000000L & nanosSince) >>> 48
     // sets the version to 1.
     msb |= 0x0000000000001000L
     msb
@@ -277,8 +275,7 @@ object UUIDGen {
     val nets: Enumeration[NetworkInterface] =
       NetworkInterface.getNetworkInterfaces
     if (nets != null) {
-      while (nets.hasMoreElements()) localAddresses.addAll(
-        Collections.list(nets.nextElement().getInetAddresses))
+      while (nets.hasMoreElements()) localAddresses.addAll(Collections.list(nets.nextElement().getInetAddresses))
     }
     localAddresses
   }
@@ -296,16 +293,15 @@ object UUIDGen {
      * where we don't want to require the yaml.
      */
 
-    val localAddresses: Collection[InetAddress] = getAllLocalAddresses
+    val localAddresses: Collection[InetAddress] = getAllLocalAddresses()
     if (localAddresses.isEmpty)
-      throw new RuntimeException(
-        "Cannot generate the node component of the UUID because cannot retrieve any IP addresses.")
+      throw new RuntimeException("Cannot generate the node component of the UUID because cannot retrieve any IP addresses.")
     // ideally, we'd use the MAC address, but java doesn't expose that.
     val hash: Array[Byte] = doHash(localAddresses)
     var node: Long = 0
     for (i <- 0 until Math.min(6, hash.length))
-      node |= (0x00000000000000ff & hash(i).toLong) << (5 - i) * 8
-    assert((0xff00000000000000L & node) == 0)
+      node |= (0x00000000000000FF & hash(i).toLong) << (5 - i) * 8
+    assert((0xFF00000000000000L & node) == 0)
     // bit (least significant bit of the first octet of the node ID) must be 1.
     node | 0x0000010000000000L
   }
@@ -325,7 +321,7 @@ object UUIDGen {
 /**
   * The goods are here: www.ietf.org/rfc/rfc4122.txt.
   */
-class UUIDGen protected() {
+class UUIDGen protected () {
 
   private var lastNanos: Long = _
 
diff --git a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/IzMappings.scala b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/IzMappings.scala
index 48b8b903f..87ef0ece2 100644
--- a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/IzMappings.scala
+++ b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/IzMappings.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.collections
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.collection.{Iterable, mutable}
 
-@silent("deprecated")
+@nowarn("msg=deprecated")
 final class IzMappings[A, B](private val list: Iterable[(A, B)]) extends AnyVal {
   def toMutableMultimap: MutableMultiMap[A, B] = {
     list.foldLeft(new mutable.HashMap[A, mutable.Set[B]] with mutable.MultiMap[A, B]) {
diff --git a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/nonempty/NonEmptySet.scala b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/nonempty/NonEmptySet.scala
index 364a3da25..009dfad26 100644
--- a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/nonempty/NonEmptySet.scala
+++ b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/nonempty/NonEmptySet.scala
@@ -97,7 +97,6 @@ import scala.reflect.ClassTag
   * NonEmptySet(1, 2, 3).filter(_ &gt; 10) // Result: Set()
   * </pre>
   *
-  *
   * <p>
   * You can use <code>NonEmptySet</code>s in <code>for</code> expressions. The result will be an <code>NonEmptySet</code> unless
   * you use a filter (an <code>if</code> clause). Because filters are desugared to invocations of <code>filter</code>, the
@@ -169,22 +168,11 @@ final class NonEmptySet[T] private (val toSet: Set[T]) extends AnyVal {
   /**
     * Returns a new <code>NonEmptySet</code> with the given element added.
     *
-    *
     * @param element the element to add to this <code>NonEmptySet</code>
     * @return a new <code>NonEmptySet</code> consisting of <code>element</code> and all elements of this <code>NonEmptySet</code>.
     */
   def +(element: T): NonEmptySet[T] = new NonEmptySet(toSet ++ Set(element))
 
-  /**
-    * Returns a new <code>NonEmptySet</code> with the given element added.
-    *
-    * @param elem1 the first element to add.
-    * @param elem2 the second element to add.
-    * @param elems the remaining elements to add.
-    * @return   a new <code>NonEmptySet</code> with the given elements added, omitting duplicates.
-    */
-  def +(elem1: T, elem2: T, elems: T*): NonEmptySet[T] = new NonEmptySet(toSet ++ Set(elem1, elem2) ++ elems)
-
   /**
     * Appends all elements of this <code>NonEmptySet</code> to a string builder. The written text will consist of a concatenation of the result of invoking <code>toString</code>
     * on of every element of this <code>NonEmptySet</code>, without any separator string.
@@ -428,7 +416,10 @@ final class NonEmptySet[T] private (val toSet: Set[T]) extends AnyVal {
     */
   def groupBy[K](f: T => K): Map[K, NonEmptySet[T]] = {
     val mapKToSet = toSet.groupBy(f)
-    mapKToSet.view.mapValues { Set => new NonEmptySet(Set) }.toMap
+    mapKToSet
+      .view.mapValues {
+        Set => new NonEmptySet(Set)
+      }.toMap
   }
 
   /**
@@ -439,7 +430,9 @@ final class NonEmptySet[T] private (val toSet: Set[T]) extends AnyVal {
     */
   def grouped(size: Int): Iterator[NonEmptySet[T]] = {
     val itOfSet = toSet.grouped(size)
-    itOfSet.map { Set => new NonEmptySet(Set) }
+    itOfSet.map {
+      Set => new NonEmptySet(Set)
+    }
   }
 
   /**
@@ -484,7 +477,6 @@ final class NonEmptySet[T] private (val toSet: Set[T]) extends AnyVal {
     */
   def last: T = toSet.last
 
-
   /**
     * Builds a new <code>NonEmptySet</code> by applying a function to all elements of this <code>NonEmptySet</code>.
     *
@@ -1008,7 +1000,7 @@ object NonEmptySet {
   /*
     // TODO: Figure out how to get case NonEmptySet() to not compile
     def unapplySeq[T](NonEmptySet: NonEmptySet[T]): Option[(T, Seq[T])] = Some(NonEmptySet.head, NonEmptySet.tail)
-  */
+   */
 
   /**
     * Optionally construct a <code>NonEmptySet</code> containing the elements, if any, of a given <code>Set</code>.
@@ -1024,4 +1016,3 @@ object NonEmptySet {
     }
 
 }
-
diff --git a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/package.scala b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/package.scala
index 233718e7c..c1e28a573 100644
--- a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/package.scala
+++ b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/collections/package.scala
@@ -1,10 +1,10 @@
 package izumi.fundamentals
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.collection.mutable
 
 package object collections {
-  @silent("deprecated")
+  @nowarn("msg=deprecated")
   type MutableMultiMap[A, B] = mutable.HashMap[A, mutable.Set[B]] with mutable.MultiMap[A, B]
   type ImmutableMultiMap[A, B] = Map[A, Set[B]]
 }
diff --git a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/graphs/Toposort.scala b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/graphs/Toposort.scala
index 1b4a6c4e8..d1ffd2ee1 100644
--- a/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/graphs/Toposort.scala
+++ b/fundamentals/fundamentals-collections/src/main/scala/izumi/fundamentals/graphs/Toposort.scala
@@ -1,10 +1,10 @@
 package izumi.fundamentals.graphs
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 
 import scala.annotation.tailrec
 
-@silent("Unused import")
+@nowarn("msg=Unused import")
 class Toposort {
 
   import Toposort._
@@ -66,6 +66,3 @@ object Toposort {
   final case class InconsistentInput[T](issues: Map[T, Set[T]])
 
 }
-
-
-
diff --git a/fundamentals/fundamentals-json-circe/src/main/scala/izumi/fundamentals/json/flat/JsonFlattener.scala b/fundamentals/fundamentals-json-circe/src/main/scala/izumi/fundamentals/json/flat/JsonFlattener.scala
index 5a51a9279..74c4e346e 100644
--- a/fundamentals/fundamentals-json-circe/src/main/scala/izumi/fundamentals/json/flat/JsonFlattener.scala
+++ b/fundamentals/fundamentals-json-circe/src/main/scala/izumi/fundamentals/json/flat/JsonFlattener.scala
@@ -1,15 +1,15 @@
 package izumi.fundamentals.json.flat
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import io.circe.Json
 import izumi.functional.IzEither.EitherBiAggregate
 
 import scala.annotation.switch
 import scala.collection.mutable.ArrayBuffer
 import scala.util.control.NonFatal
-  import JsonFlattener._
-  import PathElement._
-  import izumi.fundamentals.platform.strings.IzEscape
+import JsonFlattener._
+import PathElement._
+import izumi.fundamentals.platform.strings.IzEscape
 
 class JsonFlattener {
 
@@ -26,7 +26,6 @@ class JsonFlattener {
   private final val escapeChar = '\\'
   private final val escape = new IzEscape(controlChars, escapeChar)
 
-
   def flatten(node: Json): Seq[(String, String)] = {
     flatten(node, Seq.empty)
   }
@@ -59,10 +58,11 @@ class JsonFlattener {
         }
       },
       o => {
-        val out = o.toIterable.flatMap {
-          case (name, value) =>
-            flatten(value, prefix :+ PathElement.ObjectName(name))
-        }.toSeq
+        val out = o
+          .toIterable.flatMap {
+            case (name, value) =>
+              flatten(value, prefix :+ PathElement.ObjectName(name))
+          }.toSeq
         if (out.nonEmpty) {
           out
         } else {
@@ -82,7 +82,6 @@ class JsonFlattener {
     s"${prefix.mkString(".")}:$tpe"
   }
 
-
   def inflate(pairs: Seq[(String, String)]): Either[List[UnpackFailure], Json] = {
     val maybePaths = pairs.map {
       case (k, v) =>
@@ -98,7 +97,7 @@ class JsonFlattener {
     } yield out
   }
 
-  @silent("return statement uses an exception")
+  @nowarn("msg=return statement uses an exception")
   private def parsePath(path: String): Either[List[UnpackFailure], (Seq[PathElement], Char)] = {
     val idx = path.lastIndexOf(':')
     if (idx < 0) {
@@ -166,7 +165,6 @@ class JsonFlattener {
     }
   }
 
-
   private def inflateParsed(pairs: Seq[(Seq[PathElement], Char, String)]): Either[List[UnpackFailure], Json] = {
     val grouped = pairs.groupBy(_._1.headOption)
 
@@ -191,14 +189,16 @@ class JsonFlattener {
           }
         } else if (grouped2.keys.forall(_.isInstanceOf[ObjectName])) {
           for {
-            elements <- grouped2.map {
-              case (k, v) =>
-                for {
-                  field <- inflateParsedNext(v)
-                } yield {
-                  escape.unescape(k.asInstanceOf[ObjectName].name) -> field
-                }
-            }.toSeq.biAggregate
+            elements <-
+              grouped2
+                .map {
+                  case (k, v) =>
+                    for {
+                      field <- inflateParsedNext(v)
+                    } yield {
+                      escape.unescape(k.asInstanceOf[ObjectName].name) -> field
+                    }
+                }.toSeq.biAggregate
           } yield {
             Json.fromFields(elements)
           }
@@ -228,12 +228,13 @@ class JsonFlattener {
           case LongT => Json.fromLong(value.toLong)
           case FloatT => Json.fromBigDecimal(BigDecimal.apply(value))
           case StringT => Json.fromString(value)
-          case AggT => value match {
-            case "obj" =>
-              Json.obj()
-            case "arr" =>
-              Json.arr()
-          }
+          case AggT =>
+            value match {
+              case "obj" =>
+                Json.obj()
+              case "arr" =>
+                Json.arr()
+            }
         }
       }
     } catch {
diff --git a/fundamentals/fundamentals-platform/src/main/scala/izumi/fundamentals/platform/console/TrivialLogger.scala b/fundamentals/fundamentals-platform/src/main/scala/izumi/fundamentals/platform/console/TrivialLogger.scala
index e400818bc..249ea246c 100644
--- a/fundamentals/fundamentals-platform/src/main/scala/izumi/fundamentals/platform/console/TrivialLogger.scala
+++ b/fundamentals/fundamentals-platform/src/main/scala/izumi/fundamentals/platform/console/TrivialLogger.scala
@@ -4,7 +4,7 @@ import izumi.fundamentals.platform.console.TrivialLogger.{Config, Level}
 import izumi.fundamentals.platform.exceptions.IzThrowable._
 import izumi.fundamentals.platform.strings.IzString._
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.collection.mutable
 import scala.reflect.{ClassTag, classTag}
 
@@ -82,9 +82,9 @@ object TrivialLogger {
   }
 
   final case class Config(
-                           sink: AbstractStringTrivialSink = AbstractStringTrivialSink.Console,
-                           forceLog: Boolean = false
-                         )
+    sink: AbstractStringTrivialSink = AbstractStringTrivialSink.Console,
+    forceLog: Boolean = false,
+  )
 
   def make[T: ClassTag](sysProperty: String, config: Config = Config()): TrivialLogger = {
     val logMessages: Boolean = checkLog(sysProperty, config, default = false)
@@ -94,24 +94,25 @@ object TrivialLogger {
 
   private[this] val enabled = new mutable.HashMap[String, Boolean]()
 
-  @silent("return statement uses an exception")
+  @nowarn("msg=return statement uses an exception")
   private[this] def checkLog(sysProperty: String, config: Config, default: Boolean): Boolean = enabled.synchronized {
-    config.forceLog || enabled.getOrElseUpdate(sysProperty, {
-      val parts = sysProperty.split('.')
-      var current = parts.head
-      def cond: Boolean = {
-        System.getProperty(current).asBoolean().getOrElse(default)
-      }
-      parts.tail.foreach {
-        p =>
-          if (cond) {
-            return true
-          } else {
-            current = s"$current.$p"
-          }
-      }
-      return cond
-    })
+    config.forceLog || enabled.getOrElseUpdate(
+      sysProperty, {
+        val parts = sysProperty.split('.')
+        var current = parts.head
+        def cond: Boolean = {
+          System.getProperty(current).asBoolean().getOrElse(default)
+        }
+        parts.tail.foreach {
+          p =>
+            if (cond) {
+              return true
+            } else {
+              current = s"$current.$p"
+            }
+        }
+        return cond
+      },
+    )
   }
 }
-
diff --git a/logstage/logstage-core/.jvm/src/main/scala/izumi/logstage/api/routing/LogConfigServiceImpl.scala b/logstage/logstage-core/.jvm/src/main/scala/izumi/logstage/api/routing/LogConfigServiceImpl.scala
index 518cab488..8d118da03 100644
--- a/logstage/logstage-core/.jvm/src/main/scala/izumi/logstage/api/routing/LogConfigServiceImpl.scala
+++ b/logstage/logstage-core/.jvm/src/main/scala/izumi/logstage/api/routing/LogConfigServiceImpl.scala
@@ -2,7 +2,7 @@ package izumi.logstage.api.routing
 
 import java.util.concurrent.ConcurrentHashMap
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.logstage.api.Log
 import izumi.logstage.api.config.{LogConfigService, LogEntryConfig, LoggerConfig, LoggerPathConfig}
 
@@ -22,7 +22,6 @@ class LogConfigServiceImpl(loggerConfig: LoggerConfig) extends LogConfigService
   // this should be efficient but may take some memory. Most likely we should use prefix tree here
   private[this] val configCache = new ConcurrentHashMap[String, LoggerPathConfig](1024)
 
-  @silent("Unused import")
   private[this] val findConfig: java.util.function.Function[String, LoggerPathConfig] = {
     id: String =>
       val parts = id.split('.')
diff --git a/logstage/logstage-core/src/main/scala/izumi/logstage/api/routing/ConfigurableLogRouter.scala b/logstage/logstage-core/src/main/scala/izumi/logstage/api/routing/ConfigurableLogRouter.scala
index b6fb946e8..28888bddb 100644
--- a/logstage/logstage-core/src/main/scala/izumi/logstage/api/routing/ConfigurableLogRouter.scala
+++ b/logstage/logstage-core/src/main/scala/izumi/logstage/api/routing/ConfigurableLogRouter.scala
@@ -7,7 +7,7 @@ import izumi.logstage.api.config.{LogConfigService, LoggerConfig, LoggerPathConf
 import izumi.logstage.api.logger.{LogRouter, LogSink}
 import izumi.logstage.sink.{ConsoleSink, FallbackConsoleSink}
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import scala.util.control.NonFatal
 
 class ConfigurableLogRouter(
@@ -31,7 +31,6 @@ class ConfigurableLogRouter(
     }
   }
 
-
   override def close(): Unit = {
     logConfigService.close()
   }
@@ -51,7 +50,7 @@ object ConfigurableLogRouter {
     ConfigurableLogRouter(threshold, sinks, Map.empty[String, Log.Level])
   }
 
-  @silent("Unused import")
+  @nowarn("msg=Unused import")
   final def apply(threshold: Log.Level, sinks: Seq[LogSink], levels: Map[String, Log.Level]): ConfigurableLogRouter = {
     import scala.collection.compat._
     val levelConfigs = levels.view.mapValues(lvl => LoggerPathConfig(lvl, sinks)).toMap
diff --git a/project/Deps.sc b/project/Deps.sc
index f33c6895b..1e9f5d9f2 100644
--- a/project/Deps.sc
+++ b/project/Deps.sc
@@ -106,8 +106,6 @@ object Izumi {
       .more(LibSetting.Raw("cross CrossVersion.full"))
     final val silencer_plugin = Library("com.github.ghik", "silencer-plugin", V.silencer, LibraryType.Invariant)
       .more(LibSetting.Raw("cross CrossVersion.full"))
-    final val silencer_lib = Library("com.github.ghik", "silencer-lib", V.silencer, LibraryType.Invariant)
-      .more(LibSetting.Raw("cross CrossVersion.full"))
 
     final val fast_classpath_scanner = Library("io.github.classgraph", "classgraph", V.classgraph, LibraryType.Invariant) in Scope.Compile.jvm
     final val scala_java_time = Library("io.github.cquiroz", "scala-java-time", V.scala_java_time, LibraryType.Auto)
@@ -130,7 +128,7 @@ object Izumi {
 
     val doobie = Seq(
       Library("org.tpolecat", "doobie-core", V.doobie, LibraryType.Auto),
-      Library("org.tpolecat", "doobie-postgres", V.doobie, LibraryType.Auto)
+      Library("org.tpolecat", "doobie-postgres", V.doobie, LibraryType.Auto),
     )
 
     val docker_java = Library("com.github.docker-java", "docker-java", V.docker_java, LibraryType.Invariant)
@@ -140,8 +138,7 @@ object Izumi {
 
   // DON'T REMOVE, these variables are read from CI build (build.sh)
   final val scala212 = ScalaVersion("2.12.11")
-  final val scala213 = ScalaVersion("2.13.1")
-  // postpone updating to 2.13.2 due to bug https://github.com/scala/bug/issues/11968 that makes it impossible to compile the project on that version
+  final val scala213 = ScalaVersion("2.13.3")
 
   object Groups {
     final val fundamentals = Set(Group("fundamentals"))
@@ -232,7 +229,8 @@ object Izumi {
           "testOptions" in SettingScope.Test += """Tests.Argument("-oDF")""".raw,
           "scalacOptions" ++= Seq(
               SettingKey(Some(scala212), None) := Defaults.Scala212Options,
-              SettingKey(Some(scala213), None) := Defaults.Scala213Options,
+              SettingKey(Some(scala213), None) := Defaults.Scala213Options ++ Seq(
+                ),
               SettingKey.Default := Const.EmptySeq,
             ),
           "scalacOptions" ++= Seq(
@@ -661,7 +659,6 @@ object Izumi {
     globalLibs = Seq(
       ScopedLibrary(projector, FullDependencyScope(Scope.Compile, Platform.All), compilerPlugin = true),
       ScopedLibrary(silencer_plugin, FullDependencyScope(Scope.Compile, Platform.All), compilerPlugin = true),
-      silencer_lib in Scope.Provided.all,
       collection_compat in Scope.Compile.all,
       scalatest,
     ),
diff --git a/project/Versions.scala b/project/Versions.scala
index 74a7fe845..0ca91f729 100644
--- a/project/Versions.scala
+++ b/project/Versions.scala
@@ -6,14 +6,14 @@ object V {
   val collection_compat = "2.1.6"
 
   val kind_projector = "0.11.0"
-  val silencer = "1.6.0"
+  val silencer = "1.7.0"
 
   val scalatest = "3.1.2"
 
   val cats = "2.1.1"
   val cats_effect = "2.1.3"
   val zio = "1.0.0-RC21-2"
-  val zio_interop_cats = "2.0.0.0-RC14"
+  val zio_interop_cats = "v2.1.3.0-RC16"
 
   val circe = "0.13.0"
   val circe_generic_extras = "0.13.0"


Test patch:
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
index c1882f35f..7065c4728 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
@@ -9,17 +9,20 @@ class AnimalModel extends AnyWordSpec with MkInjector {
   "animal model" must {
     "produce valid plans" in {
       import AnimalModel._
-      val definition = PlannerInput(new ModuleDef {
-        make[Cluster]
-        make[UserRepo].from[UserRepoImpl]
-        make[AccountsRepo].from[AccountsRepoImpl]
-        make[UsersService].from[UserServiceImpl]
-        make[AccountingService].from[AccountingServiceImpl]
-        make[UsersApiImpl]
-        make[AccountsApiImpl]
-        make[UnrequiredDep]
-        make[App]
-      }, Roots(DIKey.get[App]))
+      val definition = PlannerInput(
+        new ModuleDef {
+          make[Cluster]
+          make[UserRepo].from[UserRepoImpl]
+          make[AccountsRepo].from[AccountsRepoImpl]
+          make[UsersService].from[UserServiceImpl]
+          make[AccountingService].from[AccountingServiceImpl]
+          make[UsersApiImpl]
+          make[AccountsApiImpl]
+          make[UnrequiredDep]
+          make[App]
+        },
+        Roots(DIKey.get[App]),
+      )
 
       val debug = false
 
@@ -33,7 +36,7 @@ class AnimalModel extends AnyWordSpec with MkInjector {
 
       if (debug) {
         println()
-        println(plan.render)
+        println(plan.render())
         println()
         println(plan.renderDeps(plan.topology.dependencies.tree(DIKey.get[AccountsApiImpl])))
         println(plan.renderAllDeps())
@@ -64,4 +67,3 @@ object AnimalModel {
   class AccountsApiImpl(val service: AccountingService, val usersApi: UsersApiImpl)
   class App(val uapi: UsersApiImpl, val aapi: AccountsApiImpl)
 }
-
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/ProvidersTestJVM.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/ProvidersTestJVM.scala
index 7543f2949..0e92b8c12 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/ProvidersTestJVM.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/ProvidersTestJVM.scala
@@ -2,7 +2,6 @@ package izumi.distage.injector
 
 import distage.ModuleDef
 import izumi.distage.fixtures.ProviderCases.ProviderCase3
-import izumi.distage.fixtures.ProviderCases.ProviderCase3.TestDependency
 import org.scalatest.wordspec.AnyWordSpec
 
 class ProvidersTestJVM extends AnyWordSpec with MkInjector {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
index 47d67cd5c..7bb543469 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
@@ -68,7 +68,7 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
     import TraitCase2._
 
     val definition = PlannerInput.noGc(new ModuleDef {
-      make[Dependency1@Id("special")]
+      make[Dependency1 @Id("special")]
       make[Trait1]
     })
 
@@ -77,7 +77,7 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
     val context = injector.produce(plan).unsafeGet()
 
     val instantiated = context.get[Dependency1]
-    val instantiated1 = context.get[Dependency1@Id("special")]
+    val instantiated1 = context.get[Dependency1 @Id("special")]
 
     assert(instantiated eq instantiated1)
   }
@@ -106,18 +106,18 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
     val definition = PlannerInput.noGc(new ModuleDef {
       make[Dep]
       make[Dep2]
-      make[Trait1 {def dep: Dep2}].from[Trait3[Dep2]]
-      make[Trait1 {def dep: Dep}].from[Trait3[Dep]]
-      make[ {def dep: Dep}].from[Trait6]
+      make[Trait1 { def dep: Dep2 }].from[Trait3[Dep2]]
+      make[Trait1 { def dep: Dep }].from[Trait3[Dep]]
+      make[{ def dep: Dep }].from[Trait6]
     })
 
     val injector = mkInjector()
     val plan = injector.plan(definition)
     val context = injector.produce(plan).unsafeGet()
 
-    val instantiated1 = context.get[Trait1 {def dep: Dep2}]
-    val instantiated2 = context.get[ {def dep: Dep}]
-    val instantiated3 = context.get[Trait1 {def dep: Dep}]
+    val instantiated1 = context.get[Trait1 { def dep: Dep2 }]
+    val instantiated2 = context.get[{ def dep: Dep }]
+    val instantiated3 = context.get[Trait1 { def dep: Dep }]
 
     assert(instantiated1.dep == context.get[Dep2])
     assert(instantiated2.dep == context.get[Dep])
@@ -130,7 +130,7 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
     class Definition[T: Tag] extends ModuleDef {
       make[Dep]
       make[Dep2]
-      val _ = {
+      locally {
         type X[A] = Trait1[Dep, A]
         make[X[T]]
       }
@@ -149,10 +149,10 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
   "light type tags can handle abstract structural refinement types" in {
     import TypesCase3._
 
-    class Definition[T >: Null: Tag, G <: T {def dep: Dep}: Tag: AnyConstructor] extends ModuleDef {
+    class Definition[T >: Null: Tag, G <: T { def dep: Dep }: Tag: AnyConstructor] extends ModuleDef {
       make[Dep]
-      make[T {def dep2: Dep}].from(() => null: T {def dep2: Dep})
-      make[T {def dep: Dep}].from[G]
+      make[T { def dep2: Dep }].from(() => null: T { def dep2: Dep })
+      make[T { def dep: Dep }].from[G]
     }
 
     val definition = PlannerInput.noGc(new Definition[Trait1, Trait1])
@@ -161,7 +161,7 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
     val plan = injector.plan(definition)
     val context = injector.produce(plan).unsafeGet()
 
-    val instantiated = context.get[Trait1 {def dep: Dep}]
+    val instantiated = context.get[Trait1 { def dep: Dep }]
 
     assert(instantiated.dep == context.get[Dep])
 
@@ -202,7 +202,6 @@ class AdvancedTypesTest extends AnyWordSpec with MkInjector {
       make[Trait3[T] with K].from[Trait5[T]]
     }
 
-
     val definition = PlannerInput.noGc(new Definition[Dep, Trait4])
 
     val injector = mkInjector()
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
index 02f07202d..c18e77e43 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
@@ -1,7 +1,6 @@
 package izumi.distage.injector
 
 import distage._
-import izumi.distage.fixtures.BasicCases.BasicCase7.ServerConfig
 import izumi.distage.fixtures.BasicCases._
 import izumi.distage.fixtures.SetCases._
 import izumi.distage.model.PlannerInput
@@ -68,9 +67,9 @@ class BasicTest extends AnyWordSpec with MkInjector {
       make[TestClass0]
       make[TestClass2].from {
         (ref: LocatorRef, test: TestClass0) =>
-          assert(ref.unsafeUnstableMutableLocator.instances.nonEmpty)
+          assert(ref.unsafeUnstableMutableLocator().instances.nonEmpty)
           assert(test != null)
-          assert(ref.unsafeUnstableMutableLocator.get[TestClass0] eq test)
+          assert(ref.unsafeUnstableMutableLocator().get[TestClass0] eq test)
           TestClass2(test)
       }
     })
@@ -124,10 +123,12 @@ class BasicTest extends AnyWordSpec with MkInjector {
         .add[JustTrait]
         .add(new Impl1)
 
-      many[JustTrait].named("named.set")
+      many[JustTrait]
+        .named("named.set")
         .add(new Impl2())
 
-      many[JustTrait].named("named.set")
+      many[JustTrait]
+        .named("named.set")
         .add[Impl3]
     })
 
@@ -140,7 +141,6 @@ class BasicTest extends AnyWordSpec with MkInjector {
     assert(context.get[Set[JustTrait]]("named.set").size == 2)
   }
 
-
   "support nested multiple bindings" in {
     // https://github.com/7mind/izumi/issues/261
     import BasicCase1._
@@ -167,12 +167,13 @@ class BasicTest extends AnyWordSpec with MkInjector {
       make[TestClass]
         .named("named.test.class")
       make[TestDependency0].from[TestImpl0Bad]
-      make[TestDependency0].named("named.test.dependency.0")
+      make[TestDependency0]
+        .named("named.test.dependency.0")
         .from[TestImpl0Good]
-      make[TestInstanceBinding].named("named.test")
+      make[TestInstanceBinding]
+        .named("named.test")
         .from(TestInstanceBinding())
-      make[TestDependency0]
-        .namedByImpl // tests SetIdFromImplName
+      make[TestDependency0].namedByImpl // tests SetIdFromImplName
         .from[TestImpl0Good]
     })
 
@@ -228,17 +229,20 @@ class BasicTest extends AnyWordSpec with MkInjector {
         .add[SetImpl2]
         .add[SetImpl3]
 
-      many[SetTrait].named("n1")
+      many[SetTrait]
+        .named("n1")
         .add[SetImpl1]
         .add[SetImpl2]
         .add[SetImpl3]
 
-      many[SetTrait].named("n2")
+      many[SetTrait]
+        .named("n2")
         .add[SetImpl1]
         .add[SetImpl2]
         .add[SetImpl3]
 
-      many[SetTrait].named("n3")
+      many[SetTrait]
+        .named("n3")
         .add[SetImpl1]
         .add[SetImpl2]
         .add[SetImpl3]
@@ -266,7 +270,7 @@ class BasicTest extends AnyWordSpec with MkInjector {
 
     val plan1 = injector.plan(definition)
     val plan2 = injector.finish(plan1.toSemi.providerImport {
-      verse: String@Id("verse") =>
+      verse: String @Id("verse") =>
         TestInstanceBinding(verse)
     })
     val plan3 = plan2.resolveImport[String](id = "verse") {
@@ -322,7 +326,9 @@ class BasicTest extends AnyWordSpec with MkInjector {
       many[Int].addSet(Set(1, 2, 3))
       many[Int].add(5)
 
-      many[Int].add { i: Int => i - 1 } // 6
+      many[Int].add {
+        i: Int => i - 1
+      } // 6
       many[Int].addSet { // 7, 8, 9
         i: Int =>
           Set(i, i + 1, i + 2)
@@ -348,15 +354,19 @@ class BasicTest extends AnyWordSpec with MkInjector {
   "preserve tags in multi set bindings" in {
     import izumi.distage.dsl.TestTagOps._
     val definition = PlannerInput.noGc(new ModuleDef {
-      many[Int].named("zzz")
+      many[Int]
+        .named("zzz")
         .add(5).tagged("t3")
         .addSet(Set(1, 2, 3)).tagged("t1", "t2")
         .addSet(Set(1, 2, 3)).tagged("t3", "t4")
     })
 
-    assert(definition.bindings.bindings.collectFirst {
-      case SetElementBinding(_, _, s, _) if Set.apply[BindingTag]("t1", "t2").diff(s).isEmpty => true
-    }.nonEmpty)
+    assert(
+      definition
+        .bindings.bindings.collectFirst {
+          case SetElementBinding(_, _, s, _) if Set.apply[BindingTag]("t1", "t2").diff(s).isEmpty => true
+        }.nonEmpty
+    )
   }
 
   "Can abstract over Id annotations with type aliases" in {
diff --git a/distage/distage-testkit-scalatest/src/main/scala/izumi/distage/testkit/services/scalatest/dstest/DistageTestsRegistrySingleton.scala b/distage/distage-testkit-scalatest/src/main/scala/izumi/distage/testkit/services/scalatest/dstest/DistageTestsRegistrySingleton.scala
index 41bfa9ff8..be3a76141 100644
--- a/distage/distage-testkit-scalatest/src/main/scala/izumi/distage/testkit/services/scalatest/dstest/DistageTestsRegistrySingleton.scala
+++ b/distage/distage-testkit-scalatest/src/main/scala/izumi/distage/testkit/services/scalatest/dstest/DistageTestsRegistrySingleton.scala
@@ -70,7 +70,7 @@ object DistageTestsRegistrySingleton {
     statuses.get(SafeType.getK[F]).flatten.foreach {
       _.valuesIterator.foreach {
         status =>
-          if (!status.isCompleted) {
+          if (!status.isCompleted()) {
             status.setCompleted()
           }
       }
diff --git a/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/distage/DistageScalatestTestSuiteRunner.scala b/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/distage/DistageScalatestTestSuiteRunner.scala
index 128b47a14..0e874063a 100644
--- a/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/distage/DistageScalatestTestSuiteRunner.scala
+++ b/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/distage/DistageScalatestTestSuiteRunner.scala
@@ -74,9 +74,10 @@ abstract class DistageScalatestTestSuiteRunner[F[_]](implicit override val tagMo
   /** Modify test discovery options for SBT test runner only.
     * Overriding this with [[withWhitelistJarsOnly]] will slightly boost test start-up speed,
     * but will disable the ability to discover tests that inherit [[izumi.distage.testkit.services.scalatest.dstest.DistageAbstractScalatestSpec]]
-    * indirectly through a different library JAR. (this does not affect local sbt modules) */
+    * indirectly through a different library JAR. (this does not affect local sbt modules)
+    */
   protected def modifyClasspathScan: ClassGraph => ClassGraph = identity
-  protected final def withWhitelistJarsOnly: ClassGraph => ClassGraph = _.whitelistJars("distage-testkit-scalatest*")
+  protected final def withWhitelistJarsOnly: ClassGraph => ClassGraph = _.acceptJars("distage-testkit-scalatest*")
 
   // initialize status early, so that runner can set it to `true` even before this test is discovered
   // by scalatest, if it was already executed by that time
@@ -106,14 +107,14 @@ abstract class DistageScalatestTestSuiteRunner[F[_]](implicit override val tagMo
       DistageTestsRegistrySingleton.proceedWithTests[F]() match {
         case Some(value) =>
           doRun(value, testName, args)
-          if (!status.isCompleted) {
+          if (!status.isCompleted()) {
             status.setCompleted()
           }
         case None =>
       }
     } catch {
       case t: Throwable =>
-        if (!status.isCompleted) {
+        if (!status.isCompleted()) {
           status.setFailedWith(t)
           status.setCompleted()
         }
diff --git a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/ScalaMockCompatTest.scala b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/ScalaMockCompatTest.scala
index 2440dd471..147a60efe 100644
--- a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/ScalaMockCompatTest.scala
+++ b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/ScalaMockCompatTest.scala
@@ -12,16 +12,17 @@ final class ScalaMockCompatTest extends DistageSpecScalatest[Identity] with Mock
     def method: String
   }
 
-  override protected def config: TestConfig = super.config.copy(
-    moduleOverrides = new ModuleDef {
-      make[TestClass].from(mock[TestClass])
-    }
-  )
+  override protected def config: TestConfig = super
+    .config.copy(
+      moduleOverrides = new ModuleDef {
+        make[TestClass].from(mock[TestClass])
+      }
+    )
 
   "mockfactory" should {
     "be compatible" in {
       testMock: TestClass =>
-        (testMock.method _).expects().returning("hello")
+        (() => testMock.method).expects().returning("hello")
         assert(testMock.method == "hello")
     }
   }
diff --git a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/NonEmptyCollectionsTest.scala b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/NonEmptyCollectionsTest.scala
index 88deaa8b1..e76b89c16 100644
--- a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/NonEmptyCollectionsTest.scala
+++ b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/NonEmptyCollectionsTest.scala
@@ -3,9 +3,9 @@ package izumi.fundamentals.collections
 import izumi.fundamentals.collections.nonempty.{NonEmptyList, NonEmptyMap, NonEmptySet, NonEmptyString}
 import org.scalatest.wordspec.AnyWordSpec
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 
-@silent("Unused import")
+@nowarn("msg=Unused import")
 class NonEmptyCollectionsTest extends AnyWordSpec {
 
   import scala.collection.compat._
@@ -43,4 +43,3 @@ class NonEmptyCollectionsTest extends AnyWordSpec {
   }
 
 }
-
diff --git a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
index 948604cd2..eabf41c59 100644
--- a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
+++ b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
@@ -153,7 +153,6 @@ trait LoggingFileSinkTest[T <: LogFile] extends AnyWordSpec with GivenWhenThen {
       }
     }
 
-
     "perform continuing writing when rotation is enabled " in {
 
       val fileSize = 2
@@ -162,7 +161,9 @@ trait LoggingFileSinkTest[T <: LogFile] extends AnyWordSpec with GivenWhenThen {
       val svc = fileSvcUtils.provideSvc(dummyFolder)
 
       svc.withPreparedData {
-        (0 until filesLimit).map { i => (i, (1 to fileSize).map(idx => idx.toString).toList) }.toList
+        (0 until filesLimit).map {
+          i => (i, (1 to fileSize).map(idx => idx.toString).toList)
+        }.toList
       }
 
       withFileLogger(withRotation(policy, fileSize = fileSize, filesLimit = filesLimit, fileService = svc)) {
@@ -190,19 +191,16 @@ trait LoggingFileSinkTest[T <: LogFile] extends AnyWordSpec with GivenWhenThen {
     }
   }
 
-
 }
 
 class DummyFileSinkTest extends LoggingFileSinkTest[DummyFile] {
   override val fileSvcUtils: FileServiceUtils[DummyFile] = (path: String) => new DummyFileServiceImpl(path)
 }
 
-
 class RealFileSinkTest extends LoggingFileSinkTest[RealFile] {
   override val fileSvcUtils: FileServiceUtils[RealFile] = (path: String) => new FileServiceImpl(path)
 }
 
-
 object LoggingFileSinkTest {
 
   private val maxRandom = 100
@@ -214,13 +212,20 @@ object LoggingFileSinkTest {
       Random.nextInt(until)
     }
 
-  def dummySink[F <: LogFile](renderingPolicy: RenderingPolicy, r: FileRotation, fileSize: Int, fileService: FileService[F], broken: Boolean, softLimit : Boolean): FileSink[F] = {
+  def dummySink[F <: LogFile](
+    renderingPolicy: RenderingPolicy,
+    r: FileRotation,
+    fileSize: Int,
+    fileService: FileService[F],
+    broken: Boolean,
+    softLimit: Boolean,
+  ): FileSink[F] = {
 
     val cfg = (if (softLimit) {
-      FileSinkConfig.soft(_ : Int)
-    } else {
-      FileSinkConfig.inBytes(_ : Int)
-    })(fileSize)
+                 FileSinkConfig.soft(_: Int)
+               } else {
+                 FileSinkConfig.inBytes(_: Int)
+               })(fileSize)
 
     if (broken) {
       new FileSinkBrokenImpl(renderingPolicy, fileService, r, cfg)
@@ -230,23 +235,23 @@ object LoggingFileSinkTest {
   }
 
   def withoutRotation[F <: LogFile](
-                                     renderingPolicy: RenderingPolicy
-                                     , fileSize: Int
-                                     , fileService: FileService[F]
-                                     , broken: Boolean = false
-                                     , softLimit: Boolean = true
-                                   ): FileSink[F] = {
+    renderingPolicy: RenderingPolicy,
+    fileSize: Int,
+    fileService: FileService[F],
+    broken: Boolean = false,
+    softLimit: Boolean = true,
+  ): FileSink[F] = {
     dummySink(renderingPolicy, FileRotation.DisabledRotation, fileSize, fileService, broken, softLimit)
   }
 
   def withRotation[F <: LogFile](
-                                  renderingPolicy: RenderingPolicy
-                                  , fileSize: Int
-                                  , fileService: FileService[F]
-                                  , filesLimit: Int
-                                  , broken: Boolean = false
-                                  , softLimit: Boolean = true
-                                ): FileSink[F] = {
+    renderingPolicy: RenderingPolicy,
+    fileSize: Int,
+    fileService: FileService[F],
+    filesLimit: Int,
+    broken: Boolean = false,
+    softLimit: Boolean = true,
+  ): FileSink[F] = {
     dummySink(renderingPolicy, FileRotation.FileLimiterRotation(filesLimit), fileSize, fileService, broken, softLimit)
   }
 
@@ -261,18 +266,22 @@ object LoggingFileSinkTest {
     }
   }
 
-  class FileSinkTestImpl[F <: LogFile](override val renderingPolicy: RenderingPolicy
-                                       , override val fileService: FileService[F]
-                                       , override val rotation: FileRotation
-                                       , override val config: FileSinkConfig) extends FileSink[F](renderingPolicy, fileService, rotation, config) {
+  class FileSinkTestImpl[F <: LogFile](
+    override val renderingPolicy: RenderingPolicy,
+    override val fileService: FileService[F],
+    override val rotation: FileRotation,
+    override val config: FileSinkConfig,
+  ) extends FileSink[F](renderingPolicy, fileService, rotation, config) {
 
-    override def recoverOnFail(e: String): Unit = println
+    override def recoverOnFail(e: String): Unit = println()
   }
 
-  class FileSinkBrokenImpl[F <: LogFile](override val renderingPolicy: RenderingPolicy
-                                         , override val fileService: FileService[F]
-                                         , override val rotation: FileRotation
-                                         , override val config: FileSinkConfig) extends FileSink[F](renderingPolicy, fileService, rotation, config) {
+  class FileSinkBrokenImpl[F <: LogFile](
+    override val renderingPolicy: RenderingPolicy,
+    override val fileService: FileService[F],
+    override val rotation: FileRotation,
+    override val config: FileSinkConfig,
+  ) extends FileSink[F](renderingPolicy, fileService, rotation, config) {
 
     val recoveredMessages: ListBuffer[String] = ListBuffer.empty[String]
 
diff --git a/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala b/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
index 2f69fa9a6..b7529207e 100644
--- a/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
+++ b/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
@@ -1,6 +1,6 @@
 package izumi.logstage.api
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.fundamentals.platform.language.SourceFilePosition
 import izumi.logstage.api.Log._
 import izumi.logstage.api.rendering.{LogstageCodec, RenderingOptions, StringRenderingPolicy}
@@ -8,7 +8,7 @@ import org.scalatest.wordspec.AnyWordSpec
 
 import scala.util.Random
 
-@silent("[Ee]xpression.*logger")
+@nowarn("msg=[Ee]xpression.*logger")
 class BasicLoggingTest extends AnyWordSpec {
 
   "Argument extraction macro" should {
@@ -62,7 +62,8 @@ class BasicLoggingTest extends AnyWordSpec {
   "String rendering policy" should {
     "not fail on unbalanced messages" in {
       val p = new StringRenderingPolicy(RenderingOptions.default.copy(colored = false))
-      val rendered = render(p, Message(StringContext("begin ", " end"), Seq(LogArg(Seq("[a1]"), 1, hiddenName = false, None), LogArg(Seq("[a2]"), 2, hiddenName = false, None))))
+      val rendered =
+        render(p, Message(StringContext("begin ", " end"), Seq(LogArg(Seq("[a1]"), 1, hiddenName = false, None), LogArg(Seq("[a2]"), 2, hiddenName = false, None))))
       assert(rendered.endsWith("begin [a_1]=1 end {{ [a_2]=2 }}"))
     }
   }
@@ -73,7 +74,15 @@ class BasicLoggingTest extends AnyWordSpec {
       val s = "hi"
       val msg = Message(s"begin $i $s end")
 
-      assert(msg == Message(StringContext("begin ", " ", " end"), Seq(LogArg(Seq("i"), 5, hiddenName = false,  Some(LogstageCodec.LogstageCodecInt)), LogArg(Seq("s"), "hi", hiddenName = false,  Some(LogstageCodec.LogstageCodecString)))))
+      assert(
+        msg == Message(
+          StringContext("begin ", " ", " end"),
+          Seq(
+            LogArg(Seq("i"), 5, hiddenName = false, Some(LogstageCodec.LogstageCodecInt)),
+            LogArg(Seq("s"), "hi", hiddenName = false, Some(LogstageCodec.LogstageCodecString)),
+          ),
+        )
+      )
     }
     "allow concatenating Log.Message" should {
       "multiple parts" in {
@@ -83,15 +92,17 @@ class BasicLoggingTest extends AnyWordSpec {
 
         val msgConcatenated = msg1 + msg2 + msg3
 
-        assert(msgConcatenated.template.parts == Seq(
-          "begin1",
-          "middle1",
-          "end1begin2 ",
-          " middle2 ",
-          " end2  begin3",
-          "middle3 ",
-          "end3",
-        ))
+        assert(
+          msgConcatenated.template.parts == Seq(
+            "begin1",
+            "middle1",
+            "end1begin2 ",
+            " middle2 ",
+            " end2  begin3",
+            "middle3 ",
+            "end3",
+          )
+        )
 
         assert(msgConcatenated.args.map(_.value) == Seq(1.1, 1.2, 2.1, 2.2, 3.1, 3.2))
       }
@@ -102,29 +113,39 @@ class BasicLoggingTest extends AnyWordSpec {
 
         val msgConcatenated = msg1 + msg2 + msg3
 
-        assert(msgConcatenated.template.parts == Seq(
-          "begin1",
-          "end3",
-        ))
+        assert(
+          msgConcatenated.template.parts == Seq(
+            "begin1",
+            "end3",
+          )
+        )
       }
       "zero parts" in {
         val msgOnePart = Message(s"onePart")
         val msgZeroParts = Message("")
         val msgEmpty = Message.empty
 
-        assert((msgOnePart + msgZeroParts).template.parts == Seq(
-          "onePart"
-        ))
-        assert((msgZeroParts + msgOnePart).template.parts == Seq(
-          "onePart"
-        ))
-
-        assert((msgOnePart + msgEmpty).template.parts == Seq(
-          "onePart"
-        ))
-        assert((msgEmpty + msgOnePart).template.parts == Seq(
-          "onePart"
-        ))
+        assert(
+          (msgOnePart + msgZeroParts).template.parts == Seq(
+            "onePart"
+          )
+        )
+        assert(
+          (msgZeroParts + msgOnePart).template.parts == Seq(
+            "onePart"
+          )
+        )
+
+        assert(
+          (msgOnePart + msgEmpty).template.parts == Seq(
+            "onePart"
+          )
+        )
+        assert(
+          (msgEmpty + msgOnePart).template.parts == Seq(
+            "onePart"
+          )
+        )
 
         assert((msgEmpty + msgEmpty).template.parts == Seq(""))
         assert((msgZeroParts + msgZeroParts).template.parts == Seq(""))
@@ -135,17 +156,30 @@ class BasicLoggingTest extends AnyWordSpec {
         val msgEmptyStringContext = Message(StringContext(), Nil)
         val msgOnePart = Message(s"onePart")
 
-        assert((msgOnePart + msgEmptyStringContext).template.parts == Seq(
-          "onePart"
-        ))
-        assert((msgEmptyStringContext + msgOnePart).template.parts == Seq(
-          "onePart"
-        ))
+        assert(
+          (msgOnePart + msgEmptyStringContext).template.parts == Seq(
+            "onePart"
+          )
+        )
+        assert(
+          (msgEmptyStringContext + msgOnePart).template.parts == Seq(
+            "onePart"
+          )
+        )
       }
     }
   }
 
   private def render(p: StringRenderingPolicy, m: Message) = {
-    p.render(Entry(m, Context(StaticExtendedContext(LoggerId("test"), SourceFilePosition("test.scala", 0)), DynamicContext(Level.Warn, ThreadData("test", 0), 0), CustomContext(Seq.empty))))
+    p.render(
+      Entry(
+        m,
+        Context(
+          StaticExtendedContext(LoggerId("test"), SourceFilePosition("test.scala", 0)),
+          DynamicContext(Level.Warn, ThreadData("test", 0), 0),
+          CustomContext(Seq.empty),
+        ),
+      )
+    )
   }
 }
diff --git a/logstage/logstage-core/src/test/scala/izumi/logstage/sink/ExampleService.scala b/logstage/logstage-core/src/test/scala/izumi/logstage/sink/ExampleService.scala
index c5df1b186..f9a00ab78 100644
--- a/logstage/logstage-core/src/test/scala/izumi/logstage/sink/ExampleService.scala
+++ b/logstage/logstage-core/src/test/scala/izumi/logstage/sink/ExampleService.scala
@@ -1,6 +1,6 @@
 package izumi.logstage.sink
 
-import com.github.ghik.silencer.silent
+import scala.annotation.nowarn
 import izumi.functional.mono.SyncSafe
 import izumi.fundamentals.platform.build.ExposedTestScope
 import izumi.logstage.api.IzLogger
@@ -14,8 +14,8 @@ import org.scalatest.exceptions.TestFailedException
 import scala.util.Random
 
 @ExposedTestScope
-@silent("[Ee]xpression.*logger")
-@silent("missing interpolator")
+@nowarn("msg=[Ee]xpression.*logger")
+@nowarn("msg=missing interpolator")
 class ExampleService(logger: IzLogger) {
   val field: String = "a value"
 
@@ -31,11 +31,12 @@ class ExampleService(logger: IzLogger) {
     val loggerWithSubcontext = loggerWithContext("custom" -> "value")
     loggerWithSubcontext.info(s"Both custom contexts will be added into this message. Dummy: $justAnArg")
 
-
     logger.crit(s"This is an expression with user-assigned name: ${Random.nextInt() -> "random value"}")
     logger.crit(s"This is an expression with user-assigned name which will be hidden from text representations: ${Random.nextInt() -> "random value" -> null}")
 
-    logger.info(s"This name will be converted from camel case to space-separated ('just and arg'). Note: spaces are replaced with underscores in non-colored sinks. ${justAnArg -> ' '}")
+    logger.info(
+      s"This name will be converted from camel case to space-separated ('just and arg'). Note: spaces are replaced with underscores in non-colored sinks. ${justAnArg -> ' '}"
+    )
     logger.info(s"..Same with invisible name: ${justAnArg -> ' ' -> null}")
 
     val duplicatedParam = "DuplicatedParamVal"
@@ -94,16 +95,17 @@ class ExampleService(logger: IzLogger) {
     }
     sealed trait Sealed
     object Sealed {
-      implicit val codec: LogstageCodec[Sealed] = (writer, s) => s match {
-        case Branch(x) => writer.write(s"""Branch("$x")""")
-      }
+      implicit val codec: LogstageCodec[Sealed] = (writer, s) =>
+        s match {
+          case Branch(x) => writer.write(s"""Branch("$x")""")
+        }
       final case class Branch(x: String) extends Sealed
     }
 
     val logStrict: LogIOStrict[Function0] = LogIOStrict.fromLogger(logger)
     import Assertions._
 
-    val exc = intercept[TestFailedException]{
+    val exc = intercept[TestFailedException] {
       assertCompiles("""logStrict.crit(s"Suspended message: clap your hands! ${NoInstance(1)}")""")
     }
     assert(exc.getMessage() contains "Implicit search failed")