I experimented with throwing an `Exception` from the `init` vs the `start` lifecycle using the simple Bert service from the tk-webserver-jetty9 ring example.  After the `Exception` is thrown from `init`, the JVM process shuts down automatically.  If the `Exception` is not thrown until `start`, however, the JVM process remains running indefinitely.  I let it sit for several minutes before giving up so it doesn't seem like it is related to the 60 second agent monitor thread that you mentioned.  If I wrap the `Exception` thrown from `start` inside of a `shutdown-on-error` call, though, the JVM process shuts down automatically (with no perceptible delay after the `Exception`).  I outputted the Java thread id during `init` and `start` and saw that they were the same so it doesn't appear that the spawning of a new thread would explain the difference here.  I also saw that execution does not proceed after the `a/start` call from `boot-services*` in tk's internal.clj.