    pub async fn start(self: &Arc<Model>) {
        // Normally the Discovered event is dispatched when an instance is added as a child, but
        // since the root isn't anyone's child we need to dispatch it here.
        {
            let mut actions = self.root.lock_actions().await;
            // This returns a Future that does not need to be polled.
            let _ = actions.register_no_wait(&self.root, DiscoverAction::new());
        }

        // In debug mode, we don't start the component root. It must be started manually from
        // the lifecycle controller.
        if !self.context.runtime_config().debug {
            if let Err(e) = self.start_instance(&AbsoluteMoniker::root(), &StartReason::Root).await