- Migration 0021: add progress_current, progress_total columns to tasks - generate_articles(): accept task_id param, write progress every 50 articles and once at completion via db_execute() - worker.py handle_generate_articles: inject _task_id from process_task(), pass to generate_articles() so the pSEO dashboard can poll live progress Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>