sbt 1.3.0以降 % Test でライブラリ追加してもcompileの依存が変わる場合がある件

以下再現コード

build.sbt

val commonSettings = Def.settings(
  scalaVersion := "2.12.11"
)

lazy val a1 = project
  .settings(
    commonSettings,
    libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.0.0"
  )

lazy val a2 = project
  .settings(
    commonSettings,
    libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.1.6" % "test"
  )

lazy val a3 = project
  .settings(
    commonSettings,
  )
  .dependsOn(
    a1 % "compile->compile;test->test",
    a2 % "compile->compile;test->test",
  )

a3/A.scala

object A{
  // https://github.com/scala/scala-library-compat/commit/c3c39c06ff835173
  // expect compile error if version < 2.1.0
  val x = scala.jdk.CollectionConverters
}

sbt 1.2.8だと自分が想定していたとおり、コンパイルエラーになる。なぜコンパイルエラーになって欲しいか?というと

  • a1のmainで2.0.0に依存している
  • a2ではtestでのみ2.1.6に依存している
  • a3は、それぞれ以下のような依存ということである
    • mainではa1のmainとa2のmainに依存
    • testではa1のtestとa2のtestに依存
  • よってa3のmainは(a1経由で)2.0.0にのみ依存しており、a3のtestは(a2のtest経由で) 2.1.6で上書きされているはず
  • a3/A.scalaはmainのコードであり、Scala 2.12版のscala-collection-compatにまだCollectionConvertersが追加されていない状態のはず

しかし、sbt 1.3.x(いくつか試した限り、1.3.0から1.3.12全部・・・?)では、コンパイルエラーにならない。 つまり、なぜかa2に % "test" で追加したら、a3のmainの依存のversionが上がる、という個人的には予想外の怖いことが起こる???