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
{{ message }}
Repository navigation
hermetic test children inherit GOFLAGS, GOENV, GOWORK, GOPATH and GOMODCACHE, which the go crawler and apply read; two hosted-production Go/Deno tests can't fail #1981
The test scrub has an Extra for each other crawler that reads the environment (Venv, Bundle, Composer, Pdm, Poetry), but none for Go. CRAWLER_EXTRAS is [Venv, Bundle, Composer]. Every socket-patch child therefore inherits the developer's or runner's Go environment.
Consequences found while auditing:
Two hosted-production tests can't fail. In e2e_hosted_production.rs:
golang_hosted_redirects_only_via_goproxy_override writes a go.mod with no require and no go.sum. The crawl therefore walks the ambient GOMODCACHE/$HOME/go, and on a clean runner only "scan exit 0" is asserted.
deno_hosted_is_unsupported installs nothing, so it gets 0 pins whether or not hosted Deno is supported.
Process-wide env set and never restored.
e2e_golang_build.rs sets GOTOOLCHAIN with std::env::set_var and never restores it (L198). The binary has no serial_test, so sibling tests read the environment in parallel while it is set.
e2e_golang_hosted_build.rs sets GOTOOLCHAIN, GOFLAGS=-mod=mod and GONOSUMDB=* the same way (L376-L378).````` Its later CLI children and in-process discovery see these values depending on test order.
Only GOMODCACHE is pinned.run_socket pins GOMODCACHE only, so an ambient GOFLAGS=-modfile=… or a user go/env file reaches apply/apply --check.
Proposed change
Add Extra::Go to hermetic.rs:
remove GOFLAGS, GOWORK, GOPATH and GOMODCACHE;
set GOENV=off.
Include Extra::Go in CRAWLER_EXTRAS. Tests that need a value set it after the scrub, as they already do.
Replace the process-wide set_var calls with per-Command.env(..) on the go and CLI children. Failing that, use a restoring guard under #[serial].
In e2e_hosted_production.rs:
Give the golang leg a require + go.sum and a fixture GOMODCACHE, and assert the pin or skip code.
Install a Deno tree and assert a hosted_skips code, or delete the test.
Size
3–4 test files. About +40/−30 lines.
Acceptance criteria
With GOFLAGS=-modfile=/nonexistent and GOMODCACHE=/tmp/x exported in the parent shell, these suites still pass: e2e_golang, e2e_golang_build, e2e_golang_hosted_build and e2e_vendor_golang_build.
A hermetic selftest shows that the Go variables don't reach the child.
The two production tests fail when their claimed behavior is broken.
[agent] Triaged: priority:p3 (test hermeticity). Confirmed on main: CRAWLER_EXTRAS in tests/common/hermetic.rs is [Venv, Bundle, Composer] with no Go entry, so GOFLAGS/GOENV/GOWORK/GOPATH/GOMODCACHE reach socket-patch children. No open or merged PR addresses it. Same family as #1958 (color env, in flight in #1964) but a different variable set; related to #1980.
Activity
mikolalysenko commentedon Nov 2, 2026
[agent] Triaged: priority:p3 (test hermeticity). Confirmed on main:
CRAWLER_EXTRASin tests/common/hermetic.rs is[Venv, Bundle, Composer]with no Go entry, so GOFLAGS/GOENV/GOWORK/GOPATH/GOMODCACHE reach socket-patch children. No open or merged PR addresses it. Same family as #1958 (color env, in flight in #1964) but a different variable set; related to #1980.Generated by Claude Code