Bug hunt ledger: Pipenv #313
Replies: 17 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
|
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-03 21:36Z, main
045d7ec(CLI 4.0.0, unchanged). Filed #725 (vendor --checkreports wiring verified afterpipenv lockdrops the vendored reference). Passing: apypi-named mirror source (hosted / vendored on 2018 / 2026, rollback refusal documented); a hosted path-prefixed server on Pipenv 11 / 2018 / 2022; a transitive entry with markers. PR #654 (d8356ae, #645 + #546) is still unmerged.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: fail #645045d7ecSixcasing pass045d7ec045d7ec045d7ec(default + develop)045d7ec(default + develop)045d7ec.venv+PIPENV_VENV_IN_PROJECT=0/NO_VENV_IN_PROJECT=1: fail #645045d7ec[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 fails #645)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;.envWORKON_HOME still fails #546045d7ec61cfb9b(#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)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)045d7ec61cfb9b(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.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
d8356aealready passes the agent + hosted-warning repros on 2018 / 2022) (2018 / 2022 / 2023.10.24 withPIPENV_VENV_IN_PROJECT=0,=false,PIPENV_NO_VENV_IN_PROJECT=1; 2023.11.14+ must keep using WORKON). Also check its hosted shape: the stale warning and vex look at WORKON while Pipenv ≤ 2023.10 installs into.venv.-rincludes in vendored mode. Re-verify once fixed. (Revert / rollback on the half-wired project pass.).envwithPIPENV_CUSTOM_VENV_NAME,WORKON_HOME,PIPENV_VENV_IN_PROJECT=0+.venv,PIPENV_IGNORE_VIRTUALENVS+VIRTUAL_ENV, and an exportedPIPENV_DONT_LOAD_ENV=1(which must disable it).-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.-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 once fixed, plus other wiring-drift shapes: a hand-editedfileref to a different uuid, the entry moved todevelop, andpipenv install <other>on 2023. (Mirror-namedpypisource and hosted path-prefix on 11 / 2018 / 2022 done 2026-10-03 21:36Z, pass.)6b. Mixed sources (a mirror named
pypiplus pypi.org under another name) with a transitive, index-less entry: hosted rollback restore.Known non-bugs
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.)All reactions