You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix the AWF-binary gap in BehaviorDefinedEngine.GetInstallationSteps — it breaks every non-npm custom engine, not just Pydantic AI
Executive summary: Two "Smoke Pydantic AI" runs failed back-to-back tonight because the custom-engine compiler path never emits an install_awf_binary.sh step for engines whose behavior declares no installation block (or a non-npm one) — awf: command not found kills the run before the agent ever executes. That's a P0, code-verified, 100%-reproducible compiler defect. Three smaller issues ride along: a dispatch_workflow call that shipped without its required message input (smoke-copilot-aoai-entra), a hallucinated GraphQL node ID that failed an otherwise-clean PR Sous Chef run, and a BYOK-Ollama warm-up probe that pings the wrong endpoint.
None of today's 5 failure clusters match any of the 3 open agentic-workflows bug issues on file — leave them all open as-is.
ifbehavior.Installation==nil {
ifbehavior.HarnessScript=="" {
returnnil
}
returnBuildNpmEngineInstallStepsWithAWF([]GitHubActionStep{GenerateNodeJsSetupStep()}, workflowData)
}
install:=behavior.Installationifinstall.PackageManager!="npm" {
returnnil// <-- AWF install skipped for any non-npm installation, or no installation at all
}
.github/workflows/shared/pydantic.md declares runtimes: uv and a pre-agent-steps entry for uv run pai --version, but no engine.behaviors.installation block and no harness-script. That routes straight through the return nil at line 169/181/188 — the compiled lock file never contains an install_awf_binary.sh step at all. Confirmed by diffing generated workflows:
audit-diff between the two failed runs confirms both are total losses — zero token usage on both sides, meaning the agent CLI never got to execute in either run:
The two runs show two symptoms of the same missing-install-step defect: the earlier run (§31229465314) additionally lacked the pip install pydantic-ai step and failed one step earlier (Failed to spawn: pai); the later run (§31231477754) got past that but still hit the missing-awf-binary wall at the actual execution step.
Cluster B — dispatch_workflow shipped without its required input
haiku-printer.yml declares inputs.message as required: true. The smoke-copilot-aoai-entra prompt instructs the agent to call dispatch_workflow for haiku-printer "with an original testing/automation haiku," but the handler (actions/setup/js/dispatch_workflow.cjs:208-256) passes message.inputs straight through to the GitHub API with no pre-flight validation against the target workflow's required-input schema — so a model that omits the inputs.message key gets a raw, hard-to-diagnose 422 from GitHub instead of an actionable local error, and the whole job is marked failure even though every other safe output in the run succeeded.
This is the same code path already flagged in #49583 (dispatch_workflow → haiku-printer breaking otherwise-successful smoke-copilot runs), just a different trigger (missing input vs. deleted ref branch). Broadening #49583's scope to cover input validation, not just ref resolution, covers both without a second issue.
##[error]Failed to resolve review thread: Request failed due to following response errors:
- Could not resolve to a node with the global id of 'PRRT_kwDOPc1QR88AAAAB-example-invalid'
The literal string example-invalid does not appear anywhere in pr-sous-chef.md — the model fabricated this ID rather than copying a real one out of reviewThreads. 5 of 6 safe outputs in that run succeeded (issue comment posted fine); only this one call failed, yet it flipped the whole job to failure. The resolve_pull_request_review_thread handler has no format check on the ID before calling the GraphQL API — a cheap regex guard (^PRRT_[A-Za-z0-9]+$, reject anything containing non-base64 tokens like "example" or "invalid") would turn this into a soft missing_data/warning instead of a hard job failure.
Cluster D — warm-up probe checks the wrong endpoint
daily-byok-ollama-test already carries a documented mitigation (its own inline comment): "A cold model (not yet loaded) can cause the OpenAI-compatible /v1/chat/completions endpoint to return 503 Service Unavailable on the agent's first requests, which exhausts the Copilot CLI's built-in retry budget and fails the whole run." The fix it ships probes (localhost/redacted) (Ollama's **native** API) and reports "Model warm-up succeeded on attempt 1" — but the actual agent traffic goes through the api-proxy's **OpenAI-compatible** /v1/... surface, which independently returned 503 (awf-reflect models fetch returned 503 for (apiproxy/redacted) retrying) and then failed for real across all 4 Copilot CLI attempts ([§31223940604](https://github.com/github/gh-aw/actions/runs/31223940604), 22:31-22:34 UTC). Warming the native endpoint doesn't warm the OpenAI-compat one — the probe needs to hit /v1/modelsor/v1/chat/completions` (the same path the harness uses) before declaring success.
No open issue covers Clusters A, C, or D — Cluster A gets a new sub-issue below (P0); C and D are documented here for follow-up given the 2-issue budget for this run — file separately if not picked up.
Fix roadmap
P0 — do this first: Add the AWF-install step unconditionally for behavior-defined engines when network isolation is enabled, regardless of install.PackageManager or whether Installation is declared at all. See sub-issue below for the exact change.
Fix the Design Decision Gate max-turns: 20 cap first — it killed 2/2 of that workflow's runs this window on complex PRs; see linked sub-issue (#aw_ddg20). Add DOCKER_PAT or soft-fail the docker-sbx check — Daily Assign Issue To User is now failing every run on a missing-secret pre-flight check, not a flaky issue; see linked sub-issue (#aw_daipat).
Copilot CLI: 13 permission-denied events, then update_pull_request failed on empty body (quoting bug); agent self-recovered via report_incomplete — no data loss, not filed as a separate issue this cycle
Gate correctly failed: Critical vulnerabilities detected in container images — the scanner is working as designed; the fix here is patching the flagged images, not the workflow
Evidence
Cluster E — code-verified via audit + audit-diff
agent-stdio.log for §31238149137: API Error: Request rejected (429) · Maximum LLM invocations exceeded (20 / 20). followed by [claude-harness] attempt 1: maximum LLM invocations exceeded — not retrying (non-retryable guard condition).
audit-diff (base §31237067931 successful → §31238149137 failed) confirms the failed run made exactly 20/20 requests (run2_total_requests: 20) before being cut off by the guard. .github/workflows/design-decision-gate.md:33 sets max-turns: 20 — confirmed as the ceiling being hit, not an infra crash.
§31236494018 shows the same shape independently: 17 turns, 841k tokens, "Resource Heavy For Domain" (high), same "Workflow Failed" signature — 2/2 occurrences this window.
Cluster F — audit key_findings
##[error]secrets.DOCKER_PAT is empty. docker-sbx requires a Docker Hub personal access token to pull the sandbox template image. Add a DOCKER_PAT secret to your repository. — this will recur on every future run until resolved; not a one-off flake despite only 1 occurrence in this 6h window.
Cluster G — not filed as a new issue this cycle (2-issue budget spent on E and F)
[copilot-harness] attempt 1 failed: exitCode=1 failureClass=permission_denied permissionDeniedCount=13 then update_pull_request failed on a validation error from an empty body (quoting issue); agent called report_incomplete per policy instead of retrying. Isolated single occurrence, no data loss — lower urgency than E/F. File separately if it recurs.
Clusters A/B/C/D from the prior sweep — unaffected by this sweep's dataset, no changes recommended.
Fix roadmap (cumulative)
P0: (carried from prior sweep) AWF-install step for behavior-defined engines — see prior sub-issue. P1 — new this cycle: Raise or soft-fail max-turns: 20 in Design Decision Gate (sub-issue #aw_ddg20). P2 — new this cycle: Fix/soft-fail DOCKER_PAT check in Daily Assign Issue To User (sub-issue #aw_daipat); monitor PR Description Updater quoting bug (Cluster G, not filed).
Sub-issues created this sweep
#aw_ddg20 — Design Decision Gate max-turns cap
#aw_daipat — Daily Assign Issue To User missing DOCKER_PAT> Generated by 🔍 [aw] Failure Investigator (6h) · agent · 163 AIC · ⌖ 42.9 AIC · ⊞ 5.5K · ◷
Fix the AWF-binary gap in
BehaviorDefinedEngine.GetInstallationSteps— it breaks every non-npm custom engine, not just Pydantic AIExecutive summary: Two "Smoke Pydantic AI" runs failed back-to-back tonight because the custom-engine compiler path never emits an
install_awf_binary.shstep for engines whose behavior declares noinstallationblock (or a non-npmone) —awf: command not foundkills the run before the agent ever executes. That's a P0, code-verified, 100%-reproducible compiler defect. Three smaller issues ride along: a dispatch_workflow call that shipped without its requiredmessageinput (smoke-copilot-aoai-entra), a hallucinated GraphQL node ID that failed an otherwise-clean PR Sous Chef run, and a BYOK-Ollama warm-up probe that pings the wrong endpoint.None of today's 5 failure clusters match any of the 3 open
agentic-workflowsbug issues on file — leave them all open as-is.Failure cluster table
awf: command not found(exit 127) /Failed to spawn: pai(exit 2) — engine never runsdispatch_workflow→ haiku-printer:Required input 'message' not provided(HTTP 422)resolve_pull_request_review_threadgiven a fabricated ID:PRRT_kwDOPc1QR88AAAAB-example-invalid503 Service Unavailable× 4 attempts against Ollama despite a passing warm-up checkEvidence
Cluster A — code-verified root cause (click to expand)
pkg/workflow/behavior_defined_engine.go:166-213,GetInstallationSteps:.github/workflows/shared/pydantic.mddeclaresruntimes: uvand apre-agent-stepsentry foruv run pai --version, but noengine.behaviors.installationblock and noharness-script. That routes straight through thereturn nilat line 169/181/188 — the compiled lock file never contains aninstall_awf_binary.shstep at all. Confirmed by diffing generated workflows:audit-diffbetween the two failed runs confirms both are total losses — zero token usage on both sides, meaning the agent CLI never got to execute in either run:The two runs show two symptoms of the same missing-install-step defect: the earlier run (§31229465314) additionally lacked the
pip install pydantic-aistep and failed one step earlier (Failed to spawn: pai); the later run (§31231477754) got past that but still hit the missing-awf-binary wall at the actual execution step.Cluster B — dispatch_workflow shipped without its required input
haiku-printer.ymldeclaresinputs.messageasrequired: true. The smoke-copilot-aoai-entra prompt instructs the agent to calldispatch_workflowforhaiku-printer"with an original testing/automation haiku," but the handler (actions/setup/js/dispatch_workflow.cjs:208-256) passesmessage.inputsstraight through to the GitHub API with no pre-flight validation against the target workflow's required-input schema — so a model that omits theinputs.messagekey gets a raw, hard-to-diagnose 422 from GitHub instead of an actionable local error, and the whole job is markedfailureeven though every other safe output in the run succeeded.This is the same code path already flagged in #49583 (dispatch_workflow → haiku-printer breaking otherwise-successful smoke-copilot runs), just a different trigger (missing input vs. deleted ref branch). Broadening #49583's scope to cover input validation, not just ref resolution, covers both without a second issue.
Cluster C — hallucinated review-thread node ID
Job log for §31230238662:
The literal string
example-invaliddoes not appear anywhere inpr-sous-chef.md— the model fabricated this ID rather than copying a real one out ofreviewThreads. 5 of 6 safe outputs in that run succeeded (issue comment posted fine); only this one call failed, yet it flipped the whole job tofailure. Theresolve_pull_request_review_threadhandler has no format check on the ID before calling the GraphQL API — a cheap regex guard (^PRRT_[A-Za-z0-9]+$, reject anything containing non-base64 tokens like "example" or "invalid") would turn this into a softmissing_data/warning instead of a hard job failure.Cluster D — warm-up probe checks the wrong endpoint
daily-byok-ollama-testalready carries a documented mitigation (its own inline comment): "A cold model (not yet loaded) can cause the OpenAI-compatible /v1/chat/completions endpoint to return 503 Service Unavailable on the agent's first requests, which exhausts the Copilot CLI's built-in retry budget and fails the whole run." The fix it ships probes(localhost/redacted) (Ollama's **native** API) and reports "Model warm-up succeeded on attempt 1" — but the actual agent traffic goes through the api-proxy's **OpenAI-compatible**/v1/...surface, which independently returned 503 (awf-reflect models fetch returned 503 for (apiproxy/redacted) retrying) and then failed for real across all 4 Copilot CLI attempts ([§31223940604](https://github.com/github/gh-aw/actions/runs/31223940604), 22:31-22:34 UTC). Warming the native endpoint doesn't warm the OpenAI-compat one — the probe needs to hit/v1/modelsor/v1/chat/completions` (the same path the harness uses) before declaring success.Existing issue correlation
pull_request.stackarithmetic) — unrelated, left open.Fix roadmap
P0 — do this first: Add the AWF-install step unconditionally for behavior-defined engines when network isolation is enabled, regardless of
install.PackageManageror whetherInstallationis declared at all. See sub-issue below for the exact change.P1 — do these next:
dispatch_workflowinputs against the target workflow's declaredrequiredinputs before calling the GitHub API; extend [aw-failures] dispatch_workflow safe-output fails the whole Smoke Copilot run when the ephemeral trigger branch is gone #49583 to own this.resolve_pull_request_review_thread(and siblings) so a malformed/fabricated ID degrades to a warning, not a job failure./v1/models(or/v1/chat/completions) path instead of the native/api/generateendpoint.P2 — monitor only: none this cycle.
Sub-issues created
Update — 2026-08-08 07:xx UTC (second 6h sweep)
Fix the Design Decision Gate
max-turns: 20cap first — it killed 2/2 of that workflow's runs this window on complex PRs; see linked sub-issue (#aw_ddg20).Add
DOCKER_PATor soft-fail the docker-sbx check —Daily Assign Issue To Useris now failing every run on a missing-secret pre-flight check, not a flaky issue; see linked sub-issue (#aw_daipat).New failure cluster table (this sweep)
429 Maximum LLM invocations exceeded (20 / 20)—max-turns: 20too low for complex PRssecrets.DOCKER_PAT is empty— persistent until secret added or check made non-fatalupdate_pull_requestfailed on empty body (quoting bug); agent self-recovered viareport_incomplete— no data loss, not filed as a separate issue this cycleCritical vulnerabilities detected in container images— the scanner is working as designed; the fix here is patching the flagged images, not the workflowEvidence
Cluster E — code-verified via audit + audit-diff
agent-stdio.logfor §31238149137:API Error: Request rejected (429) · Maximum LLM invocations exceeded (20 / 20).followed by[claude-harness] attempt 1: maximum LLM invocations exceeded — not retrying (non-retryable guard condition).audit-diff(base §31237067931 successful → §31238149137 failed) confirms the failed run made exactly 20/20 requests (run2_total_requests: 20) before being cut off by the guard..github/workflows/design-decision-gate.md:33setsmax-turns: 20— confirmed as the ceiling being hit, not an infra crash.§31236494018 shows the same shape independently: 17 turns, 841k tokens, "Resource Heavy For Domain" (high), same "Workflow Failed" signature — 2/2 occurrences this window.
Cluster F — audit key_findings
##[error]secrets.DOCKER_PAT is empty. docker-sbx requires a Docker Hub personal access token to pull the sandbox template image. Add a DOCKER_PAT secret to your repository.— this will recur on every future run until resolved; not a one-off flake despite only 1 occurrence in this 6h window.Cluster G — not filed as a new issue this cycle (2-issue budget spent on E and F)
[copilot-harness] attempt 1 failed: exitCode=1 failureClass=permission_denied permissionDeniedCount=13thenupdate_pull_requestfailed on a validation error from an empty body (quoting issue); agent calledreport_incompleteper policy instead of retrying. Isolated single occurrence, no data loss — lower urgency than E/F. File separately if it recurs.Existing issue correlation (this sweep)
Fix roadmap (cumulative)
P0: (carried from prior sweep) AWF-install step for behavior-defined engines — see prior sub-issue.
P1 — new this cycle: Raise or soft-fail
max-turns: 20in Design Decision Gate (sub-issue #aw_ddg20).P2 — new this cycle: Fix/soft-fail
DOCKER_PATcheck in Daily Assign Issue To User (sub-issue #aw_daipat); monitor PR Description Updater quoting bug (Cluster G, not filed).Sub-issues created this sweep
max-turnscapDOCKER_PAT> Generated by 🔍 [aw] Failure Investigator (6h) · agent · 163 AIC · ⌖ 42.9 AIC · ⊞ 5.5K · ◷