[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-datadog-dd-unblock-pr":3,"mdc--5mrb3o-key":38,"related-org-datadog-dd-unblock-pr":1581,"related-repo-datadog-dd-unblock-pr":1716},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":33,"sourceUrl":36,"mdContent":37},"dd-unblock-pr","diagnose and unblock CI pipelines","Load when investigating a failing PR CI pipeline or checking PR health. Attributes each CI failure as flaky, infra, or regression, proposes a targeted action, and reports code coverage.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"datadog","Datadog","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fdatadog.png","DataDog",[13,17,18,21],{"name":14,"slug":15,"type":16},"GitHub","github","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"CI\u002FCD","ci-cd",{"name":22,"slug":23,"type":16},"Debugging","debugging",952,"https:\u002F\u002Fgithub.com\u002FDataDog\u002Fpup","2026-07-15T05:38:12.359316",null,90,[30,31,8,32],"cli","client","observability",{"repoUrl":25,"stars":24,"forks":28,"topics":34,"description":35},[30,31,8,32],"Give your AI agent a Pup — a CLI companion with 200+ commands across 33+ Datadog products.","https:\u002F\u002Fgithub.com\u002FDataDog\u002Fpup\u002Ftree\u002FHEAD\u002Fskills\u002Fdd-unblock-pr","---\nname: dd-unblock-pr\ndescription: Load when investigating a failing PR CI pipeline or checking PR health. Attributes each CI failure as flaky, infra, or regression, proposes a targeted action, and reports code coverage.\nmetadata:\n  version: \"1.1.0\"\n  author: datadog-labs\n  repository: https:\u002F\u002Fgithub.com\u002Fdatadog-labs\u002Fagent-skills\n  tags: datadog,ci,cicd,flaky,flaky-tests,pipeline\n  alwaysApply: \"false\"\n---\n\n# Unblock PR\n\nOne-line summary: Investigate a failing PR CI pipeline — attribute each failure as flaky, infra, or regression and propose a targeted action.\n\nRequires: `dd-pup` skill (pup CLI installed and authenticated), `dd-triage-flaky-test` skill (for flaky failure deep investigation).\n\n---\n\n## Input\n\n| Parameter | Description |\n|---|---|\n| PR branch | The branch under investigation (e.g. `my-feature-branch`) |\n| Repository | Lowercase, no-schema URL (e.g. `github.com\u002Forg\u002Frepo`). Derive from `git remote get-url origin` if not provided. |\n\n---\n\n## Workflow\n\n### STEP 0 — Parse Input\n\nDerive repository ID and default branch from git if not provided:\n\n```bash\n# Repository ID: fully lowercase, no-schema URL (the API rejects mixed-case)\ngit remote get-url origin\n# Strip protocol and trailing .git, then lowercase the result\n# e.g. https:\u002F\u002Fgithub.com\u002FDataDog\u002Fmy-repo.git → github.com\u002Fdatadog\u002Fmy-repo\n\n# Default branch\ngit symbolic-ref refs\u002Fremotes\u002Forigin\u002FHEAD\n# Strip refs\u002Fremotes\u002Forigin\u002F prefix — fall back to main if unset\n```\n\n### STEP 1 — Get PR CI Summary (run both in parallel)\n\n**Pipeline failures (job level):**\n```bash\npup cicd events search \\\n  --query \"@ci.status:error @git.branch:\u003Cbranch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --level job \\\n  --from 24h \\\n  --limit 50\n```\n\n**Test failures:**\n```bash\npup cicd tests search \\\n  --query \"@test.status:fail @git.branch:\u003Cbranch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --from 24h \\\n  --limit 50\n```\n\nRun both queries in parallel. Collect all distinct `@test.service` values from test event results. If more than one distinct service is found, note each separately in the triage brief — do not collapse them into a single service filter. If pipeline results contain only infrastructure job types (build, lint, deploy) with no test-runner output, discard test search results and skip to STEP 3.\n\n### STEP 1.5 — Fetch Code Coverage (run in parallel with STEP 1)\n\nThis step runs unconditionally — coverage context is valuable whether CI is red or green.\n\nThe `--repo` value must be fully lowercase (the API rejects mixed-case). Normalize before calling:\n```bash\nrepo_lower=$(echo \"\u003Crepo>\" | tr '[:upper:]' '[:lower:]')\npup code-coverage branch-summary \\\n  --repo \"$repo_lower\" \\\n  --branch \"\u003Cbranch>\"\n```\n\nIf the command returns no data or exits with an error, report \"No data available\" for Coverage in the PR Health section.\n\nNote: Code quality and security violation counts are not available in pup — those lines always show \"No data available\".\n\n### STEP 2 — Blame Guard per Failing Job\n\nFirst check whether `@error_classification.domain` \u002F `@error_classification.type` are present on job events from STEP 1 — if populated, use them as primary classification signals.\n\nFor each failing job where classification is still needed, run both checks in parallel:\n\n**Default branch check** — was this job already failing before this PR?\n```bash\npup cicd events aggregate \\\n  --query \"@ci.status:error @ci.job.name:\\\"\u003Cjob>\\\" @git.branch:\u003Cdefault-branch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --compute count \\\n  --from 24h\n```\n\n**Blast radius check** — is this job failing on other branches too?\n```bash\npup cicd events aggregate \\\n  --query \"@ci.status:error @ci.job.name:\\\"\u003Cjob>\\\" @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --compute count \\\n  --group-by \"@git.branch\" \\\n  --from 24h\n```\n\nPerformance fallback: if the blast radius query is slow or times out, skip it and rely on the default branch check alone.\n\n### STEP 3 — Classify Each Failure\n\n**Priority order:**\n1. If `@error_classification.domain` \u002F `@error_classification.type` present → use as primary signal\n2. If test failure AND test appears in flaky tests with `flaky_test_state:active`:\n   ```bash\n   pup cicd flaky-tests search \\\n     --query \"flaky_test_state:active @test.name:\\\"\u003Ctest-name>\\\" @git.repository.id_v2:\\\"\u003Crepo>\\\"\"\n   ```\n   → **flaky**\n3. Use blame guard results:\n\n| Failing on default branch? | Failing on ≥3 other branches? | Classification |\n|---|---|---|\n| Yes | Yes | **infra** (pre-existing, widespread) |\n| Yes | No | **infra** (pre-existing on default branch) |\n| No | No | **regression** (introduced by this PR) |\n| No | Yes | **flaky** (intermittent, cross-branch) |\n| Insufficient data | — | **unknown** |\n\n### STEP 4 — Produce Triage Brief\n\nOne entry per failing job:\n\n```\nPR CI Triage Brief\n==================\nBranch:   \u003Cbranch>\nRepo:     \u003Crepo>\n\nJob: \u003Cjob-name>\n  Classification:  \u003Cflaky | infra | regression | unknown>\n  Evidence:        \u003C1 key data point — error message, pipeline count, or test result>\n  Confidence:      \u003Chigh | medium | low>\n  Recommended:     \u003Caction>\n\n[repeat for each failing job]\n\nOverall: \u003CN> failures — \u003Ce.g. \"1 regression, 1 flaky, 1 infra\">\n\nPR Health\n=========\nCoverage:   \u003CX>% on \u003Cbranch> | No data available\nQuality:    No data available\nSecurity:   No data available\n```\n\nAll three lines always appear.\n\n### STEP 5 — Propose Actions\n\n**regression** → Prompt user to investigate their code changes. No write action available.\n\n**flaky** → Load `dd-triage-flaky-test` skill for deep investigation. That skill will:\n- Attempt an agent-native fix using `flaky_category` + stack trace\n- Propose quarantine via `pup test-optimization flaky-tests update` if a quick fix isn't possible\n\n**infra** → Before proposing a retry, assess whether the failure is transient:\n- Check `@error_classification.type` and error message for signals like `timeout`, `runner unavailable`, `network error`, `quota exceeded` — these indicate transient failures where a retry is likely to help\n- If the error is deterministic (build misconfiguration, missing secret, explicit test assertion failure), a retry is unlikely to help — note this and suggest investigating the root cause\n- If the failure is pre-existing on the default branch, inform the user — a retry will likely fail again; await the upstream fix instead\n\nIf transient and GitHub Actions: extract the run ID from `@ci.pipeline.url` (e.g. `https:\u002F\u002Fgithub.com\u002Forg\u002Frepo\u002Factions\u002Fruns\u002F\u003Crun_id>`):\n```bash\ngh run rerun \u003Crun_id> --failed\n```\nFor other providers, share `@ci.pipeline.url` and direct to the provider UI for retry.\n\n**unknown** → Suggest checking raw job logs via the CI provider UI or `@ci.pipeline.url` from the pipeline event.\n",{"data":39,"body":46},{"name":4,"description":6,"metadata":40},{"version":41,"author":42,"repository":43,"tags":44,"alwaysApply":45},"1.1.0","datadog-labs","https:\u002F\u002Fgithub.com\u002Fdatadog-labs\u002Fagent-skills","datadog,ci,cicd,flaky,flaky-tests,pipeline","false",{"type":47,"children":48},"root",[49,58,64,86,90,97,175,178,184,191,196,309,315,324,450,458,551,564,570,575,588,737,742,747,753,774,779,789,903,913,1046,1051,1057,1065,1193,1325,1331,1336,1346,1351,1357,1366,1382,1412,1421,1476,1497,1547,1559,1575],{"type":50,"tag":51,"props":52,"children":54},"element","h1",{"id":53},"unblock-pr",[55],{"type":56,"value":57},"text","Unblock PR",{"type":50,"tag":59,"props":60,"children":61},"p",{},[62],{"type":56,"value":63},"One-line summary: Investigate a failing PR CI pipeline — attribute each failure as flaky, infra, or regression and propose a targeted action.",{"type":50,"tag":59,"props":65,"children":66},{},[67,69,76,78,84],{"type":56,"value":68},"Requires: ",{"type":50,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":56,"value":75},"dd-pup",{"type":56,"value":77}," skill (pup CLI installed and authenticated), ",{"type":50,"tag":70,"props":79,"children":81},{"className":80},[],[82],{"type":56,"value":83},"dd-triage-flaky-test",{"type":56,"value":85}," skill (for flaky failure deep investigation).",{"type":50,"tag":87,"props":88,"children":89},"hr",{},[],{"type":50,"tag":91,"props":92,"children":94},"h2",{"id":93},"input",[95],{"type":56,"value":96},"Input",{"type":50,"tag":98,"props":99,"children":100},"table",{},[101,120],{"type":50,"tag":102,"props":103,"children":104},"thead",{},[105],{"type":50,"tag":106,"props":107,"children":108},"tr",{},[109,115],{"type":50,"tag":110,"props":111,"children":112},"th",{},[113],{"type":56,"value":114},"Parameter",{"type":50,"tag":110,"props":116,"children":117},{},[118],{"type":56,"value":119},"Description",{"type":50,"tag":121,"props":122,"children":123},"tbody",{},[124,146],{"type":50,"tag":106,"props":125,"children":126},{},[127,133],{"type":50,"tag":128,"props":129,"children":130},"td",{},[131],{"type":56,"value":132},"PR branch",{"type":50,"tag":128,"props":134,"children":135},{},[136,138,144],{"type":56,"value":137},"The branch under investigation (e.g. ",{"type":50,"tag":70,"props":139,"children":141},{"className":140},[],[142],{"type":56,"value":143},"my-feature-branch",{"type":56,"value":145},")",{"type":50,"tag":106,"props":147,"children":148},{},[149,154],{"type":50,"tag":128,"props":150,"children":151},{},[152],{"type":56,"value":153},"Repository",{"type":50,"tag":128,"props":155,"children":156},{},[157,159,165,167,173],{"type":56,"value":158},"Lowercase, no-schema URL (e.g. ",{"type":50,"tag":70,"props":160,"children":162},{"className":161},[],[163],{"type":56,"value":164},"github.com\u002Forg\u002Frepo",{"type":56,"value":166},"). Derive from ",{"type":50,"tag":70,"props":168,"children":170},{"className":169},[],[171],{"type":56,"value":172},"git remote get-url origin",{"type":56,"value":174}," if not provided.",{"type":50,"tag":87,"props":176,"children":177},{},[],{"type":50,"tag":91,"props":179,"children":181},{"id":180},"workflow",[182],{"type":56,"value":183},"Workflow",{"type":50,"tag":185,"props":186,"children":188},"h3",{"id":187},"step-0-parse-input",[189],{"type":56,"value":190},"STEP 0 — Parse Input",{"type":50,"tag":59,"props":192,"children":193},{},[194],{"type":56,"value":195},"Derive repository ID and default branch from git if not provided:",{"type":50,"tag":197,"props":198,"children":203},"pre",{"className":199,"code":200,"language":201,"meta":202,"style":202},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Repository ID: fully lowercase, no-schema URL (the API rejects mixed-case)\ngit remote get-url origin\n# Strip protocol and trailing .git, then lowercase the result\n# e.g. https:\u002F\u002Fgithub.com\u002FDataDog\u002Fmy-repo.git → github.com\u002Fdatadog\u002Fmy-repo\n\n# Default branch\ngit symbolic-ref refs\u002Fremotes\u002Forigin\u002FHEAD\n# Strip refs\u002Fremotes\u002Forigin\u002F prefix — fall back to main if unset\n","bash","",[204],{"type":50,"tag":70,"props":205,"children":206},{"__ignoreMap":202},[207,219,245,254,263,273,282,300],{"type":50,"tag":208,"props":209,"children":212},"span",{"class":210,"line":211},"line",1,[213],{"type":50,"tag":208,"props":214,"children":216},{"style":215},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[217],{"type":56,"value":218},"# Repository ID: fully lowercase, no-schema URL (the API rejects mixed-case)\n",{"type":50,"tag":208,"props":220,"children":222},{"class":210,"line":221},2,[223,229,235,240],{"type":50,"tag":208,"props":224,"children":226},{"style":225},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[227],{"type":56,"value":228},"git",{"type":50,"tag":208,"props":230,"children":232},{"style":231},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[233],{"type":56,"value":234}," remote",{"type":50,"tag":208,"props":236,"children":237},{"style":231},[238],{"type":56,"value":239}," get-url",{"type":50,"tag":208,"props":241,"children":242},{"style":231},[243],{"type":56,"value":244}," origin\n",{"type":50,"tag":208,"props":246,"children":248},{"class":210,"line":247},3,[249],{"type":50,"tag":208,"props":250,"children":251},{"style":215},[252],{"type":56,"value":253},"# Strip protocol and trailing .git, then lowercase the result\n",{"type":50,"tag":208,"props":255,"children":257},{"class":210,"line":256},4,[258],{"type":50,"tag":208,"props":259,"children":260},{"style":215},[261],{"type":56,"value":262},"# e.g. https:\u002F\u002Fgithub.com\u002FDataDog\u002Fmy-repo.git → github.com\u002Fdatadog\u002Fmy-repo\n",{"type":50,"tag":208,"props":264,"children":266},{"class":210,"line":265},5,[267],{"type":50,"tag":208,"props":268,"children":270},{"emptyLinePlaceholder":269},true,[271],{"type":56,"value":272},"\n",{"type":50,"tag":208,"props":274,"children":276},{"class":210,"line":275},6,[277],{"type":50,"tag":208,"props":278,"children":279},{"style":215},[280],{"type":56,"value":281},"# Default branch\n",{"type":50,"tag":208,"props":283,"children":285},{"class":210,"line":284},7,[286,290,295],{"type":50,"tag":208,"props":287,"children":288},{"style":225},[289],{"type":56,"value":228},{"type":50,"tag":208,"props":291,"children":292},{"style":231},[293],{"type":56,"value":294}," symbolic-ref",{"type":50,"tag":208,"props":296,"children":297},{"style":231},[298],{"type":56,"value":299}," refs\u002Fremotes\u002Forigin\u002FHEAD\n",{"type":50,"tag":208,"props":301,"children":303},{"class":210,"line":302},8,[304],{"type":50,"tag":208,"props":305,"children":306},{"style":215},[307],{"type":56,"value":308},"# Strip refs\u002Fremotes\u002Forigin\u002F prefix — fall back to main if unset\n",{"type":50,"tag":185,"props":310,"children":312},{"id":311},"step-1-get-pr-ci-summary-run-both-in-parallel",[313],{"type":56,"value":314},"STEP 1 — Get PR CI Summary (run both in parallel)",{"type":50,"tag":59,"props":316,"children":317},{},[318],{"type":50,"tag":319,"props":320,"children":321},"strong",{},[322],{"type":56,"value":323},"Pipeline failures (job level):",{"type":50,"tag":197,"props":325,"children":327},{"className":199,"code":326,"language":201,"meta":202,"style":202},"pup cicd events search \\\n  --query \"@ci.status:error @git.branch:\u003Cbranch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --level job \\\n  --from 24h \\\n  --limit 50\n",[328],{"type":50,"tag":70,"props":329,"children":330},{"__ignoreMap":202},[331,360,402,419,436],{"type":50,"tag":208,"props":332,"children":333},{"class":210,"line":211},[334,339,344,349,354],{"type":50,"tag":208,"props":335,"children":336},{"style":225},[337],{"type":56,"value":338},"pup",{"type":50,"tag":208,"props":340,"children":341},{"style":231},[342],{"type":56,"value":343}," cicd",{"type":50,"tag":208,"props":345,"children":346},{"style":231},[347],{"type":56,"value":348}," events",{"type":50,"tag":208,"props":350,"children":351},{"style":231},[352],{"type":56,"value":353}," search",{"type":50,"tag":208,"props":355,"children":357},{"style":356},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[358],{"type":56,"value":359}," \\\n",{"type":50,"tag":208,"props":361,"children":362},{"class":210,"line":221},[363,368,374,379,384,389,393,398],{"type":50,"tag":208,"props":364,"children":365},{"style":231},[366],{"type":56,"value":367},"  --query",{"type":50,"tag":208,"props":369,"children":371},{"style":370},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[372],{"type":56,"value":373}," \"",{"type":50,"tag":208,"props":375,"children":376},{"style":231},[377],{"type":56,"value":378},"@ci.status:error @git.branch:\u003Cbranch> @git.repository.id_v2:",{"type":50,"tag":208,"props":380,"children":381},{"style":356},[382],{"type":56,"value":383},"\\\"",{"type":50,"tag":208,"props":385,"children":386},{"style":231},[387],{"type":56,"value":388},"\u003Crepo>",{"type":50,"tag":208,"props":390,"children":391},{"style":356},[392],{"type":56,"value":383},{"type":50,"tag":208,"props":394,"children":395},{"style":370},[396],{"type":56,"value":397},"\"",{"type":50,"tag":208,"props":399,"children":400},{"style":356},[401],{"type":56,"value":359},{"type":50,"tag":208,"props":403,"children":404},{"class":210,"line":247},[405,410,415],{"type":50,"tag":208,"props":406,"children":407},{"style":231},[408],{"type":56,"value":409},"  --level",{"type":50,"tag":208,"props":411,"children":412},{"style":231},[413],{"type":56,"value":414}," job",{"type":50,"tag":208,"props":416,"children":417},{"style":356},[418],{"type":56,"value":359},{"type":50,"tag":208,"props":420,"children":421},{"class":210,"line":256},[422,427,432],{"type":50,"tag":208,"props":423,"children":424},{"style":231},[425],{"type":56,"value":426},"  --from",{"type":50,"tag":208,"props":428,"children":429},{"style":231},[430],{"type":56,"value":431}," 24h",{"type":50,"tag":208,"props":433,"children":434},{"style":356},[435],{"type":56,"value":359},{"type":50,"tag":208,"props":437,"children":438},{"class":210,"line":265},[439,444],{"type":50,"tag":208,"props":440,"children":441},{"style":231},[442],{"type":56,"value":443},"  --limit",{"type":50,"tag":208,"props":445,"children":447},{"style":446},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[448],{"type":56,"value":449}," 50\n",{"type":50,"tag":59,"props":451,"children":452},{},[453],{"type":50,"tag":319,"props":454,"children":455},{},[456],{"type":56,"value":457},"Test failures:",{"type":50,"tag":197,"props":459,"children":461},{"className":199,"code":460,"language":201,"meta":202,"style":202},"pup cicd tests search \\\n  --query \"@test.status:fail @git.branch:\u003Cbranch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --from 24h \\\n  --limit 50\n",[462],{"type":50,"tag":70,"props":463,"children":464},{"__ignoreMap":202},[465,489,525,540],{"type":50,"tag":208,"props":466,"children":467},{"class":210,"line":211},[468,472,476,481,485],{"type":50,"tag":208,"props":469,"children":470},{"style":225},[471],{"type":56,"value":338},{"type":50,"tag":208,"props":473,"children":474},{"style":231},[475],{"type":56,"value":343},{"type":50,"tag":208,"props":477,"children":478},{"style":231},[479],{"type":56,"value":480}," tests",{"type":50,"tag":208,"props":482,"children":483},{"style":231},[484],{"type":56,"value":353},{"type":50,"tag":208,"props":486,"children":487},{"style":356},[488],{"type":56,"value":359},{"type":50,"tag":208,"props":490,"children":491},{"class":210,"line":221},[492,496,500,505,509,513,517,521],{"type":50,"tag":208,"props":493,"children":494},{"style":231},[495],{"type":56,"value":367},{"type":50,"tag":208,"props":497,"children":498},{"style":370},[499],{"type":56,"value":373},{"type":50,"tag":208,"props":501,"children":502},{"style":231},[503],{"type":56,"value":504},"@test.status:fail @git.branch:\u003Cbranch> @git.repository.id_v2:",{"type":50,"tag":208,"props":506,"children":507},{"style":356},[508],{"type":56,"value":383},{"type":50,"tag":208,"props":510,"children":511},{"style":231},[512],{"type":56,"value":388},{"type":50,"tag":208,"props":514,"children":515},{"style":356},[516],{"type":56,"value":383},{"type":50,"tag":208,"props":518,"children":519},{"style":370},[520],{"type":56,"value":397},{"type":50,"tag":208,"props":522,"children":523},{"style":356},[524],{"type":56,"value":359},{"type":50,"tag":208,"props":526,"children":527},{"class":210,"line":247},[528,532,536],{"type":50,"tag":208,"props":529,"children":530},{"style":231},[531],{"type":56,"value":426},{"type":50,"tag":208,"props":533,"children":534},{"style":231},[535],{"type":56,"value":431},{"type":50,"tag":208,"props":537,"children":538},{"style":356},[539],{"type":56,"value":359},{"type":50,"tag":208,"props":541,"children":542},{"class":210,"line":256},[543,547],{"type":50,"tag":208,"props":544,"children":545},{"style":231},[546],{"type":56,"value":443},{"type":50,"tag":208,"props":548,"children":549},{"style":446},[550],{"type":56,"value":449},{"type":50,"tag":59,"props":552,"children":553},{},[554,556,562],{"type":56,"value":555},"Run both queries in parallel. Collect all distinct ",{"type":50,"tag":70,"props":557,"children":559},{"className":558},[],[560],{"type":56,"value":561},"@test.service",{"type":56,"value":563}," values from test event results. If more than one distinct service is found, note each separately in the triage brief — do not collapse them into a single service filter. If pipeline results contain only infrastructure job types (build, lint, deploy) with no test-runner output, discard test search results and skip to STEP 3.",{"type":50,"tag":185,"props":565,"children":567},{"id":566},"step-15-fetch-code-coverage-run-in-parallel-with-step-1",[568],{"type":56,"value":569},"STEP 1.5 — Fetch Code Coverage (run in parallel with STEP 1)",{"type":50,"tag":59,"props":571,"children":572},{},[573],{"type":56,"value":574},"This step runs unconditionally — coverage context is valuable whether CI is red or green.",{"type":50,"tag":59,"props":576,"children":577},{},[578,580,586],{"type":56,"value":579},"The ",{"type":50,"tag":70,"props":581,"children":583},{"className":582},[],[584],{"type":56,"value":585},"--repo",{"type":56,"value":587}," value must be fully lowercase (the API rejects mixed-case). Normalize before calling:",{"type":50,"tag":197,"props":589,"children":591},{"className":199,"code":590,"language":201,"meta":202,"style":202},"repo_lower=$(echo \"\u003Crepo>\" | tr '[:upper:]' '[:lower:]')\npup code-coverage branch-summary \\\n  --repo \"$repo_lower\" \\\n  --branch \"\u003Cbranch>\"\n",[592],{"type":50,"tag":70,"props":593,"children":594},{"__ignoreMap":202},[595,669,690,715],{"type":50,"tag":208,"props":596,"children":597},{"class":210,"line":211},[598,603,608,614,618,622,626,631,636,641,646,651,655,660,664],{"type":50,"tag":208,"props":599,"children":600},{"style":356},[601],{"type":56,"value":602},"repo_lower",{"type":50,"tag":208,"props":604,"children":605},{"style":370},[606],{"type":56,"value":607},"=$(",{"type":50,"tag":208,"props":609,"children":611},{"style":610},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[612],{"type":56,"value":613},"echo",{"type":50,"tag":208,"props":615,"children":616},{"style":370},[617],{"type":56,"value":373},{"type":50,"tag":208,"props":619,"children":620},{"style":231},[621],{"type":56,"value":388},{"type":50,"tag":208,"props":623,"children":624},{"style":370},[625],{"type":56,"value":397},{"type":50,"tag":208,"props":627,"children":628},{"style":370},[629],{"type":56,"value":630}," |",{"type":50,"tag":208,"props":632,"children":633},{"style":225},[634],{"type":56,"value":635}," tr",{"type":50,"tag":208,"props":637,"children":638},{"style":370},[639],{"type":56,"value":640}," '",{"type":50,"tag":208,"props":642,"children":643},{"style":231},[644],{"type":56,"value":645},"[:upper:]",{"type":50,"tag":208,"props":647,"children":648},{"style":370},[649],{"type":56,"value":650},"'",{"type":50,"tag":208,"props":652,"children":653},{"style":370},[654],{"type":56,"value":640},{"type":50,"tag":208,"props":656,"children":657},{"style":231},[658],{"type":56,"value":659},"[:lower:]",{"type":50,"tag":208,"props":661,"children":662},{"style":370},[663],{"type":56,"value":650},{"type":50,"tag":208,"props":665,"children":666},{"style":370},[667],{"type":56,"value":668},")\n",{"type":50,"tag":208,"props":670,"children":671},{"class":210,"line":221},[672,676,681,686],{"type":50,"tag":208,"props":673,"children":674},{"style":225},[675],{"type":56,"value":338},{"type":50,"tag":208,"props":677,"children":678},{"style":231},[679],{"type":56,"value":680}," code-coverage",{"type":50,"tag":208,"props":682,"children":683},{"style":231},[684],{"type":56,"value":685}," branch-summary",{"type":50,"tag":208,"props":687,"children":688},{"style":356},[689],{"type":56,"value":359},{"type":50,"tag":208,"props":691,"children":692},{"class":210,"line":247},[693,698,702,707,711],{"type":50,"tag":208,"props":694,"children":695},{"style":231},[696],{"type":56,"value":697},"  --repo",{"type":50,"tag":208,"props":699,"children":700},{"style":370},[701],{"type":56,"value":373},{"type":50,"tag":208,"props":703,"children":704},{"style":356},[705],{"type":56,"value":706},"$repo_lower",{"type":50,"tag":208,"props":708,"children":709},{"style":370},[710],{"type":56,"value":397},{"type":50,"tag":208,"props":712,"children":713},{"style":356},[714],{"type":56,"value":359},{"type":50,"tag":208,"props":716,"children":717},{"class":210,"line":256},[718,723,727,732],{"type":50,"tag":208,"props":719,"children":720},{"style":231},[721],{"type":56,"value":722},"  --branch",{"type":50,"tag":208,"props":724,"children":725},{"style":370},[726],{"type":56,"value":373},{"type":50,"tag":208,"props":728,"children":729},{"style":231},[730],{"type":56,"value":731},"\u003Cbranch>",{"type":50,"tag":208,"props":733,"children":734},{"style":370},[735],{"type":56,"value":736},"\"\n",{"type":50,"tag":59,"props":738,"children":739},{},[740],{"type":56,"value":741},"If the command returns no data or exits with an error, report \"No data available\" for Coverage in the PR Health section.",{"type":50,"tag":59,"props":743,"children":744},{},[745],{"type":56,"value":746},"Note: Code quality and security violation counts are not available in pup — those lines always show \"No data available\".",{"type":50,"tag":185,"props":748,"children":750},{"id":749},"step-2-blame-guard-per-failing-job",[751],{"type":56,"value":752},"STEP 2 — Blame Guard per Failing Job",{"type":50,"tag":59,"props":754,"children":755},{},[756,758,764,766,772],{"type":56,"value":757},"First check whether ",{"type":50,"tag":70,"props":759,"children":761},{"className":760},[],[762],{"type":56,"value":763},"@error_classification.domain",{"type":56,"value":765}," \u002F ",{"type":50,"tag":70,"props":767,"children":769},{"className":768},[],[770],{"type":56,"value":771},"@error_classification.type",{"type":56,"value":773}," are present on job events from STEP 1 — if populated, use them as primary classification signals.",{"type":50,"tag":59,"props":775,"children":776},{},[777],{"type":56,"value":778},"For each failing job where classification is still needed, run both checks in parallel:",{"type":50,"tag":59,"props":780,"children":781},{},[782,787],{"type":50,"tag":319,"props":783,"children":784},{},[785],{"type":56,"value":786},"Default branch check",{"type":56,"value":788}," — was this job already failing before this PR?",{"type":50,"tag":197,"props":790,"children":792},{"className":199,"code":791,"language":201,"meta":202,"style":202},"pup cicd events aggregate \\\n  --query \"@ci.status:error @ci.job.name:\\\"\u003Cjob>\\\" @git.branch:\u003Cdefault-branch> @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --compute count \\\n  --from 24h\n",[793],{"type":50,"tag":70,"props":794,"children":795},{"__ignoreMap":202},[796,820,874,891],{"type":50,"tag":208,"props":797,"children":798},{"class":210,"line":211},[799,803,807,811,816],{"type":50,"tag":208,"props":800,"children":801},{"style":225},[802],{"type":56,"value":338},{"type":50,"tag":208,"props":804,"children":805},{"style":231},[806],{"type":56,"value":343},{"type":50,"tag":208,"props":808,"children":809},{"style":231},[810],{"type":56,"value":348},{"type":50,"tag":208,"props":812,"children":813},{"style":231},[814],{"type":56,"value":815}," aggregate",{"type":50,"tag":208,"props":817,"children":818},{"style":356},[819],{"type":56,"value":359},{"type":50,"tag":208,"props":821,"children":822},{"class":210,"line":221},[823,827,831,836,840,845,849,854,858,862,866,870],{"type":50,"tag":208,"props":824,"children":825},{"style":231},[826],{"type":56,"value":367},{"type":50,"tag":208,"props":828,"children":829},{"style":370},[830],{"type":56,"value":373},{"type":50,"tag":208,"props":832,"children":833},{"style":231},[834],{"type":56,"value":835},"@ci.status:error @ci.job.name:",{"type":50,"tag":208,"props":837,"children":838},{"style":356},[839],{"type":56,"value":383},{"type":50,"tag":208,"props":841,"children":842},{"style":231},[843],{"type":56,"value":844},"\u003Cjob>",{"type":50,"tag":208,"props":846,"children":847},{"style":356},[848],{"type":56,"value":383},{"type":50,"tag":208,"props":850,"children":851},{"style":231},[852],{"type":56,"value":853}," @git.branch:\u003Cdefault-branch> @git.repository.id_v2:",{"type":50,"tag":208,"props":855,"children":856},{"style":356},[857],{"type":56,"value":383},{"type":50,"tag":208,"props":859,"children":860},{"style":231},[861],{"type":56,"value":388},{"type":50,"tag":208,"props":863,"children":864},{"style":356},[865],{"type":56,"value":383},{"type":50,"tag":208,"props":867,"children":868},{"style":370},[869],{"type":56,"value":397},{"type":50,"tag":208,"props":871,"children":872},{"style":356},[873],{"type":56,"value":359},{"type":50,"tag":208,"props":875,"children":876},{"class":210,"line":247},[877,882,887],{"type":50,"tag":208,"props":878,"children":879},{"style":231},[880],{"type":56,"value":881},"  --compute",{"type":50,"tag":208,"props":883,"children":884},{"style":231},[885],{"type":56,"value":886}," count",{"type":50,"tag":208,"props":888,"children":889},{"style":356},[890],{"type":56,"value":359},{"type":50,"tag":208,"props":892,"children":893},{"class":210,"line":256},[894,898],{"type":50,"tag":208,"props":895,"children":896},{"style":231},[897],{"type":56,"value":426},{"type":50,"tag":208,"props":899,"children":900},{"style":231},[901],{"type":56,"value":902}," 24h\n",{"type":50,"tag":59,"props":904,"children":905},{},[906,911],{"type":50,"tag":319,"props":907,"children":908},{},[909],{"type":56,"value":910},"Blast radius check",{"type":56,"value":912}," — is this job failing on other branches too?",{"type":50,"tag":197,"props":914,"children":916},{"className":199,"code":915,"language":201,"meta":202,"style":202},"pup cicd events aggregate \\\n  --query \"@ci.status:error @ci.job.name:\\\"\u003Cjob>\\\" @git.repository.id_v2:\\\"\u003Crepo>\\\"\" \\\n  --compute count \\\n  --group-by \"@git.branch\" \\\n  --from 24h\n",[917],{"type":50,"tag":70,"props":918,"children":919},{"__ignoreMap":202},[920,943,995,1010,1035],{"type":50,"tag":208,"props":921,"children":922},{"class":210,"line":211},[923,927,931,935,939],{"type":50,"tag":208,"props":924,"children":925},{"style":225},[926],{"type":56,"value":338},{"type":50,"tag":208,"props":928,"children":929},{"style":231},[930],{"type":56,"value":343},{"type":50,"tag":208,"props":932,"children":933},{"style":231},[934],{"type":56,"value":348},{"type":50,"tag":208,"props":936,"children":937},{"style":231},[938],{"type":56,"value":815},{"type":50,"tag":208,"props":940,"children":941},{"style":356},[942],{"type":56,"value":359},{"type":50,"tag":208,"props":944,"children":945},{"class":210,"line":221},[946,950,954,958,962,966,970,975,979,983,987,991],{"type":50,"tag":208,"props":947,"children":948},{"style":231},[949],{"type":56,"value":367},{"type":50,"tag":208,"props":951,"children":952},{"style":370},[953],{"type":56,"value":373},{"type":50,"tag":208,"props":955,"children":956},{"style":231},[957],{"type":56,"value":835},{"type":50,"tag":208,"props":959,"children":960},{"style":356},[961],{"type":56,"value":383},{"type":50,"tag":208,"props":963,"children":964},{"style":231},[965],{"type":56,"value":844},{"type":50,"tag":208,"props":967,"children":968},{"style":356},[969],{"type":56,"value":383},{"type":50,"tag":208,"props":971,"children":972},{"style":231},[973],{"type":56,"value":974}," @git.repository.id_v2:",{"type":50,"tag":208,"props":976,"children":977},{"style":356},[978],{"type":56,"value":383},{"type":50,"tag":208,"props":980,"children":981},{"style":231},[982],{"type":56,"value":388},{"type":50,"tag":208,"props":984,"children":985},{"style":356},[986],{"type":56,"value":383},{"type":50,"tag":208,"props":988,"children":989},{"style":370},[990],{"type":56,"value":397},{"type":50,"tag":208,"props":992,"children":993},{"style":356},[994],{"type":56,"value":359},{"type":50,"tag":208,"props":996,"children":997},{"class":210,"line":247},[998,1002,1006],{"type":50,"tag":208,"props":999,"children":1000},{"style":231},[1001],{"type":56,"value":881},{"type":50,"tag":208,"props":1003,"children":1004},{"style":231},[1005],{"type":56,"value":886},{"type":50,"tag":208,"props":1007,"children":1008},{"style":356},[1009],{"type":56,"value":359},{"type":50,"tag":208,"props":1011,"children":1012},{"class":210,"line":256},[1013,1018,1022,1027,1031],{"type":50,"tag":208,"props":1014,"children":1015},{"style":231},[1016],{"type":56,"value":1017},"  --group-by",{"type":50,"tag":208,"props":1019,"children":1020},{"style":370},[1021],{"type":56,"value":373},{"type":50,"tag":208,"props":1023,"children":1024},{"style":231},[1025],{"type":56,"value":1026},"@git.branch",{"type":50,"tag":208,"props":1028,"children":1029},{"style":370},[1030],{"type":56,"value":397},{"type":50,"tag":208,"props":1032,"children":1033},{"style":356},[1034],{"type":56,"value":359},{"type":50,"tag":208,"props":1036,"children":1037},{"class":210,"line":265},[1038,1042],{"type":50,"tag":208,"props":1039,"children":1040},{"style":231},[1041],{"type":56,"value":426},{"type":50,"tag":208,"props":1043,"children":1044},{"style":231},[1045],{"type":56,"value":902},{"type":50,"tag":59,"props":1047,"children":1048},{},[1049],{"type":56,"value":1050},"Performance fallback: if the blast radius query is slow or times out, skip it and rely on the default branch check alone.",{"type":50,"tag":185,"props":1052,"children":1054},{"id":1053},"step-3-classify-each-failure",[1055],{"type":56,"value":1056},"STEP 3 — Classify Each Failure",{"type":50,"tag":59,"props":1058,"children":1059},{},[1060],{"type":50,"tag":319,"props":1061,"children":1062},{},[1063],{"type":56,"value":1064},"Priority order:",{"type":50,"tag":1066,"props":1067,"children":1068},"ol",{},[1069,1088,1188],{"type":50,"tag":1070,"props":1071,"children":1072},"li",{},[1073,1075,1080,1081,1086],{"type":56,"value":1074},"If ",{"type":50,"tag":70,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":56,"value":763},{"type":56,"value":765},{"type":50,"tag":70,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":56,"value":771},{"type":56,"value":1087}," present → use as primary signal",{"type":50,"tag":1070,"props":1089,"children":1090},{},[1091,1093,1099,1101,1181,1183],{"type":56,"value":1092},"If test failure AND test appears in flaky tests with ",{"type":50,"tag":70,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":56,"value":1098},"flaky_test_state:active",{"type":56,"value":1100},":\n",{"type":50,"tag":197,"props":1102,"children":1104},{"className":199,"code":1103,"language":201,"meta":202,"style":202},"pup cicd flaky-tests search \\\n  --query \"flaky_test_state:active @test.name:\\\"\u003Ctest-name>\\\" @git.repository.id_v2:\\\"\u003Crepo>\\\"\"\n",[1105],{"type":50,"tag":70,"props":1106,"children":1107},{"__ignoreMap":202},[1108,1132],{"type":50,"tag":208,"props":1109,"children":1110},{"class":210,"line":211},[1111,1115,1119,1124,1128],{"type":50,"tag":208,"props":1112,"children":1113},{"style":225},[1114],{"type":56,"value":338},{"type":50,"tag":208,"props":1116,"children":1117},{"style":231},[1118],{"type":56,"value":343},{"type":50,"tag":208,"props":1120,"children":1121},{"style":231},[1122],{"type":56,"value":1123}," flaky-tests",{"type":50,"tag":208,"props":1125,"children":1126},{"style":231},[1127],{"type":56,"value":353},{"type":50,"tag":208,"props":1129,"children":1130},{"style":356},[1131],{"type":56,"value":359},{"type":50,"tag":208,"props":1133,"children":1134},{"class":210,"line":221},[1135,1139,1143,1148,1152,1157,1161,1165,1169,1173,1177],{"type":50,"tag":208,"props":1136,"children":1137},{"style":231},[1138],{"type":56,"value":367},{"type":50,"tag":208,"props":1140,"children":1141},{"style":370},[1142],{"type":56,"value":373},{"type":50,"tag":208,"props":1144,"children":1145},{"style":231},[1146],{"type":56,"value":1147},"flaky_test_state:active @test.name:",{"type":50,"tag":208,"props":1149,"children":1150},{"style":356},[1151],{"type":56,"value":383},{"type":50,"tag":208,"props":1153,"children":1154},{"style":231},[1155],{"type":56,"value":1156},"\u003Ctest-name>",{"type":50,"tag":208,"props":1158,"children":1159},{"style":356},[1160],{"type":56,"value":383},{"type":50,"tag":208,"props":1162,"children":1163},{"style":231},[1164],{"type":56,"value":974},{"type":50,"tag":208,"props":1166,"children":1167},{"style":356},[1168],{"type":56,"value":383},{"type":50,"tag":208,"props":1170,"children":1171},{"style":231},[1172],{"type":56,"value":388},{"type":50,"tag":208,"props":1174,"children":1175},{"style":356},[1176],{"type":56,"value":383},{"type":50,"tag":208,"props":1178,"children":1179},{"style":370},[1180],{"type":56,"value":736},{"type":56,"value":1182},"\n→ ",{"type":50,"tag":319,"props":1184,"children":1185},{},[1186],{"type":56,"value":1187},"flaky",{"type":50,"tag":1070,"props":1189,"children":1190},{},[1191],{"type":56,"value":1192},"Use blame guard results:",{"type":50,"tag":98,"props":1194,"children":1195},{},[1196,1217],{"type":50,"tag":102,"props":1197,"children":1198},{},[1199],{"type":50,"tag":106,"props":1200,"children":1201},{},[1202,1207,1212],{"type":50,"tag":110,"props":1203,"children":1204},{},[1205],{"type":56,"value":1206},"Failing on default branch?",{"type":50,"tag":110,"props":1208,"children":1209},{},[1210],{"type":56,"value":1211},"Failing on ≥3 other branches?",{"type":50,"tag":110,"props":1213,"children":1214},{},[1215],{"type":56,"value":1216},"Classification",{"type":50,"tag":121,"props":1218,"children":1219},{},[1220,1242,1263,1284,1304],{"type":50,"tag":106,"props":1221,"children":1222},{},[1223,1228,1232],{"type":50,"tag":128,"props":1224,"children":1225},{},[1226],{"type":56,"value":1227},"Yes",{"type":50,"tag":128,"props":1229,"children":1230},{},[1231],{"type":56,"value":1227},{"type":50,"tag":128,"props":1233,"children":1234},{},[1235,1240],{"type":50,"tag":319,"props":1236,"children":1237},{},[1238],{"type":56,"value":1239},"infra",{"type":56,"value":1241}," (pre-existing, widespread)",{"type":50,"tag":106,"props":1243,"children":1244},{},[1245,1249,1254],{"type":50,"tag":128,"props":1246,"children":1247},{},[1248],{"type":56,"value":1227},{"type":50,"tag":128,"props":1250,"children":1251},{},[1252],{"type":56,"value":1253},"No",{"type":50,"tag":128,"props":1255,"children":1256},{},[1257,1261],{"type":50,"tag":319,"props":1258,"children":1259},{},[1260],{"type":56,"value":1239},{"type":56,"value":1262}," (pre-existing on default branch)",{"type":50,"tag":106,"props":1264,"children":1265},{},[1266,1270,1274],{"type":50,"tag":128,"props":1267,"children":1268},{},[1269],{"type":56,"value":1253},{"type":50,"tag":128,"props":1271,"children":1272},{},[1273],{"type":56,"value":1253},{"type":50,"tag":128,"props":1275,"children":1276},{},[1277,1282],{"type":50,"tag":319,"props":1278,"children":1279},{},[1280],{"type":56,"value":1281},"regression",{"type":56,"value":1283}," (introduced by this PR)",{"type":50,"tag":106,"props":1285,"children":1286},{},[1287,1291,1295],{"type":50,"tag":128,"props":1288,"children":1289},{},[1290],{"type":56,"value":1253},{"type":50,"tag":128,"props":1292,"children":1293},{},[1294],{"type":56,"value":1227},{"type":50,"tag":128,"props":1296,"children":1297},{},[1298,1302],{"type":50,"tag":319,"props":1299,"children":1300},{},[1301],{"type":56,"value":1187},{"type":56,"value":1303}," (intermittent, cross-branch)",{"type":50,"tag":106,"props":1305,"children":1306},{},[1307,1312,1317],{"type":50,"tag":128,"props":1308,"children":1309},{},[1310],{"type":56,"value":1311},"Insufficient data",{"type":50,"tag":128,"props":1313,"children":1314},{},[1315],{"type":56,"value":1316},"—",{"type":50,"tag":128,"props":1318,"children":1319},{},[1320],{"type":50,"tag":319,"props":1321,"children":1322},{},[1323],{"type":56,"value":1324},"unknown",{"type":50,"tag":185,"props":1326,"children":1328},{"id":1327},"step-4-produce-triage-brief",[1329],{"type":56,"value":1330},"STEP 4 — Produce Triage Brief",{"type":50,"tag":59,"props":1332,"children":1333},{},[1334],{"type":56,"value":1335},"One entry per failing job:",{"type":50,"tag":197,"props":1337,"children":1341},{"className":1338,"code":1340,"language":56},[1339],"language-text","PR CI Triage Brief\n==================\nBranch:   \u003Cbranch>\nRepo:     \u003Crepo>\n\nJob: \u003Cjob-name>\n  Classification:  \u003Cflaky | infra | regression | unknown>\n  Evidence:        \u003C1 key data point — error message, pipeline count, or test result>\n  Confidence:      \u003Chigh | medium | low>\n  Recommended:     \u003Caction>\n\n[repeat for each failing job]\n\nOverall: \u003CN> failures — \u003Ce.g. \"1 regression, 1 flaky, 1 infra\">\n\nPR Health\n=========\nCoverage:   \u003CX>% on \u003Cbranch> | No data available\nQuality:    No data available\nSecurity:   No data available\n",[1342],{"type":50,"tag":70,"props":1343,"children":1344},{"__ignoreMap":202},[1345],{"type":56,"value":1340},{"type":50,"tag":59,"props":1347,"children":1348},{},[1349],{"type":56,"value":1350},"All three lines always appear.",{"type":50,"tag":185,"props":1352,"children":1354},{"id":1353},"step-5-propose-actions",[1355],{"type":56,"value":1356},"STEP 5 — Propose Actions",{"type":50,"tag":59,"props":1358,"children":1359},{},[1360,1364],{"type":50,"tag":319,"props":1361,"children":1362},{},[1363],{"type":56,"value":1281},{"type":56,"value":1365}," → Prompt user to investigate their code changes. No write action available.",{"type":50,"tag":59,"props":1367,"children":1368},{},[1369,1373,1375,1380],{"type":50,"tag":319,"props":1370,"children":1371},{},[1372],{"type":56,"value":1187},{"type":56,"value":1374}," → Load ",{"type":50,"tag":70,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":56,"value":83},{"type":56,"value":1381}," skill for deep investigation. That skill will:",{"type":50,"tag":1383,"props":1384,"children":1385},"ul",{},[1386,1399],{"type":50,"tag":1070,"props":1387,"children":1388},{},[1389,1391,1397],{"type":56,"value":1390},"Attempt an agent-native fix using ",{"type":50,"tag":70,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":56,"value":1396},"flaky_category",{"type":56,"value":1398}," + stack trace",{"type":50,"tag":1070,"props":1400,"children":1401},{},[1402,1404,1410],{"type":56,"value":1403},"Propose quarantine via ",{"type":50,"tag":70,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":56,"value":1409},"pup test-optimization flaky-tests update",{"type":56,"value":1411}," if a quick fix isn't possible",{"type":50,"tag":59,"props":1413,"children":1414},{},[1415,1419],{"type":50,"tag":319,"props":1416,"children":1417},{},[1418],{"type":56,"value":1239},{"type":56,"value":1420}," → Before proposing a retry, assess whether the failure is transient:",{"type":50,"tag":1383,"props":1422,"children":1423},{},[1424,1466,1471],{"type":50,"tag":1070,"props":1425,"children":1426},{},[1427,1429,1434,1436,1442,1444,1450,1451,1457,1458,1464],{"type":56,"value":1428},"Check ",{"type":50,"tag":70,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":56,"value":771},{"type":56,"value":1435}," and error message for signals like ",{"type":50,"tag":70,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":56,"value":1441},"timeout",{"type":56,"value":1443},", ",{"type":50,"tag":70,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":56,"value":1449},"runner unavailable",{"type":56,"value":1443},{"type":50,"tag":70,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":56,"value":1456},"network error",{"type":56,"value":1443},{"type":50,"tag":70,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":56,"value":1463},"quota exceeded",{"type":56,"value":1465}," — these indicate transient failures where a retry is likely to help",{"type":50,"tag":1070,"props":1467,"children":1468},{},[1469],{"type":56,"value":1470},"If the error is deterministic (build misconfiguration, missing secret, explicit test assertion failure), a retry is unlikely to help — note this and suggest investigating the root cause",{"type":50,"tag":1070,"props":1472,"children":1473},{},[1474],{"type":56,"value":1475},"If the failure is pre-existing on the default branch, inform the user — a retry will likely fail again; await the upstream fix instead",{"type":50,"tag":59,"props":1477,"children":1478},{},[1479,1481,1487,1489,1495],{"type":56,"value":1480},"If transient and GitHub Actions: extract the run ID from ",{"type":50,"tag":70,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":56,"value":1486},"@ci.pipeline.url",{"type":56,"value":1488}," (e.g. ",{"type":50,"tag":70,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":56,"value":1494},"https:\u002F\u002Fgithub.com\u002Forg\u002Frepo\u002Factions\u002Fruns\u002F\u003Crun_id>",{"type":56,"value":1496},"):",{"type":50,"tag":197,"props":1498,"children":1500},{"className":199,"code":1499,"language":201,"meta":202,"style":202},"gh run rerun \u003Crun_id> --failed\n",[1501],{"type":50,"tag":70,"props":1502,"children":1503},{"__ignoreMap":202},[1504],{"type":50,"tag":208,"props":1505,"children":1506},{"class":210,"line":211},[1507,1512,1517,1522,1527,1532,1537,1542],{"type":50,"tag":208,"props":1508,"children":1509},{"style":225},[1510],{"type":56,"value":1511},"gh",{"type":50,"tag":208,"props":1513,"children":1514},{"style":231},[1515],{"type":56,"value":1516}," run",{"type":50,"tag":208,"props":1518,"children":1519},{"style":231},[1520],{"type":56,"value":1521}," rerun",{"type":50,"tag":208,"props":1523,"children":1524},{"style":370},[1525],{"type":56,"value":1526}," \u003C",{"type":50,"tag":208,"props":1528,"children":1529},{"style":231},[1530],{"type":56,"value":1531},"run_i",{"type":50,"tag":208,"props":1533,"children":1534},{"style":356},[1535],{"type":56,"value":1536},"d",{"type":50,"tag":208,"props":1538,"children":1539},{"style":370},[1540],{"type":56,"value":1541},">",{"type":50,"tag":208,"props":1543,"children":1544},{"style":231},[1545],{"type":56,"value":1546}," --failed\n",{"type":50,"tag":59,"props":1548,"children":1549},{},[1550,1552,1557],{"type":56,"value":1551},"For other providers, share ",{"type":50,"tag":70,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":56,"value":1486},{"type":56,"value":1558}," and direct to the provider UI for retry.",{"type":50,"tag":59,"props":1560,"children":1561},{},[1562,1566,1568,1573],{"type":50,"tag":319,"props":1563,"children":1564},{},[1565],{"type":56,"value":1324},{"type":56,"value":1567}," → Suggest checking raw job logs via the CI provider UI or ",{"type":50,"tag":70,"props":1569,"children":1571},{"className":1570},[],[1572],{"type":56,"value":1486},{"type":56,"value":1574}," from the pipeline event.",{"type":50,"tag":1576,"props":1577,"children":1578},"style",{},[1579],{"type":56,"value":1580},"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":1582,"total":1715},[1583,1599,1609,1623,1632,1644,1658,1670,1682,1696,1703],{"slug":1584,"name":1584,"fn":1585,"description":1586,"org":1587,"tags":1588,"stars":24,"repoUrl":25,"updatedAt":1598},"dd-apm","analyze Datadog APM traces and services","APM - traces, services, dependencies, performance analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1589,1590,1593,1595],{"name":9,"slug":8,"type":16},{"name":1591,"slug":1592,"type":16},"Distributed Tracing","distributed-tracing",{"name":1594,"slug":32,"type":16},"Observability",{"name":1596,"slug":1597,"type":16},"Performance","performance","2026-07-15T05:38:04.953706",{"slug":1600,"name":1600,"fn":1601,"description":1602,"org":1603,"tags":1604,"stars":24,"repoUrl":25,"updatedAt":1608},"dd-debugger","debug production code with Datadog","Live Debugger - inspect runtime argument\u002Fvariable values in production by placing log probes on methods. Use when asked what values a function receives, what parameters look like at runtime, or to capture live data from running services without redeploying.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1605,1606,1607],{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},{"name":1594,"slug":32,"type":16},"2026-07-15T05:38:09.905216",{"slug":1610,"name":1610,"fn":1611,"description":1612,"org":1613,"tags":1614,"stars":24,"repoUrl":25,"updatedAt":1622},"dd-docs","search Datadog documentation","Datadog docs lookup using docs.datadoghq.com\u002Fllms.txt and linked Markdown pages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1615,1616,1619],{"name":9,"slug":8,"type":16},{"name":1617,"slug":1618,"type":16},"Documentation","documentation",{"name":1620,"slug":1621,"type":16},"Reference","reference","2026-07-15T05:38:06.203917",{"slug":1624,"name":1624,"fn":1625,"description":1626,"org":1627,"tags":1628,"stars":24,"repoUrl":25,"updatedAt":1631},"dd-file-issue","file GitHub issues for Datadog","File GitHub issues to the right repository (pup CLI or plugin)",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1629,1630],{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},"2026-07-15T05:38:11.122217",{"slug":1633,"name":1633,"fn":1634,"description":1635,"org":1636,"tags":1637,"stars":24,"repoUrl":25,"updatedAt":1643},"dd-logs","manage Datadog logs and pipelines","Log management - search, pipelines, archives, and cost control.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1638,1639,1642],{"name":9,"slug":8,"type":16},{"name":1640,"slug":1641,"type":16},"Logs","logs",{"name":1594,"slug":32,"type":16},"2026-07-15T05:38:07.426277",{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1648,"tags":1649,"stars":24,"repoUrl":25,"updatedAt":1657},"dd-monitors","manage Datadog monitors and alerts","Monitor management - create, update, mute, and alerting best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1650,1653,1654],{"name":1651,"slug":1652,"type":16},"Alerting","alerting",{"name":9,"slug":8,"type":16},{"name":1655,"slug":1656,"type":16},"Monitoring","monitoring","2026-07-12T07:55:05.804251",{"slug":75,"name":75,"fn":1659,"description":1660,"org":1661,"tags":1662,"stars":24,"repoUrl":25,"updatedAt":1669},"authenticate with Datadog CLI","Datadog CLI (pup). OAuth2 auth with token refresh.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1663,1666,1668],{"name":1664,"slug":1665,"type":16},"Authentication","authentication",{"name":1667,"slug":30,"type":16},"CLI",{"name":9,"slug":8,"type":16},"2026-07-12T07:55:07.105248",{"slug":1671,"name":1671,"fn":1672,"description":1673,"org":1674,"tags":1675,"stars":24,"repoUrl":25,"updatedAt":1681},"dd-symdb","search Datadog service symbols","Symbol Database - search service symbols, find probe-able methods.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1676,1679,1680],{"name":1677,"slug":1678,"type":16},"Code Analysis","code-analysis",{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},"2026-07-15T05:38:08.664632",{"slug":83,"name":83,"fn":1683,"description":1684,"org":1685,"tags":1686,"stars":24,"repoUrl":25,"updatedAt":1695},"triage and resolve flaky tests","Load when investigating a specific flaky test. Gets history, failure pattern, and category, then recommends fix, quarantine, or escalate.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1687,1688,1689,1692],{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},{"name":1690,"slug":1691,"type":16},"QA","qa",{"name":1693,"slug":1694,"type":16},"Testing","testing","2026-07-12T07:55:10.506266",{"slug":4,"name":4,"fn":5,"description":6,"org":1697,"tags":1698,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1699,1700,1701,1702],{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},{"name":14,"slug":15,"type":16},{"slug":338,"name":338,"fn":1704,"description":1705,"org":1706,"tags":1707,"stars":24,"repoUrl":25,"updatedAt":1714},"manage Datadog infrastructure via CLI","Datadog API CLI with 49 command groups, 300+ subcommands. Skills and domain agents for monitoring, logs, APM, security, and infrastructure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1708,1709,1710,1713],{"name":1667,"slug":30,"type":16},{"name":9,"slug":8,"type":16},{"name":1711,"slug":1712,"type":16},"Infrastructure","infrastructure",{"name":1655,"slug":1656,"type":16},"2026-07-15T05:38:13.593372",11,{"items":1717,"total":1715},[1718,1725,1731,1737,1742,1748,1754],{"slug":1584,"name":1584,"fn":1585,"description":1586,"org":1719,"tags":1720,"stars":24,"repoUrl":25,"updatedAt":1598},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1721,1722,1723,1724],{"name":9,"slug":8,"type":16},{"name":1591,"slug":1592,"type":16},{"name":1594,"slug":32,"type":16},{"name":1596,"slug":1597,"type":16},{"slug":1600,"name":1600,"fn":1601,"description":1602,"org":1726,"tags":1727,"stars":24,"repoUrl":25,"updatedAt":1608},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1728,1729,1730],{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},{"name":1594,"slug":32,"type":16},{"slug":1610,"name":1610,"fn":1611,"description":1612,"org":1732,"tags":1733,"stars":24,"repoUrl":25,"updatedAt":1622},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1734,1735,1736],{"name":9,"slug":8,"type":16},{"name":1617,"slug":1618,"type":16},{"name":1620,"slug":1621,"type":16},{"slug":1624,"name":1624,"fn":1625,"description":1626,"org":1738,"tags":1739,"stars":24,"repoUrl":25,"updatedAt":1631},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1740,1741],{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"slug":1633,"name":1633,"fn":1634,"description":1635,"org":1743,"tags":1744,"stars":24,"repoUrl":25,"updatedAt":1643},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1745,1746,1747],{"name":9,"slug":8,"type":16},{"name":1640,"slug":1641,"type":16},{"name":1594,"slug":32,"type":16},{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1749,"tags":1750,"stars":24,"repoUrl":25,"updatedAt":1657},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1751,1752,1753],{"name":1651,"slug":1652,"type":16},{"name":9,"slug":8,"type":16},{"name":1655,"slug":1656,"type":16},{"slug":75,"name":75,"fn":1659,"description":1660,"org":1755,"tags":1756,"stars":24,"repoUrl":25,"updatedAt":1669},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1757,1758,1759],{"name":1664,"slug":1665,"type":16},{"name":1667,"slug":30,"type":16},{"name":9,"slug":8,"type":16}]