_render_turntable: Option B — resolved objects as params (render_invocation, step_path, output_path, template, emit, pl). Session and PipelineLogger stay in the caller so no second DB connection is opened and log steps roll up to the main task. _handle_render_task_exhausted: extracted 68-line mark-as-failed block; retry/raise logic with Celery self.retry stays in render_order_line_task since it needs the bound-task context. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>