feat(pipeline): live extraction status + Transform tab
- worker: add run_transform, run_export, run_pipeline task handlers
- run_transform: sqlmesh plan prod --auto-apply, 2h timeout
- run_export: export_serving.py, 10min timeout
- run_pipeline: sequential extract → transform → export, stops on first failure
- pipeline_routes: refactor overview into _render_overview_partial() helper,
make pipeline_trigger_extract() HTMX-aware (returns partial on HX-Request),
add _fetch_pipeline_tasks(), _format_duration() helpers,
add pipeline_transform() + pipeline_trigger_transform() with concurrency guard
- pipeline_overview.html: wrap in self-polling div (every 5s while any_running),
convert Run buttons to hx-post targeting #pipeline-overview-content
- pipeline.html: add pulse animation for .status-dot.running, add Transform tab
button, rewire header "Run Pipeline" button to enqueue run_pipeline task
- pipeline_transform.html: new partial — status cards for transform + export,
"Run Full Pipeline" card, recent runs table with duration + error details
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>