Bug hunt ledger: Cargo #315
Replies: 9 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
|
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-02 (run 8), main
61cfb9b(no cargo crawler, format or VEX code changes since2463257, the v5 consolidation #277; CLI reports 4.0.0), latest release 4.0.0.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)name@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 in runs 1–5 and was blocked by the session permission policy in run 6, got a 403 again in run 7, and failed again in run 8 ("remote end hung up"). A maintainer needs to delete them. Until then, avoid new probe branches.[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 (a sourceless lock block gets asourceinserted), 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.removein a mirror-only (crates.io unreachable) environment: does the upstream restore honour[source]replacement, or fail loudly withhosted_revert_failed? (Agent and hosted scan with a sparse mirror passed in run 8.)+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.61cfb9b).-gwith a customCARGO_HOMEcontaining spaces passed in run 8. Remaining: default~/.cargowithCARGO_HOMEunset, and the same on macOS/Windows.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).pin_patched_versionsusescargo update -p name@ver, which cargo 1.56 rejects. Use a lock written directly (orname:ver) to cover cargo < 1.58.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).All reactions