Conversation
Closes #234 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deploying website with
|
| Latest commit: |
19e9748
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://36effbb1.website-70y.pages.dev |
| Branch Preview URL: | https://claude-github-issue-234-plan.website-70y.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
The regenerated *.lock.yml workflows contain invalid YAML (run: followed by | on the next line), which is likely to break workflow parsing/validation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Upgrades the repository’s gh-aw/AWF toolchain and regenerates the compiled *.lock.yml workflows to address the recurring awf-squid startup failures (and to improve diagnostics when the sandbox fails to start).
Changes:
- Bump gh-aw compiler / setup action pins and regenerate lock workflows (including updated AWF/firewall image versions and rootless AWF invocation).
- Enable
features.awf-diagnostic-logsand explicitly allow thegh label listbash command for strict-mode tool allowlisting. - Prevent Dependabot from independently bumping
github/gh-aw-actions/setup, keeping it in lockstep withgh aw compileoutput.
File summaries
| File | Description |
|---|---|
| .github/workflows/issue-triage.md | Enables AWF diagnostic logs and explicitly allowlists the required bash command for strict mode. |
| .github/workflows/cost-tracker.lock.yml | Regenerated compiled workflow with updated action/image pins and runtime behavior changes from newer gh-aw. |
| .github/workflows/issue-triage.lock.yml | Regenerated compiled workflow with updated action/image pins and runtime behavior changes from newer gh-aw. |
| .github/dependabot.yml | Ignores github/gh-aw-actions/setup so pins move only via gh aw compile. |
| .github/aw/actions-lock.json | Syncs the setup action pin/sha to v0.88.2. |
| .gitattributes | Removes merge=ours from generated lock workflow attributes. |
Review details
- Files reviewed: 4/6 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| run: | ||
| | # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input. | ||
| # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct | ||
| # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. | ||
| GH_HOST="${GITHUB_SERVER_URL#https://}" |
There was a problem hiding this comment.
The YAML is valid — a block scalar indicator on the line after the key is legal YAML, and GitHub Actions parses it fine. Confirmed with a real parser:
$ ruby -ryaml -e ...
issue-triage.lock.yml OK jobs=6
run first line: "# Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct\n"
The run: scalar resolves to the full script body, so nothing is broken.
There is a smaller real problem underneath it, though. gh aw compile emits that line as:
run: | # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input.and Prettier was splitting it, detaching the zizmor: ignore directive from the step it annotates. Fixed in b923506 by adding .github/workflows/*.lock.yml to .prettierignore — these are compiler output and Prettier was also rewriting their quote style for no benefit. The lock files now match gh aw compile byte-for-byte, pnpm format:check and pnpm lint still pass, and both files parse.
| run: | ||
| | # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input. | ||
| # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct | ||
| # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. | ||
| GH_HOST="${GITHUB_SERVER_URL#https://}" |
There was a problem hiding this comment.
The YAML is valid — a block scalar indicator on the line after the key is legal YAML, and GitHub Actions parses it fine. Confirmed with a real parser:
$ ruby -ryaml -e ...
issue-triage.lock.yml OK jobs=6
run first line: "# Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct\n"
The run: scalar resolves to the full script body, so nothing is broken.
There is a smaller real problem underneath it, though. gh aw compile emits that line as:
run: | # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input.and Prettier was splitting it, detaching the zizmor: ignore directive from the step it annotates. Fixed in b923506 by adding .github/workflows/*.lock.yml to .prettierignore — these are compiler output and Prettier was also rewriting their quote style for no benefit. The lock files now match gh aw compile byte-for-byte, pnpm format:check and pnpm lint still pass, and both files parse.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Follow-up review turned up two things I had wrong, both now fixed in 19e9748. 1. The 2. That command demonstrably worked before: the last green run (30217561902, 2026-07-26) shows Fix is two-layered, because
The two lists have to stay in sync; both carry a comment saying so. Sourced from Also in this commit: Two review findings I looked at and did not act on: unknown labels are rejected, not silently created (
|
|
Closing this out for the record: we changed our minds on the approach. Rather than upgrade the toolchain to v0.88.2 and keep maintaining it, we're removing GitHub Agentic Workflows from the repository entirely. Superseded by #237, which reverts the union of #94, #95 and #96 — both agentic workflows and their generated lock files, The diagnosis in this PR still stands and may be useful if we ever revisit: squid exits 1 on #234 and #226 have been closed as obsolete and the |
Closes #234
Problem
Agentic Triagehas failed on every run since 2026-09-01 (runs 33537656702, 33738200080, 33825940584), each one filing a fresh failure issue. Last green run was 2026-07-26.From run 33825940584's logs and
agentartifact:awf-squidstarts, then reportsError~0.5 s later with exit code 1, sodocker compose up -d --pull neveraborts withdependency failed to start: container awf-squid exited (1).firewall/logs/in the artifact holds onlyapi-proxy-logs/— squid never wroteaccess.logorcache.log, i.e. it died during config parse, before opening log files.firewall/audit/squid.confcarries the dual-stack listener:That matches github/gh-aw-firewall#2139 (
FATAL: http_port: IPv6 is not available→ ~15 ms container lifetime →exited (1)→ no logs), which fires when the Docker daemon has IPv6 disabled in the container netns. The upstream mitigation is asedin the squid image entrypoint, so it rides on the firewall image version rather than the generated config. We pinnedghcr.io/github/gh-aw-firewall/*:0.25.41(released 2026-05-06) — a four-month-old toolchain — and the first failure lands one day after runnerImageVersion: 20260831.293.1shipped, the only thing that changed on our side.Ruled out: Dependabot's August bumps of
uses:lines inside the generated.lock.ymlfiles (#213, #215) are not the cause — the run log confirms awf, the compose images and the config schema all resolved to 0.25.41 consistently. They did leave the embeddedgh-aw-manifestheader and.github/aw/actions-lock.jsonstale atv0.72.1while theuses:lines saidv0.84.0.Changes
Recompiled with a current compiler rather than hand-editing generated lock files.
sudo -E awf …--rootless, no sudo).github/workflows/issue-triage.md— addedfeatures.awf-diagnostic-logs: true, so a repeat failure shipsdocker logs awf-squid, exit codes and the sanitized compose config undersandbox/firewall/in theagentartifact instead of leaving us blind..github/dependabot.yml— ignoresgithub/gh-aw-actions/setup; it has to move in lockstep with the awf binary version, the firewallimageTagand the manifest header, which onlygh aw compilecan do together..lock.ymlfiles regenerated, thenprettier --write(repo convention — lint-staged formats*.ymland CI runsformat:check).Deliberately not run:
gh aw update, which would re-pull the upstreamgithubnext/agenticsmarkdown at a newer ref and clobber the local customisation inissue-triage.md. Only the compiler version moves here; the prompt is untouched.Two things the new compiler forced
tools.bashwhengithub.min-integrity: none. Compilation failed untilbash: ["gh label list"]was added — the prompt's only shell need (step 3). The agent previously ran under Copilot's--allow-all-tools, so this narrows the grant rather than widening it..gitattributeslostmerge=ourson*.lock.yml— the compiler rewrote the file. Kept as-is, since every future compile would strip it again.Also new: an optional
GH_AW_DEFAULT_OTLP_HEADERStelemetry secret, guarded byGH_AW_OTLP_IF_MISSING: ignore. Nothing to configure.Verification
gh aw compileexits clean;pnpm format:checkandpnpm lintpass.GH_AW_VERSION: v0.88.2,install_awf_binary.sh v0.28.12 --rootless, all threegh-aw-firewall/*:0.28.12images, theawf-config.schema.jsonURL,container.imageTag, and the manifest header.--diagnostic-logsconfirmed present on both awf invocations; triggers,permissions: read-all, the 10-minute agent timeout and the prompt body are unchanged.This cannot be exercised from the PR branch —
on: issuesworkflows always run from the default branch. After merge, reopen #234 (or open a throwaway issue) and confirmExecute GitHub Copilot CLIgets pastContainer awf-squid Healthyand the agent job concludessuccess.If squid still exits 1, the
diagnostics/directory undersandbox/firewall/in the run'sagentartifact will now carry the squid stderr to file upstream atgithub/gh-aw-firewall.🤖 Generated with Claude Code