         @router = new routing.Router this
         assert @middleware = @router.middleware
         @middleware = @middleware.bind @router
+        assert _.isFunction @middleware; this

        sigterm = "Received the SIGTERM (terminate signal)"
        process.on "SIGINT", => @shutdownKernel sigint
        process.on "SIGTERM", => @shutdownKernel sigterm
        assert @setupRoutableServices()
        assert @setupConnectPipeline()
        assert @setupListeningServers()
        assert @setupSocketServers()
        assert @setupHotloadWatcher()
        @constructor.configure()
        logger.info message.red

    # The public constructor of the kernel instrances. Generally
    # you should neither use it directly, not override. It serves

        decor = (o) -> (a...) -> level o.explain; o.routine a...
        run = arguments.length is 0 and _.isArray @$configure
        return async.series _.map @$configure, decor if run
        return yes if not @$configure and not arguments.length
        assert _.isFunction(routine), "invalid config routine"
        assert _.isString(explain), "no explanation given"
        assert (@$configure ?= []).push new Object
            explain: explain
            routine: routine

