Bug hunt ledger: NuGet / dotnet #320
Replies: 9 comments
|
[agent] 2026-09-30: NuGet / dotnet bug-hunt run This is the first run, so the ledger started empty and there were no Tested: main Setup: there's no Socket API. Agent and vendored cells use a hand-staged Cells
Issues
False positives ruled out
Probe runs
I couldn't delete probe branch Next
|
|
[agent] 2026-09-30 (23:50 UTC): NuGet / dotnet bug-hunt run Tested: main Re-triage: #352, #353 and #354 were not re-run, because main hasn't moved since they were filed (same SHA, same binary). They stay open. Cells
Issues
False positives ruled out
Probe runs
I couldn't delete the probe branches: 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 NuGet / dotnet puts global installs: The global packages folder ( What to check (prove each with a real global install, not by reading source):
Add OS × NuGet / dotnet version cells for |
|
[agent] 2026-10-01 (05:47 UTC): NuGet / dotnet bug-hunt run Tested: main This run focused on the maintainer's global-mode ( Setup: global installs are real ones: Re-triage
Cells (global mode)
Issues
False positives ruled out
Observed, not filed (cross-PM, not NuGet-specific)
Probe runs
Next
|
|
[agent] 2026-10-01 (12:20 UTC): NuGet / dotnet bug-hunt run Tested: main Setup: a non-root user ( Re-triage
Cells
Issues
False positives ruled out
Next
Probe branches still waiting for a maintainer to delete: |
|
[agent] 2026-10-01 (23:45 UTC): NuGet / dotnet bug-hunt run Tested: main Setup: a scratch copy of Re-triage
Cells (Linux, SDK 8.0.131)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-02 (05:58 UTC): NuGet / dotnet bug-hunt run Tested: main Setup: a scratch copy of Re-triage
Cells
Issues
False positives ruled out
Blocked
Next
|
|
[agent] 2026-10-02 (11:44 UTC): NuGet / dotnet bug-hunt run Tested: main Setup: a scratch copy of Re-triage
Cells (Linux, SDK 8.0.131)
Issues
False positives ruled out
Blocked
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 NuGet / dotnet bug-hunt routine (label pm:nuget).
Last run: 2026-10-02 11:44 UTC, main
61cfb9b, release v4.0.0.Coverage matrix
Cells: OS × SDK × mode. "warm" means the global packages folder already holds the upstream package; "sln" means the lock sits in
src/<Project>/. "agent custom gpf" meansglobalPackagesFolder/RestorePackagesPathis set.<clear/>, CPM, re-run, revert); user exact-id mapping: config tie #462packages/)repositoryPath)Per-project lock
packages.<Project>.lock.json(vendored + hosted): fail #514 (Linux 8; vendored also on ubuntu/macOS/Windows × SDK 8/10). CustomNuGetLockFilePath(vendored): fail #514 (all 3 OSes × SDK 8/10).Vendored revert on a
core.autocrlf=truecheckout (vendor --revert,remove,rollback, rescan→revert): fail #537 on Linux 8/10, macOS 8 and Windows 8/10 (macOS 10 not inspected). Without autocrlf: pass. Vendored, thendotnet nuget add source(re-serialized config), then revert: pass (Linux 8). Self-closing<packageSourceMapping />and aNewtonsoft.*prefix mapping: pass (Linux 8, vendored + hosted).Mode takeovers (Linux 8): hosted → vendored via
scan --mode vendored: fail #553 (no takeover, purl case mismatch; autocrlf on and off; http and patch.socket.dev URLs). Viavendor: pass.remove/rollbackwith the mixed-case purl on a hosted project: fail #553. Vendored → hosted: no NuGet takeover by design (stays vendored, patched).Project-mode agent scan (no
-g) patches unrelated cached packages and VEX attests them: fail #427 (Linux 8; v4.0.0 too).Global mode (
-g)"default" =
~/.nuget/packages, "tool" =dotnet tool install -g(~/.dotnet/tools/.store), "user gpf" =globalPackagesFolderin the user-level NuGet.Config.--tool-path)-grun from inside a vendored project (scan -g --mode agent→rollback -g): Linux 8 fail #489 (vendored: regression from #446,551c362; hosted: pre-existing). macOS / Windows untested.Also passed on Linux 8:
SOCKET_GLOBAL=1,SOCKET_GLOBAL_PREFIX,--global-prefixwith spaces + unicode, and-gfrom inside a packages.config project (no leak).Backlog
get --mode vendoredover a hosted project (expect NuGetscan --mode vendoredover a hosted pin skips the takeover (purl case mismatch), keeps the hosted feed wired, writes no vendor ledger and still reports success #553), and NuGetscan --mode vendoredover a hosted pin skips the takeover (purl case mismatch), keeps the hosted feed wired, writes no vendor ledger and still reports success #553's case-sensitivity invendor --revert <purl>,--package,vex.scan -g --mode agentthenrollback -gfrom a vendored NuGet project reverts the project's patched package in the shared global packages folder; the locked restore stays "up-to-date" and VEX keeps attesting #489 on macOS / Windows and SDK 6/9/10. The probe harness from 2026-10-02 works for this:scratch_serveplusSCRATCH_SCRIPT, inlined through heredocs.dotnet-tools.json);apply -g/remove -g <purl>from a vendored project; unwritable folder on macOS / Windows; apply/rollback/vex-gon macOS / Windows.bughunt/nuget/*branches are still on the remote and need a maintainer.Also passed on Linux 8 (no issue): vendored with a BOM + CRLF
NuGet.Config(+ byte-exact revert), multi-TFM +RestoreLockedMode, a transitive-only patched package, androllback -galone from a v5 vendored project (no manifest → refused, nothing touched).Known non-bugs
hosted_revert_unsupported, CLI_CONTRACT.md). This is documented.vendor_nuget_no_lockfile). The missing pin is documented. The false claim that the feed "forces" the patched copy is not; that's Vendored and hosted NuGet patches are shadowed by a warm global packages folder: silently unpatched without a lock, NU1403 with one #352.nuget.config/packages.lock.json(CLI_CONTRACT.md, README VEX table). Root-only scope is documented. Wiring the root config without pinning the member locks is Vendored and hosted NuGet leave member-project packages.lock.json unpinned in a solution layout, so every fresh restore fails NU1403 #353.applydeletes.nupkg.metadata. That's documented, and a later restore rewrites it without reverting the patch.rollbackwith no targets drops every manifest entry and GCs the blobs (README command table), so a laterremove <purl>reportsnot_found. That's documented.scan -g --mode hosted/--global-prefix --mode hostedrefuse with exit 2 by design (CLI_CONTRACT.md).apply -gon a global tool fails loudly (rc 1, not found). The silent part isscan -g(Global scan (-g) never crawls .NET global tools (~/.dotnet/tools/.store), so a patcheddotnet tool install -gpackage is silently left out of scan, apply and vex on every OS #426).NuGet.Configwith CRLF gets LF-terminated inserted lines (mixed endings). NuGet parses it fine, and revert is byte-exact, so it's cosmetic.partialFailure), VEX omits it, and rollback restores it.<packageSourceMapping />appends a second mapping section. NuGet merges them, so it's cosmetic.vex -ois--org; the output flag is-O/--output. Not a bug.*→nuget.org catch-all mapping that vendor created stays innuget.config. That's intentional (revert_config_recorddoc) and harmless.vendor -g/vendor --revert -grewiring the cwd project is the genericvendor -gandvendor --revert -gstill rewire the current project: on vlt,--revert -gsilently unpatches a vendored project (the #446 fix skipped vendor.rs) #498, not NuGet-specific.scan --mode hostedover a vendored NuGet project doesn't take over (takeover_capable= cargo/npm/golang):redirected: 0,already: 1, and it stays vendored and patched. Not a bug. On an autocrlf checkout, a later revert hits Vendored NuGet on a core.autocrlf checkout: vendor --revert / remove / rollback revert packages.lock.json but leave nuget.config wired, so every restore fails NU1403 (vendor --revert exits 0) #537.All reactions