[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-astronomer-testing-dags":3,"mdc--25wbuw-key":55,"related-org-astronomer-testing-dags":3300,"related-repo-astronomer-testing-dags":3467},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":50,"sourceUrl":53,"mdContent":54},"testing-dags","test and debug Airflow DAGs","Complex DAG testing workflows with debugging and fixing cycles. Use for multi-step testing requests like \"test this dag and fix it if it fails\", \"test and debug\", \"run the pipeline and troubleshoot issues\". For simple test requests (\"test dag\", \"run dag\"), the airflow entrypoint skill handles it directly. This skill is for iterative test-debug-fix cycles.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"astronomer","Astronomer","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fastronomer.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Airflow","airflow","tag",{"name":17,"slug":18,"type":15},"QA","qa",{"name":20,"slug":21,"type":15},"Testing","testing",{"name":23,"slug":24,"type":15},"Debugging","debugging",412,"https:\u002F\u002Fgithub.com\u002Fastronomer\u002Fagents","2026-04-06T18:01:48.191004",null,55,[31,32,33,34,14,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"agentic-workflow","agents","ai","ai-agents","apache-airflow","claude","cursor","dag","data-engineering","data-pipelines","dbt","llm","mcp","orchestrator","skills","workflow-automation","workflow-management","workflow-orchestration","workflows",{"repoUrl":26,"stars":25,"forks":29,"topics":51,"description":52},[31,32,33,34,14,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"AI agent tooling for data engineering workflows.","https:\u002F\u002Fgithub.com\u002Fastronomer\u002Fagents\u002Ftree\u002FHEAD\u002Fskills\u002Ftesting-dags","---\nname: testing-dags\ndescription: Complex DAG testing workflows with debugging and fixing cycles. Use for multi-step testing requests like \"test this dag and fix it if it fails\", \"test and debug\", \"run the pipeline and troubleshoot issues\". For simple test requests (\"test dag\", \"run dag\"), the airflow entrypoint skill handles it directly. This skill is for iterative test-debug-fix cycles.\n---\n\n# DAG Testing Skill\n\nUse `af` commands to test, debug, and fix DAGs in iterative cycles.\n\n## Running the CLI\n\nThese commands assume `af` is on PATH. Run via `astro otto` to get it automatically, or install standalone with `uv tool install astro-airflow-mcp`.\n\n---\n\n## Quick Validation with Astro CLI\n\nIf the user has the Astro CLI available, these commands provide fast feedback without needing a running Airflow instance:\n\n```bash\n# Parse DAGs to catch import errors, syntax issues, and DAG-level problems\nastro dev parse\n\n# Run pytest against DAGs (runs tests in tests\u002F directory)\nastro dev pytest\n```\n\nUse these for quick validation during development. For full end-to-end testing against a live Airflow instance, continue to the trigger-and-wait workflow below.\n\n---\n\n## FIRST ACTION: Just Trigger the DAG\n\nWhen the user asks to test a DAG, your **FIRST AND ONLY action** should be:\n\n```bash\naf runs trigger-wait \u003Cdag_id>\n```\n\n**DO NOT:**\n- Call `af dags list` first\n- Call `af dags get` first\n- Call `af dags errors` first\n- Use `grep` or `ls` or any other bash command\n- Do any \"pre-flight checks\"\n\n**Just trigger the DAG.** If it fails, THEN debug.\n\n---\n\n## Testing Workflow Overview\n\n```\n┌─────────────────────────────────────┐\n│ 1. TRIGGER AND WAIT                 │\n│    Run DAG, wait for completion     │\n└─────────────────────────────────────┘\n                 ↓\n        ┌───────┴───────┐\n        ↓               ↓\n   ┌─────────┐    ┌──────────┐\n   │ SUCCESS │    │ FAILED   │\n   │ Done!   │    │ Debug... │\n   └─────────┘    └──────────┘\n                       ↓\n        ┌─────────────────────────────────────┐\n        │ 2. DEBUG (only if failed)           │\n        │    Get logs, identify root cause    │\n        └─────────────────────────────────────┘\n                       ↓\n        ┌─────────────────────────────────────┐\n        │ 3. FIX AND RETEST                   │\n        │    Apply fix, restart from step 1   │\n        └─────────────────────────────────────┘\n```\n\n**Philosophy: Try first, debug on failure.** Don't waste time on pre-flight checks — just run the DAG and diagnose if something goes wrong.\n\n---\n\n## Phase 1: Trigger and Wait\n\nUse `af runs trigger-wait` to test the DAG:\n\n### Primary Method: Trigger and Wait\n\n```bash\naf runs trigger-wait \u003Cdag_id> --timeout 300\n```\n\n**Example:**\n\n```bash\naf runs trigger-wait my_dag --timeout 300\n```\n\n**Why this is the preferred method:**\n- Single command handles trigger + monitoring\n- Returns immediately when DAG completes (success or failure)\n- Includes failed task details if run fails\n- No manual polling required\n\n### Response Interpretation\n\n**Success:**\n```json\n{\n  \"dag_run\": {\n    \"dag_id\": \"my_dag\",\n    \"dag_run_id\": \"manual__2025-01-14T...\",\n    \"state\": \"success\",\n    \"start_date\": \"...\",\n    \"end_date\": \"...\"\n  },\n  \"timed_out\": false,\n  \"elapsed_seconds\": 45.2\n}\n```\n\n**Failure:**\n```json\n{\n  \"dag_run\": {\n    \"state\": \"failed\"\n  },\n  \"timed_out\": false,\n  \"elapsed_seconds\": 30.1,\n  \"failed_tasks\": [\n    {\n      \"task_id\": \"extract_data\",\n      \"state\": \"failed\",\n      \"try_number\": 2\n    }\n  ]\n}\n```\n\n**Timeout:**\n```json\n{\n  \"dag_id\": \"my_dag\",\n  \"dag_run_id\": \"manual__...\",\n  \"state\": \"running\",\n  \"timed_out\": true,\n  \"elapsed_seconds\": 300.0,\n  \"message\": \"Timed out after 300 seconds. DAG run is still running.\"\n}\n```\n\n### Alternative: Trigger and Monitor Separately\n\nUse this only when you need more control:\n\n```bash\n# Step 1: Trigger\naf runs trigger my_dag\n# Returns: {\"dag_run_id\": \"manual__...\", \"state\": \"queued\"}\n\n# Step 2: Check status\naf runs get my_dag manual__2025-01-14T...\n# Returns current state\n```\n\n---\n\n## Handling Results\n\n### If Success\n\nThe DAG ran successfully. Summarize for the user:\n- Total elapsed time\n- Number of tasks completed\n- Any notable outputs (if visible in logs)\n\n**You're done!**\n\n### If Timed Out\n\nThe DAG is still running. Options:\n1. Check current status: `af runs get \u003Cdag_id> \u003Cdag_run_id>`\n2. Ask user if they want to continue waiting\n3. Increase timeout and try again\n\n### If Failed\n\nMove to Phase 2 (Debug) to identify the root cause.\n\n---\n\n## Phase 2: Debug Failures (Only If Needed)\n\nWhen a DAG run fails, use these commands to diagnose:\n\n### Get Comprehensive Diagnosis\n\n```bash\naf runs diagnose \u003Cdag_id> \u003Cdag_run_id>\n```\n\nReturns in one call:\n- Run metadata (state, timing)\n- All task instances with states\n- Summary of failed tasks\n- State counts (success, failed, skipped, etc.)\n\n### Get Task Logs\n\n```bash\naf tasks logs \u003Cdag_id> \u003Cdag_run_id> \u003Ctask_id>\n```\n\n**Example:**\n\n```bash\naf tasks logs my_dag manual__2025-01-14T... extract_data\n```\n\n**For specific retry attempt:**\n\n```bash\naf tasks logs my_dag manual__2025-01-14T... extract_data --try 2\n```\n\n**Look for:**\n- Exception messages and stack traces\n- Connection errors (database, API, S3)\n- Permission errors\n- Timeout errors\n- Missing dependencies\n\n### Check Upstream Tasks\n\nIf a task shows `upstream_failed`, the root cause is in an upstream task. Use `af runs diagnose` to find which task actually failed.\n\n### Check Import Errors (If DAG Didn't Run)\n\nIf the trigger failed because the DAG doesn't exist:\n\n```bash\naf dags errors\n```\n\nThis reveals syntax errors or missing dependencies that prevented the DAG from loading.\n\n---\n\n## Phase 3: Fix and Retest\n\nOnce you identify the issue:\n\n### Common Fixes\n\n| Issue | Fix |\n|-------|-----|\n| Missing import | Add to DAG file |\n| Missing package | Add to `requirements.txt` |\n| Connection error | Check `af config connections`, verify credentials |\n| Variable missing | Check `af config variables`, create if needed |\n| Timeout | Increase task timeout or optimize query |\n| Permission error | Check credentials in connection |\n\n### After Fixing\n\n1. Save the file\n2. **Retest:** `af runs trigger-wait \u003Cdag_id>`\n\n**Repeat the test → debug → fix loop until the DAG succeeds.**\n\n---\n\n## CLI Quick Reference\n\n| Phase | Command | Purpose |\n|-------|---------|---------|\n| Test | `af runs trigger-wait \u003Cdag_id>` | **Primary test method — start here** |\n| Test | `af runs trigger \u003Cdag_id>` | Start run (alternative) |\n| Test | `af runs get \u003Cdag_id> \u003Crun_id>` | Check run status |\n| Debug | `af runs diagnose \u003Cdag_id> \u003Crun_id>` | Comprehensive failure diagnosis |\n| Debug | `af tasks logs \u003Cdag_id> \u003Crun_id> \u003Ctask_id>` | Get task output\u002Ferrors |\n| Debug | `af dags errors` | Check for parse errors (if DAG won't load) |\n| Debug | `af dags get \u003Cdag_id>` | Verify DAG config |\n| Debug | `af dags explore \u003Cdag_id>` | Full DAG inspection |\n| Config | `af config connections` | List connections |\n| Config | `af config variables` | List variables |\n\n---\n\n## Testing Scenarios\n\n### Scenario 1: Test a DAG (Happy Path)\n\n```bash\naf runs trigger-wait my_dag\n# Success! Done.\n```\n\n### Scenario 2: Test a DAG (With Failure)\n\n```bash\n# 1. Run and wait\naf runs trigger-wait my_dag\n# Failed...\n\n# 2. Find failed tasks\naf runs diagnose my_dag manual__2025-01-14T...\n\n# 3. Get error details\naf tasks logs my_dag manual__2025-01-14T... extract_data\n\n# 4. [Fix the issue in DAG code]\n\n# 5. Retest\naf runs trigger-wait my_dag\n```\n\n### Scenario 3: DAG Doesn't Exist \u002F Won't Load\n\n```bash\n# 1. Trigger fails - DAG not found\naf runs trigger-wait my_dag\n# Error: DAG not found\n\n# 2. Find parse error\naf dags errors\n\n# 3. [Fix the issue in DAG code]\n\n# 4. Retest\naf runs trigger-wait my_dag\n```\n\n### Scenario 4: Debug a Failed Scheduled Run\n\n```bash\n# 1. Get failure summary\naf runs diagnose my_dag scheduled__2025-01-14T...\n\n# 2. Get error from failed task\naf tasks logs my_dag scheduled__2025-01-14T... failed_task_id\n\n# 3. [Fix the issue]\n\n# 4. Retest\naf runs trigger-wait my_dag\n```\n\n### Scenario 5: Test with Custom Configuration\n\n```bash\naf runs trigger-wait my_dag --conf '{\"env\": \"staging\", \"batch_size\": 100}' --timeout 600\n```\n\n### Scenario 6: Long-Running DAG\n\n```bash\n# Wait up to 1 hour\naf runs trigger-wait my_dag --timeout 3600\n\n# If timed out, check current state\naf runs get my_dag manual__2025-01-14T...\n```\n\n---\n\n## Debugging Tips\n\n### Common Error Patterns\n\n**Connection Refused \u002F Timeout:**\n- Check `af config connections` for correct host\u002Fport\n- Verify network connectivity to external system\n- Check if connection credentials are correct\n\n**ModuleNotFoundError:**\n- Package missing from `requirements.txt`\n- After adding, may need environment restart\n\n**PermissionError:**\n- Check IAM roles, database grants, API keys\n- Verify connection has correct credentials\n\n**Task Timeout:**\n- Query or operation taking too long\n- Consider adding timeout parameter to task\n- Optimize underlying query\u002Foperation\n\n### Reading Task Logs\n\nTask logs typically show:\n1. Task start timestamp\n2. Any print\u002Flog statements from task code\n3. Return value (for @task decorated functions)\n4. Exception + full stack trace (if failed)\n5. Task end timestamp and duration\n\n**Focus on the exception at the bottom of failed task logs.**\n\n### On Astro\n\nAstro deployments support environment promotion, which helps structure your testing workflow:\n\n- **Dev deployment**: Test DAGs freely with `astro deploy --dags` for fast iteration\n- **Staging deployment**: Run integration tests against production-like data\n- **Production deployment**: Deploy only after validation in lower environments\n- Use separate Astro deployments for each environment and promote code through them\n\n---\n\n## Related Skills\n\n- **authoring-dags**: For creating new DAGs (includes validation before testing)\n- **debugging-dags**: For general Airflow troubleshooting\n- **deploying-airflow**: For deploying DAGs to production after testing\n",{"data":56,"body":57},{"name":4,"description":6},{"type":58,"children":59},"root",[60,69,84,91,119,123,129,134,214,219,222,228,241,287,295,360,370,373,379,389,399,402,408,420,427,477,485,520,528,551,557,565,867,875,1159,1167,1380,1386,1391,1483,1486,1492,1498,1503,1521,1529,1535,1540,1565,1571,1576,1579,1585,1590,1596,1652,1657,1680,1686,1759,1766,1802,1810,1854,1862,1890,1896,1917,1923,1928,1952,1957,1960,1966,1971,1977,2104,2110,2134,2142,2145,2151,2390,2393,2399,2405,2439,2445,2616,2622,2743,2749,2880,2886,2941,2947,3028,3031,3037,3043,3051,3075,3083,3101,3109,3122,3130,3148,3154,3159,3187,3195,3201,3206,3252,3255,3261,3294],{"type":61,"tag":62,"props":63,"children":65},"element","h1",{"id":64},"dag-testing-skill",[66],{"type":67,"value":68},"text","DAG Testing Skill",{"type":61,"tag":70,"props":71,"children":72},"p",{},[73,75,82],{"type":67,"value":74},"Use ",{"type":61,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":67,"value":81},"af",{"type":67,"value":83}," commands to test, debug, and fix DAGs in iterative cycles.",{"type":61,"tag":85,"props":86,"children":88},"h2",{"id":87},"running-the-cli",[89],{"type":67,"value":90},"Running the CLI",{"type":61,"tag":70,"props":92,"children":93},{},[94,96,101,103,109,111,117],{"type":67,"value":95},"These commands assume ",{"type":61,"tag":76,"props":97,"children":99},{"className":98},[],[100],{"type":67,"value":81},{"type":67,"value":102}," is on PATH. Run via ",{"type":61,"tag":76,"props":104,"children":106},{"className":105},[],[107],{"type":67,"value":108},"astro otto",{"type":67,"value":110}," to get it automatically, or install standalone with ",{"type":61,"tag":76,"props":112,"children":114},{"className":113},[],[115],{"type":67,"value":116},"uv tool install astro-airflow-mcp",{"type":67,"value":118},".",{"type":61,"tag":120,"props":121,"children":122},"hr",{},[],{"type":61,"tag":85,"props":124,"children":126},{"id":125},"quick-validation-with-astro-cli",[127],{"type":67,"value":128},"Quick Validation with Astro CLI",{"type":61,"tag":70,"props":130,"children":131},{},[132],{"type":67,"value":133},"If the user has the Astro CLI available, these commands provide fast feedback without needing a running Airflow instance:",{"type":61,"tag":135,"props":136,"children":141},"pre",{"className":137,"code":138,"language":139,"meta":140,"style":140},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Parse DAGs to catch import errors, syntax issues, and DAG-level problems\nastro dev parse\n\n# Run pytest against DAGs (runs tests in tests\u002F directory)\nastro dev pytest\n","bash","",[142],{"type":61,"tag":76,"props":143,"children":144},{"__ignoreMap":140},[145,157,178,188,197],{"type":61,"tag":146,"props":147,"children":150},"span",{"class":148,"line":149},"line",1,[151],{"type":61,"tag":146,"props":152,"children":154},{"style":153},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[155],{"type":67,"value":156},"# Parse DAGs to catch import errors, syntax issues, and DAG-level problems\n",{"type":61,"tag":146,"props":158,"children":160},{"class":148,"line":159},2,[161,167,173],{"type":61,"tag":146,"props":162,"children":164},{"style":163},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[165],{"type":67,"value":166},"astro",{"type":61,"tag":146,"props":168,"children":170},{"style":169},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[171],{"type":67,"value":172}," dev",{"type":61,"tag":146,"props":174,"children":175},{"style":169},[176],{"type":67,"value":177}," parse\n",{"type":61,"tag":146,"props":179,"children":181},{"class":148,"line":180},3,[182],{"type":61,"tag":146,"props":183,"children":185},{"emptyLinePlaceholder":184},true,[186],{"type":67,"value":187},"\n",{"type":61,"tag":146,"props":189,"children":191},{"class":148,"line":190},4,[192],{"type":61,"tag":146,"props":193,"children":194},{"style":153},[195],{"type":67,"value":196},"# Run pytest against DAGs (runs tests in tests\u002F directory)\n",{"type":61,"tag":146,"props":198,"children":200},{"class":148,"line":199},5,[201,205,209],{"type":61,"tag":146,"props":202,"children":203},{"style":163},[204],{"type":67,"value":166},{"type":61,"tag":146,"props":206,"children":207},{"style":169},[208],{"type":67,"value":172},{"type":61,"tag":146,"props":210,"children":211},{"style":169},[212],{"type":67,"value":213}," pytest\n",{"type":61,"tag":70,"props":215,"children":216},{},[217],{"type":67,"value":218},"Use these for quick validation during development. For full end-to-end testing against a live Airflow instance, continue to the trigger-and-wait workflow below.",{"type":61,"tag":120,"props":220,"children":221},{},[],{"type":61,"tag":85,"props":223,"children":225},{"id":224},"first-action-just-trigger-the-dag",[226],{"type":67,"value":227},"FIRST ACTION: Just Trigger the DAG",{"type":61,"tag":70,"props":229,"children":230},{},[231,233,239],{"type":67,"value":232},"When the user asks to test a DAG, your ",{"type":61,"tag":234,"props":235,"children":236},"strong",{},[237],{"type":67,"value":238},"FIRST AND ONLY action",{"type":67,"value":240}," should be:",{"type":61,"tag":135,"props":242,"children":244},{"className":137,"code":243,"language":139,"meta":140,"style":140},"af runs trigger-wait \u003Cdag_id>\n",[245],{"type":61,"tag":76,"props":246,"children":247},{"__ignoreMap":140},[248],{"type":61,"tag":146,"props":249,"children":250},{"class":148,"line":149},[251,255,260,265,271,276,282],{"type":61,"tag":146,"props":252,"children":253},{"style":163},[254],{"type":67,"value":81},{"type":61,"tag":146,"props":256,"children":257},{"style":169},[258],{"type":67,"value":259}," runs",{"type":61,"tag":146,"props":261,"children":262},{"style":169},[263],{"type":67,"value":264}," trigger-wait",{"type":61,"tag":146,"props":266,"children":268},{"style":267},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[269],{"type":67,"value":270}," \u003C",{"type":61,"tag":146,"props":272,"children":273},{"style":169},[274],{"type":67,"value":275},"dag_i",{"type":61,"tag":146,"props":277,"children":279},{"style":278},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[280],{"type":67,"value":281},"d",{"type":61,"tag":146,"props":283,"children":284},{"style":267},[285],{"type":67,"value":286},">\n",{"type":61,"tag":70,"props":288,"children":289},{},[290],{"type":61,"tag":234,"props":291,"children":292},{},[293],{"type":67,"value":294},"DO NOT:",{"type":61,"tag":296,"props":297,"children":298},"ul",{},[299,313,324,335,355],{"type":61,"tag":300,"props":301,"children":302},"li",{},[303,305,311],{"type":67,"value":304},"Call ",{"type":61,"tag":76,"props":306,"children":308},{"className":307},[],[309],{"type":67,"value":310},"af dags list",{"type":67,"value":312}," first",{"type":61,"tag":300,"props":314,"children":315},{},[316,317,323],{"type":67,"value":304},{"type":61,"tag":76,"props":318,"children":320},{"className":319},[],[321],{"type":67,"value":322},"af dags get",{"type":67,"value":312},{"type":61,"tag":300,"props":325,"children":326},{},[327,328,334],{"type":67,"value":304},{"type":61,"tag":76,"props":329,"children":331},{"className":330},[],[332],{"type":67,"value":333},"af dags errors",{"type":67,"value":312},{"type":61,"tag":300,"props":336,"children":337},{},[338,339,345,347,353],{"type":67,"value":74},{"type":61,"tag":76,"props":340,"children":342},{"className":341},[],[343],{"type":67,"value":344},"grep",{"type":67,"value":346}," or ",{"type":61,"tag":76,"props":348,"children":350},{"className":349},[],[351],{"type":67,"value":352},"ls",{"type":67,"value":354}," or any other bash command",{"type":61,"tag":300,"props":356,"children":357},{},[358],{"type":67,"value":359},"Do any \"pre-flight checks\"",{"type":61,"tag":70,"props":361,"children":362},{},[363,368],{"type":61,"tag":234,"props":364,"children":365},{},[366],{"type":67,"value":367},"Just trigger the DAG.",{"type":67,"value":369}," If it fails, THEN debug.",{"type":61,"tag":120,"props":371,"children":372},{},[],{"type":61,"tag":85,"props":374,"children":376},{"id":375},"testing-workflow-overview",[377],{"type":67,"value":378},"Testing Workflow Overview",{"type":61,"tag":135,"props":380,"children":384},{"className":381,"code":383,"language":67},[382],"language-text","┌─────────────────────────────────────┐\n│ 1. TRIGGER AND WAIT                 │\n│    Run DAG, wait for completion     │\n└─────────────────────────────────────┘\n                 ↓\n        ┌───────┴───────┐\n        ↓               ↓\n   ┌─────────┐    ┌──────────┐\n   │ SUCCESS │    │ FAILED   │\n   │ Done!   │    │ Debug... │\n   └─────────┘    └──────────┘\n                       ↓\n        ┌─────────────────────────────────────┐\n        │ 2. DEBUG (only if failed)           │\n        │    Get logs, identify root cause    │\n        └─────────────────────────────────────┘\n                       ↓\n        ┌─────────────────────────────────────┐\n        │ 3. FIX AND RETEST                   │\n        │    Apply fix, restart from step 1   │\n        └─────────────────────────────────────┘\n",[385],{"type":61,"tag":76,"props":386,"children":387},{"__ignoreMap":140},[388],{"type":67,"value":383},{"type":61,"tag":70,"props":390,"children":391},{},[392,397],{"type":61,"tag":234,"props":393,"children":394},{},[395],{"type":67,"value":396},"Philosophy: Try first, debug on failure.",{"type":67,"value":398}," Don't waste time on pre-flight checks — just run the DAG and diagnose if something goes wrong.",{"type":61,"tag":120,"props":400,"children":401},{},[],{"type":61,"tag":85,"props":403,"children":405},{"id":404},"phase-1-trigger-and-wait",[406],{"type":67,"value":407},"Phase 1: Trigger and Wait",{"type":61,"tag":70,"props":409,"children":410},{},[411,412,418],{"type":67,"value":74},{"type":61,"tag":76,"props":413,"children":415},{"className":414},[],[416],{"type":67,"value":417},"af runs trigger-wait",{"type":67,"value":419}," to test the DAG:",{"type":61,"tag":421,"props":422,"children":424},"h3",{"id":423},"primary-method-trigger-and-wait",[425],{"type":67,"value":426},"Primary Method: Trigger and Wait",{"type":61,"tag":135,"props":428,"children":430},{"className":137,"code":429,"language":139,"meta":140,"style":140},"af runs trigger-wait \u003Cdag_id> --timeout 300\n",[431],{"type":61,"tag":76,"props":432,"children":433},{"__ignoreMap":140},[434],{"type":61,"tag":146,"props":435,"children":436},{"class":148,"line":149},[437,441,445,449,453,457,461,466,471],{"type":61,"tag":146,"props":438,"children":439},{"style":163},[440],{"type":67,"value":81},{"type":61,"tag":146,"props":442,"children":443},{"style":169},[444],{"type":67,"value":259},{"type":61,"tag":146,"props":446,"children":447},{"style":169},[448],{"type":67,"value":264},{"type":61,"tag":146,"props":450,"children":451},{"style":267},[452],{"type":67,"value":270},{"type":61,"tag":146,"props":454,"children":455},{"style":169},[456],{"type":67,"value":275},{"type":61,"tag":146,"props":458,"children":459},{"style":278},[460],{"type":67,"value":281},{"type":61,"tag":146,"props":462,"children":463},{"style":267},[464],{"type":67,"value":465},">",{"type":61,"tag":146,"props":467,"children":468},{"style":169},[469],{"type":67,"value":470}," --timeout",{"type":61,"tag":146,"props":472,"children":474},{"style":473},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[475],{"type":67,"value":476}," 300\n",{"type":61,"tag":70,"props":478,"children":479},{},[480],{"type":61,"tag":234,"props":481,"children":482},{},[483],{"type":67,"value":484},"Example:",{"type":61,"tag":135,"props":486,"children":488},{"className":137,"code":487,"language":139,"meta":140,"style":140},"af runs trigger-wait my_dag --timeout 300\n",[489],{"type":61,"tag":76,"props":490,"children":491},{"__ignoreMap":140},[492],{"type":61,"tag":146,"props":493,"children":494},{"class":148,"line":149},[495,499,503,507,512,516],{"type":61,"tag":146,"props":496,"children":497},{"style":163},[498],{"type":67,"value":81},{"type":61,"tag":146,"props":500,"children":501},{"style":169},[502],{"type":67,"value":259},{"type":61,"tag":146,"props":504,"children":505},{"style":169},[506],{"type":67,"value":264},{"type":61,"tag":146,"props":508,"children":509},{"style":169},[510],{"type":67,"value":511}," my_dag",{"type":61,"tag":146,"props":513,"children":514},{"style":169},[515],{"type":67,"value":470},{"type":61,"tag":146,"props":517,"children":518},{"style":473},[519],{"type":67,"value":476},{"type":61,"tag":70,"props":521,"children":522},{},[523],{"type":61,"tag":234,"props":524,"children":525},{},[526],{"type":67,"value":527},"Why this is the preferred method:",{"type":61,"tag":296,"props":529,"children":530},{},[531,536,541,546],{"type":61,"tag":300,"props":532,"children":533},{},[534],{"type":67,"value":535},"Single command handles trigger + monitoring",{"type":61,"tag":300,"props":537,"children":538},{},[539],{"type":67,"value":540},"Returns immediately when DAG completes (success or failure)",{"type":61,"tag":300,"props":542,"children":543},{},[544],{"type":67,"value":545},"Includes failed task details if run fails",{"type":61,"tag":300,"props":547,"children":548},{},[549],{"type":67,"value":550},"No manual polling required",{"type":61,"tag":421,"props":552,"children":554},{"id":553},"response-interpretation",[555],{"type":67,"value":556},"Response Interpretation",{"type":61,"tag":70,"props":558,"children":559},{},[560],{"type":61,"tag":234,"props":561,"children":562},{},[563],{"type":67,"value":564},"Success:",{"type":61,"tag":135,"props":566,"children":570},{"className":567,"code":568,"language":569,"meta":140,"style":140},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"dag_run\": {\n    \"dag_id\": \"my_dag\",\n    \"dag_run_id\": \"manual__2025-01-14T...\",\n    \"state\": \"success\",\n    \"start_date\": \"...\",\n    \"end_date\": \"...\"\n  },\n  \"timed_out\": false,\n  \"elapsed_seconds\": 45.2\n}\n","json",[571],{"type":61,"tag":76,"props":572,"children":573},{"__ignoreMap":140},[574,582,611,651,688,725,763,797,806,832,858],{"type":61,"tag":146,"props":575,"children":576},{"class":148,"line":149},[577],{"type":61,"tag":146,"props":578,"children":579},{"style":267},[580],{"type":67,"value":581},"{\n",{"type":61,"tag":146,"props":583,"children":584},{"class":148,"line":159},[585,590,596,601,606],{"type":61,"tag":146,"props":586,"children":587},{"style":267},[588],{"type":67,"value":589},"  \"",{"type":61,"tag":146,"props":591,"children":593},{"style":592},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[594],{"type":67,"value":595},"dag_run",{"type":61,"tag":146,"props":597,"children":598},{"style":267},[599],{"type":67,"value":600},"\"",{"type":61,"tag":146,"props":602,"children":603},{"style":267},[604],{"type":67,"value":605},":",{"type":61,"tag":146,"props":607,"children":608},{"style":267},[609],{"type":67,"value":610}," {\n",{"type":61,"tag":146,"props":612,"children":613},{"class":148,"line":180},[614,619,624,628,632,637,642,646],{"type":61,"tag":146,"props":615,"children":616},{"style":267},[617],{"type":67,"value":618},"    \"",{"type":61,"tag":146,"props":620,"children":621},{"style":163},[622],{"type":67,"value":623},"dag_id",{"type":61,"tag":146,"props":625,"children":626},{"style":267},[627],{"type":67,"value":600},{"type":61,"tag":146,"props":629,"children":630},{"style":267},[631],{"type":67,"value":605},{"type":61,"tag":146,"props":633,"children":634},{"style":267},[635],{"type":67,"value":636}," \"",{"type":61,"tag":146,"props":638,"children":639},{"style":169},[640],{"type":67,"value":641},"my_dag",{"type":61,"tag":146,"props":643,"children":644},{"style":267},[645],{"type":67,"value":600},{"type":61,"tag":146,"props":647,"children":648},{"style":267},[649],{"type":67,"value":650},",\n",{"type":61,"tag":146,"props":652,"children":653},{"class":148,"line":190},[654,658,663,667,671,675,680,684],{"type":61,"tag":146,"props":655,"children":656},{"style":267},[657],{"type":67,"value":618},{"type":61,"tag":146,"props":659,"children":660},{"style":163},[661],{"type":67,"value":662},"dag_run_id",{"type":61,"tag":146,"props":664,"children":665},{"style":267},[666],{"type":67,"value":600},{"type":61,"tag":146,"props":668,"children":669},{"style":267},[670],{"type":67,"value":605},{"type":61,"tag":146,"props":672,"children":673},{"style":267},[674],{"type":67,"value":636},{"type":61,"tag":146,"props":676,"children":677},{"style":169},[678],{"type":67,"value":679},"manual__2025-01-14T...",{"type":61,"tag":146,"props":681,"children":682},{"style":267},[683],{"type":67,"value":600},{"type":61,"tag":146,"props":685,"children":686},{"style":267},[687],{"type":67,"value":650},{"type":61,"tag":146,"props":689,"children":690},{"class":148,"line":199},[691,695,700,704,708,712,717,721],{"type":61,"tag":146,"props":692,"children":693},{"style":267},[694],{"type":67,"value":618},{"type":61,"tag":146,"props":696,"children":697},{"style":163},[698],{"type":67,"value":699},"state",{"type":61,"tag":146,"props":701,"children":702},{"style":267},[703],{"type":67,"value":600},{"type":61,"tag":146,"props":705,"children":706},{"style":267},[707],{"type":67,"value":605},{"type":61,"tag":146,"props":709,"children":710},{"style":267},[711],{"type":67,"value":636},{"type":61,"tag":146,"props":713,"children":714},{"style":169},[715],{"type":67,"value":716},"success",{"type":61,"tag":146,"props":718,"children":719},{"style":267},[720],{"type":67,"value":600},{"type":61,"tag":146,"props":722,"children":723},{"style":267},[724],{"type":67,"value":650},{"type":61,"tag":146,"props":726,"children":728},{"class":148,"line":727},6,[729,733,738,742,746,750,755,759],{"type":61,"tag":146,"props":730,"children":731},{"style":267},[732],{"type":67,"value":618},{"type":61,"tag":146,"props":734,"children":735},{"style":163},[736],{"type":67,"value":737},"start_date",{"type":61,"tag":146,"props":739,"children":740},{"style":267},[741],{"type":67,"value":600},{"type":61,"tag":146,"props":743,"children":744},{"style":267},[745],{"type":67,"value":605},{"type":61,"tag":146,"props":747,"children":748},{"style":267},[749],{"type":67,"value":636},{"type":61,"tag":146,"props":751,"children":752},{"style":169},[753],{"type":67,"value":754},"...",{"type":61,"tag":146,"props":756,"children":757},{"style":267},[758],{"type":67,"value":600},{"type":61,"tag":146,"props":760,"children":761},{"style":267},[762],{"type":67,"value":650},{"type":61,"tag":146,"props":764,"children":766},{"class":148,"line":765},7,[767,771,776,780,784,788,792],{"type":61,"tag":146,"props":768,"children":769},{"style":267},[770],{"type":67,"value":618},{"type":61,"tag":146,"props":772,"children":773},{"style":163},[774],{"type":67,"value":775},"end_date",{"type":61,"tag":146,"props":777,"children":778},{"style":267},[779],{"type":67,"value":600},{"type":61,"tag":146,"props":781,"children":782},{"style":267},[783],{"type":67,"value":605},{"type":61,"tag":146,"props":785,"children":786},{"style":267},[787],{"type":67,"value":636},{"type":61,"tag":146,"props":789,"children":790},{"style":169},[791],{"type":67,"value":754},{"type":61,"tag":146,"props":793,"children":794},{"style":267},[795],{"type":67,"value":796},"\"\n",{"type":61,"tag":146,"props":798,"children":800},{"class":148,"line":799},8,[801],{"type":61,"tag":146,"props":802,"children":803},{"style":267},[804],{"type":67,"value":805},"  },\n",{"type":61,"tag":146,"props":807,"children":809},{"class":148,"line":808},9,[810,814,819,823,827],{"type":61,"tag":146,"props":811,"children":812},{"style":267},[813],{"type":67,"value":589},{"type":61,"tag":146,"props":815,"children":816},{"style":592},[817],{"type":67,"value":818},"timed_out",{"type":61,"tag":146,"props":820,"children":821},{"style":267},[822],{"type":67,"value":600},{"type":61,"tag":146,"props":824,"children":825},{"style":267},[826],{"type":67,"value":605},{"type":61,"tag":146,"props":828,"children":829},{"style":267},[830],{"type":67,"value":831}," false,\n",{"type":61,"tag":146,"props":833,"children":835},{"class":148,"line":834},10,[836,840,845,849,853],{"type":61,"tag":146,"props":837,"children":838},{"style":267},[839],{"type":67,"value":589},{"type":61,"tag":146,"props":841,"children":842},{"style":592},[843],{"type":67,"value":844},"elapsed_seconds",{"type":61,"tag":146,"props":846,"children":847},{"style":267},[848],{"type":67,"value":600},{"type":61,"tag":146,"props":850,"children":851},{"style":267},[852],{"type":67,"value":605},{"type":61,"tag":146,"props":854,"children":855},{"style":473},[856],{"type":67,"value":857}," 45.2\n",{"type":61,"tag":146,"props":859,"children":861},{"class":148,"line":860},11,[862],{"type":61,"tag":146,"props":863,"children":864},{"style":267},[865],{"type":67,"value":866},"}\n",{"type":61,"tag":70,"props":868,"children":869},{},[870],{"type":61,"tag":234,"props":871,"children":872},{},[873],{"type":67,"value":874},"Failure:",{"type":61,"tag":135,"props":876,"children":878},{"className":567,"code":877,"language":569,"meta":140,"style":140},"{\n  \"dag_run\": {\n    \"state\": \"failed\"\n  },\n  \"timed_out\": false,\n  \"elapsed_seconds\": 30.1,\n  \"failed_tasks\": [\n    {\n      \"task_id\": \"extract_data\",\n      \"state\": \"failed\",\n      \"try_number\": 2\n    }\n  ]\n}\n",[879],{"type":61,"tag":76,"props":880,"children":881},{"__ignoreMap":140},[882,889,912,944,951,974,1002,1027,1035,1073,1108,1133,1142,1151],{"type":61,"tag":146,"props":883,"children":884},{"class":148,"line":149},[885],{"type":61,"tag":146,"props":886,"children":887},{"style":267},[888],{"type":67,"value":581},{"type":61,"tag":146,"props":890,"children":891},{"class":148,"line":159},[892,896,900,904,908],{"type":61,"tag":146,"props":893,"children":894},{"style":267},[895],{"type":67,"value":589},{"type":61,"tag":146,"props":897,"children":898},{"style":592},[899],{"type":67,"value":595},{"type":61,"tag":146,"props":901,"children":902},{"style":267},[903],{"type":67,"value":600},{"type":61,"tag":146,"props":905,"children":906},{"style":267},[907],{"type":67,"value":605},{"type":61,"tag":146,"props":909,"children":910},{"style":267},[911],{"type":67,"value":610},{"type":61,"tag":146,"props":913,"children":914},{"class":148,"line":180},[915,919,923,927,931,935,940],{"type":61,"tag":146,"props":916,"children":917},{"style":267},[918],{"type":67,"value":618},{"type":61,"tag":146,"props":920,"children":921},{"style":163},[922],{"type":67,"value":699},{"type":61,"tag":146,"props":924,"children":925},{"style":267},[926],{"type":67,"value":600},{"type":61,"tag":146,"props":928,"children":929},{"style":267},[930],{"type":67,"value":605},{"type":61,"tag":146,"props":932,"children":933},{"style":267},[934],{"type":67,"value":636},{"type":61,"tag":146,"props":936,"children":937},{"style":169},[938],{"type":67,"value":939},"failed",{"type":61,"tag":146,"props":941,"children":942},{"style":267},[943],{"type":67,"value":796},{"type":61,"tag":146,"props":945,"children":946},{"class":148,"line":190},[947],{"type":61,"tag":146,"props":948,"children":949},{"style":267},[950],{"type":67,"value":805},{"type":61,"tag":146,"props":952,"children":953},{"class":148,"line":199},[954,958,962,966,970],{"type":61,"tag":146,"props":955,"children":956},{"style":267},[957],{"type":67,"value":589},{"type":61,"tag":146,"props":959,"children":960},{"style":592},[961],{"type":67,"value":818},{"type":61,"tag":146,"props":963,"children":964},{"style":267},[965],{"type":67,"value":600},{"type":61,"tag":146,"props":967,"children":968},{"style":267},[969],{"type":67,"value":605},{"type":61,"tag":146,"props":971,"children":972},{"style":267},[973],{"type":67,"value":831},{"type":61,"tag":146,"props":975,"children":976},{"class":148,"line":727},[977,981,985,989,993,998],{"type":61,"tag":146,"props":978,"children":979},{"style":267},[980],{"type":67,"value":589},{"type":61,"tag":146,"props":982,"children":983},{"style":592},[984],{"type":67,"value":844},{"type":61,"tag":146,"props":986,"children":987},{"style":267},[988],{"type":67,"value":600},{"type":61,"tag":146,"props":990,"children":991},{"style":267},[992],{"type":67,"value":605},{"type":61,"tag":146,"props":994,"children":995},{"style":473},[996],{"type":67,"value":997}," 30.1",{"type":61,"tag":146,"props":999,"children":1000},{"style":267},[1001],{"type":67,"value":650},{"type":61,"tag":146,"props":1003,"children":1004},{"class":148,"line":765},[1005,1009,1014,1018,1022],{"type":61,"tag":146,"props":1006,"children":1007},{"style":267},[1008],{"type":67,"value":589},{"type":61,"tag":146,"props":1010,"children":1011},{"style":592},[1012],{"type":67,"value":1013},"failed_tasks",{"type":61,"tag":146,"props":1015,"children":1016},{"style":267},[1017],{"type":67,"value":600},{"type":61,"tag":146,"props":1019,"children":1020},{"style":267},[1021],{"type":67,"value":605},{"type":61,"tag":146,"props":1023,"children":1024},{"style":267},[1025],{"type":67,"value":1026}," [\n",{"type":61,"tag":146,"props":1028,"children":1029},{"class":148,"line":799},[1030],{"type":61,"tag":146,"props":1031,"children":1032},{"style":267},[1033],{"type":67,"value":1034},"    {\n",{"type":61,"tag":146,"props":1036,"children":1037},{"class":148,"line":808},[1038,1043,1048,1052,1056,1060,1065,1069],{"type":61,"tag":146,"props":1039,"children":1040},{"style":267},[1041],{"type":67,"value":1042},"      \"",{"type":61,"tag":146,"props":1044,"children":1045},{"style":163},[1046],{"type":67,"value":1047},"task_id",{"type":61,"tag":146,"props":1049,"children":1050},{"style":267},[1051],{"type":67,"value":600},{"type":61,"tag":146,"props":1053,"children":1054},{"style":267},[1055],{"type":67,"value":605},{"type":61,"tag":146,"props":1057,"children":1058},{"style":267},[1059],{"type":67,"value":636},{"type":61,"tag":146,"props":1061,"children":1062},{"style":169},[1063],{"type":67,"value":1064},"extract_data",{"type":61,"tag":146,"props":1066,"children":1067},{"style":267},[1068],{"type":67,"value":600},{"type":61,"tag":146,"props":1070,"children":1071},{"style":267},[1072],{"type":67,"value":650},{"type":61,"tag":146,"props":1074,"children":1075},{"class":148,"line":834},[1076,1080,1084,1088,1092,1096,1100,1104],{"type":61,"tag":146,"props":1077,"children":1078},{"style":267},[1079],{"type":67,"value":1042},{"type":61,"tag":146,"props":1081,"children":1082},{"style":163},[1083],{"type":67,"value":699},{"type":61,"tag":146,"props":1085,"children":1086},{"style":267},[1087],{"type":67,"value":600},{"type":61,"tag":146,"props":1089,"children":1090},{"style":267},[1091],{"type":67,"value":605},{"type":61,"tag":146,"props":1093,"children":1094},{"style":267},[1095],{"type":67,"value":636},{"type":61,"tag":146,"props":1097,"children":1098},{"style":169},[1099],{"type":67,"value":939},{"type":61,"tag":146,"props":1101,"children":1102},{"style":267},[1103],{"type":67,"value":600},{"type":61,"tag":146,"props":1105,"children":1106},{"style":267},[1107],{"type":67,"value":650},{"type":61,"tag":146,"props":1109,"children":1110},{"class":148,"line":860},[1111,1115,1120,1124,1128],{"type":61,"tag":146,"props":1112,"children":1113},{"style":267},[1114],{"type":67,"value":1042},{"type":61,"tag":146,"props":1116,"children":1117},{"style":163},[1118],{"type":67,"value":1119},"try_number",{"type":61,"tag":146,"props":1121,"children":1122},{"style":267},[1123],{"type":67,"value":600},{"type":61,"tag":146,"props":1125,"children":1126},{"style":267},[1127],{"type":67,"value":605},{"type":61,"tag":146,"props":1129,"children":1130},{"style":473},[1131],{"type":67,"value":1132}," 2\n",{"type":61,"tag":146,"props":1134,"children":1136},{"class":148,"line":1135},12,[1137],{"type":61,"tag":146,"props":1138,"children":1139},{"style":267},[1140],{"type":67,"value":1141},"    }\n",{"type":61,"tag":146,"props":1143,"children":1145},{"class":148,"line":1144},13,[1146],{"type":61,"tag":146,"props":1147,"children":1148},{"style":267},[1149],{"type":67,"value":1150},"  ]\n",{"type":61,"tag":146,"props":1152,"children":1154},{"class":148,"line":1153},14,[1155],{"type":61,"tag":146,"props":1156,"children":1157},{"style":267},[1158],{"type":67,"value":866},{"type":61,"tag":70,"props":1160,"children":1161},{},[1162],{"type":61,"tag":234,"props":1163,"children":1164},{},[1165],{"type":67,"value":1166},"Timeout:",{"type":61,"tag":135,"props":1168,"children":1170},{"className":567,"code":1169,"language":569,"meta":140,"style":140},"{\n  \"dag_id\": \"my_dag\",\n  \"dag_run_id\": \"manual__...\",\n  \"state\": \"running\",\n  \"timed_out\": true,\n  \"elapsed_seconds\": 300.0,\n  \"message\": \"Timed out after 300 seconds. DAG run is still running.\"\n}\n",[1171],{"type":61,"tag":76,"props":1172,"children":1173},{"__ignoreMap":140},[1174,1181,1216,1252,1288,1312,1340,1373],{"type":61,"tag":146,"props":1175,"children":1176},{"class":148,"line":149},[1177],{"type":61,"tag":146,"props":1178,"children":1179},{"style":267},[1180],{"type":67,"value":581},{"type":61,"tag":146,"props":1182,"children":1183},{"class":148,"line":159},[1184,1188,1192,1196,1200,1204,1208,1212],{"type":61,"tag":146,"props":1185,"children":1186},{"style":267},[1187],{"type":67,"value":589},{"type":61,"tag":146,"props":1189,"children":1190},{"style":592},[1191],{"type":67,"value":623},{"type":61,"tag":146,"props":1193,"children":1194},{"style":267},[1195],{"type":67,"value":600},{"type":61,"tag":146,"props":1197,"children":1198},{"style":267},[1199],{"type":67,"value":605},{"type":61,"tag":146,"props":1201,"children":1202},{"style":267},[1203],{"type":67,"value":636},{"type":61,"tag":146,"props":1205,"children":1206},{"style":169},[1207],{"type":67,"value":641},{"type":61,"tag":146,"props":1209,"children":1210},{"style":267},[1211],{"type":67,"value":600},{"type":61,"tag":146,"props":1213,"children":1214},{"style":267},[1215],{"type":67,"value":650},{"type":61,"tag":146,"props":1217,"children":1218},{"class":148,"line":180},[1219,1223,1227,1231,1235,1239,1244,1248],{"type":61,"tag":146,"props":1220,"children":1221},{"style":267},[1222],{"type":67,"value":589},{"type":61,"tag":146,"props":1224,"children":1225},{"style":592},[1226],{"type":67,"value":662},{"type":61,"tag":146,"props":1228,"children":1229},{"style":267},[1230],{"type":67,"value":600},{"type":61,"tag":146,"props":1232,"children":1233},{"style":267},[1234],{"type":67,"value":605},{"type":61,"tag":146,"props":1236,"children":1237},{"style":267},[1238],{"type":67,"value":636},{"type":61,"tag":146,"props":1240,"children":1241},{"style":169},[1242],{"type":67,"value":1243},"manual__...",{"type":61,"tag":146,"props":1245,"children":1246},{"style":267},[1247],{"type":67,"value":600},{"type":61,"tag":146,"props":1249,"children":1250},{"style":267},[1251],{"type":67,"value":650},{"type":61,"tag":146,"props":1253,"children":1254},{"class":148,"line":190},[1255,1259,1263,1267,1271,1275,1280,1284],{"type":61,"tag":146,"props":1256,"children":1257},{"style":267},[1258],{"type":67,"value":589},{"type":61,"tag":146,"props":1260,"children":1261},{"style":592},[1262],{"type":67,"value":699},{"type":61,"tag":146,"props":1264,"children":1265},{"style":267},[1266],{"type":67,"value":600},{"type":61,"tag":146,"props":1268,"children":1269},{"style":267},[1270],{"type":67,"value":605},{"type":61,"tag":146,"props":1272,"children":1273},{"style":267},[1274],{"type":67,"value":636},{"type":61,"tag":146,"props":1276,"children":1277},{"style":169},[1278],{"type":67,"value":1279},"running",{"type":61,"tag":146,"props":1281,"children":1282},{"style":267},[1283],{"type":67,"value":600},{"type":61,"tag":146,"props":1285,"children":1286},{"style":267},[1287],{"type":67,"value":650},{"type":61,"tag":146,"props":1289,"children":1290},{"class":148,"line":199},[1291,1295,1299,1303,1307],{"type":61,"tag":146,"props":1292,"children":1293},{"style":267},[1294],{"type":67,"value":589},{"type":61,"tag":146,"props":1296,"children":1297},{"style":592},[1298],{"type":67,"value":818},{"type":61,"tag":146,"props":1300,"children":1301},{"style":267},[1302],{"type":67,"value":600},{"type":61,"tag":146,"props":1304,"children":1305},{"style":267},[1306],{"type":67,"value":605},{"type":61,"tag":146,"props":1308,"children":1309},{"style":267},[1310],{"type":67,"value":1311}," true,\n",{"type":61,"tag":146,"props":1313,"children":1314},{"class":148,"line":727},[1315,1319,1323,1327,1331,1336],{"type":61,"tag":146,"props":1316,"children":1317},{"style":267},[1318],{"type":67,"value":589},{"type":61,"tag":146,"props":1320,"children":1321},{"style":592},[1322],{"type":67,"value":844},{"type":61,"tag":146,"props":1324,"children":1325},{"style":267},[1326],{"type":67,"value":600},{"type":61,"tag":146,"props":1328,"children":1329},{"style":267},[1330],{"type":67,"value":605},{"type":61,"tag":146,"props":1332,"children":1333},{"style":473},[1334],{"type":67,"value":1335}," 300.0",{"type":61,"tag":146,"props":1337,"children":1338},{"style":267},[1339],{"type":67,"value":650},{"type":61,"tag":146,"props":1341,"children":1342},{"class":148,"line":765},[1343,1347,1352,1356,1360,1364,1369],{"type":61,"tag":146,"props":1344,"children":1345},{"style":267},[1346],{"type":67,"value":589},{"type":61,"tag":146,"props":1348,"children":1349},{"style":592},[1350],{"type":67,"value":1351},"message",{"type":61,"tag":146,"props":1353,"children":1354},{"style":267},[1355],{"type":67,"value":600},{"type":61,"tag":146,"props":1357,"children":1358},{"style":267},[1359],{"type":67,"value":605},{"type":61,"tag":146,"props":1361,"children":1362},{"style":267},[1363],{"type":67,"value":636},{"type":61,"tag":146,"props":1365,"children":1366},{"style":169},[1367],{"type":67,"value":1368},"Timed out after 300 seconds. DAG run is still running.",{"type":61,"tag":146,"props":1370,"children":1371},{"style":267},[1372],{"type":67,"value":796},{"type":61,"tag":146,"props":1374,"children":1375},{"class":148,"line":799},[1376],{"type":61,"tag":146,"props":1377,"children":1378},{"style":267},[1379],{"type":67,"value":866},{"type":61,"tag":421,"props":1381,"children":1383},{"id":1382},"alternative-trigger-and-monitor-separately",[1384],{"type":67,"value":1385},"Alternative: Trigger and Monitor Separately",{"type":61,"tag":70,"props":1387,"children":1388},{},[1389],{"type":67,"value":1390},"Use this only when you need more control:",{"type":61,"tag":135,"props":1392,"children":1394},{"className":137,"code":1393,"language":139,"meta":140,"style":140},"# Step 1: Trigger\naf runs trigger my_dag\n# Returns: {\"dag_run_id\": \"manual__...\", \"state\": \"queued\"}\n\n# Step 2: Check status\naf runs get my_dag manual__2025-01-14T...\n# Returns current state\n",[1395],{"type":61,"tag":76,"props":1396,"children":1397},{"__ignoreMap":140},[1398,1406,1427,1435,1442,1450,1475],{"type":61,"tag":146,"props":1399,"children":1400},{"class":148,"line":149},[1401],{"type":61,"tag":146,"props":1402,"children":1403},{"style":153},[1404],{"type":67,"value":1405},"# Step 1: Trigger\n",{"type":61,"tag":146,"props":1407,"children":1408},{"class":148,"line":159},[1409,1413,1417,1422],{"type":61,"tag":146,"props":1410,"children":1411},{"style":163},[1412],{"type":67,"value":81},{"type":61,"tag":146,"props":1414,"children":1415},{"style":169},[1416],{"type":67,"value":259},{"type":61,"tag":146,"props":1418,"children":1419},{"style":169},[1420],{"type":67,"value":1421}," trigger",{"type":61,"tag":146,"props":1423,"children":1424},{"style":169},[1425],{"type":67,"value":1426}," my_dag\n",{"type":61,"tag":146,"props":1428,"children":1429},{"class":148,"line":180},[1430],{"type":61,"tag":146,"props":1431,"children":1432},{"style":153},[1433],{"type":67,"value":1434},"# Returns: {\"dag_run_id\": \"manual__...\", \"state\": \"queued\"}\n",{"type":61,"tag":146,"props":1436,"children":1437},{"class":148,"line":190},[1438],{"type":61,"tag":146,"props":1439,"children":1440},{"emptyLinePlaceholder":184},[1441],{"type":67,"value":187},{"type":61,"tag":146,"props":1443,"children":1444},{"class":148,"line":199},[1445],{"type":61,"tag":146,"props":1446,"children":1447},{"style":153},[1448],{"type":67,"value":1449},"# Step 2: Check status\n",{"type":61,"tag":146,"props":1451,"children":1452},{"class":148,"line":727},[1453,1457,1461,1466,1470],{"type":61,"tag":146,"props":1454,"children":1455},{"style":163},[1456],{"type":67,"value":81},{"type":61,"tag":146,"props":1458,"children":1459},{"style":169},[1460],{"type":67,"value":259},{"type":61,"tag":146,"props":1462,"children":1463},{"style":169},[1464],{"type":67,"value":1465}," get",{"type":61,"tag":146,"props":1467,"children":1468},{"style":169},[1469],{"type":67,"value":511},{"type":61,"tag":146,"props":1471,"children":1472},{"style":169},[1473],{"type":67,"value":1474}," manual__2025-01-14T...\n",{"type":61,"tag":146,"props":1476,"children":1477},{"class":148,"line":765},[1478],{"type":61,"tag":146,"props":1479,"children":1480},{"style":153},[1481],{"type":67,"value":1482},"# Returns current state\n",{"type":61,"tag":120,"props":1484,"children":1485},{},[],{"type":61,"tag":85,"props":1487,"children":1489},{"id":1488},"handling-results",[1490],{"type":67,"value":1491},"Handling Results",{"type":61,"tag":421,"props":1493,"children":1495},{"id":1494},"if-success",[1496],{"type":67,"value":1497},"If Success",{"type":61,"tag":70,"props":1499,"children":1500},{},[1501],{"type":67,"value":1502},"The DAG ran successfully. Summarize for the user:",{"type":61,"tag":296,"props":1504,"children":1505},{},[1506,1511,1516],{"type":61,"tag":300,"props":1507,"children":1508},{},[1509],{"type":67,"value":1510},"Total elapsed time",{"type":61,"tag":300,"props":1512,"children":1513},{},[1514],{"type":67,"value":1515},"Number of tasks completed",{"type":61,"tag":300,"props":1517,"children":1518},{},[1519],{"type":67,"value":1520},"Any notable outputs (if visible in logs)",{"type":61,"tag":70,"props":1522,"children":1523},{},[1524],{"type":61,"tag":234,"props":1525,"children":1526},{},[1527],{"type":67,"value":1528},"You're done!",{"type":61,"tag":421,"props":1530,"children":1532},{"id":1531},"if-timed-out",[1533],{"type":67,"value":1534},"If Timed Out",{"type":61,"tag":70,"props":1536,"children":1537},{},[1538],{"type":67,"value":1539},"The DAG is still running. Options:",{"type":61,"tag":1541,"props":1542,"children":1543},"ol",{},[1544,1555,1560],{"type":61,"tag":300,"props":1545,"children":1546},{},[1547,1549],{"type":67,"value":1548},"Check current status: ",{"type":61,"tag":76,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":67,"value":1554},"af runs get \u003Cdag_id> \u003Cdag_run_id>",{"type":61,"tag":300,"props":1556,"children":1557},{},[1558],{"type":67,"value":1559},"Ask user if they want to continue waiting",{"type":61,"tag":300,"props":1561,"children":1562},{},[1563],{"type":67,"value":1564},"Increase timeout and try again",{"type":61,"tag":421,"props":1566,"children":1568},{"id":1567},"if-failed",[1569],{"type":67,"value":1570},"If Failed",{"type":61,"tag":70,"props":1572,"children":1573},{},[1574],{"type":67,"value":1575},"Move to Phase 2 (Debug) to identify the root cause.",{"type":61,"tag":120,"props":1577,"children":1578},{},[],{"type":61,"tag":85,"props":1580,"children":1582},{"id":1581},"phase-2-debug-failures-only-if-needed",[1583],{"type":67,"value":1584},"Phase 2: Debug Failures (Only If Needed)",{"type":61,"tag":70,"props":1586,"children":1587},{},[1588],{"type":67,"value":1589},"When a DAG run fails, use these commands to diagnose:",{"type":61,"tag":421,"props":1591,"children":1593},{"id":1592},"get-comprehensive-diagnosis",[1594],{"type":67,"value":1595},"Get Comprehensive Diagnosis",{"type":61,"tag":135,"props":1597,"children":1599},{"className":137,"code":1598,"language":139,"meta":140,"style":140},"af runs diagnose \u003Cdag_id> \u003Cdag_run_id>\n",[1600],{"type":61,"tag":76,"props":1601,"children":1602},{"__ignoreMap":140},[1603],{"type":61,"tag":146,"props":1604,"children":1605},{"class":148,"line":149},[1606,1610,1614,1619,1623,1627,1631,1635,1639,1644,1648],{"type":61,"tag":146,"props":1607,"children":1608},{"style":163},[1609],{"type":67,"value":81},{"type":61,"tag":146,"props":1611,"children":1612},{"style":169},[1613],{"type":67,"value":259},{"type":61,"tag":146,"props":1615,"children":1616},{"style":169},[1617],{"type":67,"value":1618}," diagnose",{"type":61,"tag":146,"props":1620,"children":1621},{"style":267},[1622],{"type":67,"value":270},{"type":61,"tag":146,"props":1624,"children":1625},{"style":169},[1626],{"type":67,"value":275},{"type":61,"tag":146,"props":1628,"children":1629},{"style":278},[1630],{"type":67,"value":281},{"type":61,"tag":146,"props":1632,"children":1633},{"style":267},[1634],{"type":67,"value":465},{"type":61,"tag":146,"props":1636,"children":1637},{"style":267},[1638],{"type":67,"value":270},{"type":61,"tag":146,"props":1640,"children":1641},{"style":169},[1642],{"type":67,"value":1643},"dag_run_i",{"type":61,"tag":146,"props":1645,"children":1646},{"style":278},[1647],{"type":67,"value":281},{"type":61,"tag":146,"props":1649,"children":1650},{"style":267},[1651],{"type":67,"value":286},{"type":61,"tag":70,"props":1653,"children":1654},{},[1655],{"type":67,"value":1656},"Returns in one call:",{"type":61,"tag":296,"props":1658,"children":1659},{},[1660,1665,1670,1675],{"type":61,"tag":300,"props":1661,"children":1662},{},[1663],{"type":67,"value":1664},"Run metadata (state, timing)",{"type":61,"tag":300,"props":1666,"children":1667},{},[1668],{"type":67,"value":1669},"All task instances with states",{"type":61,"tag":300,"props":1671,"children":1672},{},[1673],{"type":67,"value":1674},"Summary of failed tasks",{"type":61,"tag":300,"props":1676,"children":1677},{},[1678],{"type":67,"value":1679},"State counts (success, failed, skipped, etc.)",{"type":61,"tag":421,"props":1681,"children":1683},{"id":1682},"get-task-logs",[1684],{"type":67,"value":1685},"Get Task Logs",{"type":61,"tag":135,"props":1687,"children":1689},{"className":137,"code":1688,"language":139,"meta":140,"style":140},"af tasks logs \u003Cdag_id> \u003Cdag_run_id> \u003Ctask_id>\n",[1690],{"type":61,"tag":76,"props":1691,"children":1692},{"__ignoreMap":140},[1693],{"type":61,"tag":146,"props":1694,"children":1695},{"class":148,"line":149},[1696,1700,1705,1710,1714,1718,1722,1726,1730,1734,1738,1742,1746,1751,1755],{"type":61,"tag":146,"props":1697,"children":1698},{"style":163},[1699],{"type":67,"value":81},{"type":61,"tag":146,"props":1701,"children":1702},{"style":169},[1703],{"type":67,"value":1704}," tasks",{"type":61,"tag":146,"props":1706,"children":1707},{"style":169},[1708],{"type":67,"value":1709}," logs",{"type":61,"tag":146,"props":1711,"children":1712},{"style":267},[1713],{"type":67,"value":270},{"type":61,"tag":146,"props":1715,"children":1716},{"style":169},[1717],{"type":67,"value":275},{"type":61,"tag":146,"props":1719,"children":1720},{"style":278},[1721],{"type":67,"value":281},{"type":61,"tag":146,"props":1723,"children":1724},{"style":267},[1725],{"type":67,"value":465},{"type":61,"tag":146,"props":1727,"children":1728},{"style":267},[1729],{"type":67,"value":270},{"type":61,"tag":146,"props":1731,"children":1732},{"style":169},[1733],{"type":67,"value":1643},{"type":61,"tag":146,"props":1735,"children":1736},{"style":278},[1737],{"type":67,"value":281},{"type":61,"tag":146,"props":1739,"children":1740},{"style":267},[1741],{"type":67,"value":465},{"type":61,"tag":146,"props":1743,"children":1744},{"style":267},[1745],{"type":67,"value":270},{"type":61,"tag":146,"props":1747,"children":1748},{"style":169},[1749],{"type":67,"value":1750},"task_i",{"type":61,"tag":146,"props":1752,"children":1753},{"style":278},[1754],{"type":67,"value":281},{"type":61,"tag":146,"props":1756,"children":1757},{"style":267},[1758],{"type":67,"value":286},{"type":61,"tag":70,"props":1760,"children":1761},{},[1762],{"type":61,"tag":234,"props":1763,"children":1764},{},[1765],{"type":67,"value":484},{"type":61,"tag":135,"props":1767,"children":1769},{"className":137,"code":1768,"language":139,"meta":140,"style":140},"af tasks logs my_dag manual__2025-01-14T... extract_data\n",[1770],{"type":61,"tag":76,"props":1771,"children":1772},{"__ignoreMap":140},[1773],{"type":61,"tag":146,"props":1774,"children":1775},{"class":148,"line":149},[1776,1780,1784,1788,1792,1797],{"type":61,"tag":146,"props":1777,"children":1778},{"style":163},[1779],{"type":67,"value":81},{"type":61,"tag":146,"props":1781,"children":1782},{"style":169},[1783],{"type":67,"value":1704},{"type":61,"tag":146,"props":1785,"children":1786},{"style":169},[1787],{"type":67,"value":1709},{"type":61,"tag":146,"props":1789,"children":1790},{"style":169},[1791],{"type":67,"value":511},{"type":61,"tag":146,"props":1793,"children":1794},{"style":169},[1795],{"type":67,"value":1796}," manual__2025-01-14T...",{"type":61,"tag":146,"props":1798,"children":1799},{"style":169},[1800],{"type":67,"value":1801}," extract_data\n",{"type":61,"tag":70,"props":1803,"children":1804},{},[1805],{"type":61,"tag":234,"props":1806,"children":1807},{},[1808],{"type":67,"value":1809},"For specific retry attempt:",{"type":61,"tag":135,"props":1811,"children":1813},{"className":137,"code":1812,"language":139,"meta":140,"style":140},"af tasks logs my_dag manual__2025-01-14T... extract_data --try 2\n",[1814],{"type":61,"tag":76,"props":1815,"children":1816},{"__ignoreMap":140},[1817],{"type":61,"tag":146,"props":1818,"children":1819},{"class":148,"line":149},[1820,1824,1828,1832,1836,1840,1845,1850],{"type":61,"tag":146,"props":1821,"children":1822},{"style":163},[1823],{"type":67,"value":81},{"type":61,"tag":146,"props":1825,"children":1826},{"style":169},[1827],{"type":67,"value":1704},{"type":61,"tag":146,"props":1829,"children":1830},{"style":169},[1831],{"type":67,"value":1709},{"type":61,"tag":146,"props":1833,"children":1834},{"style":169},[1835],{"type":67,"value":511},{"type":61,"tag":146,"props":1837,"children":1838},{"style":169},[1839],{"type":67,"value":1796},{"type":61,"tag":146,"props":1841,"children":1842},{"style":169},[1843],{"type":67,"value":1844}," extract_data",{"type":61,"tag":146,"props":1846,"children":1847},{"style":169},[1848],{"type":67,"value":1849}," --try",{"type":61,"tag":146,"props":1851,"children":1852},{"style":473},[1853],{"type":67,"value":1132},{"type":61,"tag":70,"props":1855,"children":1856},{},[1857],{"type":61,"tag":234,"props":1858,"children":1859},{},[1860],{"type":67,"value":1861},"Look for:",{"type":61,"tag":296,"props":1863,"children":1864},{},[1865,1870,1875,1880,1885],{"type":61,"tag":300,"props":1866,"children":1867},{},[1868],{"type":67,"value":1869},"Exception messages and stack traces",{"type":61,"tag":300,"props":1871,"children":1872},{},[1873],{"type":67,"value":1874},"Connection errors (database, API, S3)",{"type":61,"tag":300,"props":1876,"children":1877},{},[1878],{"type":67,"value":1879},"Permission errors",{"type":61,"tag":300,"props":1881,"children":1882},{},[1883],{"type":67,"value":1884},"Timeout errors",{"type":61,"tag":300,"props":1886,"children":1887},{},[1888],{"type":67,"value":1889},"Missing dependencies",{"type":61,"tag":421,"props":1891,"children":1893},{"id":1892},"check-upstream-tasks",[1894],{"type":67,"value":1895},"Check Upstream Tasks",{"type":61,"tag":70,"props":1897,"children":1898},{},[1899,1901,1907,1909,1915],{"type":67,"value":1900},"If a task shows ",{"type":61,"tag":76,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":67,"value":1906},"upstream_failed",{"type":67,"value":1908},", the root cause is in an upstream task. Use ",{"type":61,"tag":76,"props":1910,"children":1912},{"className":1911},[],[1913],{"type":67,"value":1914},"af runs diagnose",{"type":67,"value":1916}," to find which task actually failed.",{"type":61,"tag":421,"props":1918,"children":1920},{"id":1919},"check-import-errors-if-dag-didnt-run",[1921],{"type":67,"value":1922},"Check Import Errors (If DAG Didn't Run)",{"type":61,"tag":70,"props":1924,"children":1925},{},[1926],{"type":67,"value":1927},"If the trigger failed because the DAG doesn't exist:",{"type":61,"tag":135,"props":1929,"children":1931},{"className":137,"code":1930,"language":139,"meta":140,"style":140},"af dags errors\n",[1932],{"type":61,"tag":76,"props":1933,"children":1934},{"__ignoreMap":140},[1935],{"type":61,"tag":146,"props":1936,"children":1937},{"class":148,"line":149},[1938,1942,1947],{"type":61,"tag":146,"props":1939,"children":1940},{"style":163},[1941],{"type":67,"value":81},{"type":61,"tag":146,"props":1943,"children":1944},{"style":169},[1945],{"type":67,"value":1946}," dags",{"type":61,"tag":146,"props":1948,"children":1949},{"style":169},[1950],{"type":67,"value":1951}," errors\n",{"type":61,"tag":70,"props":1953,"children":1954},{},[1955],{"type":67,"value":1956},"This reveals syntax errors or missing dependencies that prevented the DAG from loading.",{"type":61,"tag":120,"props":1958,"children":1959},{},[],{"type":61,"tag":85,"props":1961,"children":1963},{"id":1962},"phase-3-fix-and-retest",[1964],{"type":67,"value":1965},"Phase 3: Fix and Retest",{"type":61,"tag":70,"props":1967,"children":1968},{},[1969],{"type":67,"value":1970},"Once you identify the issue:",{"type":61,"tag":421,"props":1972,"children":1974},{"id":1973},"common-fixes",[1975],{"type":67,"value":1976},"Common Fixes",{"type":61,"tag":1978,"props":1979,"children":1980},"table",{},[1981,2000],{"type":61,"tag":1982,"props":1983,"children":1984},"thead",{},[1985],{"type":61,"tag":1986,"props":1987,"children":1988},"tr",{},[1989,1995],{"type":61,"tag":1990,"props":1991,"children":1992},"th",{},[1993],{"type":67,"value":1994},"Issue",{"type":61,"tag":1990,"props":1996,"children":1997},{},[1998],{"type":67,"value":1999},"Fix",{"type":61,"tag":2001,"props":2002,"children":2003},"tbody",{},[2004,2018,2037,2058,2078,2091],{"type":61,"tag":1986,"props":2005,"children":2006},{},[2007,2013],{"type":61,"tag":2008,"props":2009,"children":2010},"td",{},[2011],{"type":67,"value":2012},"Missing import",{"type":61,"tag":2008,"props":2014,"children":2015},{},[2016],{"type":67,"value":2017},"Add to DAG file",{"type":61,"tag":1986,"props":2019,"children":2020},{},[2021,2026],{"type":61,"tag":2008,"props":2022,"children":2023},{},[2024],{"type":67,"value":2025},"Missing package",{"type":61,"tag":2008,"props":2027,"children":2028},{},[2029,2031],{"type":67,"value":2030},"Add to ",{"type":61,"tag":76,"props":2032,"children":2034},{"className":2033},[],[2035],{"type":67,"value":2036},"requirements.txt",{"type":61,"tag":1986,"props":2038,"children":2039},{},[2040,2045],{"type":61,"tag":2008,"props":2041,"children":2042},{},[2043],{"type":67,"value":2044},"Connection error",{"type":61,"tag":2008,"props":2046,"children":2047},{},[2048,2050,2056],{"type":67,"value":2049},"Check ",{"type":61,"tag":76,"props":2051,"children":2053},{"className":2052},[],[2054],{"type":67,"value":2055},"af config connections",{"type":67,"value":2057},", verify credentials",{"type":61,"tag":1986,"props":2059,"children":2060},{},[2061,2066],{"type":61,"tag":2008,"props":2062,"children":2063},{},[2064],{"type":67,"value":2065},"Variable missing",{"type":61,"tag":2008,"props":2067,"children":2068},{},[2069,2070,2076],{"type":67,"value":2049},{"type":61,"tag":76,"props":2071,"children":2073},{"className":2072},[],[2074],{"type":67,"value":2075},"af config variables",{"type":67,"value":2077},", create if needed",{"type":61,"tag":1986,"props":2079,"children":2080},{},[2081,2086],{"type":61,"tag":2008,"props":2082,"children":2083},{},[2084],{"type":67,"value":2085},"Timeout",{"type":61,"tag":2008,"props":2087,"children":2088},{},[2089],{"type":67,"value":2090},"Increase task timeout or optimize query",{"type":61,"tag":1986,"props":2092,"children":2093},{},[2094,2099],{"type":61,"tag":2008,"props":2095,"children":2096},{},[2097],{"type":67,"value":2098},"Permission error",{"type":61,"tag":2008,"props":2100,"children":2101},{},[2102],{"type":67,"value":2103},"Check credentials in connection",{"type":61,"tag":421,"props":2105,"children":2107},{"id":2106},"after-fixing",[2108],{"type":67,"value":2109},"After Fixing",{"type":61,"tag":1541,"props":2111,"children":2112},{},[2113,2118],{"type":61,"tag":300,"props":2114,"children":2115},{},[2116],{"type":67,"value":2117},"Save the file",{"type":61,"tag":300,"props":2119,"children":2120},{},[2121,2126,2128],{"type":61,"tag":234,"props":2122,"children":2123},{},[2124],{"type":67,"value":2125},"Retest:",{"type":67,"value":2127}," ",{"type":61,"tag":76,"props":2129,"children":2131},{"className":2130},[],[2132],{"type":67,"value":2133},"af runs trigger-wait \u003Cdag_id>",{"type":61,"tag":70,"props":2135,"children":2136},{},[2137],{"type":61,"tag":234,"props":2138,"children":2139},{},[2140],{"type":67,"value":2141},"Repeat the test → debug → fix loop until the DAG succeeds.",{"type":61,"tag":120,"props":2143,"children":2144},{},[],{"type":61,"tag":85,"props":2146,"children":2148},{"id":2147},"cli-quick-reference",[2149],{"type":67,"value":2150},"CLI Quick Reference",{"type":61,"tag":1978,"props":2152,"children":2153},{},[2154,2175],{"type":61,"tag":1982,"props":2155,"children":2156},{},[2157],{"type":61,"tag":1986,"props":2158,"children":2159},{},[2160,2165,2170],{"type":61,"tag":1990,"props":2161,"children":2162},{},[2163],{"type":67,"value":2164},"Phase",{"type":61,"tag":1990,"props":2166,"children":2167},{},[2168],{"type":67,"value":2169},"Command",{"type":61,"tag":1990,"props":2171,"children":2172},{},[2173],{"type":67,"value":2174},"Purpose",{"type":61,"tag":2001,"props":2176,"children":2177},{},[2178,2202,2223,2244,2266,2287,2307,2328,2349,2370],{"type":61,"tag":1986,"props":2179,"children":2180},{},[2181,2186,2194],{"type":61,"tag":2008,"props":2182,"children":2183},{},[2184],{"type":67,"value":2185},"Test",{"type":61,"tag":2008,"props":2187,"children":2188},{},[2189],{"type":61,"tag":76,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":67,"value":2133},{"type":61,"tag":2008,"props":2195,"children":2196},{},[2197],{"type":61,"tag":234,"props":2198,"children":2199},{},[2200],{"type":67,"value":2201},"Primary test method — start here",{"type":61,"tag":1986,"props":2203,"children":2204},{},[2205,2209,2218],{"type":61,"tag":2008,"props":2206,"children":2207},{},[2208],{"type":67,"value":2185},{"type":61,"tag":2008,"props":2210,"children":2211},{},[2212],{"type":61,"tag":76,"props":2213,"children":2215},{"className":2214},[],[2216],{"type":67,"value":2217},"af runs trigger \u003Cdag_id>",{"type":61,"tag":2008,"props":2219,"children":2220},{},[2221],{"type":67,"value":2222},"Start run (alternative)",{"type":61,"tag":1986,"props":2224,"children":2225},{},[2226,2230,2239],{"type":61,"tag":2008,"props":2227,"children":2228},{},[2229],{"type":67,"value":2185},{"type":61,"tag":2008,"props":2231,"children":2232},{},[2233],{"type":61,"tag":76,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":67,"value":2238},"af runs get \u003Cdag_id> \u003Crun_id>",{"type":61,"tag":2008,"props":2240,"children":2241},{},[2242],{"type":67,"value":2243},"Check run status",{"type":61,"tag":1986,"props":2245,"children":2246},{},[2247,2252,2261],{"type":61,"tag":2008,"props":2248,"children":2249},{},[2250],{"type":67,"value":2251},"Debug",{"type":61,"tag":2008,"props":2253,"children":2254},{},[2255],{"type":61,"tag":76,"props":2256,"children":2258},{"className":2257},[],[2259],{"type":67,"value":2260},"af runs diagnose \u003Cdag_id> \u003Crun_id>",{"type":61,"tag":2008,"props":2262,"children":2263},{},[2264],{"type":67,"value":2265},"Comprehensive failure diagnosis",{"type":61,"tag":1986,"props":2267,"children":2268},{},[2269,2273,2282],{"type":61,"tag":2008,"props":2270,"children":2271},{},[2272],{"type":67,"value":2251},{"type":61,"tag":2008,"props":2274,"children":2275},{},[2276],{"type":61,"tag":76,"props":2277,"children":2279},{"className":2278},[],[2280],{"type":67,"value":2281},"af tasks logs \u003Cdag_id> \u003Crun_id> \u003Ctask_id>",{"type":61,"tag":2008,"props":2283,"children":2284},{},[2285],{"type":67,"value":2286},"Get task output\u002Ferrors",{"type":61,"tag":1986,"props":2288,"children":2289},{},[2290,2294,2302],{"type":61,"tag":2008,"props":2291,"children":2292},{},[2293],{"type":67,"value":2251},{"type":61,"tag":2008,"props":2295,"children":2296},{},[2297],{"type":61,"tag":76,"props":2298,"children":2300},{"className":2299},[],[2301],{"type":67,"value":333},{"type":61,"tag":2008,"props":2303,"children":2304},{},[2305],{"type":67,"value":2306},"Check for parse errors (if DAG won't load)",{"type":61,"tag":1986,"props":2308,"children":2309},{},[2310,2314,2323],{"type":61,"tag":2008,"props":2311,"children":2312},{},[2313],{"type":67,"value":2251},{"type":61,"tag":2008,"props":2315,"children":2316},{},[2317],{"type":61,"tag":76,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":67,"value":2322},"af dags get \u003Cdag_id>",{"type":61,"tag":2008,"props":2324,"children":2325},{},[2326],{"type":67,"value":2327},"Verify DAG config",{"type":61,"tag":1986,"props":2329,"children":2330},{},[2331,2335,2344],{"type":61,"tag":2008,"props":2332,"children":2333},{},[2334],{"type":67,"value":2251},{"type":61,"tag":2008,"props":2336,"children":2337},{},[2338],{"type":61,"tag":76,"props":2339,"children":2341},{"className":2340},[],[2342],{"type":67,"value":2343},"af dags explore \u003Cdag_id>",{"type":61,"tag":2008,"props":2345,"children":2346},{},[2347],{"type":67,"value":2348},"Full DAG inspection",{"type":61,"tag":1986,"props":2350,"children":2351},{},[2352,2357,2365],{"type":61,"tag":2008,"props":2353,"children":2354},{},[2355],{"type":67,"value":2356},"Config",{"type":61,"tag":2008,"props":2358,"children":2359},{},[2360],{"type":61,"tag":76,"props":2361,"children":2363},{"className":2362},[],[2364],{"type":67,"value":2055},{"type":61,"tag":2008,"props":2366,"children":2367},{},[2368],{"type":67,"value":2369},"List connections",{"type":61,"tag":1986,"props":2371,"children":2372},{},[2373,2377,2385],{"type":61,"tag":2008,"props":2374,"children":2375},{},[2376],{"type":67,"value":2356},{"type":61,"tag":2008,"props":2378,"children":2379},{},[2380],{"type":61,"tag":76,"props":2381,"children":2383},{"className":2382},[],[2384],{"type":67,"value":2075},{"type":61,"tag":2008,"props":2386,"children":2387},{},[2388],{"type":67,"value":2389},"List variables",{"type":61,"tag":120,"props":2391,"children":2392},{},[],{"type":61,"tag":85,"props":2394,"children":2396},{"id":2395},"testing-scenarios",[2397],{"type":67,"value":2398},"Testing Scenarios",{"type":61,"tag":421,"props":2400,"children":2402},{"id":2401},"scenario-1-test-a-dag-happy-path",[2403],{"type":67,"value":2404},"Scenario 1: Test a DAG (Happy Path)",{"type":61,"tag":135,"props":2406,"children":2408},{"className":137,"code":2407,"language":139,"meta":140,"style":140},"af runs trigger-wait my_dag\n# Success! Done.\n",[2409],{"type":61,"tag":76,"props":2410,"children":2411},{"__ignoreMap":140},[2412,2431],{"type":61,"tag":146,"props":2413,"children":2414},{"class":148,"line":149},[2415,2419,2423,2427],{"type":61,"tag":146,"props":2416,"children":2417},{"style":163},[2418],{"type":67,"value":81},{"type":61,"tag":146,"props":2420,"children":2421},{"style":169},[2422],{"type":67,"value":259},{"type":61,"tag":146,"props":2424,"children":2425},{"style":169},[2426],{"type":67,"value":264},{"type":61,"tag":146,"props":2428,"children":2429},{"style":169},[2430],{"type":67,"value":1426},{"type":61,"tag":146,"props":2432,"children":2433},{"class":148,"line":159},[2434],{"type":61,"tag":146,"props":2435,"children":2436},{"style":153},[2437],{"type":67,"value":2438},"# Success! Done.\n",{"type":61,"tag":421,"props":2440,"children":2442},{"id":2441},"scenario-2-test-a-dag-with-failure",[2443],{"type":67,"value":2444},"Scenario 2: Test a DAG (With Failure)",{"type":61,"tag":135,"props":2446,"children":2448},{"className":137,"code":2447,"language":139,"meta":140,"style":140},"# 1. Run and wait\naf runs trigger-wait my_dag\n# Failed...\n\n# 2. Find failed tasks\naf runs diagnose my_dag manual__2025-01-14T...\n\n# 3. Get error details\naf tasks logs my_dag manual__2025-01-14T... extract_data\n\n# 4. [Fix the issue in DAG code]\n\n# 5. Retest\naf runs trigger-wait my_dag\n",[2449],{"type":61,"tag":76,"props":2450,"children":2451},{"__ignoreMap":140},[2452,2460,2479,2487,2494,2502,2525,2532,2540,2567,2574,2582,2589,2597],{"type":61,"tag":146,"props":2453,"children":2454},{"class":148,"line":149},[2455],{"type":61,"tag":146,"props":2456,"children":2457},{"style":153},[2458],{"type":67,"value":2459},"# 1. Run and wait\n",{"type":61,"tag":146,"props":2461,"children":2462},{"class":148,"line":159},[2463,2467,2471,2475],{"type":61,"tag":146,"props":2464,"children":2465},{"style":163},[2466],{"type":67,"value":81},{"type":61,"tag":146,"props":2468,"children":2469},{"style":169},[2470],{"type":67,"value":259},{"type":61,"tag":146,"props":2472,"children":2473},{"style":169},[2474],{"type":67,"value":264},{"type":61,"tag":146,"props":2476,"children":2477},{"style":169},[2478],{"type":67,"value":1426},{"type":61,"tag":146,"props":2480,"children":2481},{"class":148,"line":180},[2482],{"type":61,"tag":146,"props":2483,"children":2484},{"style":153},[2485],{"type":67,"value":2486},"# Failed...\n",{"type":61,"tag":146,"props":2488,"children":2489},{"class":148,"line":190},[2490],{"type":61,"tag":146,"props":2491,"children":2492},{"emptyLinePlaceholder":184},[2493],{"type":67,"value":187},{"type":61,"tag":146,"props":2495,"children":2496},{"class":148,"line":199},[2497],{"type":61,"tag":146,"props":2498,"children":2499},{"style":153},[2500],{"type":67,"value":2501},"# 2. Find failed tasks\n",{"type":61,"tag":146,"props":2503,"children":2504},{"class":148,"line":727},[2505,2509,2513,2517,2521],{"type":61,"tag":146,"props":2506,"children":2507},{"style":163},[2508],{"type":67,"value":81},{"type":61,"tag":146,"props":2510,"children":2511},{"style":169},[2512],{"type":67,"value":259},{"type":61,"tag":146,"props":2514,"children":2515},{"style":169},[2516],{"type":67,"value":1618},{"type":61,"tag":146,"props":2518,"children":2519},{"style":169},[2520],{"type":67,"value":511},{"type":61,"tag":146,"props":2522,"children":2523},{"style":169},[2524],{"type":67,"value":1474},{"type":61,"tag":146,"props":2526,"children":2527},{"class":148,"line":765},[2528],{"type":61,"tag":146,"props":2529,"children":2530},{"emptyLinePlaceholder":184},[2531],{"type":67,"value":187},{"type":61,"tag":146,"props":2533,"children":2534},{"class":148,"line":799},[2535],{"type":61,"tag":146,"props":2536,"children":2537},{"style":153},[2538],{"type":67,"value":2539},"# 3. Get error details\n",{"type":61,"tag":146,"props":2541,"children":2542},{"class":148,"line":808},[2543,2547,2551,2555,2559,2563],{"type":61,"tag":146,"props":2544,"children":2545},{"style":163},[2546],{"type":67,"value":81},{"type":61,"tag":146,"props":2548,"children":2549},{"style":169},[2550],{"type":67,"value":1704},{"type":61,"tag":146,"props":2552,"children":2553},{"style":169},[2554],{"type":67,"value":1709},{"type":61,"tag":146,"props":2556,"children":2557},{"style":169},[2558],{"type":67,"value":511},{"type":61,"tag":146,"props":2560,"children":2561},{"style":169},[2562],{"type":67,"value":1796},{"type":61,"tag":146,"props":2564,"children":2565},{"style":169},[2566],{"type":67,"value":1801},{"type":61,"tag":146,"props":2568,"children":2569},{"class":148,"line":834},[2570],{"type":61,"tag":146,"props":2571,"children":2572},{"emptyLinePlaceholder":184},[2573],{"type":67,"value":187},{"type":61,"tag":146,"props":2575,"children":2576},{"class":148,"line":860},[2577],{"type":61,"tag":146,"props":2578,"children":2579},{"style":153},[2580],{"type":67,"value":2581},"# 4. [Fix the issue in DAG code]\n",{"type":61,"tag":146,"props":2583,"children":2584},{"class":148,"line":1135},[2585],{"type":61,"tag":146,"props":2586,"children":2587},{"emptyLinePlaceholder":184},[2588],{"type":67,"value":187},{"type":61,"tag":146,"props":2590,"children":2591},{"class":148,"line":1144},[2592],{"type":61,"tag":146,"props":2593,"children":2594},{"style":153},[2595],{"type":67,"value":2596},"# 5. Retest\n",{"type":61,"tag":146,"props":2598,"children":2599},{"class":148,"line":1153},[2600,2604,2608,2612],{"type":61,"tag":146,"props":2601,"children":2602},{"style":163},[2603],{"type":67,"value":81},{"type":61,"tag":146,"props":2605,"children":2606},{"style":169},[2607],{"type":67,"value":259},{"type":61,"tag":146,"props":2609,"children":2610},{"style":169},[2611],{"type":67,"value":264},{"type":61,"tag":146,"props":2613,"children":2614},{"style":169},[2615],{"type":67,"value":1426},{"type":61,"tag":421,"props":2617,"children":2619},{"id":2618},"scenario-3-dag-doesnt-exist-wont-load",[2620],{"type":67,"value":2621},"Scenario 3: DAG Doesn't Exist \u002F Won't Load",{"type":61,"tag":135,"props":2623,"children":2625},{"className":137,"code":2624,"language":139,"meta":140,"style":140},"# 1. Trigger fails - DAG not found\naf runs trigger-wait my_dag\n# Error: DAG not found\n\n# 2. Find parse error\naf dags errors\n\n# 3. [Fix the issue in DAG code]\n\n# 4. Retest\naf runs trigger-wait my_dag\n",[2626],{"type":61,"tag":76,"props":2627,"children":2628},{"__ignoreMap":140},[2629,2637,2656,2664,2671,2679,2694,2701,2709,2716,2724],{"type":61,"tag":146,"props":2630,"children":2631},{"class":148,"line":149},[2632],{"type":61,"tag":146,"props":2633,"children":2634},{"style":153},[2635],{"type":67,"value":2636},"# 1. Trigger fails - DAG not found\n",{"type":61,"tag":146,"props":2638,"children":2639},{"class":148,"line":159},[2640,2644,2648,2652],{"type":61,"tag":146,"props":2641,"children":2642},{"style":163},[2643],{"type":67,"value":81},{"type":61,"tag":146,"props":2645,"children":2646},{"style":169},[2647],{"type":67,"value":259},{"type":61,"tag":146,"props":2649,"children":2650},{"style":169},[2651],{"type":67,"value":264},{"type":61,"tag":146,"props":2653,"children":2654},{"style":169},[2655],{"type":67,"value":1426},{"type":61,"tag":146,"props":2657,"children":2658},{"class":148,"line":180},[2659],{"type":61,"tag":146,"props":2660,"children":2661},{"style":153},[2662],{"type":67,"value":2663},"# Error: DAG not found\n",{"type":61,"tag":146,"props":2665,"children":2666},{"class":148,"line":190},[2667],{"type":61,"tag":146,"props":2668,"children":2669},{"emptyLinePlaceholder":184},[2670],{"type":67,"value":187},{"type":61,"tag":146,"props":2672,"children":2673},{"class":148,"line":199},[2674],{"type":61,"tag":146,"props":2675,"children":2676},{"style":153},[2677],{"type":67,"value":2678},"# 2. Find parse error\n",{"type":61,"tag":146,"props":2680,"children":2681},{"class":148,"line":727},[2682,2686,2690],{"type":61,"tag":146,"props":2683,"children":2684},{"style":163},[2685],{"type":67,"value":81},{"type":61,"tag":146,"props":2687,"children":2688},{"style":169},[2689],{"type":67,"value":1946},{"type":61,"tag":146,"props":2691,"children":2692},{"style":169},[2693],{"type":67,"value":1951},{"type":61,"tag":146,"props":2695,"children":2696},{"class":148,"line":765},[2697],{"type":61,"tag":146,"props":2698,"children":2699},{"emptyLinePlaceholder":184},[2700],{"type":67,"value":187},{"type":61,"tag":146,"props":2702,"children":2703},{"class":148,"line":799},[2704],{"type":61,"tag":146,"props":2705,"children":2706},{"style":153},[2707],{"type":67,"value":2708},"# 3. [Fix the issue in DAG code]\n",{"type":61,"tag":146,"props":2710,"children":2711},{"class":148,"line":808},[2712],{"type":61,"tag":146,"props":2713,"children":2714},{"emptyLinePlaceholder":184},[2715],{"type":67,"value":187},{"type":61,"tag":146,"props":2717,"children":2718},{"class":148,"line":834},[2719],{"type":61,"tag":146,"props":2720,"children":2721},{"style":153},[2722],{"type":67,"value":2723},"# 4. Retest\n",{"type":61,"tag":146,"props":2725,"children":2726},{"class":148,"line":860},[2727,2731,2735,2739],{"type":61,"tag":146,"props":2728,"children":2729},{"style":163},[2730],{"type":67,"value":81},{"type":61,"tag":146,"props":2732,"children":2733},{"style":169},[2734],{"type":67,"value":259},{"type":61,"tag":146,"props":2736,"children":2737},{"style":169},[2738],{"type":67,"value":264},{"type":61,"tag":146,"props":2740,"children":2741},{"style":169},[2742],{"type":67,"value":1426},{"type":61,"tag":421,"props":2744,"children":2746},{"id":2745},"scenario-4-debug-a-failed-scheduled-run",[2747],{"type":67,"value":2748},"Scenario 4: Debug a Failed Scheduled Run",{"type":61,"tag":135,"props":2750,"children":2752},{"className":137,"code":2751,"language":139,"meta":140,"style":140},"# 1. Get failure summary\naf runs diagnose my_dag scheduled__2025-01-14T...\n\n# 2. Get error from failed task\naf tasks logs my_dag scheduled__2025-01-14T... failed_task_id\n\n# 3. [Fix the issue]\n\n# 4. Retest\naf runs trigger-wait my_dag\n",[2753],{"type":61,"tag":76,"props":2754,"children":2755},{"__ignoreMap":140},[2756,2764,2788,2795,2803,2832,2839,2847,2854,2861],{"type":61,"tag":146,"props":2757,"children":2758},{"class":148,"line":149},[2759],{"type":61,"tag":146,"props":2760,"children":2761},{"style":153},[2762],{"type":67,"value":2763},"# 1. Get failure summary\n",{"type":61,"tag":146,"props":2765,"children":2766},{"class":148,"line":159},[2767,2771,2775,2779,2783],{"type":61,"tag":146,"props":2768,"children":2769},{"style":163},[2770],{"type":67,"value":81},{"type":61,"tag":146,"props":2772,"children":2773},{"style":169},[2774],{"type":67,"value":259},{"type":61,"tag":146,"props":2776,"children":2777},{"style":169},[2778],{"type":67,"value":1618},{"type":61,"tag":146,"props":2780,"children":2781},{"style":169},[2782],{"type":67,"value":511},{"type":61,"tag":146,"props":2784,"children":2785},{"style":169},[2786],{"type":67,"value":2787}," scheduled__2025-01-14T...\n",{"type":61,"tag":146,"props":2789,"children":2790},{"class":148,"line":180},[2791],{"type":61,"tag":146,"props":2792,"children":2793},{"emptyLinePlaceholder":184},[2794],{"type":67,"value":187},{"type":61,"tag":146,"props":2796,"children":2797},{"class":148,"line":190},[2798],{"type":61,"tag":146,"props":2799,"children":2800},{"style":153},[2801],{"type":67,"value":2802},"# 2. Get error from failed task\n",{"type":61,"tag":146,"props":2804,"children":2805},{"class":148,"line":199},[2806,2810,2814,2818,2822,2827],{"type":61,"tag":146,"props":2807,"children":2808},{"style":163},[2809],{"type":67,"value":81},{"type":61,"tag":146,"props":2811,"children":2812},{"style":169},[2813],{"type":67,"value":1704},{"type":61,"tag":146,"props":2815,"children":2816},{"style":169},[2817],{"type":67,"value":1709},{"type":61,"tag":146,"props":2819,"children":2820},{"style":169},[2821],{"type":67,"value":511},{"type":61,"tag":146,"props":2823,"children":2824},{"style":169},[2825],{"type":67,"value":2826}," scheduled__2025-01-14T...",{"type":61,"tag":146,"props":2828,"children":2829},{"style":169},[2830],{"type":67,"value":2831}," failed_task_id\n",{"type":61,"tag":146,"props":2833,"children":2834},{"class":148,"line":727},[2835],{"type":61,"tag":146,"props":2836,"children":2837},{"emptyLinePlaceholder":184},[2838],{"type":67,"value":187},{"type":61,"tag":146,"props":2840,"children":2841},{"class":148,"line":765},[2842],{"type":61,"tag":146,"props":2843,"children":2844},{"style":153},[2845],{"type":67,"value":2846},"# 3. [Fix the issue]\n",{"type":61,"tag":146,"props":2848,"children":2849},{"class":148,"line":799},[2850],{"type":61,"tag":146,"props":2851,"children":2852},{"emptyLinePlaceholder":184},[2853],{"type":67,"value":187},{"type":61,"tag":146,"props":2855,"children":2856},{"class":148,"line":808},[2857],{"type":61,"tag":146,"props":2858,"children":2859},{"style":153},[2860],{"type":67,"value":2723},{"type":61,"tag":146,"props":2862,"children":2863},{"class":148,"line":834},[2864,2868,2872,2876],{"type":61,"tag":146,"props":2865,"children":2866},{"style":163},[2867],{"type":67,"value":81},{"type":61,"tag":146,"props":2869,"children":2870},{"style":169},[2871],{"type":67,"value":259},{"type":61,"tag":146,"props":2873,"children":2874},{"style":169},[2875],{"type":67,"value":264},{"type":61,"tag":146,"props":2877,"children":2878},{"style":169},[2879],{"type":67,"value":1426},{"type":61,"tag":421,"props":2881,"children":2883},{"id":2882},"scenario-5-test-with-custom-configuration",[2884],{"type":67,"value":2885},"Scenario 5: Test with Custom Configuration",{"type":61,"tag":135,"props":2887,"children":2889},{"className":137,"code":2888,"language":139,"meta":140,"style":140},"af runs trigger-wait my_dag --conf '{\"env\": \"staging\", \"batch_size\": 100}' --timeout 600\n",[2890],{"type":61,"tag":76,"props":2891,"children":2892},{"__ignoreMap":140},[2893],{"type":61,"tag":146,"props":2894,"children":2895},{"class":148,"line":149},[2896,2900,2904,2908,2912,2917,2922,2927,2932,2936],{"type":61,"tag":146,"props":2897,"children":2898},{"style":163},[2899],{"type":67,"value":81},{"type":61,"tag":146,"props":2901,"children":2902},{"style":169},[2903],{"type":67,"value":259},{"type":61,"tag":146,"props":2905,"children":2906},{"style":169},[2907],{"type":67,"value":264},{"type":61,"tag":146,"props":2909,"children":2910},{"style":169},[2911],{"type":67,"value":511},{"type":61,"tag":146,"props":2913,"children":2914},{"style":169},[2915],{"type":67,"value":2916}," --conf",{"type":61,"tag":146,"props":2918,"children":2919},{"style":267},[2920],{"type":67,"value":2921}," '",{"type":61,"tag":146,"props":2923,"children":2924},{"style":169},[2925],{"type":67,"value":2926},"{\"env\": \"staging\", \"batch_size\": 100}",{"type":61,"tag":146,"props":2928,"children":2929},{"style":267},[2930],{"type":67,"value":2931},"'",{"type":61,"tag":146,"props":2933,"children":2934},{"style":169},[2935],{"type":67,"value":470},{"type":61,"tag":146,"props":2937,"children":2938},{"style":473},[2939],{"type":67,"value":2940}," 600\n",{"type":61,"tag":421,"props":2942,"children":2944},{"id":2943},"scenario-6-long-running-dag",[2945],{"type":67,"value":2946},"Scenario 6: Long-Running DAG",{"type":61,"tag":135,"props":2948,"children":2950},{"className":137,"code":2949,"language":139,"meta":140,"style":140},"# Wait up to 1 hour\naf runs trigger-wait my_dag --timeout 3600\n\n# If timed out, check current state\naf runs get my_dag manual__2025-01-14T...\n",[2951],{"type":61,"tag":76,"props":2952,"children":2953},{"__ignoreMap":140},[2954,2962,2990,2997,3005],{"type":61,"tag":146,"props":2955,"children":2956},{"class":148,"line":149},[2957],{"type":61,"tag":146,"props":2958,"children":2959},{"style":153},[2960],{"type":67,"value":2961},"# Wait up to 1 hour\n",{"type":61,"tag":146,"props":2963,"children":2964},{"class":148,"line":159},[2965,2969,2973,2977,2981,2985],{"type":61,"tag":146,"props":2966,"children":2967},{"style":163},[2968],{"type":67,"value":81},{"type":61,"tag":146,"props":2970,"children":2971},{"style":169},[2972],{"type":67,"value":259},{"type":61,"tag":146,"props":2974,"children":2975},{"style":169},[2976],{"type":67,"value":264},{"type":61,"tag":146,"props":2978,"children":2979},{"style":169},[2980],{"type":67,"value":511},{"type":61,"tag":146,"props":2982,"children":2983},{"style":169},[2984],{"type":67,"value":470},{"type":61,"tag":146,"props":2986,"children":2987},{"style":473},[2988],{"type":67,"value":2989}," 3600\n",{"type":61,"tag":146,"props":2991,"children":2992},{"class":148,"line":180},[2993],{"type":61,"tag":146,"props":2994,"children":2995},{"emptyLinePlaceholder":184},[2996],{"type":67,"value":187},{"type":61,"tag":146,"props":2998,"children":2999},{"class":148,"line":190},[3000],{"type":61,"tag":146,"props":3001,"children":3002},{"style":153},[3003],{"type":67,"value":3004},"# If timed out, check current state\n",{"type":61,"tag":146,"props":3006,"children":3007},{"class":148,"line":199},[3008,3012,3016,3020,3024],{"type":61,"tag":146,"props":3009,"children":3010},{"style":163},[3011],{"type":67,"value":81},{"type":61,"tag":146,"props":3013,"children":3014},{"style":169},[3015],{"type":67,"value":259},{"type":61,"tag":146,"props":3017,"children":3018},{"style":169},[3019],{"type":67,"value":1465},{"type":61,"tag":146,"props":3021,"children":3022},{"style":169},[3023],{"type":67,"value":511},{"type":61,"tag":146,"props":3025,"children":3026},{"style":169},[3027],{"type":67,"value":1474},{"type":61,"tag":120,"props":3029,"children":3030},{},[],{"type":61,"tag":85,"props":3032,"children":3034},{"id":3033},"debugging-tips",[3035],{"type":67,"value":3036},"Debugging Tips",{"type":61,"tag":421,"props":3038,"children":3040},{"id":3039},"common-error-patterns",[3041],{"type":67,"value":3042},"Common Error Patterns",{"type":61,"tag":70,"props":3044,"children":3045},{},[3046],{"type":61,"tag":234,"props":3047,"children":3048},{},[3049],{"type":67,"value":3050},"Connection Refused \u002F Timeout:",{"type":61,"tag":296,"props":3052,"children":3053},{},[3054,3065,3070],{"type":61,"tag":300,"props":3055,"children":3056},{},[3057,3058,3063],{"type":67,"value":2049},{"type":61,"tag":76,"props":3059,"children":3061},{"className":3060},[],[3062],{"type":67,"value":2055},{"type":67,"value":3064}," for correct host\u002Fport",{"type":61,"tag":300,"props":3066,"children":3067},{},[3068],{"type":67,"value":3069},"Verify network connectivity to external system",{"type":61,"tag":300,"props":3071,"children":3072},{},[3073],{"type":67,"value":3074},"Check if connection credentials are correct",{"type":61,"tag":70,"props":3076,"children":3077},{},[3078],{"type":61,"tag":234,"props":3079,"children":3080},{},[3081],{"type":67,"value":3082},"ModuleNotFoundError:",{"type":61,"tag":296,"props":3084,"children":3085},{},[3086,3096],{"type":61,"tag":300,"props":3087,"children":3088},{},[3089,3091],{"type":67,"value":3090},"Package missing from ",{"type":61,"tag":76,"props":3092,"children":3094},{"className":3093},[],[3095],{"type":67,"value":2036},{"type":61,"tag":300,"props":3097,"children":3098},{},[3099],{"type":67,"value":3100},"After adding, may need environment restart",{"type":61,"tag":70,"props":3102,"children":3103},{},[3104],{"type":61,"tag":234,"props":3105,"children":3106},{},[3107],{"type":67,"value":3108},"PermissionError:",{"type":61,"tag":296,"props":3110,"children":3111},{},[3112,3117],{"type":61,"tag":300,"props":3113,"children":3114},{},[3115],{"type":67,"value":3116},"Check IAM roles, database grants, API keys",{"type":61,"tag":300,"props":3118,"children":3119},{},[3120],{"type":67,"value":3121},"Verify connection has correct credentials",{"type":61,"tag":70,"props":3123,"children":3124},{},[3125],{"type":61,"tag":234,"props":3126,"children":3127},{},[3128],{"type":67,"value":3129},"Task Timeout:",{"type":61,"tag":296,"props":3131,"children":3132},{},[3133,3138,3143],{"type":61,"tag":300,"props":3134,"children":3135},{},[3136],{"type":67,"value":3137},"Query or operation taking too long",{"type":61,"tag":300,"props":3139,"children":3140},{},[3141],{"type":67,"value":3142},"Consider adding timeout parameter to task",{"type":61,"tag":300,"props":3144,"children":3145},{},[3146],{"type":67,"value":3147},"Optimize underlying query\u002Foperation",{"type":61,"tag":421,"props":3149,"children":3151},{"id":3150},"reading-task-logs",[3152],{"type":67,"value":3153},"Reading Task Logs",{"type":61,"tag":70,"props":3155,"children":3156},{},[3157],{"type":67,"value":3158},"Task logs typically show:",{"type":61,"tag":1541,"props":3160,"children":3161},{},[3162,3167,3172,3177,3182],{"type":61,"tag":300,"props":3163,"children":3164},{},[3165],{"type":67,"value":3166},"Task start timestamp",{"type":61,"tag":300,"props":3168,"children":3169},{},[3170],{"type":67,"value":3171},"Any print\u002Flog statements from task code",{"type":61,"tag":300,"props":3173,"children":3174},{},[3175],{"type":67,"value":3176},"Return value (for @task decorated functions)",{"type":61,"tag":300,"props":3178,"children":3179},{},[3180],{"type":67,"value":3181},"Exception + full stack trace (if failed)",{"type":61,"tag":300,"props":3183,"children":3184},{},[3185],{"type":67,"value":3186},"Task end timestamp and duration",{"type":61,"tag":70,"props":3188,"children":3189},{},[3190],{"type":61,"tag":234,"props":3191,"children":3192},{},[3193],{"type":67,"value":3194},"Focus on the exception at the bottom of failed task logs.",{"type":61,"tag":421,"props":3196,"children":3198},{"id":3197},"on-astro",[3199],{"type":67,"value":3200},"On Astro",{"type":61,"tag":70,"props":3202,"children":3203},{},[3204],{"type":67,"value":3205},"Astro deployments support environment promotion, which helps structure your testing workflow:",{"type":61,"tag":296,"props":3207,"children":3208},{},[3209,3227,3237,3247],{"type":61,"tag":300,"props":3210,"children":3211},{},[3212,3217,3219,3225],{"type":61,"tag":234,"props":3213,"children":3214},{},[3215],{"type":67,"value":3216},"Dev deployment",{"type":67,"value":3218},": Test DAGs freely with ",{"type":61,"tag":76,"props":3220,"children":3222},{"className":3221},[],[3223],{"type":67,"value":3224},"astro deploy --dags",{"type":67,"value":3226}," for fast iteration",{"type":61,"tag":300,"props":3228,"children":3229},{},[3230,3235],{"type":61,"tag":234,"props":3231,"children":3232},{},[3233],{"type":67,"value":3234},"Staging deployment",{"type":67,"value":3236},": Run integration tests against production-like data",{"type":61,"tag":300,"props":3238,"children":3239},{},[3240,3245],{"type":61,"tag":234,"props":3241,"children":3242},{},[3243],{"type":67,"value":3244},"Production deployment",{"type":67,"value":3246},": Deploy only after validation in lower environments",{"type":61,"tag":300,"props":3248,"children":3249},{},[3250],{"type":67,"value":3251},"Use separate Astro deployments for each environment and promote code through them",{"type":61,"tag":120,"props":3253,"children":3254},{},[],{"type":61,"tag":85,"props":3256,"children":3258},{"id":3257},"related-skills",[3259],{"type":67,"value":3260},"Related Skills",{"type":61,"tag":296,"props":3262,"children":3263},{},[3264,3274,3284],{"type":61,"tag":300,"props":3265,"children":3266},{},[3267,3272],{"type":61,"tag":234,"props":3268,"children":3269},{},[3270],{"type":67,"value":3271},"authoring-dags",{"type":67,"value":3273},": For creating new DAGs (includes validation before testing)",{"type":61,"tag":300,"props":3275,"children":3276},{},[3277,3282],{"type":61,"tag":234,"props":3278,"children":3279},{},[3280],{"type":67,"value":3281},"debugging-dags",{"type":67,"value":3283},": For general Airflow troubleshooting",{"type":61,"tag":300,"props":3285,"children":3286},{},[3287,3292],{"type":61,"tag":234,"props":3288,"children":3289},{},[3290],{"type":67,"value":3291},"deploying-airflow",{"type":67,"value":3293},": For deploying DAGs to production after testing",{"type":61,"tag":3295,"props":3296,"children":3297},"style",{},[3298],{"type":67,"value":3299},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3301,"total":3466},[3302,3316,3328,3345,3359,3376,3389,3401,3416,3430,3440,3453],{"slug":14,"name":14,"fn":3303,"description":3304,"org":3305,"tags":3306,"stars":25,"repoUrl":26,"updatedAt":3315},"manage and troubleshoot Airflow via CLI","Queries, manages, and troubleshoots Apache Airflow using the `af` CLI. Use when working with anything related to Airflow - a DAG, a DAG run, a task log, an import or parse error, a broken DAG, or any Airflow operation. Covers listing and triggering DAGs, retrying runs, reading task logs, diagnosing failures, debugging import and parse errors, checking connections, variables and pools, exploring the REST API, and monitoring health (for example \"trigger a pipeline\", \"retry a run\", \"list connections\", \"check Airflow health\", \"why did my DAG fail\"). This is the entrypoint that routes to sibling skills for authoring, testing, deploying, and migrating Airflow 2 to 3. Not for warehouse\u002FSQL analytics on Airflow metadata tables (use analyzing-data); for deep root-cause reports use debugging-dags or airflow-investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3307,3308,3311,3314],{"name":13,"slug":14,"type":15},{"name":3309,"slug":3310,"type":15},"CLI","cli",{"name":3312,"slug":3313,"type":15},"Data Pipeline","data-pipeline",{"name":23,"slug":24,"type":15},"2026-04-06T18:01:43.992997",{"slug":3317,"name":3317,"fn":3318,"description":3319,"org":3320,"tags":3321,"stars":25,"repoUrl":26,"updatedAt":3327},"airflow-hitl","add human-in-the-loop steps to Airflow DAGs","Builds human-in-the-loop (HITL) Airflow workflows - approval gates, form input, and human-driven branching. Use when a DAG needs a human in the loop - an approval or reject step, sign-off before a task runs, a decision or approval UI, branching on a human choice, or collecting form input mid-run; also on mentions of ApprovalOperator, HITLOperator, HITLBranchOperator, HITLEntryOperator, or HITLTrigger. Requires Airflow 3.1+. Not for AI\u002FLLM task calls (see migrating-ai-sdk-to-common-ai).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3322,3323,3326],{"name":13,"slug":14,"type":15},{"name":3324,"slug":3325,"type":15},"Approvals","approvals",{"name":3312,"slug":3313,"type":15},"2026-04-06T18:01:46.758548",{"slug":3329,"name":3329,"fn":3330,"description":3331,"org":3332,"tags":3333,"stars":25,"repoUrl":26,"updatedAt":3344},"airflow-plugins","build Airflow UI plugins","Builds Airflow 3.1+ plugins that embed FastAPI apps, custom UI pages, React components, middleware, macros, and operator links directly into the Airflow UI. Use when building anything custom inside Airflow 3.1+ that involves Python and a browser-facing interface - creating an Airflow plugin, adding a custom UI page or nav entry, building FastAPI-backed endpoints inside Airflow, serving static assets from a plugin, embedding a React app, adding middleware to the API server, creating custom operator extra links, or calling the Airflow REST API from inside a plugin; also when AirflowPlugin, fastapi_apps, external_views, react_apps, or plugin registration come up.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3334,3335,3338,3341],{"name":13,"slug":14,"type":15},{"name":3336,"slug":3337,"type":15},"Plugin Development","plugin-development",{"name":3339,"slug":3340,"type":15},"Python","python",{"name":3342,"slug":3343,"type":15},"UI Components","ui-components","2026-04-06T18:01:56.827891",{"slug":3346,"name":3346,"fn":3347,"description":3348,"org":3349,"tags":3350,"stars":25,"repoUrl":26,"updatedAt":3358},"airflow-state-store","persist Airflow task and asset state","Persists task and asset state across retries and DAG runs using Airflow 3.3's AIP-103 key\u002Fvalue stores (`task_state_store`, `asset_state_store`) and the crash-safe `ResumableJobMixin`. Use when the user asks about task state store, checkpointing in tasks, persisting state across retries, job IDs surviving worker crashes, watermarks, asset metadata, resumable tasks, crash-safe operators, or \"what's new in Airflow 3.3\". Also use proactively when reading a DAG that uses Variables or XCom for intra-task coordination state — flag the anti-pattern and recommend task_state_store or asset_state_store instead. Requires Airflow 3.3+.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3351,3352,3354,3355],{"name":13,"slug":14,"type":15},{"name":3353,"slug":39,"type":15},"Data Engineering",{"name":3312,"slug":3313,"type":15},{"name":3356,"slug":3357,"type":15},"Operations","operations","2026-07-07T06:43:11.160671",{"slug":3360,"name":3360,"fn":3361,"description":3362,"org":3363,"tags":3364,"stars":25,"repoUrl":26,"updatedAt":3375},"analyzing-data","query data warehouses for business questions","Queries the data warehouse with SQL and answers business questions about data. Use when answering anything that needs warehouse data - counts, metrics, trends, aggregations, joins across tables, data lookups, or ad-hoc SQL analysis (for example \"who uses X\", \"how many Y\", \"show me Z\", \"find customers\", \"what is the count\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3365,3368,3371,3372],{"name":3366,"slug":3367,"type":15},"Analytics","analytics",{"name":3369,"slug":3370,"type":15},"Data Analysis","data-analysis",{"name":3353,"slug":39,"type":15},{"name":3373,"slug":3374,"type":15},"SQL","sql","2026-04-06T18:01:49.599775",{"slug":3377,"name":3377,"fn":3378,"description":3379,"org":3380,"tags":3381,"stars":25,"repoUrl":26,"updatedAt":3388},"annotating-task-lineage","annotate Airflow tasks with data lineage","Annotate Airflow tasks with data lineage using inlets and outlets. Use when the user wants to add lineage metadata to tasks, specify input\u002Foutput datasets, or enable lineage tracking for operators without built-in OpenLineage extraction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3382,3383,3384,3385],{"name":13,"slug":14,"type":15},{"name":3353,"slug":39,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3386,"slug":3387,"type":15},"Observability","observability","2026-04-06T18:02:03.487365",{"slug":3271,"name":3271,"fn":3390,"description":3391,"org":3392,"tags":3393,"stars":25,"repoUrl":26,"updatedAt":3400},"author Airflow DAGs","Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up\u002Fdownstream task. ANY request shaped like 'add a DAG named X', 'write a pipeline', 'add a task that runs after Y', or 'extend the DAG'. For testing and debugging DAGs, see the testing-dags skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3394,3395,3396,3399],{"name":13,"slug":14,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3397,"slug":3398,"type":15},"ETL","etl",{"name":3339,"slug":3340,"type":15},"2026-04-06T18:01:52.679888",{"slug":3402,"name":3402,"fn":3403,"description":3404,"org":3405,"tags":3406,"stars":25,"repoUrl":26,"updatedAt":3415},"authoring-go-sdk-tasks","implement Airflow tasks in Go","Writes Airflow task logic in Go using the Airflow Go SDK. Use when the user wants to implement Airflow tasks in Go, asks about `BundleProvider`\u002F`RegisterDags`, the `bundlev1` Registry\u002FDag interfaces, registering Go tasks (`AddTask`\u002F`AddTaskWithName`), dependency injection by parameter type (`context.Context`, `sdk.TIRunContext`, `*slog.Logger`, `sdk.Client`), or reading connections\u002Fvariables\u002FXComs from Go. This skill covers the Go-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building\u002Fpacking\u002Fshipping the bundle see deploying-go-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3407,3408,3411,3412],{"name":13,"slug":14,"type":15},{"name":3409,"slug":3410,"type":15},"API Development","api-development",{"name":3312,"slug":3313,"type":15},{"name":3413,"slug":3414,"type":15},"Go","go","2026-07-11T05:39:13.552213",{"slug":3417,"name":3417,"fn":3418,"description":3419,"org":3420,"tags":3421,"stars":25,"repoUrl":26,"updatedAt":3429},"authoring-java-sdk-tasks","implement Airflow tasks in Java","Writes Airflow task logic in Java, Kotlin, or any JVM language using the Airflow Java SDK. Use when the user wants to implement Airflow tasks in Java\u002FJVM, asks about `@Builder.Dag`\u002F`@Builder.Task`\u002F`@Builder.XCom`, the `Task`\u002F`BundleBuilder` interfaces, reading connections\u002Fvariables\u002FXComs from Java, the JSON-to-Java type mapping, or logging from Java tasks. This skill covers the Java-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building\u002Fshipping the bundle see deploying-java-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3422,3423,3426],{"name":3312,"slug":3313,"type":15},{"name":3424,"slug":3425,"type":15},"Engineering","engineering",{"name":3427,"slug":3428,"type":15},"Java","java","2026-07-18T05:48:13.374003",{"slug":3431,"name":3431,"fn":3432,"description":3433,"org":3434,"tags":3435,"stars":25,"repoUrl":26,"updatedAt":3439},"authoring-language-sdk-tasks","implement non-Python Airflow tasks","The language-neutral foundation for Airflow language SDKs — implement task logic in a non-Python language while the DAG stays in Python. Use when the user wants to run an Airflow task in another language (Java, Kotlin, Go, or other JVM\u002Fnative languages), asks how the Python `@task.stub` pairs with native task code, how task\u002FDAG IDs must match across the two sides, how data passes via XCom as JSON, or which language SDKs exist. This skill owns the shared Python-stub pattern and conceptual model; for a specific language's native API, build, and runtime, use that language's skill (e.g. authoring-java-sdk-tasks, authoring-go-sdk-tasks).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3436,3437,3438],{"name":13,"slug":14,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3424,"slug":3425,"type":15},"2026-07-18T05:11:54.496539",{"slug":3441,"name":3441,"fn":3442,"description":3443,"org":3444,"tags":3445,"stars":25,"repoUrl":26,"updatedAt":3452},"blueprint","build reusable Airflow task group templates","Define reusable Airflow task group templates with Pydantic validation and compose DAGs from YAML. Use when creating blueprint templates, composing DAGs from YAML, validating configurations, or enabling no-code DAG authoring for non-engineers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3446,3447,3448,3449],{"name":13,"slug":14,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3397,"slug":3398,"type":15},{"name":3450,"slug":3451,"type":15},"Templates","templates","2026-04-06T18:01:45.361425",{"slug":3454,"name":3454,"fn":3455,"description":3456,"org":3457,"tags":3458,"stars":25,"repoUrl":26,"updatedAt":3465},"checking-freshness","check data freshness in warehouses","Quick data freshness check. Use when the user asks if data is up to date, when a table was last updated, if data is stale, or needs to verify data currency before using it.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3459,3460,3461,3464],{"name":13,"slug":14,"type":15},{"name":3353,"slug":39,"type":15},{"name":3462,"slug":3463,"type":15},"Data Quality","data-quality",{"name":3397,"slug":3398,"type":15},"2026-04-06T18:02:02.138565",34,{"items":3468,"total":3466},[3469,3476,3482,3489,3496,3503,3510],{"slug":14,"name":14,"fn":3303,"description":3304,"org":3470,"tags":3471,"stars":25,"repoUrl":26,"updatedAt":3315},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3472,3473,3474,3475],{"name":13,"slug":14,"type":15},{"name":3309,"slug":3310,"type":15},{"name":3312,"slug":3313,"type":15},{"name":23,"slug":24,"type":15},{"slug":3317,"name":3317,"fn":3318,"description":3319,"org":3477,"tags":3478,"stars":25,"repoUrl":26,"updatedAt":3327},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3479,3480,3481],{"name":13,"slug":14,"type":15},{"name":3324,"slug":3325,"type":15},{"name":3312,"slug":3313,"type":15},{"slug":3329,"name":3329,"fn":3330,"description":3331,"org":3483,"tags":3484,"stars":25,"repoUrl":26,"updatedAt":3344},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3485,3486,3487,3488],{"name":13,"slug":14,"type":15},{"name":3336,"slug":3337,"type":15},{"name":3339,"slug":3340,"type":15},{"name":3342,"slug":3343,"type":15},{"slug":3346,"name":3346,"fn":3347,"description":3348,"org":3490,"tags":3491,"stars":25,"repoUrl":26,"updatedAt":3358},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3492,3493,3494,3495],{"name":13,"slug":14,"type":15},{"name":3353,"slug":39,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3356,"slug":3357,"type":15},{"slug":3360,"name":3360,"fn":3361,"description":3362,"org":3497,"tags":3498,"stars":25,"repoUrl":26,"updatedAt":3375},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3499,3500,3501,3502],{"name":3366,"slug":3367,"type":15},{"name":3369,"slug":3370,"type":15},{"name":3353,"slug":39,"type":15},{"name":3373,"slug":3374,"type":15},{"slug":3377,"name":3377,"fn":3378,"description":3379,"org":3504,"tags":3505,"stars":25,"repoUrl":26,"updatedAt":3388},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3506,3507,3508,3509],{"name":13,"slug":14,"type":15},{"name":3353,"slug":39,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3386,"slug":3387,"type":15},{"slug":3271,"name":3271,"fn":3390,"description":3391,"org":3511,"tags":3512,"stars":25,"repoUrl":26,"updatedAt":3400},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3513,3514,3515,3516],{"name":13,"slug":14,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3397,"slug":3398,"type":15},{"name":3339,"slug":3340,"type":15}]