Skip to content

[aw] PR Code Quality Reviewer failed #49795

Description

@github-actions

Workflow Failure

Workflow: PR Code Quality Reviewer
Branch: copilot/fix-authentication-failed-classification
Run: https://github.com/github/gh-aw/actions/runs/30751208732
Pull Request: #49792

Inference Access Denied: The Copilot CLI failed because the token does not have access to inference. This can happen when:

  • Your organization has restricted Copilot access
  • The COPILOT_GITHUB_TOKEN does not have a valid Copilot subscription
  • Required policies have not been enabled by your administrator

To resolve this, verify that the COPILOT_GITHUB_TOKEN secret belongs to an account with an active Copilot subscription and check your Copilot settings.

Warning

Invalid or Unsupported Model: The agent failed because the configured model name is invalid, unknown, or unavailable for this engine/account.

This is a configuration issue, not a transient error — retrying will not help.

How to fix this

Specify a valid model for the selected engine in the workflow frontmatter:

---
engine: copilot
model: gpt-5-mini
---

To find valid models, check your engine/provider documentation (for Copilot see supported models).

Warning

Engine Failure: The copilot engine terminated unexpectedly.

Last agent output:

{"type":"tool.execution_complete","timestamp":"2026-08-02T14:05:22.392Z","data":{"toolName":"view","mcpServerName":"","success":true,"result":{"content":"130. const MODEL_NOT_SUPPORTED_PATTERN = /The requested model is not supported/;\n131. \n132. // Pattern to detect missing authentication credentials.\n133. // On a --continue attempt this may indicate that the Copilot CLI's on-disk session\n134. // credential (written by a mid-stream interrupted run) is incomplete or invalid.  In that\n135. // case the driver falls back to a fresh run (without --continue) to re-do env-var auth.\n136. // On a fresh run the token is genuinely absent — retrying will not help.\n137. const NO_AUTH_INFO_PATTERN = /No authentication information found|Session was not created with authentication info or custom provider/;\n138. // Pattern to detect authentication failures returned by Copilot API.\n139. // After a first-attempt auth failure, retrying is futile because the entrypoint unsets\n140. // COPILOT_GITHUB_TOKEN between attempts.\n141. //\n142. // This pattern covers the Copilot CAPI 400 response emitted when the supplied token is a\n143. // Personal Access Token (classic or fine-grained):\n144. //   \"400 400 checking third-party user token: bad request: Personal Access Tokens\n145. //    are not supported for this endpoint\"\n146. // PAT rejection is a persistent credential-type problem — retrying with the same\n147. // token always produces the same 400.  Treating it as an auth failure short-circuits\n148. // the retry loop instead of burning all 4 attempts.\n149. // Common auth failure signals (\"Authentication failed\", \"authentication_failed\", \"not logged in\")\n150. // are handled by isCommonAuthenticationFailedError from harness_retry_guard.cjs.\n151. const COPILOT_PAT_AUTH_FAILED_PATTERN = /checking third-party user token:[^\\n]*Personal Access Tokens are not supported/i;\n152. // Pattern: Copilot CLI inference access denied\n153. const INFERENCE_ACCESS_ERROR_PATTERN = /Access denied by policy settings|invalid access to inference/;\n154. // Pattern: Agentic engine process killed by signal (timeout)\n155. const AGENTIC_ENGINE_TIMEOUT_PATTERN = /signal=SIG(?:TERM|KILL|INT)/;\n156. // Pattern: Copilot SDK driver timed out waiting for the session to become idle.\n157. const SDK_SESSION_IDLE_TIMEOUT_PATTERN = /Timeout after \\d+ms waiting for session\\.idle/;\n158. // Pattern: MCP gateway shutdown surfaced in agent output.\n159. // Anchored to the JSON \"message\" key emitted by the MCP gateway driver to\n160. // avoid false positives from any process that logs \"Gateway shutdown initiated\"\n161. // as plain text.\n162. const MCP_GATEWAY_SHUTDOWN_PATTERN = /\"message\"\\s*:\\s*\"Gateway shutdown initiated\"/;\n163. \n164. // Pattern to detect null-type tool_call error that poisons conversation history.\n165. // Matches the Copilot API 400 error:\n166. //   \"Invalid type for '...tool_calls[N].type': expected one of 'function', ..., but got null instead.\"\n167. // The model emitted a malformed tool call with type: null.  Retrying with --continue\n168. // re-injects the same broken history, producing the same 400 on every subsequent attempt.\n169. // A fresh restart is required to discard the poisoned history.\n170. const NULL_TYPE_TOOL_CALL_PATTERN = /tool_calls\\[.*?\\]\\.type.*null/;\n171. /**\n172.  * Emit a diagnostic log line to stderr.\n173.  * All driver messages are prefixed with \"[copilot-harness]\" so they are easy to\n174.  * grep out of the combined agent-stdio.log.\n175.  * @param {string} message\n176.  */\n177. function log(message) {\n178.   process.stderr.write(`[copilot-harness] ${message}\\n`);\n179. }\n180. \n181. const NON_TERMINAL_SAFE_OUTPUT_TYPES = new Set([\"missing_tool\", \"missing_data\", \"report_incomplete\"]);\n182. \n183. /**\n184.  * Detect whether safe-outputs already contain a terminal agent result.\n185.  * Terminal outputs include noop and any non-diagnostic task output types.\n186.  * @param {string} safeOutputsPath\n187.  * @returns {boolean}\n188.  */\n189. function hasTerminalSafeOutput(safeOutputsPath) {\n190.   if (!safeOutputsPath) return false;\n191.   let content = \"\";\n192.   try {\n193.     content = fs.readFileSync(safeOutputsPath, \"utf8\");\n194.   } catch {\n195.     return false;\n196.   }\n197.   for (const line of content.split(\"\\n\")) {\n198.     const trimmed = line.trim();\n199.     if (!trimmed) continue;\n200.     try {","detailedContent":"\ndiff --git a/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs b/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\nindex 0000000..0000000 100644\n--- a/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\n+++ b/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\n@@ -130,71 +130,71 @@\n const MODEL_NOT_SUPPORTED_PATTERN = /The requested model is not supported/;\n \n // Pattern to detect missing authentication credentials.\n // On a --continue attempt this may indicate that the Copilot CLI's on-disk session\n // credential (written by a mid-stream interrupted run) is incomplete or invalid.  In that\n // case the driver falls back to a fresh run (without --continue) to re-do env-var auth.\n // On a fresh run the token is genuinely absent — retrying will not help.\n const NO_AUTH_INFO_PATTERN = /No authentication information found|Session was not created with authentication info or custom provider/;\n // Pattern to detect authentication failures returned by Copilot API.\n // After a first-attempt auth failure, retrying is futile because the entrypoint unsets\n // COPILOT_GITHUB_TOKEN between attempts.\n //\n // This pattern covers the Copilot CAPI 400 response emitted when the supplied token is a\n // Personal Access Token (classic or fine-grained):\n //   \"400 400 checking third-party user token: bad request: Personal Access Tokens\n //    are not supported for this endpoint\"\n // PAT rejection is a persistent credential-type problem — retrying with the same\n // token always produces the same 400.  Treating it as an auth failure short-circuits\n // the retry loop instead of burning all 4 attempts.\n // Common auth failure signals (\"Authentication failed\", \"authentication_failed\", \"not logged in\")\n // are handled by isCommonAuthenticationFailedError from harness_retry_guard.cjs.\n const COPILOT_PAT_AUTH_FAILED_PATTERN = /checking third-party user token:[^\\n]*Personal Access Tokens are not supported/i;\n // Pattern: Copilot CLI inference access denied\n const INFERENCE_ACCESS_ERROR_PATTERN = /Access denied by policy settings|invalid access to inference/;\n // Pattern: Agentic engine process killed by signal (timeout)\n const AGENTIC_ENGINE_TIMEOUT_PATTERN = /signal=SIG(?:TERM|KILL|INT)/;\n // Pattern: Copilot SDK driver timed out waiting for the session to become idle.\n const SDK_SESSION_IDLE_TIMEOUT_PATTERN = /Timeout after \\d+ms waiting for session\\.idle/;\n // Pattern: MCP gateway shutdown surfaced in agent output.\n // Anchored to the JSON \"message\" key emitted by the MCP gateway driver to\n // avoid false positives from any process that logs \"Gateway shutdown initiated\"\n // as plain text.\n const MCP_GATEWAY_SHUTDOWN_PATTERN = /\"message\"\\s*:\\s*\"Gateway shutdown initiated\"/;\n \n // Pattern to detect null-type tool_call error that poisons conversation history.\n // Matches the Copilot API 400 error:\n //   \"Invalid type for '...tool_calls[N].type': expected one of 'function', ..., but got null instead.\"\n // The model emitted a malformed tool call with type: null.  Retrying with --continue\n // re-injects the same broken history, producing the same 400 on every subsequent attempt.\n // A fresh restart is required to discard the poisoned history.\n const NULL_TYPE_TOOL_CALL_PATTERN = /tool_calls\\[.*?\\]\\.type.*null/;\n /**\n  * Emit a diagnostic log line to stderr.\n  * All driver messages are prefixed with \"[copilot-harness]\" so they are easy to\n  * grep out of the combined agent-stdio.log.\n  * @param {string} message\n  */\n function log(message) {\n   process.stderr.write(`[copilot-harness] ${message}\\n`);\n }\n \n const NON_TERMINAL_SAFE_OUTPUT_TYPES = new Set([\"missing_tool\", \"missing_data\", \"report_incomplete\"]);\n \n /**\n  * Detect whether safe-outputs already contain a terminal agent result.\n  * Terminal outputs include noop and any non-diagnostic task output types.\n  * @param {string} safeOutputsPath\n  * @returns {boolean}\n  */\n function hasTerminalSafeOutput(safeOutputsPath) {\n   if (!safeOutputsPath) return false;\n   let content = \"\";\n   try {\n     content = fs.readFileSync(safeOutputsPath, \"utf8\");\n   } catch {\n     return false;\n   }\n   for (const line of content.split(\"\\n\")) {\n     const trimmed = line.trim();\n     if (!trimmed) continue;\n     try {\n"}}}
{"type":"assistant.message","timestamp":"2026-08-02T14:05:28.091Z","data":{"content":""}}
{"type":"tool.execution_start","timestamp":"2026-08-02T14:05:28.092Z","data":{"toolName":"view","mcpServerName":""}}
{"type":"tool.execution_complete","timestamp":"2026-08-02T14:05:28.142Z","data":{"toolName":"view","mcpServerName":"","success":true,"result":{"content":"1195.         const permissionDeniedCount = countPermissionDeniedIssues(result.output);\n1196.         const hasNumerousPermissionDenied = hasNumerousPermissionDeniedIssues(result.output);\n1197.         const nonRetryableGuard = detectNonRetryableHarnessGuard(result.output);\n1198.         const isInvocationCapExceeded = nonRetryableGuard.maxRunsExceeded;\n1199.         const tokenCount = extractTokenCountFromOutput(result.output);\n1200.         const attemptDurationMs = Date.now() - attemptStart;\n1201.         const failureClass = classifyCopilotFailure({\n1202.           hasOutput: result.hasOutput,\n1203.           isAuthErr,\n1204.           isAuthenticationFailed,\n1205.           isTransientCAPIError: isCAPIError,\n1206.           isMCPGatewayShutdown,\n1207.           isMCPPolicy,\n1208.           isModelNotSupported,\n1209.           isHTTP400ResponseError: hasHTTP400ResponseError,\n1210.           isInvocationCapExceeded,\n1211.           isNullTypeToolCall,\n1212.           isQuotaExceeded,\n1213.           isSDKSessionIdleTimeout,\n1214.           hasNumerousPermissionDenied,\n1215.           tokenCount,\n1216.         });\n1217.         const outputTail = extractOutputTail(result.output);\n1218.         log(\n1219.           `attempt ${attempt + 1} failed:` +\n1220.             ` exitCode=${result.exitCode}` +\n1221.             ` failureClass=${failureClass}` +\n1222.             ` isCAPIError400=${isCAPIError}` +\n1223.             ` isCAPIQuotaExceededError=${isQuotaExceeded}` +\n1224.             ` isInvocationCapExceeded=${isInvocationCapExceeded}` +\n1225.             ` isMCPPolicyError=${isMCPPolicy}` +\n1226.             ` isModelNotSupportedError=${isModelNotSupported}` +\n1227.             ` isHTTP400ResponseError=${hasHTTP400ResponseError}` +\n1228.             ` isNullTypeToolCallError=${isNullTypeToolCall}` +\n1229.             ` isSDKSessionIdleTimeoutError=${isSDKSessionIdleTimeout}` +\n1230.             ` isMCPGatewayShutdownError=${isMCPGatewayShutdown}` +\n1231.             ` isAuthError=${isAuthErr}` +\n1232.             ` isAuthenticationFailedError=${isAuthenticationFailed}` +\n1233.             ` permissionDeniedCount=${permissionDeniedCount}` +\n1234.             ` hasNumerousPermissionDenied=${hasNumerousPermissionDenied}` +\n1235.             ` hasOutput=${result.hasOutput}` +\n1236.             ` tokenCount=${tokenCount}` +\n1237.             ` attemptDurationMs=${attemptDurationMs}` +\n1238.             ` retriesRemaining=${maxRetries - attempt}`\n1239.         );\n1240.         if (outputTail) {\n1241.           log(`attempt ${attempt + 1}: outputTail=${JSON.stringify(outputTail)}`);\n1242.         }\n1243.         // Driver-handoff diagnostic: when no output was produced, the agent never ran a turn.\n1244.         // This is the Turns=0 signature.  Log a named diagnostic to make it clearly visible\n1245.         // in the run log for cross-engine triage.\n1246.         if (!result.hasOutput) {\n1247.           log(\n1248.             `attempt ${attempt + 1}: driver-handoff-turns0 exitCode=${result.exitCode}` +\n1249.               ` eventName=${process.env.GITHUB_EVENT_NAME ?? \"unknown\"}` +\n1250.               ` startupRetryEligible=${isStartupRetryEligible}` +\n1251.               ` startupRetries=${scheduledExit2Retries}/${MAX_SCHEDULED_EXIT2_RETRIES}`\n1252.           );\n1253.         }\n1254. \n1255.         // If a noop was written to safe-outputs during the failed run, the agent determined\n1256.         // there was nothing to do (or the user indicated so before the agent ran).  Retrying\n1257.         // would not produce different results and could waste resources.\n1258.         if (safeOutputsPath && hasNoopInSafeOutputs(safeOutputsPath, { logger: log })) {\n1259.           log(`attempt ${attempt + 1}: noop message found in safe-outputs — not retrying (work is already complete or no work needed)`);\n1260.           lastExitCode = 0;\n1261.           break;\n1262.         }\n1263. \n1264.         // When the run fails with partial_execution and the safe-outputs file already contains a\n1265.         // terminal result, treat the run as a success-with-late-activity rather than a\n1266.         // retryable failure.  This covers the common case where the post-result watchdog fires\n1267.         // because the agent kept running exploratory commands after its deliverable was ready\n1268.         // (watchdogFired=true), as well as any other partial_execution failure that occurs\n1269.         // after the primary task output was already produced.  Retrying would reproduce the\n1270.         // same pattern and exhaust the retry budget without ever posting a final safe-output.\n1271.         // The no_output + watchdogFired case is also handled here: the post-result watchdog is\n1272.         // only armed after hasTerminalSafeOutput is true, so watchdogFired on a no-stdio-output\n1273.         // run means the agent completed its task (wrote safe-output) but produced no console\n1274.         // output before the watchdog terminated the idle process.\n1275.         if (\n1276.           (failureClass === \"partial_execution\" || failureClass === \"long_run_exit\" || (failureClass === \"no_output\" && result.watchdogFired) || (failureClass === \"authentication_failed\" && result.watchdogFired)) &&\n1277.           safeOutputsPath &&\n1278.           hasTerminalSafeOutput(safeOutputsPath)\n1279.         ) {\n1280.           const reason = result.watchdogFired ? \"post-result watchdog fired after terminal safe-output was emitted\" : \"partial execution after terminal safe-output was already produced\";\n1281.           log(`attempt ${attempt + 1}: ${reason} — treating as success (late-activity exit suppressed)`);\n1282.           lastExitCode = 0;\n1283.           break;\n1284.         }\n1285. \n1286.         const trustedAICreditsExceeded = nonRetryableGuard.aiCreditsExceeded && parseMaxAICreditsExceededFromAuditLog();\n1287.         if (nonRetryableGuard.aiCreditsExceeded && !trustedAICreditsExceeded) {\n1288.           log(`attempt ${attempt + 1}: AI credits marker found in CLI output without trusted firewall audit confirmation — preserving normal failure handling`);\n1289.         }\n1290.         const shouldTreatAICreditsExceededAsSuccess = trustedAICreditsExceeded && !isAuthenticationFailed;\n1291.         if (shouldTreatAICreditsExceededAsSuccess || nonRetryableGuard.awfAPIProxyBlockingRequests || isInvocationCapExceeded) {\n1292.           const reasons = [];\n1293.           if (shouldTreatAICreditsExceededAsSuccess) reasons.push(\"AI credits budget exceeded\");\n1294.           if (nonRetryableGuard.awfAPIProxyBlockingRequests) reasons.push(\"AWF API proxy is blocking requests\");\n1295.           if (isInvocationCapExceeded) {","detailedContent":"\ndiff --git a/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs b/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\nindex 0000000..0000000 100644\n--- a/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\n+++ b/home/runner/work/gh-aw/gh-aw/actions/setup/js/copilot_harness.cjs\n@@ -1195,101 +1195,101 @@\n         const permissionDeniedCount = countPermissionDeniedIssues(result.output);\n         const hasNumerousPermissionDenied = hasNumerousPermissionDeniedIssues(result.output);\n         const nonRetryableGuard = detectNonRetryableHarnessGuard(result.output);\n         const isInvocationCapExceeded = nonRetryableGuard.maxRunsExceeded;\n         const tokenCount = extractTokenCountFromOutput(result.output);\n         const attemptDurationMs = Date.now() - attemptStart;\n         const failureClass = classifyCopilotFailure({\n           hasOutput: result.hasOutput,\n           isAuthErr,\n           isAuthenticationFailed,\n           isTransientCAPIError: isCAPIError,\n           isMCPGatewayShutdown,\n           isMCPPolicy,\n           isModelNotSupported,\n           isHTTP400ResponseError: hasHTTP400ResponseError,\n           isInvocationCapExceeded,\n           isNullTypeToolCall,\n           isQuotaExceeded,\n           isSDKSessionIdleTimeout,\n           hasNumerousPermissionDenied,\n           tokenCount,\n         });\n         const outputTail = extractOutputTail(result.output);\n         log(\n           `attempt ${attempt + 1} failed:` +\n             ` exitCode=${result.exitCode}` +\n             ` failureClass=${failureClass}` +\n             ` isCAPIError400=${isCAPIError}` +\n             ` isCAPIQuotaExceededError=${isQuotaExceeded}` +\n             ` isInvocationCapExceeded=${isInvocationCapExceeded}` +\n             ` isMCPPolicyError=${isMCPPolicy}` +\n             ` isModelNotSupportedError=${isModelNotSupported}` +\n             ` isHTTP400ResponseError=${hasHTTP400ResponseError}` +\n             ` isNullTypeToolCallError=${isNullTypeToolCall}` +\n             ` isSDKSessionIdleTimeoutError=${isSDKSessionIdleTimeout}` +\n             ` isMCPGatewayShutdownError=${isMCPGatewayShutdown}` +\n             ` isAuthError=${isAuthErr}` +\n             ` isAuthenticationFailedError=${isAuthenticationFailed}` +\n             ` permissionDeniedCount=${permissionDeniedCount}` +\n             ` hasNumerousPermissionDenied=${hasNumerousPermissionDenied}` +\n             ` hasOutput=${result.hasOutput}` +\n             ` tokenCount=${tokenCount}` +\n             ` attemptDurationMs=${attemptDurationMs}` +\n             ` retriesRemaining=${maxRetries - attempt}`\n         );\n         if (outputTail) {\n           log(`attempt ${attempt + 1}: outputTail=${JSON.stringify(outputTail)}`);\n         }\n         // Driver-handoff diagnostic: when no output was produced, the agent never ran a turn.\n         // This is the Turns=0 signature.  Log a named diagnostic to make it clearly visible\n         // in the run log for cross-engine triage.\n         if (!result.hasOutput) {\n           log(\n             `attempt ${attempt + 1}: driver-handoff-turns0 exitCode=${result.exitCode}` +\n               ` eventName=${process.env.GITHUB_EVENT_NAME ?? \"unknown\"}` +\n               ` startupRetryEligible=${isStartupRetryEligible}` +\n               ` startupRetries=${scheduledExit2Retries}/${MAX_SCHEDULED_EXIT2_RETRIES}`\n           );\n         }\n \n         // If a noop was written to safe-outputs during the failed run, the agent determined\n         // there was nothing to do (or the user indicated so before the agent ran).  Retrying\n         // would not produce different results and could waste resources.\n         if (safeOutputsPath && hasNoopInSafeOutputs(safeOutputsPath, { logger: log })) {\n           log(`attempt ${attempt + 1}: noop message found in safe-outputs — not retrying (work is already complete or no work needed)`);\n           lastExitCode = 0;\n           break;\n         }\n \n         // When the run fails with partial_execution and the safe-outputs file already contains a\n         // terminal result, treat the run as a success-with-late-activity rather than a\n         // retryable failure.  This covers the common case where the post-result watchdog fires\n         // because the agent kept running exploratory commands after its deliverable was ready\n         // (watchdogFired=true), as well as any other partial_execution failure that occurs\n         // after the primary task output was already produced.  Retrying would reproduce the\n         // same pattern and exhaust the retry budget without ever posting a final safe-output.\n         // The no_output + watchdogFired case is also handled here: the post-result watchdog is\n         // only armed after hasTerminalSafeOutput is true, so watchdogFired on a no-stdio-output\n         // run means the agent completed its task (wrote safe-output) but produced no console\n         // output before the watchdog terminated the idle process.\n         if (\n           (failureClass === \"partial_execution\" || failureClass === \"long_run_exit\" || (failureClass === \"no_output\" && result.watchdogFired) || (failureClass === \"authentication_failed\" && result.watchdogFired)) &&\n           safeOutputsPath &&\n           hasTerminalSafeOutput(safeOutputsPath)\n         ) {\n           const reason = result.watchdogFired ? \"post-result watchdog fired after terminal safe-output was emitted\" : \"partial execution after terminal safe-output was already produced\";\n           log(`attempt ${attempt + 1}: ${reason} — treating as success (late-activity exit suppressed)`);\n           lastExitCode = 0;\n           break;\n         }\n \n         const trustedAICreditsExceeded = nonRetryableGuard.aiCreditsExceeded && parseMaxAICreditsExceededFromAuditLog();\n         if (nonRetryableGuard.aiCreditsExceeded && !trustedAICreditsExceeded) {\n           log(`attempt ${attempt + 1}: AI credits marker found in CLI output without trusted firewall audit confirmation — preserving normal failure handling`);\n         }\n         const shouldTreatAICreditsExceededAsSuccess = trustedAICreditsExceeded && !isAuthenticationFailed;\n         if (shouldTreatAICreditsExceededAsSuccess || nonRetryableGuard.awfAPIProxyBlockingRequests || isInvocationCapExceeded) {\n           const reasons = [];\n           if (shouldTreatAICreditsExceededAsSuccess) reasons.push(\"AI credits budget exceeded\");\n           if (nonRetryableGuard.awfAPIProxyBlockingRequests) reasons.push(\"AWF API proxy is blocking requests\");\n           if (isInvocationCapExceeded) {\n"}}}
{"type":"assistant.message","timestamp":"2026-08-02T14:05:54.574Z","data":{"content":""}}
{"type":"tool.execution_start","timestamp":"2026-08-02T14:05:54.576Z","data":{"toolName":"task","mcpServerName":""}}
{"type":"subagent.started","timestamp":"2026-08-02T14:05:54.587Z","data":{"agentName":"general-purpose","agentDisplayName":"General Purpose Agent","toolCallId":"toolu_01NUMzntgK4TyFsBTDvHNXVi"}}
[copilot-sdk-driver] [sdk-driver] error: Execution failed: Error: No model available. Check policy enablement under GitHub Settings > Copilot
{"type":"subagent.completed","timestamp":"2026-08-02T14:05:54.623Z","data":{"agentName":"general-purpose","toolCallId":"toolu_01NUMzntgK4TyFsBTDvHNXVi"}}
{"type":"tool.execution_complete","timestamp":"2026-08-02T14:05:54.680Z","data":{"toolName":"task","mcpServerName":"","success":false}}

Action Required

Assign this issue to an agent to debug and fix the issue.

Debug with any coding agent

Use this prompt with any coding agent (GitHub Copilot, Claude, Gemini, etc.):

Debug the agentic workflow failure using https://raw.githubusercontent.com/github/gh-aw/main/debug.md

The failed workflow run is at https://github.com/github/gh-aw/actions/runs/30751208732
Manually invoke the agent

Debug this workflow failure using your favorite Agent CLI and the agentic-workflows prompt.

Tip

Stop reporting this workflow as a failure

To stop a workflow from creating failure issues, set report-failure-as-issue: false in its frontmatter:

safe-outputs:
  report-failure-as-issue: false

Generated from PR Code Quality Reviewer · 13.8 AIC ·

  • expires on Aug 3, 2026, 2:09 AM UTC

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions