   to rely on control returning to the main thread where it can perform shutdown."
   [shutdown-reason]
   {:pre  [(map? shutdown-reason)]
-   :post [(boolean? %)]}
+   :post [(ks/boolean? %)]}
   (contains? (disj shutdown-causes :jvm-shutdown-hook) (:cause shutdown-reason)))
 
 (defn call-error-handler!

                     ["-r" "--restart-file RESTART-FILE"
                      (i18n/trs "Path to a file whose contents are incremented each time all of the configured services have been started.")]]
        required    []]
    (first (cli! cli-args specs required))))

(schema/defn ^:always-validate run-lifecycle-fn!
  "Run a lifecycle function for a service.  Required arguments:

(ns puppetlabs.trapperkeeper.internal
  (:import (clojure.lang ExceptionInfo IFn IDeref)
           (java.lang ArithmeticException NumberFormatException))
  (:require [clojure.tools.logging :as log]
            [beckon]
            [plumbing.graph :as graph]
            [slingshot.slingshot :refer [throw+]]
            [puppetlabs.trapperkeeper.config :refer [config-service get-in-config]]
            [puppetlabs.trapperkeeper.app :as a]
            [puppetlabs.trapperkeeper.common :as common]
