Skip to content

Add Docker socket supplementary group to MCP gateway container command#26750

Merged
lpcox merged 14 commits intomainfrom
copilot/add-group-add-for-docker-socket-access
Apr 16, 2026
Merged

Add Docker socket supplementary group to MCP gateway container command#26750
lpcox merged 14 commits intomainfrom
copilot/add-group-add-for-docker-socket-access

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 16, 2026

The MCP gateway now runs as a non-root UID/GID, but only inherited the primary group, which prevented access to bind-mounted /var/run/docker.sock on hosts where the socket is owned by root:docker. This change adds dynamic supplementary group mapping so gateway-launched MCP containers can still be started.

  • Gateway container command generation

    • Updated MCP setup command assembly to append Docker socket group mapping at runtime:
      • --group-add $(stat -c '%g' /var/run/docker.sock)
    • Keeps the argument before the docker socket bind mount in the generated docker run command.
  • Regression coverage for command output

    • Added integration coverage in pkg/workflow/mcp_setup_generator_test.go to assert the generated gateway command includes the --group-add socket-GID mapping and preserves ordering relative to the docker.sock mount.

Example of generated command segment:

docker run -i --rm --network host \
  --group-add $(stat -c '%g' /var/run/docker.sock) \
  -v /var/run/docker.sock:/var/run/docker.sock \
  ...

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw 7617615/b250/vetrev-parse 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/link /usr/bin/git ts.test 7617615/b375/vetrev-parse ortcfg.link git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GO111MODULE dff7804a79cd0b2e--show-toplevel git rev-�� --show-toplevel go /usr/bin/git ExpressionCompilgit GO111MODULE ache/go/1.25.8/x--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw git ache/node/24.14.--show-toplevel git conf�� --get remote.origin.url /usr/bin/git 4104-61868/test-git git /usr/bin/git git (http block)
  • https://api.github.com/orgs/test-owner/actions/secrets
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json 1.5.0/internal/j-ifaceassert x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name ck 'scripts/**/*GOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE sh (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --show-toplevel docker /usr/bin/git | tr '\n' ':')$sh sh /usr/bin/git git /pre�� --show-toplevel git (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --git-dir 64/pkg/tool/linu-trimpath /usr/bin/gh ty-test.md .cfg 64/pkg/tool/linu--show-toplevel gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts /usr/bin/git .artifacts[].namgit GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv add origin /usr/bin/gh -json GO111MODULE 64/bin/go gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts /usr/bin/git .artifacts[].namnode LsRemoteWithReal/opt/hostedtoolcache/node/24.14.1/x64/bin/npm 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --get remote.origin.url /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows/approach-validator.md remote clusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle yphen193929438/0git yphen193929438/0rev-parse -nolocalimports infocmp -1 xterm-color /tmp/go-build3597617615/b429/_testmain.go /usr/bin/git -json GO111MODULE x_amd64/vet git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv list --json /usr/bin/git 203609059/001' 203609059/001' 64/bin/go git -C /tmp/compile-instructions-test-498588189/.github/workflows config om/owner/repo.git remote.origin.urgit GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv "prettier" --write '../../../**/*.json' '!../../../pkg/workflow/js/**/*.json' ---errorsas git /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link --show-toplevel nly (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv 8700/001/stability-test.md 7617615/b059/vet.cfg .cfg -n1 er --end-of-options-v ache/go/1.25.8/x64/pkg/tool/linufeature-branch -p 2458-33514/test-3750745091/.github/workflows -trimpath ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -I /tmp/go-build162rev-parse -I ortcfg (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel ylQP4Z8/vCNYLdc7D8RXanEmFBss /usr/bin/git 644347/b195/_pkggit g-gh/tcTLxKIFRzerev-parse ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 644347/b082/impogit Fuh-/RCcUnszHB3orev-parse .cfg git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuupstream /usr/bin/git -unreachable=falgit l ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile /usr/bin/git 7617615/b440/_pkgit -buildtags 7617615/b440=> git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git se 7617615/b156/vetrev-parse .cfg git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git se 7617615/b265/vetrev-parse ache/go/1.25.8/x--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/xHEAD git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv /usr/bin/git git /usr/bin/git *.json' '!../../git git k/_temp/uv-pythoHEAD git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git e_modules/.bin/s--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --get remote.myorg.url /usr/bin/git 56/001 tOLMlgimq x_amd64/vet git rev-�� --git-dir x_amd64/vet /usr/bin/git IB9BnUclx .cfg 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv 64/bin/go go /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE x_amd64/vet git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git json' --ignore-pgit /usr/bin/git /usr/bin/git git init�� /usr/bin/git git /usr/bin/git 879171/001 git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --get remote.origin.url /usr/bin/git 56/001 OhJqGnTLC 64/pkg/tool/linu--show-toplevel git conf�� user.name Test User /usr/bin/git -U7HTRxJB .cfg tartedAt,updated--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv 64/bin/go go /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git Gitcustom_branch/usr/bin/git Gitcustom_branchremote node git rev-�� --show-toplevel git /usr/bin/git 38/001 git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /tmp/go-build3597617615/b414/_pkg_.a -trimpath /usr/bin/infocmp -p github.com/githurev-parse -lang=go1.25 infocmp -1 xterm-color -goversion /usr/bin/git -c=4 -nolocalimports -importcfg git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv actions/setup-cli/install.sh l /usr/bin/git GOSUMDB GOWORK 64/bin/go git ls-r�� --symref origin /usr/bin/git a174f0b5e3273e0egit GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git e/git-receive-pack ./../.prettieriggit /opt/hostedtoolcrev-parse /usr/bin/git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv -pack /tmp/go-build3597617615/b455/_testmain.go /usr/bin/git 14/001 sYYP-7R33 x_amd64/compile git rev-�� --show-toplevel x_amd64/compile /usr/bin/git gk88dzu3u GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv t0 .github/workflows/test.md (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git json' --ignore-pgit infocmp /usr/bin/git git remo�� /usr/bin/git git /usr/bin/git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel -tests ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -json GO111MODULE x_amd64/compile ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv GOPATH GOPROXY /usr/bin/git GOSUMDB GOWORK 64/bin/go git add . (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv 75 --log-level /opt/hostedtoolcache/node/24.14.1/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/n--show-toplevel ./../.prettieriggit journal-or-kmsg /usr/bin/git sh -c "prettier" --write '**/*.cjs' '**/*.ts' '**/*.json' --ignore-path ../../../.pret.prettierignore l 2158775/b414/vet.cfg --show-toplevel infocmp /usr/bin/git sh (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -aw/git/ref/tags/v1.2.3 -importcfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -s -w -buildmode=exe ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows/approach-validator.md c /usr/lib/git-core/git-upload-pack - GOWORK 64/bin/go git-upload-pack /tmp�� GOMODCACHE ortcfg /usr/bin/git d/gh-aw/main.go d/gh-aw/capitalirev-parse 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -t security /home/REDACTED/work/gh-aw/gh-aw/actions/node_modules/.bin/sh ./../.prettieriggit -d 168.63.129.16 sh -c "prettier" --write '**/*.cjs' '**/*.ts' '**/*.json' --ignore-path ../../../.prettierignore conntrack 2158775/b402/vet.cfg INVALID,NEW -j DROP sh (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linu-importcfg GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu/home/REDACTED/work/gh-aw/gh-aw/scripts/lint_error_messages_test.go env 644347/b219/_pkg_.a GO111MODULE .cfg GOINSECURE g/x/text/unicoderev-parse 644347/b092/syma--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 644347/b214/_pkg_.a GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE g/x/net/http/httrev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y_with_repos=public_4205227011/001 GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2207818142 3zY_/HcUWNrRjpCKdAR9m3zY_ 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 644347/b210/_pkg_.a QuTc/8J1aAAdvjhK6D-KwQuTc .cfg GOINSECURE g/x/crypto/interrev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 2605174172/.github/workflows GO111MODULE 64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/asm (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE l/buffer GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2207818142 pRaw/gwkwek_UF5vdtNyzpRaw .cfg GOINSECURE fips140/mlkem GOMODCACHE ache/go/1.25.8/xtest@example.com (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE fips140deps/goderev-parse GOMODCACHE 64/pkg/tool/linux_amd64/vet env 644347/b173/_pkg_.a V4ci/NWzImF-917Hk3aRqV4ci x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 2605174172/.github/workflows GO111MODULE 64/pkg/tool/linux_amd64/cgo GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com env 2595240384 GO111MODULE x_amd64/compile GOINSECURE hpke GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 371772944/.github/workflows r73k/ZR15bOYtzO_sNGC5r73k k GOINSECURE /semver GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y_with_repos=public_4205227011/001 n.go 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE fips140 GOMODCACHE 64/pkg/tool/linux_amd64/vet env 644347/b218/_pkg_.a i2Jk/kxQktkbJrdZm0O72i2Jk .cfg GOINSECURE g/x/text/unicoderev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linu-trimpath (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD 644347/b013/syma--show-toplevel 64/pkg/tool/linux_amd64/vet env 371772944/.github/workflows V7o_/18xeupG6XnJInX8DV7o_ ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE g/x/net/http/httrev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y_with_explicit_repo1212188277/0remote.origin.url GO111MODULE 64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuorigin (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name .cfg x_amd64/vet GOINSECURE randutil GOMODCACHE x_amd64/vet env 644347/b220/_pkg_.a SZyr/UNQkpBpW_IvLZuHOSZyr x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD 644347/b007/syma--show-toplevel 64/pkg/tool/linux_amd64/vet env 371772944 7Ps3/Xuna8G_bMUX3GMM57Ps3 eutil.test GOINSECURE GOMOD GOMODCACHE eutil.test (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name LsRemoteWithRealGitmaster_branch259765925/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 644347/b222/_pkg_.a aMu6/n6X7R7Av3bGkLZAPaMu6 ache/go/1.25.8/x64/pkg/tool/linux_amd64/link GOINSECURE g/x/net/http2/hprev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linutest@example.com (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE hlite 644347/b007/syma--show-toplevel 64/pkg/tool/linux_amd64/vet ache�� 371772944/.github/workflows _zAe/m6K4S-499xrKjIdi_zAe ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE t/internal/strinrev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y_with_repos=public_4205227011/001 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path 444099514/001' 444099514/001' x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json 1.5.0/internal/x-ifaceassert x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 GOMOD GOMODCACHE x_amd64/vet env successfully" GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6 644347/b011/ GOMODCACHE 64/pkg/tool/linumyorg env 644347/b172/_pkg_.a GO111MODULE x_amd64/compile GOINSECURE 644347/b011/rt0_rev-parse ache/go/1.25.8/x--show-toplevel x_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/vet /usr/bin/git se 7617615/b015/vetrev-parse k git rev-�� --show-toplevel ache/go/1.25.8/xremote.origin.url /usr/bin/git se 7617615/b098/vet-lh .cfg git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git agentic-observabgit GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git -json GO111MODULE 1/x64/bin/node git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git mpiledOutput1465git git 64/bin/node git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git son git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv 644347/b121/_pkg_.a .cfg 64/pkg/tool/linux_amd64/compile GOINSECURE b/gh-aw/pkg/typerev-parse GOMODCACHE 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env agentic-observability-kit.md GO111MODULE 1/x64/bin/node GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv install --package-lock-only /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git user.email test@example.comrev-parse /usr/bin/gh git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD sm_wasm.s x_amd64/vet env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv npx prettier --c-errorsas GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node /hom�� --check scripts/**/*.js 64/bin/go -d git 64/bin/go go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv json' --ignore-path ../../../.pr**/*.json gh /usr/bin/git download 12346 /usr/bin/git git rev-�� 881295/001 git /usr/bin/git --show-toplevel go /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv d GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env _.a GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json tants.go x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env _.a GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv npx prettier --cGOSUMDB GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node /hom�� tmatter-with-env-template-expressions.md scripts/**/*.js 64/bin/go -d git 64/bin/go go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv on' --ignore-path ../../../.prettierignore /usr/bin/git /usr/bin/git -v go /usr/bin/git git rev-�� ./../pkg/workflow/js/**/*.json' --ignore-path git x_amd64/vet --show-toplevel go /usr/bin/git x_amd64/vet (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv 644347/b152/_pkg_.a .cfg 64/pkg/tool/linux_amd64/link GOINSECURE ntio/encoding/asrev-parse GOMODCACHE 64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv 1163848769/.github/workflows GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 508198403 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv install --package-lock-only /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git /usr/bin/bash --git-dir x_amd64/asm /usr/bin/git bash (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE fips140/aes/gcm 644347/b029/syma--show-toplevel 64/pkg/tool/linux_amd64/vet env 270847441/custom/workflows ho52/RILG8Ja3npv64jHUho52 ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE th2 GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion js/**/*.json' --git git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/lib/git-cor--show-toplevel git (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json ag.go x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo -nolocalimports -importcfg /tmp/go-build3597617615/b418/importcfg -pack /tmp/go-build3597617615/b418/_testmain.go env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE sh (http block)
  • https://api.github.com/repos/owner/repo/contents/file.md
    • Triggering command: /tmp/go-build3597617615/b400/cli.test /tmp/go-build3597617615/b400/cli.test -test.testlogfile=/tmp/go-build3597617615/b400/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile -Oz --enable-bu/opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /tmp/go-build4050822936/b400/cli.test /tmp/go-build4050822936/b400/cli.test -test.testlogfile=/tmp/go-build4050822936/b400/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env ck 'scripts/**/*GOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /tmp/go-build2612158775/b400/cli.test /tmp/go-build2612158775/b400/cli.test -test.testlogfile=/tmp/go-build2612158775/b400/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOMODCACHE sh /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json 9 x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name 03609059/001' 03609059/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE sh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name --show-toplevel git /node --show-toplevel sh /usr/bin/git gh /pre�� ature-branch.patch --jq modules/@npmcli/run-script/lib/node-gyp-bin/sh --get remote.origin.ur-atomic /usr/bin/git /usr/bin/runc.or-buildtags (http block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI and others added 11 commits April 16, 2026 22:49
Copilot AI changed the title [WIP] Add --group-add for Docker socket access when running gateway as non-root Add Docker socket supplementary group to MCP gateway container command Apr 16, 2026
Copilot AI requested a review from lpcox April 16, 2026 23:01
@lpcox lpcox marked this pull request as ready for review April 16, 2026 23:51
Copilot AI review requested due to automatic review settings April 16, 2026 23:51
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to restore MCP gateway access to a bind-mounted /var/run/docker.sock when the gateway runs as a non-root UID/GID by adding a supplementary group mapping based on the socket’s owning GID.

Changes:

  • Append a --group-add … argument to the generated MCP gateway docker run command.
  • Add a regression test asserting the generated command includes the --group-add mapping and that it appears before the docker.sock mount.
Show a summary per file
File Description
pkg/workflow/mcp_setup_generator.go Adds --group-add $(stat -c '%g' /var/run/docker.sock) to the generated gateway docker command.
pkg/workflow/mcp_setup_generator_test.go Adds a test validating the presence and ordering of the new --group-add argument in generated workflow output.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 2

Comment on lines 698 to 700
containerCmd.WriteString("docker run -i --rm --network host")
containerCmd.WriteString(" --group-add $(stat -c '%g' /var/run/docker.sock)")
containerCmd.WriteString(" -v /var/run/docker.sock:/var/run/docker.sock") // Enable docker-in-docker for MCP gateway
Copy link

Copilot AI Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MCP_GATEWAY_DOCKER_COMMAND is exported as a quoted string and later executed as $MCP_GATEWAY_DOCKER_COMMAND (see actions/setup/sh/start_mcp_gateway.sh:158). Shell command substitutions inside that variable are not evaluated at execution time, so $(stat -c '%g' /var/run/docker.sock) will be passed to docker run literally and the command will fail.

Instead, make sure the generated command contains a numeric GID (computed in the workflow step at runtime) or introduce a safe placeholder + replacement step before execution. Avoid relying on $(...) inside MCP_GATEWAY_DOCKER_COMMAND unless you also change the executor to explicitly evaluate it (e.g., array-based execution rather than eval).

Copilot uses AI. Check for mistakes.
Comment on lines +511 to +518
groupAddSnippet := `--group-add $(stat -c '\''%g'\'' /var/run/docker.sock)`
mountSnippet := `-v /var/run/docker.sock:/var/run/docker.sock`
require.Contains(t, yamlStr, groupAddSnippet,
"Docker command should include docker socket supplementary group mapping")
require.Contains(t, yamlStr, mountSnippet,
"Docker command should mount the Docker socket")
require.Less(t, strings.Index(yamlStr, groupAddSnippet), strings.Index(yamlStr, mountSnippet),
"Docker command should add supplementary group before mounting the Docker socket")
Copy link

Copilot AI Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test asserts the YAML contains the literal $(stat ...) snippet, but with the current execution model (actions/setup/sh/start_mcp_gateway.sh runs $MCP_GATEWAY_DOCKER_COMMAND directly, not via eval), that command substitution will not be evaluated and will cause docker run to receive $(stat as a literal argument.

Update the test to assert the runtime-safe behavior you implement (e.g., the exported command contains a numeric --group-add <gid>, or it contains a placeholder that is replaced before execution).

Copilot uses AI. Check for mistakes.
@github-actions github-actions bot mentioned this pull request Apr 16, 2026
@lpcox
Copy link
Copy Markdown
Collaborator

lpcox commented Apr 16, 2026

@copilot update the PR based on this feedback #26750 (review)

@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 80/100

Excellent test quality

Metric Value
New/modified tests analyzed 1
✅ Design tests (behavioral contracts) 1 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 1 (100%)
Duplicate test clusters 0
Test inflation detected ⚠️ Yes (41 test lines : 1 production line)
🚨 Coding-guideline violations None

Test Classification Details

Test File Classification Issues Detected
TestMCPGatewayDockerCommandIncludesDockerSocketGroup pkg/workflow/mcp_setup_generator_test.go:480 ✅ Design Minor: test inflation (41:1 ratio); no negative feature path

Test Analysis

TestMCPGatewayDockerCommandIncludesDockerSocketGroup

Classification: Design test (behavioral contract)

What design invariant does this test enforce? The compiled Docker command must include the --group-add $(stat -c '%g' /var/run/docker.sock) supplementary group flag, must mount the Docker socket, and must place --group-add before the -v mount flag. All three are observable properties of the compiled YAML output.

What would break if deleted? A regression removing --group-add from the generated command would go undetected, potentially causing permission failures when the gateway container accesses the Docker socket.

Strengths:

  • Uses require.Contains + require.Less to verify not just presence but ordering — a genuinely non-trivial invariant
  • All 6 assertions carry descriptive messages ✅
  • No mock libraries used ✅
  • Correct //go:build integration build tag ✅
  • require.NoError guards on all file I/O setup steps provide early-failure clarity

Minor observations:

  • The test is happy-path only for the feature itself — there's no negative case (e.g., verifying that a workflow without GitHub MCP tools does not emit --group-add). This would strengthen the contract by ruling out accidental unconditional insertion. Not required to pass, but worth noting.
  • Test inflation: 41 lines added to the test file vs. 1 line in the production file (41:1 ratio). This is above the 2:1 threshold, costing 10 points. However, the overhead is largely unavoidable for a compilation integration test that requires frontmatter setup, temp file I/O, and full compilation — the boilerplate is legitimate.

Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 1 test — integration (//go:build integration)
  • 🟨 JavaScript (*.test.cjs, *.test.js): 0 tests

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). No coding-guideline violations detected.


📊 Scoring Breakdown
Component Score
Behavioral coverage (40 pts max) 40 — 100% design tests
Error/edge case coverage (30 pts max) 30 — has require.NoError error guards and ordering invariant
Low duplication (20 pts max) 20 — no duplicate clusters
Proportional growth (10 pts max) 0 — 41:1 test-to-production line ratio exceeds 2:1 threshold
Total 80/100
📖 Understanding Test Classifications

Design Tests (High Value) verify what the system does:

  • Assert on observable outputs, return values, or state changes
  • Cover error paths and boundary conditions
  • Would catch a behavioral regression if deleted
  • Remain valid even after internal refactoring

Implementation Tests (Low Value) verify how the system does it:

  • Assert on internal function calls (mocking internals)
  • Only test the happy path with typical inputs
  • Break during legitimate refactoring even when behavior is correct
  • Give false assurance: they pass even when the system is wrong

Goal: Shift toward tests that describe the system's behavioral contract — the promises it makes to its users and collaborators.

References: §24540106918

🧪 Test quality analysis by Test Quality Sentinel · ● 389.7K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 80/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). The single new integration test verifies a genuine behavioral contract (compiled Docker command includes --group-add before socket mount), uses proper assertions with messages, and carries the correct //go:build integration build tag.

lpcox and others added 2 commits April 16, 2026 16:56
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lpcox lpcox merged commit d73f38a into main Apr 16, 2026
@lpcox lpcox deleted the copilot/add-group-add-for-docker-socket-access branch April 16, 2026 23:59
Copilot stopped work on behalf of lpcox due to an error April 16, 2026 23:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --group-add for Docker socket access when running gateway as non-root

3 participants