ExecWrapper gracefully logs and exits our `run` functions.
It wraps a function returning (int, error) into a `cli.ActionFunc` compatible with urfave/cli.
Validate checks whether the application configuration is valid.
It takes a CLI context (typically from urfave/cli) as input.
Returns an exit code (int) and an error if validation fails.