Go go.work audit: false NotAMember for a use path through a missing dir on macOS (breaks macOS test job)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 76/100
Research direction
Start with same_dir_key in crates/socket-patch-core/src/vendor/go_consumer_sync.rs and read its doc comment alongside the failing go_work_that_does_not_use_the_project_makes_the_replace_inert test. Run the focused go_consumer_sync tests with TMPDIR pointing to a symlinked directory to reproduce the failure. Done means the use path through a missing directory matches the project root and the macOS false NotAMember conflict is covered.
Written by the indexing model from the issue text.
Description
[agent] Found while checking the full-scope CI run for #1407. It breaks the macOS test job, so tonight's nightly on main is expected to go red.
What fails
vendor::go_consumer_sync::tests::go_work_that_does_not_use_the_project_makes_the_replace_inert (added in #1393, merged 2026-10-11 19:48 UTC, after the last nightly) fails on macos-latest: run 38191238691, job 114624594929.
panicked at crates/socket-patch-core/src/vendor/go_consumer_sync.rs:923:13:
assertion `left == right` failed: ./x/../app
left: [Workspace { module: "example.com/upstream", version: "v1.0.0", conflict: NotAMember { work_file: "/private/var/folders/.../go.work" } }]
right: []
The spellings ./app, app, ./app/ and "./app" all pass. Only ./x/../app fails.
Root cause
same_dir_key (go_consumer_sync.rs:468) calls std::fs::canonicalize on the raw joined path <ws>/x/../app. canonicalize needs every component to exist, and x doesn't, so the call errors and the code falls back to the lexical path /var/.../app. The project root does exist and canonicalizes to /private/var/.../app, because /var is a symlink on macOS. The two keys differ, so the use entry doesn't match the project and the audit reports NotAMember.
It isn't only a test problem. Any user whose go.work use path passes through a directory that doesn't exist, and whose project sits under a symlinked path (macOS /var or /tmp, a symlinked home or checkout), gets a false "go.work does not use this project" conflict. Go itself resolves use paths lexically (filepath.Clean), so ./x/../app is a valid member for go.
Repro on Linux
Point TMPDIR at a symlinked directory:
mkdir -p /tmp/real && ln -sfn /tmp/real /tmp/link
TMPDIR=/tmp/link cargo test -p socket-patch-core --lib go_consumer_sync
# 8 passed; 1 failed (same assertion)
Proposed fix (verified locally)
Normalize lexically first, then canonicalize. This matches go's filepath.Clean and still resolves symlinks when the cleaned path exists:
fn same_dir_key(dir: &Path) -> PathBuf {
let abs = std::env::current_dir().unwrap_or_default().join(dir);
- std::fs::canonicalize(&abs)
- .unwrap_or_else(|_| crate::utils::relpath::normalize_lexically_keeping_escapes(&abs))
+ let lexical = crate::utils::relpath::normalize_lexically_keeping_escapes(&abs);
+ std::fs::canonicalize(&lexical).unwrap_or(lexical)
}
With this patch, TMPDIR=/tmp/link cargo test -p socket-patch-core --lib go_consumer_sync gives 9 passed. The rest of vendor:: matches main: the only two failures, pypi_poetry::...wire_write_failure... and pypi_requirements::...wire_failure_rolls_back..., fail on unpatched main too when run as root in the agent sandbox.
This is product code in the Go lane (first issue-fixer instance), so I haven't claimed it. The doc comment above same_dir_key should be updated with the fix.
Generated by Claude Code
- Dominant language
- Rust
- Stars
- 8
- Forks
- 1
- Avg merge
- 19h 1m
- Merged PRs (30d)
- 473
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from SocketDev/socket-patch
-
agent:triaged bug bughunt pm:npm priority:p3 ux
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
SocketDev/socket-patch#1072 · 2 comments ·
Maintainers usually reply within 1 day
-
agent:triaged bug bughunt pm:yarn-berry priority:p1
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
SocketDev/socket-patch#783 · 1 comment ·
Maintainers usually reply within 1 day
-
Vendored cargo warns cargo_multi_version_old_cargo ("declares no rust-version") when the root package inherits rust-version from [workspace.package]Possibly taken A pull request linked to this issue is open or already merged. Openagent:triaged bug bughunt pm:cargo priority:p2
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
SocketDev/socket-patch#651 · 3 comments ·
Maintainers usually reply within 1 day
-
agent:triaged bench perf-regression pm:nuget priority:p3
Difficulty 4/5 3-5 days Newbie friendliness 45/100
SocketDev/socket-patch#1425 · 1 comment ·
Maintainers usually reply within 1 day
-
agent:triaged bench perf-regression pm:go priority:p2
Difficulty 4/5 3-5 days Newbie friendliness 55/100
SocketDev/socket-patch#1424 ·
Maintainers usually reply within 1 day
All issues in SocketDev/socket-patch
Similar issues
-
agent:sonnet-high enhancement priority: P2 ready-for-agent
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
shep-pm/shep-kelpie#652 ·
Maintainers usually reply within 1 day
-
install.ps1: Windows PowerShell 5.1 aborts after a successful cosign verification (NativeCommandError on 'Verified OK')Possibly taken @sly321-pixel claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
ai_p2
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
ClickHouse/ClickHouse#125522 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedPossibly taken @Mrun25 claimed this today. Openbug llm translation
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
BerriAI/litellm#46095 · 1 comment ·
Maintainers usually reply within 1 day