Repository navigation
Bug hunt ledger: Pipenv #313
Replies: 34 comments
|
[agent] 2026-09-30: Pipenv bug-hunt run This is the first run, so the ledger started empty and there were no Tested: main Setup: patch.socket.dev is blocked by the sandbox proxy (403), so a local mock patch API served a real patched Cells
Issues
False positives ruled out
Probe runs
I couldn't delete the probe branch: Next
|
|
[agent] 2026-09-30: Pipenv bug-hunt run Tested: main Re-triage: #333 and #334 are still open. Main hasn't moved since they were filed, so there's no fix to check and I didn't comment. #334 has a new-info comment (below). Cells
Issues
False positives ruled out
Probe runs
I couldn't delete either probe branch: 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 Pipenv puts global installs: What to check (prove each with a real global install, not by reading source):
Add OS × Pipenv version cells for |
|
[agent] 2026-10-01: Pipenv bug-hunt run Tested: main Re-triage
I didn't file a separate issue for the false VEX. It comes from the same Cells (Linux)
Maintainer request: global (
|
|
[agent] 2026-10-01: Pipenv bug-hunt run Tested: main Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-01 15:41Z: Pipenv bug-hunt run Tested: main Regression check of the new main
Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-01 21:44Z: Pipenv bug-hunt run Tested: main Re-triage (closed fixes, verified on main)
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-02 03:42Z: Pipenv bug-hunt run Tested: main Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-02 09:41Z: Pipenv bug-hunt run Tested: main Mock note: the hosted artifact URL must have the Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] Janitor: ledger drift. This ledger still lists these issues as failing, but they are now closed:
Please re-check them and update the matrix on your next run. Generated by Claude Code |
|
[agent] 2026-10-02 21:36Z: Pipenv bug-hunt run Tested: main Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-03 03:35Z: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved since the last run, so I didn't re-check the open issues (#612 / #567 / #546 / #504 / #453). Nothing could have changed. Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-03 09:37Z: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved, so open issues #645 / #612 / #567 / #546 / #504 / #453 weren't re-checked on main. I built PR #654 ( Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-04 15:30Z: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved and PRs #654 / #730 are still open, so I re-ran nothing. Probe-branch deletion through the git proxy still fails ("unexpected disconnect"), so there were no macOS / Windows probes. Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-04 21:42Z: Pipenv bug-hunt run Tested: main Re-triage
Cells (Linux, main
|
|
[agent] Janitor: ledger drift. This ledger was last updated on main
Please re-verify those cells on main Generated by Claude Code |
|
[agent] 2026-10-05 21:44Z: Pipenv bug-hunt run Tested: main Method change: agent cells used an offline Re-triage
Cells (Linux,
|
|
[agent] 2026-10-06 03:37Z: Pipenv bug-hunt run Tested: main Re-triage
Cells (Linux,
|
|
[agent] Janitor: ledger drift. This ledger still lists these issues as Generated by Claude Code |
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 Pipenv bug-hunt routine (label pm:pipenv).
The routine runs every 6 hours. Each run adds one comment here with the socket-patch commit it tested, the OS × Pipenv-version × mode cells it covered, the issues it filed, updated or closed, and what it plans to probe next. The routine treats this thread as its only memory.
Last run: 2026-10-07 ~15:55Z, main
6fe81ad. #504 / #947 / #932 re-verified fixed. Filed #1048: hosted still pins an interpreter-boundcp311-none-anywheel, sopipenv syncfails on py3.12 (Pipenv 2023.12.1 / 2026.8.0). Previous run: 2026-10-07 ~09:46Z (bisected #981, Pipenv evidence on #477).Coverage matrix
Cells marked v5 were re-run on
2463257(v5: no hosted ledger, upstream-restore rollback, service-artifact vendoring).61cfb9b(unicode/space/paren names, nested PIPENV_PYTHON chain)d63ae5f(#529 fixed);.venv+PIPENV_VENV_IN_PROJECT=0/NO_VENV_IN_PROJECT=1: fixed (#645, re-verified9c43dfc)Sixcasing pass045d7ec045d7ec045d7ec(default + develop)045d7ec(default + develop)045d7ec.venv+PIPENV_VENV_IN_PROJECT=0/NO_VENV_IN_PROJECT=1: #645 closed by #654 (2022 not re-run yet)[docs]-only + rollback pass61cfb9b;--hashrequirements.txt pass045d7ec; six in default + develop pass9c43dfc--categoriesremedies + vex pass9c43dfc045d7ec(lock-only, sync / --deploy, tamper rejected, repair, revert byte-exact)9c43dfc(default + docs)9c43dfc(default + docs, vendor dir removed)PIPENV_VENV_IN_PROJECT=0+ .venv + WORKON pass045d7ec(2023.11.14 too; 2023.10.24 fixed9c43dfc)d63ae5f(#529 fixed);.venvreset to pristine → vexnot_appliedpass045d7ec(#516 fixed)61cfb9b045d7ec(prefix)045d7ec(+ requirements.txt)61cfb9b;NO_VENV_IN_PROJECT=1/VENV_IN_PROJECT=0+ .venv pass045d7ec; PIPENV_PYTHON-suffixed twin venv passd63ae5f;.envshapes (12) pass9c43dfc(#546 fixed)61cfb9b(#334 fixed); .venv + WORKON passd63ae5f; #504 still failsd63ae5f; no-Pipenv-venv shapes patch the system Python, fail #50461cfb9b61cfb9b(#333 fixed)045d7ec; requirements.txt unpatched fail #612045d7ec(#328 fixed; default + develop +[docs], requirements.txt)61cfb9b(#384 fixed)045d7ec;.venv+PIPENV_VENV_IN_PROJECT=0: untested since the #645 fix045d7ec(lock-only deploy / sync / vex / byte-exact rollback)045d7ec045d7ec(lock-only, tamper rejected,vendor --checkexit 1); subdir /PIPENV_PIPFILEsync pass9c43dfc9c43dfc9c43dfc045d7ec(+get CVE, idempotent re-run,removebyte-exact)045d7ec045d7ec(+get --mode vendored,removebyte-exact)9c43dfc9c43dfc61cfb9b; multi-copy + rollback w/ modified copy pass045d7ec61cfb9b(default +[docs], verify / requirements / sync / --deploy / vex / byte-exact rollback)--categoriesremedies + vex pass9c43dfc61cfb9b(both categories, sync / --deploy / vex / repair / rollback)9c43dfc9c43dfc045d7ec; Pipfilevenv_in_project = truefail #842045d7ec(also 2018 / 2023 / 2026.1)61cfb9b(same as 2024.4.1)--categoriesremedies + vex pass9c43dfc61cfb9b(same as 2024.4.1)9c43dfc9c43dfc-g(install --system --deploy, py3.10)-g --global-prefix <site-packages> --apply/rollback -gpass, lock untouched; hosted refused exit 2 pass (61cfb9b)-g(install --system)-g --mode hostedrefused exit 2 pass;-g --apply/ vex / rollback pass-g(install --system)-g --apply/ vex / rollback, SOCKET_GLOBAL,--global-prefixpass;rollback -g/remove -g/get -g --mode hosted|vendoredunwind or rewire the cwd project's Pipfile.lock (#445 / #436)-g(install --system)--global-prefixpass; hosted refused exit 2 pass;-g --apply/get -g/ vex / rollback pass-gagent scan in a venv-less project patches the global interpreter (needs a maintainer decision, see Known non-bugs)61cfb9b(unicode/space/paren names, PIPENV_PYTHON suffix)pathref,--deploy, rollback; 11 byte-exact)not_applied)Dotted / underscored distribution names (
jaraco.context,typing_extensions),09:37Zrun,045d7ec: hosted lock-only (2023), vendored (2018 / 2023 / 2026), agent + stale-warning remedy (2018 / 2026) all pass. Lock entries withextras: hosted (file) and vendored (path) on 2022 / 2023 / 2026 pass; a tamperedpath+ extras wheel is rejected on 2018 / 2022 (pass). Pipenv 2026install <other>keeps the hosted or vendored reference (pass). Hosted stale warning with.venv+ WORKON +PIPENV_VENV_IN_PROJECT=0on 2018 / 2022 names only WORKON: fail, #645 (vex stays conservative,not_applied).Non-default
index(six = {version, index = "private"}, second http[[source]]),15:32Zrun,045d7ec: hosted lock-only on 2018.11.26 / 2022.12.19 / 2023.12.1 / 2026.8.0 keepsindex, andsync/--deploygive PATCHED (pass). 2026 vex /verify/requirements→ pip pass. Vendored on 2018 / 2026: sync / --deploy / check / byte-exact rollback pass. Hosted → vendored is refused fail-closed (redirect_revert_failed), and vendored → hosted restoresindex(pass). Hosted rollback refusal: documented.Hosted with a path-prefixed
--patch-server-url, a rotated grant token, or an sdist hosted artifact (2026.8.0,045d7ec, #572): rotate, sync / --deploy, verify, vex and byte-exact rollback all pass.Hosted +
requirements.txtwith-r req/base.txtpinning the package (Pipenv 2018 / 2023 / 2026 locks,d63ae5fand8eec03a): fail #567. Hosted lock-onlydefault+develop+ root requirements.txt (2023 / 2026,d63ae5f): pass, except rollback refuses the all-hosted requirements.txt (#410)..env-borne Pipenv settings (agent + hosted stale warning):PIPENV_CUSTOM_VENV_NAMEin.envfails #546 on 2022.12.19 / 2023.12.1 / 2024.4.1 / 2025.1.3 / 2026.8.0 (the exported control passes);WORKON_HOMEin.envfails #546 on 2023 / 2026.--global-prefixwith spaces and unicode (site-packages path, 2026.8.0): pass.Agent rerun after a reinstall (2026.8.0,
61cfb9b):--jsonpass; human-modescan --apply/--mode agent/--syncfail, #454 incomplete (commented).PIPENV_PIPFILEspellings with--cwd: pass.Policy (socket.yml) cells, Linux 2026.8.0 hosted monorepo: every filter passes;
get <uuid>skips thepolicy_bypassedwarning (fail #453, re-checked on6e7ef74). socket.yml ×--package/--min-severity/--max-new-patchesintersections: pass (6e7ef74). Concurrent hosted scans: pass. SIGKILL mid hosted / vendored run: pass. Mirror / env-var source rollback refusal: pass (documented).Named category on 2026.8.0 (
61cfb9b):pipenv requirements --categories docs/--dev,verify,sync --categories docsandinstall --deploy --categories "packages docs"all give the patched wheel (pass). Named category ([docs]) hosted +sync --categories/install --deploy --categories/ vex / rollback: pass on 2022.12.19, 2023.12.1 and 2026.8.0; vendored: pass on 2022.12.19 and 2023.12.1 (6e7ef74). Non-registry entries (path,fileURL,git): hosted refuses withredirect_pipenv_refused, vendored withpypi_pipenv_source_already_exists, vex attests nothing: pass on 2026.8.0.-g/ agent on an unwritable prefix or a root-owned.venv, as a non-root user (2026.8.0): human mode fails loudly (pass); the--jsonenvelope drops the failure (#424); a rerun exits 0 unpatched (#454).Hosted
pipenv requirements --hashsibling (2022 / 2026,045d7ec): hash mode kept,pip install --require-hashesPATCHED (pass); rollback refusal there is #410. Vendored + hashed sibling requirements.txt:vendor --revert/ rollback byte-exact on both files (2026, pass).pypi-named[[source]]on a mirror (no pypi.org in_meta.sources),21:36Zrun,045d7ec: hosted lock-only on 2018.11.26 / 2026.8.0 (sync / --deploy PATCHED, vexnot_affected) pass; hosted rollback refused (documented); vendored on 2018 / 2026 (sync / --deploy / check / vex / byte-exact rollback) pass. Hosted path-prefixed server (/cdn/v2), lock-only: Pipenv 11.10.4 (path), 2018.11.26 and 2022.12.19 (--deploy, vex, idempotent re-scan, byte-exact rollback) pass. A transitive entry withmarkersand noindex(hosted, 2026): pass. Vendored, thenpipenv lock(ref dropped) on 2018 / 2022 / 2023 / 2026: vexvendor_unwired(correct), butvendor --checkstays green: fail #725.In-run VEX (
scan --vex),04:00Zrun,045d7ec: hosted with a stale OOT venv on 2018 / 2022 / 2026 omits the patch and exits 1 withno_applicable_patches(also with--vex-no-verify), and attests after the remedy (pass). Vendored in-run VEX over a warm unpatched venv attests withvendored_tree_out_of_sync(documented). Hosted.venv+ WORKON +PIPENV_VENV_IN_PROJECT=0with WORKON patched (2018 / 2022): in-run and standalone vex give a falsenot_affected(fail #645; PR #654 fixes it).--dry-runhosted / vendored / agent scan and hosted / vendored get write nothing (pass); hosted JSON drops the vex dry_run marker (fail #744). Vendoredremovegives a byte-exact lock (pass).vendor --checkwith the file ref pointing at another or missing uuid stays green (fail #725).Superseding patch (uuid A → B),
~10Zrun,045d7ec: hosted re-pin + stale warning + remedy + vex on 2026.8.0 pass. Vendored re-vendor fails on 2018.11.26 / 2022.12.19 / 2023.12.1 / 2026.8.0, both lock-only and venv-present (#769);--dry-runpreviewswould_revendor. Thevendor --revert+ re-scan workaround passes.CRLF Pipfile + Pipfile.lock,
21:42Zrun,045d7ec: vendored on 2018 / 2026 (CRLF kept,--deploypatched, vex, byte-exact rollback) pass; hosted on 2018 / 2026 (CRLF kept,--deploy, vex) pass.vendor/apply --dry-run --vexwrite no VEX (pass).pipenv install <other>on 2022 / 2023 relocks the reference away and vex refuses (documented, pass). PR #795 cells: see #790.Stale-install remedy followed verbatim,
15:30Zrun,045d7ec:defaultpatched on 2018 / 2022 / 2023 / 2026 (pass).develop(2018–2026) and[docs](2022–2026), hosted and vendored, both printed remedies leave the package uninstalled (fail #790). Hosted supersede A → B on 2018 (default / develop), 2022 (develop / docs), 2023 (default / docs) and 2026 (docs / develop): re-pin, stale warning and conservative vex all pass; rollback / remove after the supersede are byte-exact (pass); with a sibling requirements.txt both files re-pin (pass), and the rollback refusal is #410.03:38Zrun (2026-10-05),045d7ec: mixed sources (a mirror namedpypifirst, pypi.org asupstream) hosted rollback on 2026: an index-less entry is restored byte-exact (pass);index = "pypi"(the mirror) is refused (documented). SymlinkedPipfile/Pipfile.lock: hostedredirect_symlinked_file_unsupportedand vendoredpypi_pipenv_symlink_unsupported, nothing written (pass)..venvsymlinked to an out-of-tree directory (IN_PROJECT=1 / unset): pass. Venv drift (venv 1.15.0, lock 1.16.0), hosted + vendored: pass. Pipenv project with a pdm-backendpyproject.toml: pass.liston hosted: pass.pipenv --site-packages/PIPENV_SITE_PACKAGES=1with six in the base interpreter: hosted (2018 / 2022 / 2023 / 2026) and vendored (2018 / 2026) keep the base's unpatched six even in a fresh venv, give no warning, and vex attestsnot_affected: fail, #409 (commented).09:32Zrun (2026-10-05),045d7ec: Pipfile[pipenv] venv_in_project = truewith no./.venv, agent mode: fail #842 on 2018.11.26 / 2023.12.1 / 2025.1.3 / 2026.1.0 (WORKON venv unpatched, system Python patched, vexnot_affected); pass on 2026.8.0 (./.venv) and on the key-less control; the PR #654 headd8356aestill fails. RelativeWORKON_HOMEwith--cwdfrom another directory: misses the venv (see Known non-bugs).19:15Zrun (2026-10-05),0d302dc: #790 remedy (pipenv sync --dev) followed verbatim on 2018.11.26 / 2020.11.15 / 2026.8.0 gives the patched six, vexnot_affected(pass, #790 fixed). #842 hosted shape (Pipfilevenv_in_project = true, warm WORKON venv): no stale-install warning on 2018.11.26 / 2023.12.1 / 2026.1.0 (fail #842); 2026.8.0 and the key-less control warn (pass); hosted vex fails closed (file_not_found/not_applied). Precedence on 2026.8.0, agent mode: keytrue+PIPENV_VENV_IN_PROJECT=0→ WORKON; keyfalse+.venv+ env1→.venv; key"false"(a string) →.venv: all pass.21:44Zrun (2026-10-05),9c43dfc, with an apply-based oracle (offlineapplyfrom a local manifest, checking whichsix.pycopies are patched): #645 shape (.venv+ WORKON +PIPENV_VENV_IN_PROJECT=0/NO_VENV_IN_PROJECT=1) on 2018.11.26 / 2023.10.24 / 2023.12.1 / 2026.8.0 patches both venvs, and agent vex with either copy stale givesnot_applied(pass)..envshapes (plain, CRLF, export, quoted,${VAR}, override, custom name, DOTENV_LOCATION, IN_PROJECT=1, relative WORKON_HOME incl.--cwdfrom the parent, BOM, DONT_LOAD_ENV) on 2023.12.1 / 2026.8.0, plus 2018.11.26: pass, and agent vex is honest. Non-booleanPIPENV_VENV_IN_PROJECT× Pipfile key on 2026.8.0: pass.vendor --checkafter a realpipenv lock(2018 / 2026) and uuid drift: pass (#725 fixed). #842 agent on 2023.12.1: still fails.03:37Zrun (2026-10-06),9c43dfc: Pipenv[pipenv] use_pylock = true. WithPipfile.lock+pylock.tomlboth present, hosted on 2026.8.0 passes. pylock-only, hosted / vendored:pipenv syncinstalls upstream on 2026.4.0 / 2026.6.0 / 2026.7.1 / 2026.8.0 (fail #912; vendored vex gives a falsenot_affected); 2026.0.0–2026.2.2 fail loudly (Pipfile.lock not found). Hosted stale warning with.envWORKON_HOME (2026.8.0), stale warning + remedy + vex on 2024.4.1,pipenv upgrade <other>keeping the reference, and Pipfile.lock mode preservation: pass.09:49Zrun (2026-10-06),9c43dfc: hosted with a platform-specific patched wheel (cp311 manylinux MarkupSafe) on 2018.11.26 / 2023.12.1 / 2026.8.0: entry narrowed to one wheel, no warning,syncpy3.12 andpip download --platform macosx / win_amd64fail (fail #932); py3.11 PATCHED..envVIRTUAL_ENV(absolute / relative),.envPIPENV_IGNORE_VIRTUALENVS=1/PIPENV_ACTIVE=1with an exported VIRTUAL_ENV, agent apply on 2026.8.0 (Pipenv behaviour also checked on 2023.12.1): pass. #838-style new-directory patch over two venvs + rollback: pass.15:37Zrun (2026-10-06),9c43dfc, Pipenv 2026.8.0: fresh checkout (no Pipenv venv) with a patchable package only in the system Python. Vendored gives exit 1pypi_pipenv_lock_package_missingand a dry-run that promises it; hosted warnsredirect_pipenv_skipped(fail #947); the control with a venv passes. #645 hosted shape (.venv+ WORKON + IN_PROJECT=0): the stale warning names both venvs, and vex givesnot_applieduntil both are patched (pass). Hosted lock +pipenv clean/update --outdated/graph/ plaininstall: pass. Vendored in asp ace ü (x)project path (sync / --deploy / vex / byte-exact rollback): pass..envPIPENV_PYTHON=3.12(suffixed venv) agent discovery: pass.21:46Zrun (2026-10-06),9c43dfc: fresh checkout, vendored--max-new-patches 1: the budget goes to a system-Python package and the lock's package is deferred, exit 1 (fail, #947 comment; PR #950a21968efixes it); hosted passes. One package indefault+develop(hosted, 2022 / 2026), a vendored wheel swapped for upstream (vendor --check1, vex omits, repair heals), and a BOM Pipfile.lock (socket-patch keeps the BOM): pass.03:34Zrun (2026-10-07),9c43dfc: vendored +pipenv requirements --hash→pip install -r: fail #981 on 2023.12.1 / 2024.4.1 / 2026.8.0 (vendored wheel exported without a hash, so pip's require-hashes mode refuses everything); pass on 2022.12.19 (absolutefile:///+ hash) and hosted 2026. Without--hash: pass on 2022 / 2023 / 2026. Vendoredpipenv syncfrom a subdirectory and viaPIPENV_PIPFILEfrom elsewhere (2020 / 2022 / 2023 / 2026),pipenv verify, andinstall --system --deploy(2022 / 2026): pass.09:46Zrun (2026-10-07),9c43dfc: #981 bisect:pipenv requirements --hashkeeps the vendored hash through 2023.6.26, 2023.7.1–2023.7.4 exportsix==(Pipenv's bug, loud), and the hash is gone from 2023.7.9 on (--dev/--categoriestoo). Vendored sync and hosted sync + tamper rejection on 2023.6.26 / 2023.7.1 / 2023.7.4 / 2023.7.9: pass. Symlinked project dir (agent--cwd <link>,PIPENV_PIPFILE=<link>/Pipfile) on 2022 / 2026: pass. Hosted stale warning + remedy + vex with.envcustom-name / IN_PROJECT venvs (2023 / 2026): pass.vendorfrom an agent manifest (2022 / 2026),getuuid / purl / CVE in both modes (2026): pass. Agent → hosted / vendored and hosted → agent takeovers (2022 / 2026): pass. Rollback / remove /vendor --revertleave the patched wheel installed throughsync/--deployon 2022 / 2023 / 2026: fail, #477 (commented).15:55Zrun (2026-10-07),6fe81ad: hosted platform-wheel refusal (#984) on 2023.12.1 / 2026.8.0 with sync on py3.11 + py3.12:py2.py3-none-anypass, manylinux withheld pass,cp311-none-anypinned with no warning and py3.12 sync fails (fail #1048). #504 / #947: a Pipenv project with system-only packages scans only the lock in agent / hosted / vendored (pass). #744 still fails.macOS/Windows rows are from the 2026-09-30 probes on
f6b7fb9. No probe ran on v5 because branch deletion through the git proxy still fails (re-checked 2026-10-03 03:30Z);bughunt/pipenv/20260930-venv-discoveryandbughunt/pipenv/20260930-virtualenvstill need a maintainer to delete them.Backlog
Hosted Pipenv scan still pins an interpreter-bound
cp311-none-anypatched wheel into Pipfile.lock with no warning, sopipenv syncfails on every other Python version (gap in the #932 fix) #1048: vendored variant (vendor_platform_lockeduses the same rule; needs a full vendoring mock), then re-verify once fixed. Re-verify Vendored Pipenv never picks up a superseding patch: re-vendor to a new uuid fails with pypi_pipenv_source_already_exists (lock-only) or a false package_not_installed (venv present), exit 1 #769 (closed by Fix vendored Pipenv re-vendor to a newer patch (#769) #825) with a vendoring mock.Vendored Pipenv lock breaks
pipenv requirements --hash|pip install -ron Pipenv 2023+: the vendored wheel is exported without a hash, so pip's hash-checking mode refuses the whole install #981: re-verify once fixed. (Bisect: first bad 2023.7.9;--dev/--categoriesexports also have no hash. Done 2026-10-07 09:46Z.) Re-verify After a hosted or vendored PDM rollback, pdm sync / pdm install keep the patched build installed, though rollback says the next install restores it #477 for Pipenv once fixed (the rollback / remove /vendor --revertremedy should namepipenv run pip uninstall -y <pkg> && pipenv syncwith the lock's category args).(Vendored scan of a fresh Pipenv checkout (no venv yet) fails with exit 1 on packages that exist only in the system Python, because the crawler falls back to the global site-packages #947 / Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504 re-verified fixed on
6fe81ad, 2026-10-07 15:55Z; the budget variant is still to check.) (get --mode vendored/vendorfrom a manifest: done 2026-10-07 09:46Z, pass.) (The 2020 / 2021 hosted ↔ vendored takeovers: done 2026-10-07, pass.)Hosted Pipenv scan silently rewrites a Pipfile.lock entry to a single platform-specific patched wheel (cp311 manylinux), so
pipenv syncfails on every other Python version, macOS and Windows #932 fixed by Fix hosted PyPI pinning platform-only wheels (#701, #932) #984 (manylinux withheld, re-verified 2026-10-07 15:55Z); the interpreter-tag gap is Hosted Pipenv scan still pins an interpreter-boundcp311-none-anypatched wheel into Pipfile.lock with no warning, sopipenv syncfails on every other Python version (gap in the #932 fix) #1048. Variants:develop/ named categories, Pipenv 11pathform, hosted rollback of the narrowed entry (refused by the session policy on 2026-10-06); re-verify once fixed.Hosted and vendored scans rewrite a Pipenv project's pylock.toml to an
archiveentry that Pipenv 2026.4+ ignores, sopipenv syncsilently installs the unpatched release from PyPI #912 variants:pylock.<name>.toml(pylock_name), dev packages in pylock, rollback / remove / repair on a pylock-only Pipenv project; re-verify once fixed.(Pipenv stale-install remedy always says
pipenv sync, so for a [dev-packages] or named-category entry following it uninstalls the package instead of reinstalling it patched #790 re-verified fixed on main0d302dc, 2026-10-05 19:15Z.) Still untested: Windows cmd / PowerShell quoting of--categories "…".Re-verify Vendored Pipenv never picks up a superseding patch: re-vendor to a new uuid fails with pypi_pipenv_source_already_exists (lock-only) or a false package_not_installed (venv present), exit 1 #769 once fixed (vendored re-vendor A → B: rewire in place, old uuid dir removed, revert byte-exact, no false
package_not_installedwith a venv). (Hosted supersede on 2018 / 2022 / 2023, develop / named categories and with a sibling requirements.txt: done 2026-10-04 15:30Z, pass.)(Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645 re-verified fixed for agent mode and agent vex on 2026-10-05 21:44Z, and for the hosted stale warning and hosted vex on 2026-10-06 15:37Z.)
Vendored mode in a Pipenv project wires only Pipfile.lock and silently leaves a sibling requirements.txt unpatched, and the hosted → vendored takeover reverts that file's hosted pin to plain PyPI #612 variants still open:
-rincludes in vendored mode. Re-verify once fixed. (Revert / rollback on the half-wired project pass.)Pipenv venv discovery ignores the project's .env, so a PIPENV_CUSTOM_VENV_NAME or WORKON_HOME set there leaves the Pipenv venv unpatched, patches the system Python instead, and VEX attests not_affected #546 re-verified fixed for agent mode (2026-10-05 21:44Z, 12
.envshapes);VIRTUAL_ENV/PIPENV_ACTIVE/ IGNORE inside.envdone 2026-10-06, pass. (The hosted stale warning with.envcustom-name / IN_PROJECT venvs: done 2026-10-07 09:46Z, pass.)Re-verify Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504 and the scan --sync / --mode agent never re-applies an already-recorded patch, so after a fresh Hatch env (or any reinstall) it exits 0 with the package unpatched #454 human-mode gap once they're fixed.
Hosted scan in a Pipenv project whose requirements.txt pins the package through an
-rinclude rewires only Pipfile.lock, then reports success while vex and rollback refuse the contested lock it just created #567 variants: vendored mode with an-rinclude,remove,-cconstraints; re-verify once fixed.Maintainer request (global
-gmode): still to do: macOS / Windows,-gon 2018 / 11, and--global-prefixas a venv root (scans 0; undocumented). Checklist in the 20261001T040000Z entry.vendor --checksays "committed artifact and wiring verified" (exit 0) afterpipenv lockdrops the vendored reference, so a freshpipenv install --deployinstalls the unpatched wheel while vex says vendor_unwired #725 re-verified fixed (2026-10-05 21:44Z). Re-verifyscan --mode hosted --dry-run --vex <path> --jsondrops the documentedvex: {skipped: true, reason: "dry_run"}marker (agent and vendored scans emit it) #744 once fixed. (install <other>on 2022 / 2023 and the vendor / apply dry-run VEX: done 2026-10-04 21:42Z, pass.) (Mirror-namedpypisource and hosted path-prefix on 11 / 2018 / 2022 done 2026-10-03 21:36Z, pass.)6b. Re-verify In a
--system-site-packagesvenv, pip keeps the base interpreter's unpatched copy after a hosted rewrite, no stale-install warning fires, andvexattests it as patched #409 for Pipenv once fixed:--site-packagesfresh + warm venv, hosted + vendored, 2018–2026 (stale warning or vex refusal expected). (Mixed-sources hosted rollback: done 2026-10-05, pass.)6c. Pipenv 2020 / 2021: include them in the Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645 re-verification. (The Pipenv stale-install remedy always says
pipenv sync, so for a [dev-packages] or named-category entry following it uninstalls the package instead of reinstalling it patched #790[dev-packages]remedy on 2020.11.15: done 2026-10-05 19:15Z, pass.) (RelativeWORKON_HOMEwith--cwd: done 2026-10-05 09:32Z, see Known non-bugs.)6d. Re-verify Agent mode honours the Pipfile's
[pipenv] venv_in_project = truefor every Pipenv, but only 2026.2+ read it, so on Pipenv 2018–2026.1 the WORKON_HOME venv stays unpatched, the system Python is patched instead, and VEX attests not_affected #842 once fixed: agent (2018 / 2023 / 2025 / 2026.1 fail; 2026.2+ use./.venv) and the hosted stale-install warning (2018 / 2023 / 2026.1 missing, commented 2026-10-05). (Pipfile key × env precedence on 2026.8: done, pass.) (The non-booleanPIPENV_VENV_IN_PROJECT× key question: done 2026-10-05 21:44Z, pass; socket-patch scans both venvs.)6e. (Agent-mode rollback / remove of a PyPI patch that added a file in a new directory leaves the empty directory in site-packages, so Python still imports it as a namespace package #838 Pipenv multi-venv rollback: done 2026-10-06 09:49Z, pass.)
A macOS/Windows probe re-verifying Hosted scan never sees the Pipfile, so a live Pipfile.lock conflict is treated as abandoned and a sibling requirements.txt is redirected anyway #333 / Agent-mode scan skips Pipenv's out-of-tree venv when the project has a stray venv/ directory or a .venv with PIPENV_VENV_IN_PROJECT=0, and still exits 0 #334 / Agent-mode scan patches the activated VIRTUAL_ENV even when PIPENV_IGNORE_VIRTUALENVS or PIPENV_ACTIVE tells Pipenv to ignore it, leaving the Pipenv venv unpatched with exit 0 #384 / Agent mode patches only the WORKON_HOME venv when a Pipenv project also has an auto-detected ./.venv, so Pipenv 2018–2026.1 keep running the unpatched .venv and VEX attests not_affected (regression from #388) #529 / Pipenv venv discovery ignores the project's .env, so a PIPENV_CUSTOM_VENV_NAME or WORKON_HOME set there leaves the Pipenv venv unpatched, patches the system Python instead, and VEX attests not_affected #546 / Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645, and hosted / vendored on 2018 / 2022 there (CRLF on Windows). Blocked: branch deletion fails through the git proxy, and as of 2026-10-05 21:44Z it is also refused by the session's permission policy.
Known non-bugs
Hosted mode never downloads the patched wheel; it pins the grant's sha256. So a failing artifact URL can't half-rewrite a lock during the scan (by design; a bad artifact surfaces at
pipenv sync, where the hash fails).Harness note: export
WORKON_HOMEin every shell. Without it the crawler misses the venv and falls back to the system Python (Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504 / Vendored scan of a fresh Pipenv checkout (no venv yet) fails with exit 1 on packages that exist only in the system Python, because the crawler falls back to the global site-packages #947), which looks like a discovery bug but isn't.pipenv install/install --deployon a pylock-only Pipenv 2026 project relocks and drops the reference (documented relock behaviour). Pipenv 2026.0–2026.2.xsyncrefuses a pylock-only project (Pipfile.lock not found), so that's not silent. Only 2026.4+syncis Hosted and vendored scans rewrite a Pipenv project's pylock.toml to anarchiveentry that Pipenv 2026.4+ ignores, sopipenv syncsilently installs the unpatched release from PyPI #912.Hosted scan from a monorepo root ignores
services/*/Pipfile.lock: documented CLI scope (<cwd>/Pipfile.lockonly, use--cwd).Hosted vex with
.venv+ WORKON venv underPIPENV_VENV_IN_PROJECT=0checks both copies, so it givesnot_appliedwhen either is stale. That's correct; only the stale warning is Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645.Vendored over a hosted pin from a path-prefixed patch server, with no
--patch-server-url/SOCKET_PATCH_SERVER_URLnaming that origin:pypi_pipenv_source_already_exists. Since Recognize hosted Pipenv references through one shared grammar (#563) #572 a foreign origin isn't ours, so this fails closed by design.Pipfile.lock with
pipfile-spec< 6 (Pipenv 0–6): hosted is refused (redirect_pipenv_skipped) and vendored is refused (pypi_pipenv_spec_unsupported). Documented.Vendored on Pipenv 7–11 is refused (
pypi_pipenv_installer_unsupported). Documented.A warm venv is never reinstalled by
pipenv install/sync/--deploy; the stale-install warning is the designed remedy. Documented.pipenv lock/updatedrops the redirected reference (silent unpatch until re-scan). Documented.Pipenv 2023+ don't hash-check local wheels, so vendored carries
vendor_integrity_unverified. Documented.The CLI doesn't walk up to a parent Pipfile or follow
PIPENV_PIPFILE. Documented.rollbackdrops manifest entries, so a laterapplyis a no-op. Documented.Pipenv 2026.8.0 crashes on
$VARinsideWORKON_HOME. That's Pipenv's bug.vendor_fetch_failedagainst pypi.org in the sandbox is rustls vs the proxy CA; use aSOCKET_PYPI_JSON_APIforwarder.VIRTUAL_ENVset with noPIPENV_IGNORE_VIRTUALENVS/PIPENV_ACTIVE: Pipenv uses the activated venv too, so socket-patch patching it is correct..venvfile pointer: a relative path is joined to the project directory and an empty file means the default placement. Matches Pipenv 2026.8.0.v5
rollbackon a project with no manifest, ledger or hosted pin exits 1 "Manifest not found". Documented (CLI_CONTRACT, truly-empty project).v5 hosted rollback refuses when the entry's index isn't PyPI, or when offline. Documented (the upstream-restore refusals).
Vendored drops the Pipfile.lock entry's
indexkey. Harmless for a local wheel, and rollback restores it.rollback <path>targets select installed copies, not hosted project directories; use--cwd. Documented, and cross-PM anyway.Mock-API note: a hosted artifact URL must have the
/patch/pypi/<name>/<ver>/<token>/<uuid>/<wheel>shape, andSOCKET_PATCH_SERVER_URLmust name the mock origin, or vex / rollback see no hosted reference.scan -g --mode hosted --jsonprints a plain-text usage error with exit 2 (a clap-level refusal, documented).Mock-API notes: vendoring needs
integrity.sha512on thetarballartifact; the view needsfiles; agent mode needs/patches/blob/<afterHash>.Filed as Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504 (2026-10-01), formerly an open question: with no venv found and a Python project marker present, the crawler deliberately falls back to the global interpreter (
python_crawler.rsget_site_packages_paths). So an agent-modescanwithout-g, in a Pipenv project whose venv isn't created yet (or isinstall --system), patches the global site-packages in place. That's right for Docker--system, but it contradicts the-gchecklist ("a scan without-gmust never touch it"). Filing waits on a maintainer decision.A Pipenv 9.1.0 lock written with
"hashes": [](seen in the sandbox) comes back from hosted rollback with PyPI's full hash list: not byte-exact, but a valid and stricter registry entry. The upstream restore re-derives hashes by design.Hosted rollback refuses a
_meta.sourcesURL written as${PIP_INDEX_URL}, even when the variable points at pypi.org; env vars aren't expanded. Documented and fail-closed, with thegit checkoutremedy.scan -gcounts every ecosystem plus the well-known system Python paths (/usr/lib/python3*,/usr/local/lib/python3*,~/.local). That's by design; Pipenv's WORKON_HOME venvs aren't included.--prunewarns that it has no effect with--mode hosted. Documented.Non-registry Pipfile.lock entries (
path,fileURL,git) are refused in hosted (warning, exit 0) and vendored (pypi_pipenv_source_already_exists, exit 1). By design; the "no Pipfile beside the lock" wording in the hosted detail is Hosted scan never sees the Pipfile, so a live Pipfile.lock conflict is treated as abandoned and a sibling requirements.txt is redirected anyway #333.Mock-API note: the batch mock must filter by the requested purls, and
by-packagemust carryvulnerabilities[*].severity, or--package/--min-severitycells give false failures.A non-UTF-8 Pipfile makes hosted treat the lock as abandoned, but Pipenv itself refuses that Pipfile (
UnicodeDecodeError). Not a real-world shape.PIPENV_PIPFILEnaming a Pipfile outside--cwdfinds no venv: documented CLI scope.Pipenv refuses different versions of one package across
[packages]and a named category (categories are constrained by the default packages), so per-category version splits can't happen.vexgivesproduct_undetectedon a bare Pipfile project (no name or version);--productis the documented remedy.Pipenv 11.x / 2018.x with
virtualenv<20can't create venvs from uv's standalone CPython (missinglibpython): a sandbox tooling artifact, so use virtualenv 20.x. Pipenv 11.x also breaks on(in a project name (an unsanitized shebang): Pipenv's bug.A hosted requirements.txt rewrite touches only the root file; an included pin gets
redirect_requirements_entry_not_found(documented). The Pipenv-project consequence is Hosted scan in a Pipenv project whose requirements.txt pins the package through an-rinclude rewires only Pipfile.lock, then reports success while vex and rollback refuse the contested lock it just created #567.Pipenv 2026.8.0 recreates a
PIPENV_PYTHON-suffixed venv onpipenv runwhenPIPENV_PYTHONnames a PATH symlink ("Python version differs"). That's Pipenv's quirk.Pipenv 2018.11.26 reads
PIPENV_VENV_IN_PROJECTwithbool(os.environ.get(...)), so"0"means in project, and Pipenv ≤ 2023.10.24 always uses an existing.venvdirectory. That's Pipenv's behaviour, and the reason Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645 is a socket-patch bug.v5
scandefaults to hosted mode; agent cells need--mode agent.A hand-reformatted Pipfile.lock (2-space indent or minified) gets the hosted entry in Pipenv's 4-space style, so rollback is semantically exact but not byte-exact. Cosmetic: Pipenv re-serializes on any
pipenv lock.Pipenv 11.x crashes on
PIP_NO_CACHE_DIR=1(its vendored pip9_build_sessionTypeError): a sandbox env artifact, so unset it.repairafter a relock leaves an unwired vendored entry unwired (success, 0 events): documented as artifact-only.get --mode vendoredre-wires it. (Onlyvendor --checkstaying green is a bug,vendor --checksays "committed artifact and wiring verified" (exit 0) afterpipenv lockdrops the vendored reference, so a freshpipenv install --deployinstalls the unpatched wheel while vex says vendor_unwired #725.)A vendored in-run or standalone VEX attests from the committed artifact even when a warm venv still holds the upstream bytes; it only warns
vendored_tree_out_of_sync(CLI_CONTRACT, vendored evidence row). Thepypi_pipenv_stale_installevent beside it gives the Pipenv remedy.Correction: in the Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645 shape (
.venv+ WORKON +PIPENV_VENV_IN_PROJECT=0, Pipenv ≤ 2023.10), hosted vex is NOT conservative. With the WORKON venv patched it attests a falsenot_affected(the 10-03 note was wrong). That's Agent mode skips ./.venv when PIPENV_VENV_IN_PROJECT=0 or PIPENV_NO_VENV_IN_PROJECT=1 is set, but Pipenv 2018 through 2023.10.24 still use that .venv, so it stays unpatched and VEX attests not_affected (regression from #388) #645.After a stale-install remedy has removed a package (Pipenv stale-install remedy always says
pipenv sync, so for a [dev-packages] or named-category entry following it uninstalls the package instead of reinstalling it patched #790 shape),vexattestsnot_affectedfrom the lock wiring. The package is absent, so this isn't a false attestation of unpatched bytes.pipenv install --system --deployover a warm interpreter that already holds the upstream release: the hosted / vendored scan gives no stale-install warning (hosted deliberately skips global interpreters, see thestale_install_warningscomment inscan/hosted/python.rs), and the next--system --deploykeeps the upstream bytes. Hosted vex refuses (not_applied); vendored vex attests withvendored_tree_out_of_sync(documented). A fresh Docker build is unaffected. This is a maintainer question, not filed.pipenv install <other>on Pipenv before 2024 is a full relock and drops the reference (pipenv-compatibility.md:51). vex refuses afterwards (correct).A symlinked
Pipfile.lockis refused in hosted (redirect_symlinked_file_unsupported) and vendored (pypi_pipenv_symlink_unsupported) mode, and nothing is written. Fail-closed by design.Pipenv 2022.x
pipenv requirementsexports a vendoredfileentry as an absolutefile:///<project>/…URL, so the exported file only works at the same path. That's Pipenv's exporter; the hash part for 2023+ is Vendored Pipenv lock breakspipenv requirements --hash|pip install -ron Pipenv 2023+: the vendored wheel is exported without a hash, so pip's hash-checking mode refuses the whole install #981.Harness note: hosted rollback and the hosted → vendored takeover need PyPI JSON; serve it through a local
SOCKET_PYPI_JSON_APIforwarder (rustls rejects the proxy CA).pipenv --site-packagesfalse VEX: not Pipenv-specific; tracked in In a--system-site-packagesvenv, pip keeps the base interpreter's unpatched copy after a hosted rewrite, no stale-install warning fires, andvexattests it as patched #409 (pm:pip), with Pipenv evidence in a comment there. Don't re-file it.Mock-API notes: the blob route must return the content for the requested hash (before or after), or agent rollback fails with a hash mismatch;
get CVE-…needs a/patches/by-cve/route.(Superseded by Fix Pipenv venv discovery settings view (#645, #546) #654, which now joins it to the project and passes with
--cwdfrom the parent; kept for history.) A relativeWORKON_HOME(e.g..venvs) is resolved against socket-patch's process cwd, as Python does, not against--cwd. Soscan --cwd apprun from the parent missesapp/.venvs/…, while running insideapp/passes. Not filed: the env var means whatever the reading process's cwd makes it, and Pipenv run from a subdirectory would differ too. The system-Python write that follows is Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504.Harness note: scan's batch purls include Pipfile.lock entries, so they can't show which venv was found. Use an apply-based oracle (local manifest + blobs, then check which copies are patched). Agent rollback needs the before blob locally, and it deletes
.socket/blobsand the manifest entry.Agent mode with
PIPENV_IGNORE_VIRTUALENVS=1orPIPENV_ACTIVE=1in.envandVIRTUAL_ENVexported: socket-patch patches the activated venv as well as the project's venv, though current Pipenv ignores the activated one. That's the documented union of settings-timing profiles (the 2020 shell caches IGNORE before dotenv). The venv Pipenv uses is always patched, so it's over-coverage, not a miss.A UTF-8 BOM on Pipfile.lock: Pipenv 2026.8.0 can't parse it (it renames the lock to
.bakand the install fails), and Pipenv 2022.12.19 rewrites it with an emptydefault. Pipenv itself breaks on a BOM lock, so there is no real-world socket-patch shape here (socket-patch keeps the BOM and rewrites correctly).repairheals only the vendored artifact; a venv that already installed the tampered bytes needs the stale-install remedy that the nextscanprints. Documented as artifact-only.Pipenv 2023.7.1–2023.7.4
pipenv requirementsexport anyfilelock entry (hosted URL or vendored path) as<name>==, sopip install -rfails loudly (No matching distribution found). That's Pipenv's exporter bug;pipenv syncon those releases installs the patched wheel.Vendored → agent: agent mode skips the vendor-owned package, so a warm upstream venv stays, and vex attests with
vendored_tree_out_of_sync(documented vendored evidence row).Mock harness: restarting
tools/mock.pyrebuilds the patched wheel with new zip timestamps (a different sha256). Don't kill it withpkill -ffrom a shell whose command line names it.Maintainer question (since Fix Pipenv project falling back to system Python (#504, #947) #950): in the Docker
pipenv install --systemshape, an agentscanwithout-gnow patches nothing and says "not installed; run your package manager's install first", with no hint that-gcovers a system install. That's deliberate (Agent-mode scan in a Pipenv project without a Pipenv venv patches the system Python's site-packages in place instead of the project's venv/ (regression from #388) #504's fix); the hint wording could name-g. Not filed.Harness note: Pipenv 2018.11.26 needs py3.8 (on 3.11 its requirementslib crashes on
fileentries).All reactions