Summary
- Scan window: items updated on or after 2026-09-06 in
github/gh-aw-firewall
- Items reviewed: ~50 most-recently-updated issues/PRs (list_issues/list_pull_requests, all states), cross-checked against catalog IDs already present
- Genuinely new lessons found: 2 (both merged just outside/at the edge of the strict window but not yet captured in the catalog; see note below)
Note: PR #8172 (merged 2026-09-05) and PR #8085 (merged 2026-09-04) fall just before the 2026-09-06 scan-window boundary, but neither is present anywhere in self-hosted-failure-modes.md, the workflow playbook, or the portable agent doctor as of this run, and both are squarely non-hosted-runner/topology lessons the catalog is meant to capture. Flagging them now rather than letting them fall through the cracks between overlapping daily windows. Everything else reviewed in-window (PRs #8171, #8218, #8251, #8290, #8113/#8114, #8038, #8021/#8023, #8038/#8113/#8114/#8171/#8218/#8251 citations) is already reflected in the catalog as B29–B33 / C9–C10 / A24.
Proposed knowledge-base changes
For .github/workflows/shared/self-hosted-failure-modes.md:
New row — Category A (ARC/DinD), next free ID A25:
| ID |
Signal |
Root cause |
Fix / flag |
Probe |
Citations |
| A25 |
On runner.topology: arc-dind, workloads inside the AWF sandbox need a GitHub Actions services: container's native protocol (DB drivers, migration tools, etc.) but cannot reach it — the services: container runs on the runner's own bridge network while the AWF agent runs on the isolated awf-net, and the two bridges are unrouted; existing host-iptables service-port routing doesn't help because ARC/DinD network isolation never programs host iptables rules |
No AWF mechanism previously joined a services: container to awf-net; raw-protocol clients (e.g. psql) have no route from the sandbox to the service |
Documented in AWF (PR #8085, merged 2026-09-04): new docs/arc-dind.md section "Joining services: containers to awf-net for direct protocol access" documents a verified workaround — a pre-step waits for awf-net to exist, then docker network connect --alias <name> awf-net <service_container> attaches the service container (never the agent) with a resolvable alias. Security invariant: only the service joins awf-net; joining the agent to the runner bridge would bypass the Squid egress firewall. Longer-term direction (services.<name>.attach: true compiler sugar) is not yet implemented. |
Confirm the services: container, not the agent, is the one calling docker network connect --alias <name> awf-net <container>; verify the agent can resolve/reach <name> after the join; confirm the agent itself never appears attached to the runner's default bridge |
#8075, #8085 |
New row — Category B (self-hosted), next free ID B34:
| ID |
Signal |
Root cause |
Fix / flag |
Probe |
Citations |
| B34 |
A self-hosted-runner workflow whose domain allowlist includes host.docker.internal (e.g. targeting a host-side Ollama server) still fails to reach the host service from inside the AWF sandbox, even though the domain is allowlisted and allowHostPorts/--allow-host-ports includes the service port |
AWF's host-gateway keyword processing did not recognize host.docker.internal (bare or with `(redacted) scheme) as a trigger for host-gateway setup, so the container-to-host route was never established even though the domain ACL and port were otherwise correctly configured |
Fixed in AWF (PR #8172, merged 2026-09-05): host-gateway keyword processing now recognizes host.docker.internal, (host.docker.internal/redacted) and (host.docker.internal/redacted), enabling container host access while preserving explicit host-domain entries. Includes coverage for custom ports (e.g. Ollama's 11434`). Upgrade AWF to include #8172. |
Inspect generated compose/iptables for host-gateway wiring when host.docker.internal (in any of the three forms) appears in network.allowDomains; confirm `curl (host.docker.internal/redacted) succeeds from inside the sandbox on patched AWF |
#8165, #8172 |
Proposed doctor changes
For .github/workflows/self-hosted-runner-doctor.md — add to the error-string quick-lookup table:
| A `services:` container's native protocol (DB driver, migration tool) is unreachable from the AWF sandbox on `runner.topology: arc-dind`, with no host-iptables route available | A25 (join the **service** container, never the agent, to `awf-net` via `docker network connect --alias <name> awf-net <container>`; documented in github/gh-aw-firewall#8085) |
| `host.docker.internal` is allowlisted (e.g. for a host-side Ollama server) but the sandbox still cannot reach the host service despite correct port allowlisting | B34 (host-gateway setup wasn't triggered for `host.docker.internal`/`http(s)://host.docker.internal`; fixed in github/gh-aw-firewall#8172) |
Proposed portable agent changes
For .github/agents/self-hosted-runner-doctor.md — mirror both new catalog rows (A25, B34) into the embedded catalog copy, and mirror both new quick-lookup rows into the embedded playbook, so the portable agent stays in sync with the shared file and workflow playbook above.
Source issues and PRs
Generated by Runner Doctor Updater · copilot · auto · 98.9 AIC · ⊞ 3.3K · ◷
Summary
github/gh-aw-firewallNote: PR #8172 (merged 2026-09-05) and PR #8085 (merged 2026-09-04) fall just before the 2026-09-06 scan-window boundary, but neither is present anywhere in
self-hosted-failure-modes.md, the workflow playbook, or the portable agent doctor as of this run, and both are squarely non-hosted-runner/topology lessons the catalog is meant to capture. Flagging them now rather than letting them fall through the cracks between overlapping daily windows. Everything else reviewed in-window (PRs #8171, #8218, #8251, #8290, #8113/#8114, #8038, #8021/#8023, #8038/#8113/#8114/#8171/#8218/#8251 citations) is already reflected in the catalog as B29–B33 / C9–C10 / A24.Proposed knowledge-base changes
For
.github/workflows/shared/self-hosted-failure-modes.md:New row — Category A (ARC/DinD), next free ID
A25:runner.topology: arc-dind, workloads inside the AWF sandbox need a GitHub Actionsservices:container's native protocol (DB drivers, migration tools, etc.) but cannot reach it — theservices:container runs on the runner's own bridge network while the AWF agent runs on the isolatedawf-net, and the two bridges are unrouted; existing host-iptables service-port routing doesn't help because ARC/DinD network isolation never programs host iptables rulesservices:container toawf-net; raw-protocol clients (e.g.psql) have no route from the sandbox to the servicedocs/arc-dind.mdsection "Joiningservices:containers toawf-netfor direct protocol access" documents a verified workaround — a pre-step waits forawf-netto exist, thendocker network connect --alias <name> awf-net <service_container>attaches the service container (never the agent) with a resolvable alias. Security invariant: only the service joinsawf-net; joining the agent to the runner bridge would bypass the Squid egress firewall. Longer-term direction (services.<name>.attach: truecompiler sugar) is not yet implemented.services:container, not the agent, is the one callingdocker network connect --alias <name> awf-net <container>; verify the agent can resolve/reach<name>after the join; confirm the agent itself never appears attached to the runner's default bridgeNew row — Category B (self-hosted), next free ID
B34:host.docker.internal(e.g. targeting a host-side Ollama server) still fails to reach the host service from inside the AWF sandbox, even though the domain is allowlisted andallowHostPorts/--allow-host-portsincludes the service porthost.docker.internal(bare or with `(redacted) scheme) as a trigger for host-gateway setup, so the container-to-host route was never established even though the domain ACL and port were otherwise correctly configuredhost.docker.internal,(host.docker.internal/redacted) and(host.docker.internal/redacted), enabling container host access while preserving explicit host-domain entries. Includes coverage for custom ports (e.g. Ollama's11434`). Upgrade AWF to include #8172.host.docker.internal(in any of the three forms) appears innetwork.allowDomains; confirm `curl (host.docker.internal/redacted) succeeds from inside the sandbox on patched AWFProposed doctor changes
For
.github/workflows/self-hosted-runner-doctor.md— add to the error-string quick-lookup table:Proposed portable agent changes
For
.github/agents/self-hosted-runner-doctor.md— mirror both new catalog rows (A25, B34) into the embedded catalog copy, and mirror both new quick-lookup rows into the embedded playbook, so the portable agent stays in sync with the shared file and workflow playbook above.Source issues and PRs