# lib/scout/executor/ - Execution Strategies ## Overview Different strategies for executing trials - local or distributed. ## Executors - `local.ex` - Synchronous local execution, good for development - `oban.ex` - Distributed execution via Oban job queue, production-ready ## Oban Executor Features - One job per trial for fault isolation - Worker processes handle callbacks safely - Automatic retry on failure - Survives node restarts - Configurable parallelism ## Usage ```elixir # Local execution {:ok, result} = Scout.StudyRunner.run(study, executor: Scout.Executor.Local) # Distributed execution {:ok, result} = Scout.StudyRunner.run(study, executor: Scout.Executor.Oban) ``` ## Implementation Notes - Executors implement a common behavior/protocol - Oban executor requires module-based callbacks for durability - Each trial runs in isolation with its own seed