Bug hunt ledger: Go modules #317
Replies: 8 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
|
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 7), main
61cfb9b(no Go code changes since2463257; CLI still reports 4.0.0), latest release 4.0.0 (previous 3.3.0). Run 7: #344 still reproduces; filed #531 (per-member apply in a go.work breaks the workspace build). Run 6 on61cfb9b: #392 and #393 still reproduce, and #343 / #458 reproduce in hosted mode.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)Global (
-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.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, empty or relative GOMODCACHE.GOWORK=<path>/GOWORK=off(socket-patch never reads GOWORK).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).All reactions