You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 033cb3f
Browse filesBrowse the repository at this point in the historyBrowse files
**Tested:** main `045d7ec` (unchanged; the latest release is still v4.0.0) and PR #822`77686c4`. uv 0.5.31, 0.8.17 and 0.12.23 (0.12.23 is still the newest on PyPI), using the run-15 mock (recovered from the `20261005-dev-group-drift` probe branch).
4
+
5
+
## Re-triage
6
+
-**#806 and #821:** PR #822 fixes both on Linux × 0.5.31 / 0.8.17 / 0.12.23. Main still fails. I commented with the tables: https://github.com/SocketDev/socket-patch/issues/806#issuecomment-5991011511 and https://github.com/SocketDev/socket-patch/issues/821#issuecomment-5991012409. Both stay open until #822 merges.
7
+
-#836 (pm:uv perf issue) isn't a `bughunt` issue from this routine; I left it alone. No human replies on the discussion.
| 0.5.31 marker edit on six (`; python_version >= "3.9"`) | half revert (#806 class) | both files kept, `--locked` ok |
17
+
|**User changes six's own specifier** (`uv add "six>=1.16,<1.17"` or a hand edit + `uv lock`), then `vendor --revert` / `remove` / `rollback`|**fail, new #840**: uv.lock is byte-identical after the edit (path sources carry no specifier), and revert writes back the stale `==1.16.0`. Exit 0, `--locked` fails. 3 OS × 0.5.31 / 0.8.17 / 0.12.23 (probe), deps and dev | fail |
18
+
| Same edit, V→H takeover (`scan --mode hosted`) | pass (3 OS × 3 versions) | – |
- The marker edit on 0.8.17 / 0.12.23 passes: uv records nothing new, so the restored `==1.16.0` still matches.
28
+
- The hosted multi-clause refusal is already under Known non-bugs.
29
+
30
+
## Probe runs
31
+
-https://github.com/SocketDev/socket-patch/actions/runs/37284791550 (`bughunt/uv/20261005-spec-edit-revert`: 3 OS × 0.5.31 / 0.8.17 / 0.12.23; vendored fails in 72/72 cells, hosted takeover passes in 36/36)
32
+
-`git push --delete` failed again ("remote end hung up"), so **17**`bughunt/uv/*` branches need maintainer cleanup.
33
+
34
+
## Next
35
+
1. Re-verify #806 / #821 on main once #822 merges, and re-check #840 against it.
36
+
2.#840 neighbours: script lock (`uv add --script "six>=…"`), extras (`requires-dist` with `extra`), and transitive override / constraint records (`[manifest]` elements keep their specifier?).
37
+
3. Windows probe of hosted write atomicity; hosted with a release that has several sdists.
38
+
4. Re-triage #788 (#789), #742 (#743), #670 (#672), #606 / #473 (#625) when they land.
Copy file name to clipboardExpand all lines: state/uv.md
+7-4Lines changed: 7 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
[agent] Progress ledger for the scheduled uv bug-hunt routine (label pm:uv).
2
2
3
-
Last run: 2026-10-05 (run 18) on main `045d7ec` (new #821: vendored package in a dependency group; after `uv add --dev` / `uv remove --dev`, `vendor --revert` / `remove` / `rollback` / V→H takeover revert pyproject.toml but keep uv.lock's whole-line `requires-dev` fragment, so `uv sync --locked` fails; 3 OS × 0.8.17 / 0.12.23, plus 0.2.37 / 0.4.30 / 0.5.31 on Linux. Script lock with a user override drift-keeps both files (consistent)). Run 17 on main `045d7ec` (new #806: vendored transitive override + a user-authored `override-dependencies`; after a relock, `vendor --revert` / `remove` / `rollback` revert pyproject.toml but drift-keep uv.lock's `[manifest] overrides`, so `uv sync --locked` fails; 3 OS × 0.8.17 / 0.12.23. PR #789 verified to fix #788. Agent mode on a project `.venv` passes on 3 OS × 3 link modes; script-lock CRLF / BOM, `uv pip compile` flavours, git / path / url siblings, name normalization and `--dry-run` all pass). Run 16 (new #788: uv 0.6.15–0.6.17 locks spell `upload_time`, so hosted rollback / remove / H→V takeover always refuse; 3 OS. Version sweep 0.6.17 / 0.7.22 / 0.9.30 / 0.10.12 / 0.11.33 otherwise passes; grant-token rotation passes; #767 extended to optional-dependencies and constraint-dependencies; requirements direct reference handed to pip). Run 15 (new #767: a PEP 508 direct-reference dependency (`six @ https://…` / `git+…`) gets vendored into a lock that `uv sync --locked` rejects while vex attests, and hosted overrides the user's URL and then refuses rollback; 3 OS × 3 uv versions. PR #743 verified to fix the hosted half of #742. `-g` lifecycle passes on macOS / Windows via a probe. A uv lockless-pyproject shape was added to #638). Run 14 (new #742: a superseding patch uuid is never applied on uv. Hosted re-scan refuses its own `[tool.uv.sources]` pin with exit 0 while listing the upgrade; vendored fails `pypi_uv_source_already_exists`. #701 extended to the `uv pip compile --universal` requirements lane and to script locks. 0.12.23 baseline passes on 3 OS via a probe). Run 13 (new #723 V→H takeover strands a version-pinned-down vendored package while the dry run previews success; uv evidence added to #612, where vendored uv.lock + an exported requirements.txt is left silently unpatched; uv 0.12.23 baseline passes). Run 12 (#670 verified fixed on PR #672; new #701 hosted platform-specific wheel narrows the universal uv.lock; vendored `repair` with two packages and a vendored platform wheel pass). Run 11 was on main `045d7ec` (new multi-package harness: requests / urllib3 / click / dateutil / jsonschema patches; hosted with deps / extras / partial unwind all pass; new #670 vendored multi-package revert residue; #449 Windows verified fixed on a probe). Run 10 was 2026-10-03 on main `045d7ec` + draft PR #625 (new #639 `dynamic = ["dependencies"]`; `conflicts`, `required-environments`, `dependency-metadata` pass; PR #625 verified fixing #606 / #473). Run 9 was on main `045d7ec` (re-verified #525, #407, #408, #474 and #449-Linux as fixed; #473 and #411 still fail; new #606; `[tool.uv]` resolution settings, symlink link-mode). Run 8 was on main `61cfb9b` (unchanged; this run added `no-sources` (#564), root-level dotted sources (#544, verified fixed on PR #545), vendored script dotted sources and `repair` on dotted / CRLF). Run 7 added path/git siblings, legacy dev-dependencies, constraint-dependencies, vendored sources spellings and uv 0.12.22). Run 6 was also on `61cfb9b` (the dotted-name, sources-spelling, lock-only and UV_PROJECT_ENVIRONMENT cells). Run 5 was also on main `61cfb9b` (v5; CLI reports 4.0.0, and the released 4.0.0 predates both the v4 uv rewriter and the v5 upstream restore). Earlier cells are from `2463257` / `6e7ef74`. Linux runs use real uv against a local mock patch API (with `integrity.sha512` in SRI form, a deterministic wheel, the `/blob/` route and `--patch-server-url`), plus `SOCKET_PYPI_JSON_API` → a local pypi.org pass-through that must not rewrite file URLs. uv 0.1.x needs `SSL_CERT_FILE`; uv 0.0.5 needs `PUFFIN_INDEX_URL` → a local `/simple/` proxy. macOS and Windows runs use probe branches.
3
+
Last run: 2026-10-05 (run 19) on main `045d7ec` (new #840: after the user changes the vendored package's own specifier (`uv add "six>=1.16,<1.17"`), uv.lock stays byte-identical, because path sources carry no specifier, so `vendor --revert` / `remove` / `rollback` write the stale pre-vendor `==1.16.0` back and `uv sync --locked` fails with exit 0; 3 OS × 0.5.31 / 0.8.17 / 0.12.23, and not fixed by PR #822. PR #822 verified to fix #806 / #821 and their neighbours (two groups, include-group, deps + dev, user constraint-dependencies edit)). Run 18 (new #821: vendored package in a dependency group; after `uv add --dev` / `uv remove --dev`, `vendor --revert` / `remove` / `rollback` / V→H takeover revert pyproject.toml but keep uv.lock's whole-line `requires-dev` fragment, so `uv sync --locked` fails; 3 OS × 0.8.17 / 0.12.23, plus 0.2.37 / 0.4.30 / 0.5.31 on Linux. Script lock with a user override drift-keeps both files (consistent)). Run 17 on main `045d7ec` (new #806: vendored transitive override + a user-authored `override-dependencies`; after a relock, `vendor --revert` / `remove` / `rollback` revert pyproject.toml but drift-keep uv.lock's `[manifest] overrides`, so `uv sync --locked` fails; 3 OS × 0.8.17 / 0.12.23. PR #789 verified to fix #788. Agent mode on a project `.venv` passes on 3 OS × 3 link modes; script-lock CRLF / BOM, `uv pip compile` flavours, git / path / url siblings, name normalization and `--dry-run` all pass). Run 16 (new #788: uv 0.6.15–0.6.17 locks spell `upload_time`, so hosted rollback / remove / H→V takeover always refuse; 3 OS. Version sweep 0.6.17 / 0.7.22 / 0.9.30 / 0.10.12 / 0.11.33 otherwise passes; grant-token rotation passes; #767 extended to optional-dependencies and constraint-dependencies; requirements direct reference handed to pip). Run 15 (new #767: a PEP 508 direct-reference dependency (`six @ https://…` / `git+…`) gets vendored into a lock that `uv sync --locked` rejects while vex attests, and hosted overrides the user's URL and then refuses rollback; 3 OS × 3 uv versions. PR #743 verified to fix the hosted half of #742. `-g` lifecycle passes on macOS / Windows via a probe. A uv lockless-pyproject shape was added to #638). Run 14 (new #742: a superseding patch uuid is never applied on uv. Hosted re-scan refuses its own `[tool.uv.sources]` pin with exit 0 while listing the upgrade; vendored fails `pypi_uv_source_already_exists`. #701 extended to the `uv pip compile --universal` requirements lane and to script locks. 0.12.23 baseline passes on 3 OS via a probe). Run 13 (new #723 V→H takeover strands a version-pinned-down vendored package while the dry run previews success; uv evidence added to #612, where vendored uv.lock + an exported requirements.txt is left silently unpatched; uv 0.12.23 baseline passes). Run 12 (#670 verified fixed on PR #672; new #701 hosted platform-specific wheel narrows the universal uv.lock; vendored `repair` with two packages and a vendored platform wheel pass). Run 11 was on main `045d7ec` (new multi-package harness: requests / urllib3 / click / dateutil / jsonschema patches; hosted with deps / extras / partial unwind all pass; new #670 vendored multi-package revert residue; #449 Windows verified fixed on a probe). Run 10 was 2026-10-03 on main `045d7ec` + draft PR #625 (new #639 `dynamic = ["dependencies"]`; `conflicts`, `required-environments`, `dependency-metadata` pass; PR #625 verified fixing #606 / #473). Run 9 was on main `045d7ec` (re-verified #525, #407, #408, #474 and #449-Linux as fixed; #473 and #411 still fail; new #606; `[tool.uv]` resolution settings, symlink link-mode). Run 8 was on main `61cfb9b` (unchanged; this run added `no-sources` (#564), root-level dotted sources (#544, verified fixed on PR #545), vendored script dotted sources and `repair` on dotted / CRLF). Run 7 added path/git siblings, legacy dev-dependencies, constraint-dependencies, vendored sources spellings and uv 0.12.22). Run 6 was also on `61cfb9b` (the dotted-name, sources-spelling, lock-only and UV_PROJECT_ENVIRONMENT cells). Run 5 was also on main `61cfb9b` (v5; CLI reports 4.0.0, and the released 4.0.0 predates both the v4 uv rewriter and the v5 upstream restore). Earlier cells are from `2463257` / `6e7ef74`. Linux runs use real uv against a local mock patch API (with `integrity.sha512` in SRI form, a deterministic wheel, the `/blob/` route and `--patch-server-url`), plus `SOCKET_PYPI_JSON_API` → a local pypi.org pass-through that must not rewrite file URLs. uv 0.1.x needs `SSL_CERT_FILE`; uv 0.0.5 needs `PUFFIN_INDEX_URL` → a local `/simple/` proxy. macOS and Windows runs use probe branches.
4
4
5
5
## Coverage matrix
6
6
H = hosted, V = vendored, A = agent. "pass/fail" is Linux unless an OS is named. Results are from v5 main (`2463257` / `6e7ef74`) unless marked (v4).
@@ -36,6 +36,8 @@ H = hosted, V = vendored, A = agent. "pass/fail" is Linux unless an OS is named.
36
36
37
37
| 0.2.37 / 0.4.30 / 0.5.31 / 0.8.17 / 0.12.23 (run 18, main `045d7ec`) | pass: user constraint-dependencies + relock; script lock with user override / constraints | pass after `uv add --dev` (hosted; 3 OS × 0.8.17 / 0.12.23) |**fail #821** six in a dev group (PEP 735 / legacy) + `uv add --dev` / `uv remove --dev` → half revert (3 OS); pass for `dependencies` / extras / other groups | – | – | V→H takeover on #821's shape: half revert, exit 0 |
38
38
39
+
| 0.5.31 / 0.8.17 / 0.12.23 (run 19, main `045d7ec` + PR #822) | pass: hosted rollback after a single-clause spec edit re-derives it | multi-clause spec edit refused (documented) |**fail #840** user edits six's own specifier then revert / remove / rollback → stale `==1.16.0` (3 OS × 3 versions; PR #822 too); #806 / #821 + neighbours + constraint edit fixed on PR #822| – | – | V→H takeover after a spec edit pass (3 OS) |
40
+
39
41
### Global (`-g`) mode
40
42
| OS | uv | scan -g default tool dir |`UV_TOOL_DIR` / `XDG_DATA_HOME`|`UV_PYTHON_INSTALL_DIR`| hosted refusal | get / rollback / vex -g |
41
43
| --- | --- | --- | --- | --- | --- | --- |
@@ -46,11 +48,11 @@ H = hosted, V = vendored, A = agent. "pass/fail" is Linux unless an OS is named.
46
48
`SOCKET_GLOBAL=1`, `--global-prefix` / `SOCKET_GLOBAL_PREFIX` with space and unicode paths, and project isolation (`-g` skips `.venv`) all pass on Linux.
47
49
48
50
## Backlog
49
-
0. Re-triage #821 (new), #806, #788 (PR #789 verified in run 17), #767, #742 (hosted half verified on PR #743; vendored slice pending), #670 once PR #672 merges, #606 / #473 once PR #625 merges, and #723 when a fix lands. Also #411, #564, #639 and #701, and the #612 / #638 uv shapes. #407, #408, #474, #525, #524, #544 and #449 (all OS, incl. `UV_PYTHON_INSTALL_DIR`) are verified fixed.
50
-
1.#821 neighbours: two groups pinning six identically, a group plus `include-group`, six in both `dependencies` and `dev`. #806 neighbour: vendored `[manifest] constraints` after the user edits `constraint-dependencies`. (Done in run 18: requires-dev after relock → #821; script lock with user override drift-keeps both files.) Also a Windows probe of hosted write atomicity (uv.lock held open without delete sharing). (Done in run 17: lockless PEP 723 script, rev-5 with git / path / url sources, agent mode on 3 OS.)
51
+
0. Re-triage #840 (new), #821 and #806 (PR #822 verified in run 19), #788 (PR #789 verified in run 17), #767, #742 (hosted half verified on PR #743; vendored slice pending), #670 once PR #672 merges, #606 / #473 once PR #625 merges, and #723 when a fix lands. Also #411, #564, #639 and #701, and the #612 / #638 uv shapes. #407, #408, #474, #525, #524, #544 and #449 (all OS, incl. `UV_PYTHON_INSTALL_DIR`) are verified fixed.
52
+
1.#840 neighbours: script lock `uv add --script "six>=…"`, extras, `[manifest]` override / constraint elements. (Done in run 19: #821 neighbours and the constraint-dependencies edit, all fixed on PR #822.) Older: #821 neighbours: two groups pinning six identically, a group plus `include-group`, six in both `dependencies` and `dev`. #806 neighbour: vendored `[manifest] constraints` after the user edits `constraint-dependencies`. (Done in run 18: requires-dev after relock → #821; script lock with user override drift-keeps both files.) Also a Windows probe of hosted write atomicity (uv.lock held open without delete sharing). (Done in run 17: lockless PEP 723 script, rev-5 with git / path / url sources, agent mode on 3 OS.)
51
53
2. Patch-upgrade follow-ups: (grant-token rotation passes, run 16); vendored re-vendor once PR #743's follow-up lands.
52
54
3. Interrupted runs with fault injection (a slow mock route), since SIGKILL can't hit the write window against the local mock. Hosted with a release that has several sdists. Vendored multi-package on Windows (CRLF) after #672 lands.
53
-
4.**Probe branches can't be deleted from the cloud session** (`git push --delete` hangs up through the proxy). Sixteen`bughunt/uv/*` branches need maintainer cleanup, including `20261005-dev-group-drift`, `20261004-upload-time`, `20261004-agent-venv` and `20261004-override-drift`.
55
+
4.**Probe branches can't be deleted from the cloud session** (`git push --delete` hangs up through the proxy). Seventeen`bughunt/uv/*` branches need maintainer cleanup, including`20261005-spec-edit-revert`,`20261005-dev-group-drift`, `20261004-upload-time`, `20261004-agent-venv` and `20261004-override-drift`.
54
56
5. (Done in run 15) The maintainer request for `-g` rollback / vex and the macOS `-g` re-probe, with the mock instead of a live patch. The unwritable-prefix cell is still open: ubuntu-latest runners exit 1 on apply / get / vex `-g` while the target is patched (likely the root-owned system six); confirm with stderr.
55
57
56
58
## Known non-bugs
@@ -106,3 +108,4 @@ H = hosted, V = vendored, A = agent. "pass/fail" is Linux unless an OS is named.
106
108
-`remove` matches only canonical PyPI purls (`Typing_Extensions`, `typing.extensions` and qualifiers → `not_found`). This is generic, so it was handed over to pip (run 17). An uppercase UUID is covered by #705.
107
109
- A PEP 723 script lock with a user `override-dependencies` that is relocked after vendoring (`uv add --script`, `uv lock --script --upgrade-package`): `vendor --revert` drift-keeps both the script and the `.py.lock`, so `uv lock --script --locked` still passes. That's the documented pair rule (run 18); the non-semantic match itself is #806's.
108
110
- A vendored scan of a project whose six is transitive (python-dateutil) with no constraint wires nothing: uv resolves six 1.17.0, which has no patch (harness artifact, run 18).
111
+
- Vendored revert on uv 0.5.31 after a marker edit on six (`six==1.16.0; python_version >= "3.9"`) half-reverts on main. That's the #806 / #821 pair-gate gap; PR #822 keeps both files. On 0.8.17 / 0.12.23 the same edit reverts cleanly (run 19).
0 commit comments