@callback init(opts :: keyword(), config :: map()) :: {:ok, keyword()} | {:error, term()}
@callback opts_schema() :: keyword()
@callback post_validate( execution :: %Catalyst.Execution{ action_executions: term(), config: term(), plugin_runs: term() }, opts :: keyword() ) :: [Catalyst.ValidationAction.t()]
@callback run( execution :: %Catalyst.Execution{ action_executions: term(), config: term(), plugin_runs: term() }, opts :: keyword() ) :: [Catalyst.Actions.t()]