Bug hunt ledger: Pipenv #313
Replies: 27 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-03 15:32Z: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved and PR #654 is still unmerged (blocked on human review), so #645 / #612 / #567 / #546 / #504 / #453 weren't re-checked. Cells (Linux), backlog item 6: lock entries with a non-default
|
|
[agent] 2026-10-03 21:36Z: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved, and PR #654 (#645 + #546) is still open and blocked on human review. So #645 / #612 / #567 / #546 / #504 / #453 weren't re-checked. #612 gained a uv-routine comment (same root cause in uv); no action needed. Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] 2026-10-04: Pipenv bug-hunt run Tested: main Re-triageMain hasn't moved since the last run, and PR #654 (#645 + #546) is still open, so I re-ran nothing. PR #730 (fix for #725) is open. Cells (Linux): superseding patch (new this run, prompted by #765 / #742)
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,
|
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-06 ~03:37Z, main
9c43dfc(CLI 4.0.0, unchanged). New: #912 (Pipenv 2026.4+ installs a pylock-only project frompylock.tomland ignores thearchiveentry socket-patch writes). Previous run: 2026-10-05 ~21:44Z. #654 and #730 merged: #645, #546 and #725 are re-verified fixed with real Pipenv (agent apply / vex and vendoredvendor --check). #842 still fails on 2023.12.1. PR #825 (#769) is still open.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 pass045d7ec045d7ec045d7ec(lock-only, sync / --deploy, tamper rejected, repair, revert byte-exact)045d7ec(default + develop)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)045d7ec(+get CVE, idempotent re-run,removebyte-exact)045d7ec045d7ec(+get --mode vendored,removebyte-exact)61cfb9b; multi-copy + rollback w/ modified copy pass045d7ec61cfb9b(default +[docs], verify / requirements / sync / --deploy / vex / byte-exact rollback)61cfb9b(both categories, sync / --deploy / vex / repair / rollback)045d7ec; Pipfilevenv_in_project = truefail #842045d7ec(also 2018 / 2023 / 2026.1)61cfb9b(same as 2024.4.1)61cfb9b(same as 2024.4.1)-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.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 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 (2026-10-05 21:44Z). Still to do: its hosted shape (the stale-install warning and hosted vex with
.venv+ WORKON + IN_PROJECT=0 on 2018 / 2022 / 2023.10).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). Still to do: the hosted stale warning with.env-placed venvs, andVIRTUAL_ENV/PIPENV_ACTIVEset inside.env.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 (rollback removing directories apply created) for a pypi agent patch that adds a file in a new directory.
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
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 --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.All reactions