|
| 1 | +[agent] 2026-10-16: pip / requirements.txt bug-hunt run |
| 2 | + |
| 3 | +**Tested:** main `657fce2`; latest release v5.0.1. Main moved 4 commits since `4cc50f4` (yarn portal copies, a gemspec VEX fix, CI test moves); none touch PyPI code. |
| 4 | + |
| 5 | +**Setup:** real pip 20.3.4 (py3.8), 24.0 (py3.11), 25.0.1 (py3.12) and 26.2.1 (py3.13) with real six 1.16.0 from PyPI. The hosted mock is the repo's own `in_process_vendor_pypi_takeover.rs` `mount_api` (patch API, hosted wheel, PyPI JSON), run as a long-lived throwaway `#[ignore]` test. Contest cells used the #1549 harness `vex_pipenv_pip_common::contested_by_a_non_socket_direct_reference` with the real CLI. All throwaway tests were reverted afterwards. |
| 6 | + |
| 7 | +**Probe branches:** none. `git push origin --delete bughunt/pip/20260930-hash-mode` was denied again, so nine old `bughunt/pip/*` branches remain and no new probe was pushed. Linux only. |
| 8 | + |
| 9 | +## Re-triage |
| 10 | + |
| 11 | +No open pm:pip issue was re-run. Nothing PyPI-related merged since the last run. #1587 has an open fix PR, #1599 (not merged). |
| 12 | + |
| 13 | +## Cells (Linux) |
| 14 | + |
| 15 | +| Cell | Result | |
| 16 | +| --- | --- | |
| 17 | +| `list` over a hand-written hosted requirements.txt: plain, `-r` include, hash continuation, UTF-16, `Six`, marker, CRLF, real UTF-8 BOM | pass | |
| 18 | +| `list` with the hosted pin only in a `-c` file, `requirements-dev.txt` or `sub/requirements.txt` (not installed by `pip install -r requirements.txt`) | pass (not listed) | |
| 19 | +| `list` with a commented-out hosted line | `hosted_wiring_contested`, exit 1 (documented; see Known non-bugs) | |
| 20 | +| hosted marker split (1.16.0 / 1.17.0, two uuids): `list`, scoped `remove`, unscoped `rollback` of a hashed continuation file → PyPI hashes; pip 24.0 / 26.2.1 install it | pass | |
| 21 | +| `scan --mode hosted` on a hashed continuation file, pip 25.0.1 / py3.12, fresh venv with `--require-hashes` | pass (patched wheel installed) | |
| 22 | +| `vex` after the hosted install: fresh venv verifies; warm venv is omitted (`hash_mismatch`) | pass | |
| 23 | +| requirements.txt contest of a Pipfile.lock wiring: `==X`, `X == Y`, `Name==X`, `[x]==X`, marker, `(==X)` | pass (contested) | |
| 24 | +| same: `===X`, `==X.0`, `==vX` | **fail → #1602** (vex `not_affected`, exit 0) | |
| 25 | +| same: `~=X`, `==1.2.*`, `>=X,<=X` | not contested (filed only as a design note in #1602) | |
| 26 | + |
| 27 | +## Issues |
| 28 | + |
| 29 | +- Filed #1602: https://github.com/SocketDev/socket-patch/issues/1602 |
| 30 | + |
| 31 | +## False positives ruled out |
| 32 | + |
| 33 | +- An apparent "BOM-first-line hosted pin is contested" turned out to be dash's `printf` writing a literal `\xef\xbb\xbf`. Real BOM files list, vex and roll back fine. |
| 34 | +- A commented-out hosted url is contested by the documented rule (CLI_CONTRACT.md `hosted_wiring_contested`: a rejected mention). |
| 35 | +- `vex` with no `--product` on a requirements-only project exits `product_undetected`, which is documented. |
| 36 | + |
| 37 | +## Next |
| 38 | + |
| 39 | +1. #1602: re-verify once fixed, and check the reverse direction (a Pipfile.lock `"===X"` / `"==X.0"` beside a requirements.txt wiring). |
| 40 | +2. #1587 re-verify once PR #1599 merges (plus a name-less `-e ./src/six`). |
| 41 | +3. #1567 follow-ups (a mixed `-r` include, the superseding re-vendor, the hosted → vendored takeover). |
| 42 | +4. A uv.lock (not pylock) added after vendoring requirements.txt. |
| 43 | +5. A Windows / macOS probe once branch deletion works. |
| 44 | + |
| 45 | +--- |
| 46 | +_Generated by [Claude Code](https://claude.ai/code)_ |
0 commit comments