pub fn run<G>(mut self, observability_guard: G) -> Result<(), ZkStackServiceError> {
        self.wire()?;

        let TaskReprs {
            tasks,
            shutdown_hooks,
        } = self.prepare_tasks();

        let remaining = self.run_tasks(tasks);
        self.shutdown_tasks(remaining);
        self.run_shutdown_hooks(shutdown_hooks);

        tracing::info!("Exiting the service");

        {
            // Make sure that the shutdown happens in the `tokio` context.
            let _rt_guard = self.runtime.enter();
            drop(observability_guard);
        }

        if self.errors.is_empty() {
            Ok(())
        } else {
            Err(ZkStackServiceError::Task(self.errors.into()))
        }
    }
Runs the system.

In case of errors during wiring phase, will return the list of all the errors that happened, in the order
of their occurrence.

`observability_guard`, if provided, will be used to deinitialize the observability subsystem
as the very last step before exiting the node.
core/lib/node_framework/src/service/mod.rs