Bug hunt ledger: Go modules #317
Replies: 9 comments
|
[agent] 2026-09-30: Go modules bug-hunt run This is the first run, so the ledger started empty and there were no Tested: main Setup: a hermetic file GOPROXY (plus a Cells
Issues
False positives ruled out
Probe runs
Next
|
|
[agent] 2026-10-01: maintainer note: test global ( This is a maintainer request, not a run report. Add it to the top of the backlog and keep it there until the cells below are covered. Ask: make sure we correctly scan global installs when Where Go modules puts global installs: What to check (prove each with a real global install, not by reading source):
Add OS × Go modules version cells for |
|
[agent] 2026-10-01: Go modules bug-hunt run Tested: main Setup: a hermetic file GOPROXY (zips must be built with Re-triage
Cells (maintainer backlog item 0: global
|
|
[agent] 2026-10-01 (run 4): Go modules bug-hunt run Tested: main Re-triage
Cells
Issues
False positives ruled out
Probe branchesNone pushed. Next
|
|
[agent] 2026-10-01 (run 5): Go modules bug-hunt run Tested: main Re-triage
Cells
Issues
False positives ruled out
Probe branchesNone pushed. Next
|
|
[agent] 2026-10-01 (run 6): Go modules bug-hunt run Tested: main New this run: a local mock patch API (Python
The module proxy is served over Re-triage
Cells
Issues
False positives ruled out
Probe branchesNone pushed. Next
|
|
[agent] 2026-10-02 (run 7): Go modules bug-hunt run Tested: main Re-triage
Cells (agent mode unless noted)
Issues
False positives ruled out
Probe branchesNone pushed. The three stale run-1 Next
|
|
[agent] 2026-10-02 (run 8): Go modules bug-hunt run Tested: main Re-triageSkipped this run. Main hasn't moved since runs 6–7, which re-checked #344, #392, #393, #343 and #458 on this same SHA. Cells (agent mode, hermetic file GOPROXY + hand-staged manifest)
Issues
False positives ruled out
Probe branchesNone pushed. Next
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
[agent] Progress ledger for the scheduled Go modules bug-hunt routine (label pm:go).
Last updated: 2026-10-02 (run 8), main
61cfb9b(no Go code changes since2463257; CLI still reports 4.0.0), latest release 4.0.0 (previous 3.3.0). Run 8: filed #549 (rollback/remove aftergo mod tidyleaves go.sum without the module's lines, so the default build fails); new #393 variant via externalGOWORK=<path>; GOWORK=off, GOPATH-derived and multi-entry GOPATH caches pass. Run 7 filed #531.Coverage matrix
Cells are "pass", "fail #N" or "untested". Every cell uses a real
go build/go runagainst a hermetic file GOPROXY and a hand-staged.socket/manifest.jsonplus blob (thetests/e2e_golang_build.rsshape). Since run 6, hosted and vendored cells use a local Python mock patch API (hosted:view/<uuid>+/patches/packagewith agoproxyoverride, as ine2e_golang_hosted_build.rs; vendored: a granted tarball withsha512, as invendor/golang.rsmount_go_granted). The module proxy is served over http so hosted rollback works. Global cells use a realgo installas a non-root user plus a local mock patch API. Rows before run 3 were tested onf6b7fb9. Since v5, vendoredvendorneeds the patch service (--vendor-source=service), so new vendored cells need a mock.apply(plain)+incompatible/ no-go.mod module (%2Bkey)vendor(plain)vendor/dirgo env -wsettingsuse .+incompatibleblocked (server contract)<path>pass;<path>+ user replace fail #393Global (
-g/--global-prefix/SOCKET_GLOBAL)scan -greport (+--json)-g --mode hostedrefusalscan -g --mode agent/get -gapplygo installbinaryrollback -gvex -gBacklog
-g) mode on macOS and Windows and across go 1.21 / 1.26. Linux 1.24/1.25 is done (see the table and Global Go patching (-g) reports success and VEX attests not_affected, but tools already built withgo installkeep running the unpatched code, and nothing tells the user to reinstall them #422). Linux 1.22.12 / 1.26.8 toolchains can be fetched from proxy.golang.org (golang.org/toolchain/@v/v0.0.1-go<ver>.linux-amd64.zip);dl.google.com(needed for 1.16–1.20) is blocked. The full checklist is in the 20261001T040000Z entry.0a. Agent-mode Go rollback and remove after
go mod tidydrop the replace but not restore the module's go.sum lines, so the next defaultgo buildfails with "missing go.sum entry" while rollback exits 0 with no warning #549 in vendored mode (vendor --revertaftergo mod tidy) and on go 1.21.0b. Running Go apply in a second go.work member writes a second replace for the same module@version, so every workspace build fails with "conflicting replacements" while apply, apply --check and VEX all report success #531 in vendored mode (mock patch service) and hosted mode.
bughunt/go/20260930-goenv-vendor,bughunt/go/20260930-windows-applyandbughunt/go/20260930-windows-bisect.git push --deletefrom the sandbox fails (runs 4–5) or is denied by the permission classifier (run 6). Until they're gone, no new probe branches get pushed.+incompatibleand/v2+modules (needs the gopatch version spelling the service uses for+incompatible), andscan --mode hostedwith a%2Bpurl.GOFLAGS=-mod=vendor,go.work.sum, and a CRLF go.sum in vendored mode.--global-prefixshapes: GOPATH root instead ofpkg/mod, multi-entry GOPATH.go getupgrades the patched module, although the go-patches replace no longer applies and the build links the unpatched code #391, Agent-mode Go apply writes a go-patches replace for a module version the build graph doesn't select, reports it applied, and on a go 1.16 go.mod apply --check and vex also report it as patched #392, A user replace in go.work silently overrides the Socket go.mod replace: Go apply and vendor report success and VEX attests not_affected while the build links the user's target #393 and Hosted Go redirect's not_in_module_graph gate counts a go.sum/go.mod-only line as "in the graph", so on a go 1.16 module it writes an inert replace for an unselected version and VEX attests not_affected #509 on Linux via the proxy toolchains.Known non-bugs
patches-api.socket.devis blocked by the sandbox proxy. Stage.socket/manifest.jsonplus blobs locally.proxy.golang.orgIS reachable from the sandbox.patches-api.socket.devis blocked, but a local mock API works for hosted and vendored cells (see the run-6 entry). In the mock'sview/<uuid>record, give real before/after hashes: hosted vex checks the cached gopatch module against them (hash_mismatchotherwise). Hosted rollback refuses afile://upstream proxy URL, so serve the proxy overhttp://.applyfrom a package subdirectory (no go.mod in cwd) fails closed with "matched no installed package". Use--cwd <module root>.go get M@newer) refuses withpatched_ref_invalidand points atgit checkout -- go.mod: fails closed by design.applyexit 1), so it can't be compared on these cells. 4.0.0vexneeds an explicit--productin these fixtures (there's no git remote).applyrefuses (exit 1) when go.mod has a user-authoredreplace M => …for the patched module: intended. (The same line in go.work is NOT refused, which is A user replace in go.work silently overrides the Socket go.mod replace: Go apply and vendor report success and VEX attests not_affected while the build links the user's target #393.)repairdoesn't rebuild a deleted.socket/go-patches/copy.repair --helpscopes rebuilding to vendored artifacts; re-runapply.go ... -modcacherwleaves cache FILES read-only (directories only), so it's not a workaround for On Windows, Go apply and vendor always fail with "Access is denied. (os error 5)" because the copied module-cache files keep their read-only attribute #346.manifest_not_found): documented ine2e_golang_build.rs.GOFLAGS=-mod=mod(a go restriction); unset GOFLAGS in go.work fixtures.zip -D(directory entries change the h1 hash, sogo mod verifyfails on a pristine cache). As non-root,chmod -R u+wbeforerm -rfof a module cache. A partly deleted cache survives and contaminates the next run.rollback -gneeds the before blob (fetched frompatches-api.socket.dev, which the sandbox blocks). Stage it in.socket/blobs/and use--offline. A loud failure without it is expected.go mod verifyreportsdir has been modifiedafter a global (-g) in-place patch. That's inherent to patching the module cache in place, and rollback restores it.applyexits 1 "matched no installed package" and writes nothing (root-only discovery, fails closed). Run with--cwd <member>instead, which builds PATCHED. Not filed.use ( . ./svc )on one line is a go parse error; put eachuseon its own line or in a multi-line block.rollbackremoves the manifest entry, so a laterremove <purl>reports "No patch found". Expected.GOPROXY=file://with a space in the path breaksgo mod download(fixture issue). Keep proxy and cache paths plain.applyruns are serialized by.socket/apply.lock; the losers fail fast with a--lock-timeouthint. Expected.vendor --offlinefails with "--vendor-source=service needs the network": by design (local artifact building was removed in v5).GOWORK=offwith a root go.work that doesn'tuse .: builds use go.mod only and are PATCHED, so Go apply writes its replace into a root go.mod that go.work doesn'tuse, so the workspace build links the unpatched module while apply, apply --check and VEX all report it patched #458 doesn't apply.All reactions