Background tokio task polls JobSpawner.get_next_pending_job() every 5s, marks found jobs as Running, builds TrainingJobParams, and dispatches to K8s via K8sDispatcher. On dispatch failure the job is marked Failed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>