Bug hunt ledger: Cargo #315
Replies: 12 comments
|
[agent] 2026-09-30: Cargo bug-hunt run This is the first run, so the ledger started empty and there were no Tested: main Setup: the sandbox can't reach the Socket patch API (proxy 403). Agent and vendored cells used a hand-staged Cells
Issues
False positives ruled out
Probe runs
I couldn't delete either probe branch: Next
|
|
[agent] 2026-09-30 (UTC): Cargo bug-hunt run This is run 2. Main hasn't moved since run 1: Re-triage#338 and #339 have the same main SHA as when they were filed and no fixing PR, so their status is unchanged. I didn't comment. #336 is also unchanged. Cells
Issues
False positives ruled out
ProbesI didn't run any. 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 Cargo puts global installs: What to check (prove each with a real global install, not by reading source):
Add OS × Cargo version cells for |
|
[agent] 2026-10-01 (UTC): Cargo bug-hunt run This is run 3. Main moved to BaselineAll of the repo's cargo e2e suites pass on the new main: Re-triage
Cells: global mode (maintainer request, Linux only)
Cells: other
Issues
False positives and observations (not filed)
ProbesNone. Next
|
|
[agent] 2026-10-01 (UTC): Cargo bug-hunt run This is run 4. Main hasn't moved since run 3: v5 Re-triage
Cells
Issues
False positives ruled out
ProbesNone. Next
|
|
[agent] 2026-10-01 (UTC): Cargo bug-hunt run This is run 5. Main moved to Re-triage
Cells
Issues
False positives ruled out
ProbesNone. Next
|
|
[agent] 2026-10-01 (UTC): Cargo bug-hunt run This is run 6. Main moved to Re-triage
Cells
Issues
False positives ruled out
ProbesNone. Deleting the stale branches Next
|
|
[agent] 2026-10-02 (UTC): Cargo bug-hunt run This is run 7. Main is unchanged at Re-triage
Cells
Issues
False positives ruled out
ProbesNone. The stale branches Next
|
|
[agent] 2026-10-02 (UTC): Cargo bug-hunt run This is run 8. Main is unchanged at Re-triage
Cells
IssuesNone filed, commented on or closed. False positives ruled out
ProbesNone. Deleting the stale Next
|
|
[agent] 2026-10-02 (UTC): Cargo bug-hunt run This is run 9. Main is Re-triage
Cells
Issues
False positives ruled out
Probes
Next
|
|
[agent] 2026-10-02 (UTC): Cargo bug-hunt run This is run 10. Main is Re-triage
Cells
Issues
False positives ruled out
Probes
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 Cargo bug-hunt routine (label pm:cargo).
Last updated: 2026-10-03 (run 11), main
045d7ec(unchanged since run 10; no cargo-specific code changes since61cfb9b; shared #555 lockfile-only apply skip regressed cargo cold caches as #616 and silences the #338 non-cargovendor/shape), CLI 4.0.0, latest release 4.0.0.Run 11 added these cells (Linux; not yet in the table): agent with a non-cargo
vendor/dir: fail #338 (comment); agentcargo vendor --versioned-dirs: pass (1.93.1);-gwith default~/.cargo: pass (stable); vendored multi-version withrust-version.workspace = true: fail #651; hosted on cargo 1.67.1: fail #653 (1.68.2 passes); stale[[patch.unused]]with--locked: pass on 1.56.1, 1.84.1 and 1.93.1.Coverage matrix
Cells are "pass", "fail #N" or "untested". Every cell uses a real cargo build (
--locked/--frozen/--offline) plus a compile oracle: the patch appendspub fn socket_patched()tocfg-if, andmain.rscalls it. Patch data comes from a local public-proxy stand-in (--proxy-url, serving/patch/batch,/patch/view/<uuid>and/patch/blob/<hash>) for agent and global mode. Hosted mode uses the wiremock sparse-registry harness intests/e2e_redirect_cargo_shapes.rs, with extra shapes added locally and not committed. The repo suites andcargo_e2e_matrixalready cover the plain shapes, lock v1–v4 and the old toolchains. All of them passed on2463257in run 3. Since v5, vendored cells need the repo'stests/prebuilt_commonfixture server (SOCKET_VENDOR_URL), becausevendordownloads artifacts from the service.Cells marked (pre-v5) were last verified on
f6b7fb9and need a re-check on v5.vendor/(source replacement)[patch], re-run, repair)registry = "crates-io"cargo vendor.cargo-checksum.json--cwd= workspace member-g: scan report / hosted refusal / apply / rollback / vexcargo vendorproject (source replacement)exclude[patch.crates-io](same crate / unrelated used / unrelated unused) / path dep refusal[patch]/[replace]of the patched crate[patch.crates-io]override of the patched crate.cargo/config.toml[patch]/ git dep (#506 family)[patch](#480 family) / git direct dep-glegacy git-index dir /-ginside acargo vendorproject+buildversion (wasi 0.11.0+wasi-snapshot-preview1)[source.crates-io] replace-withsparse mirrordep:optional, range req, quoted key, table form, build+normal)--pruneafter the dep is removed or bumped (warm / clean cache), sibling projectvendor -grefusalname@verpkgid; cargo 1.56 rejects it)-g)[registries.other]config, CRLF config, dead-index remove fails loudly)SOCKET_GLOBAL,--global-prefix); multi-index fail #339Backlog
-gmode on macOS and Windows across the Cargo majors: scan report, hosted refusal, apply, rollback and vex. The full checklist is in the 20261001T040000Z entry.bughunt/cargo/20260930-vendor-dirandbughunt/cargo/20260930-index-dirsstill exist. Deleting them failed through the git proxy or was denied by policy in runs 1–10. A maintainer needs to delete them. Until then, avoid new probe branches.2b. Hosted with a
[patch]override in$CARGO_HOME/config.tomlor an ancestor config: same root cause as Hosted cargo scan redirects a crate the user overrides with[patch.crates-io], silently dropping the override and breaking--locked#480, so only worth a live check once Hosted cargo scan redirects a crate the user overrides with[patch.crates-io], silently dropping the override and breaking--locked#480 is fixed.+1.41/+1.45) with a BOM/CRLF root manifest, plus v1/v2 lock re-encodes of the vendored workspace shape. Also vendored on Windows and macOS.cfg(windows)dependency on Linux) should stay a calm skip once the fix lands. Verify that.-gdefault~/.cargoon macOS and Windows (Linux passed in run 11).Cargo.lockdoesn't contain, andvex --product <project>lists them (see Known non-bugs; Agent-mode cargo patches the unused registry copy of a crate the user overrides with[patch.crates-io], and VEX attests not_affected while the build links the user's unpatched fork #506 is the narrower, filed case).Known non-bugs
patches-api.socket.devis blocked by the sandbox proxy (403). Use a local--proxy-urlstand-in or the repo's wiremock harnesses.cfg-if.version = "1.0.4") is skipped withredirect_cargo_toml_dep_unrewritable, with nothing rewritten. It's a loud, documented-by-warning limitation.vendor/--mode vendoredrefusesalready_vendored_in_treewhenvendor/<crate>exists: intended. What's wrong is only the hard-codedvendor/detection (Agent-mode cargo apply patches the wrong copy whencargo vendoruses a custom directory (or apply runs from a workspace member), yet reports success and VEX attests not_affected #338).cargo vendor -q DIRprints no source-replacement snippet, so write.cargo/config.tomlby hand in fixtures.applydoesn't accept the hand-staged manifest (partialFailure), so it can't be compared.apply --checkis Go-only (CLI_CONTRACT).setupwas removed, and agent-modevexattests cargo patches without anysetup.manualdeclaration. The oldecosystem_not_setupnote no longer applies.[patch."sparse+https://index.crates.io/"]isn't honoured by cargo 1.93, so ignoring it is correct. The git-URL alias is refused (cargo_manifest_patch_source_alias), which is also correct.cargo vendorre-runs or re-applies is usually cargo's rlib cache (Agent-mode cargo apply/rollback has no effect on an already-built project: cargo reuses the cached rlib from target/, while apply reports success and VEX attests not_affected #387). Runcargo clean -p <crate>before judging.vex -gwithout--productexits 2 ("Could not auto-detect a top-level product PURL"): expected, since a global scope has no project PURL.scan -g --mode hosted/--global-prefix … --mode hosted/SOCKET_GLOBAL=1 scan --mode hostedexit 2 by design.remove/rollbackwith the crates.io index unreachable fails withhosted_revert_failedand leaves the files intact: correct, loud behaviour.-gpatches$CARGO_HOME/registry/src, not binaries already built bycargo install. That's inherent to cargo.Cargo.lock. It isn't filed: it's documented as "wherever the crawler finds it" and is pending a maintainer call (backlog 7).vendor --offlinewith no committed artifact refusesvendor_service_offline_conflict: artifacts come from the service (--vendor-source serviceis the default, and local building was removed). Use thetests/prebuilt_commonfixture server for vendored cells.repair/ GC deletes local beforeHash blobs, so a laterrollback --offlinefails loudly with "Before blob not found". That's by design:cleanup_unused_blobskeeps only afterHash blobs, and before-blobs are fetched on demand.cfg-if = { path = …, version = "1.0.4" }(a path dependency with a version) is refused withredirect_cargo_toml_dep_unrewritable: correct.[replace] "cfg-if:1.0.4" = { path = … }is refused withredirect_cargo_lock_pkg_ambiguous, with nothing rewritten: correct (run 6).scan -g/apply -gwrite.socket/manifest.jsonat--cwd: by design, since the manifest lives at--cwdandrollback -gdrops those records (run 7).[patch]or an ancestor/config[patch]of the patched crate is already covered by repo e2e tests (cargo_url_spelled_crates_io_patch_table_is_refused,cargo_ancestor_config_patch_cannot_silently_shadow_the_vendored_copy).redirect_cargo_toml_dep_unrewritable: correct.removeturns a user'scfg-if = { version = "1.0.4" }(an inline table holding onlyversion) into the shorthandcfg-if = "1.0.4". That's by design: v5 keeps no ledger, and CLI_CONTRACT ("Hosted unwind coverage", cargo) says the shorthand the rewriter produced collapses back. The two spellings mean the same thing to cargo (run 8).cfg-if = '1.0.4') is refused loudly withredirect_cargo_toml_dep_unrewritable("unsupported dependency-entry spelling"), with nothing rewritten. It's a loud limitation, like the dotted-key spelling (run 8).removein a mirror-only environment: the upstream restore always queriesindex.crates.io(orSOCKET_CRATES_INDEX) and doesn't follow[source]replacement. An unreachable index fails loudly withhosted_revert_failedand changes nothing, as documented (run 9).vendor -g/--revert -g/--check -gexit 2 withglobal_scope_unsupportedby design (vendor -gandvendor --revert -gstill rewire the current project: on vlt,--revert -gsilently unpatches a vendored project (the #446 fix skipped vendor.rs) #498/Fix vendor -g rewiring the cwd project (#498) #499, run 9).[[patch.unused]]left inCargo.lockafter a[patch]entry is removed is tolerated by--lockedon cargo 1.56.1, 1.84.1 and 1.93.1. The next plain build drops it, which is cargo normalising its own lock. Cosmetic (run 11).cargo vendor --versioned-dirstree findsvendor/<name>-<version>correctly (run 11).All reactions