flowchart TD
beat["Celery beat schedule\ncron/every-interval dispatch"]
subgraph pipeline["V2 metric + onboarding pipeline"]
discover["AccountSyncService.discover_active_accounts\nOWNER + ACTIVE + refresh_token + non-demo V2"]
daily["daily_sync_dispatcher\nre-query same OWNER user_account"]
update["update_metrics_dispatcher\nre-query same OWNER user_account"]
backfill["backfill_dispatcher / backfill_metrics / full_resync / retry_failed\nuses discover_active_accounts user_id"]
validate["validate_user_account_for_sync_dispatch\nvalidates selected UserAccount only"]
metricsTask["sync_account_metrics_task"]
perf["PerformanceDataManager"]
exactClients["Facebook/Google clients\nquery exact user+account token"]
resolverClients["TikTok/LinkedIn/X clients\nresolve_account_token(account, user_id)"]
end
subgraph creative["Legacy creative/status background tasks"]
creativeDaily["account_creatives_daily_sync\nOWNER + ACTIVE"]
failedCreative["failed_creatives_daily_sync\nOWNER"]
adStatus["daily_ad_status_sync -> individual_account_status_sync\nOWNER + ACTIVE + refresh_token"]
getAssets["get_new_assets_task / fetch_ad_creative_data_task"]
end
subgraph comments["Comment sync"]
commentsDaily["comments_daily_sync\nOWNER only identity"]
tiktokComments["TikTok comment fetch\nuses selected user token"]
fbCapability["FB comment capability probe\nACTIVE owner/default owner/editor tokens"]
end
subgraph migration["Onboarding/migration"]
migrateV2["migrate_account_to_v2\nOWNER or EDITOR, owner-first"]
onboarding["sync_account_assets_on_connect\nuses OAuth/request user passed in"]
onboardingBackfill["dispatch_clickhouse_onboarding_backfill\npasses same user_id into metrics backfill"]
end
beat --> daily
beat --> update
beat --> creativeDaily
beat --> failedCreative
beat --> adStatus
daily --> discover
update --> discover
backfill --> discover
discover --> validate
daily --> validate
update --> validate
validate --> metricsTask
backfill --> metricsTask
metricsTask --> getAssets
metricsTask --> perf
getAssets --> perf
adStatus --> perf
creativeDaily --> getAssets
failedCreative --> getAssets
perf --> exactClients
perf --> resolverClients
commentsDaily --> tiktokComments
commentsDaily --> fbCapability
migrateV2 --> onboarding
onboarding --> onboardingBackfill
onboardingBackfill --> metricsTask
resolverClients -. "if user_id is passed, helper checks only that row" .-> validate
classDef ownerOnly fill:#ffe8e0,stroke:#b44,stroke-width:2px,color:#111;
classDef ok fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#111;
classDef downstream fill:#eef3ff,stroke:#4765a8,stroke-width:1px,color:#111;
class discover,daily,update,backfill,creativeDaily,failedCreative,adStatus,commentsDaily ownerOnly;
class migrateV2,onboarding,fbCapability ok;
class perf,exactClients,resolverClients,metricsTask,getAssets,tiktokComments,onboardingBackfill,validate downstream;
click beat "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/crux_ferrous_insights_app/celery.py&line=187&column=1"
click discover "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/services/sync_service.py&line=76&column=1"
click daily "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/tasks/pipeline.py&line=178&column=1"
click update "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/tasks/pipeline.py&line=386&column=1"
click backfill "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/tasks/pipeline.py&line=298&column=1"
click validate "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/organization_auth/tasks/auth_tasks.py&line=38&column=1"
click metricsTask "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/tasks/pipeline.py&line=53&column=1"
click perf "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/platform_service.py&line=36&column=1"
click exactClients "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=400&column=1"
click resolverClients "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/organization_auth/tasks/auth_tasks.py&line=329&column=1"
click creativeDaily "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2806&column=1"
click failedCreative "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2922&column=1"
click adStatus "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=3207&column=1"
click getAssets "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=1123&column=1"
click commentsDaily "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/comment_analysis/tasks/data_fetch_tasks.py&line=933&column=1"
click tiktokComments "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/comment_analysis/tasks/data_fetch_tasks.py&line=343&column=1"
click fbCapability "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/comment_analysis/services/fb_comment_capability.py&line=283&column=1"
click migrateV2 "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/management/commands/migrate_account_to_v2.py&line=251&column=1"
click onboarding "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=1757&column=1"
click onboardingBackfill "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2121&column=1"