### Fixes with compatibility implications

- Removes the "hit \[ENTER\] to switch to interactive mode" feature. See below.

### Improvements

- Improves the new startup messages. See below.
- Ports sbt-cross-building's `^` and `^^` commands for plugin cross building. See below.

### Bug fixes

- Fixes the new startup messages. See below.
- Fixes ScalaTest nested suite test names being reported as "(It is not a test)". [#3154][3154] by [@jameskoch][@jameskoch]

### Improvements and bug fixes to the new startup messages

The two new startup messages introduced in sbt 0.13.15 are:

- when writing out `sbt.version`, for build reproducability, and
- when informing the user about sbt's shell, for the performance improvement

When writing out `sbt.version` the messaging now:

- correctly uses a logger rather than println
- honours the log level set, for instance by `--error`
- never executes when sbt "new" is being run

When informing the user about sbt's shell the messaging now:

- is a 1 line message, rather than 3
- is at info level, rather than warn level
- can be suppressed with `suppressSbtShellNotification := true`
- only triggers when `compile` is being run
- never shows when sbt `new` is being run

[#3091][3091]/[#3097][3097]/[#3147][3147] by [@dwijnand][@dwijnand]

### Remove the "hit \[ENTER\] to switch to interactive mode" feature

In sbt 0.13.15, in addition to notifying the user about the existence of sbt's shell, a feature was added to
allow the user to switch to sbt's shell - a more pro-active approach to just displaying a message.

Unfortunately sbt is often unintentionally invoked in shell scripts in "interactive mode" when no interaction is
expected by, for example, invoking `sbt package` instead of `sbt package < /dev/null`. In that case hitting
\[ENTER\] would silently trigger sbt to run its shell, easily wrecking the script. In addition to that I was
unhappy with the implementation as it created a tight coupling between sbt's command processing abstraction to
sbt's shell command.

If you want to stay in sbt's shell after running a task like `package` then invoke sbt like so:

    sbt package shell

[#3091][3091]/[#3153][3153] by [@dwijnand][@dwijnand]

### sbt-cross-building

[@jrudolph][@jrudolph]'s sbt-cross-building is a plugin author's plugin.
It adds cross command `^` and sbtVersion switch command `^^`, similar to `+` and `++`,
but for switching between multiple sbt versions across major versions.
sbt 0.13.16 merges these commands into sbt because the feature it provides is useful as we migrate plugins to sbt 1.0.

To switch the `sbtVersion in pluginCrossBuild` from the shell use:

```
^^ 1.0.0-M5
```

Your plugin will now build with sbt 1.0.0-M5 (and its Scala version 2.12.2).

If you need to make changes specific to a sbt version, you can now include them into `src/main/scala-sbt-0.13`,
and `src/main/scala-sbt-1.0.0-M5`, where the binary sbt version number is used as postfix.

To run a command across multiple sbt versions, set:

```scala
crossSbtVersions := Vector("0.13.15", "1.0.0-M5")
```

Then, run:

```
^ compile
```

[#3133][3133] by [@eed3si9n][@eed3si9n]

  [3091]: https://github.com/sbt/sbt/issues/3091
  [3097]: https://github.com/sbt/sbt/issues/3097
  [3147]: https://github.com/sbt/sbt/pull/3147
  [3133]: https://github.com/sbt/sbt/pull/3133
  [3153]: https://github.com/sbt/sbt/pull/3153
  [3154]: https://github.com/sbt/sbt/pull/3154
  [@jrudolph]: https://github.com/jrudolph
  [@eed3si9n]: https://github.com/eed3si9n
  [@dwijnand]: https://github.com/dwijnand
  [@jameskoch]: https://github.com/jameskoch
