Repository navigation
Fix uv env skipped beside a Poetry plugin (#1916) - #1922
Mikola Lysenko (mikolalysenko) wants to merge 3 commits into
Conversation
Assisted-by: Claude Code:claude-opus-5-5
A lockless uv project whose pyproject.toml carries a Poetry plugin table such as [tool.poetry-dynamic-versioning] must still have its UV_PROJECT_ENVIRONMENT crawled. Fails until the lockless-uv gate reads the parsed [tool.poetry] table (#1916). Assisted-by: Claude Code:claude-opus-5-5
A lockless uv project that uses a Poetry plugin such as poetry-dynamic-versioning was mistaken for a Poetry project, because the check looked for the text "[tool.poetry" anywhere in pyproject.toml (plugin tables and comments included). Its UV_PROJECT_ENVIRONMENT was then never crawled, so scan, apply and VEX missed every package installed there. The check now reads the parsed [tool.poetry] table, the same rule Poetry env discovery already uses. Fixes #1916 Assisted-by: Claude Code:claude-opus-5-5
|
Labeled Ready for review by the burn-down agent.
Slack announcement could not be sent in this run (no Slack send tool available); the next run will retry. Generated by Claude Code |
|
BugBot review Generated by Claude Code |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 9a495bd. Configure here.
Final review brief (
|
LLM Description written by Claude Code:claude-opus-5-5
Fixes #1916
Summary
A lockless uv project (no
uv.lock) whosepyproject.tomlcarries aPoetry plugin table, such as
[tool.poetry-dynamic-versioning](oftenused with non-Poetry backends), was treated as a Poetry project. Its
UV_PROJECT_ENVIRONMENTwas then never crawled, so scan, apply and VEXmissed every package installed there. A comment line
# [tool.poetry]did the same.
Root cause
Three rules decide whether a
pyproject.tomldeclares[tool.poetry].python_crawler::declares_tool_poetryparses the TOML and ignores plugintables, but
claimed_by_non_uv_manager(the gate for the lockless-uvUV_PROJECT_ENVIRONMENTbranch and foruv_owns_project_env) usedtext.contains("[tool.poetry"). The gate now callsdeclares_tool_poetry, and the substring copy is gone. A real[tool.poetry]table, or only a[tool.poetry.dependencies]subtable,is still Poetry's.
utils::toml_edit_ext::has_table, which the issue names as a third probe,is a vendor-side header check for
[tool.uv]with its own tests andcallers. It does not decide Poetry ownership, so it is left alone to keep
this change to one rule.
Test evidence
crawlers::python_crawler::tests::poetry_plugin_table_does_not_claim_a_lockless_uv_project(plugin table, commented header,[tool.poetry_bumpversion]; real[tool.poetry]/ subtable still Poetry's)Commands run locally on 9a495bd:
cargo fmt --all -- --check: cleancargo clippy --workspace --all-features -- -D warnings: cleancargo test -p socket-patch-core --all-features(lib +tests/crawler_python_e2e.rsand the other core suites): 6996 passed, 4 failed. All 4 are permission-denial tests (copy_tree::relax_loop_must_not_traverse_symlinked_root,vlt_heal::an_unremovable_hidden_lock_keeps_every_store_entry,pypi_poetry::wire_write_failure_maps_error_and_leaves_lock_untouched,pypi_requirements::wire_failure_rolls_back_already_written_files). They rely on0o555dirs, which root bypasses, and this container runs as root. None touch the changed code; CI runs non-root.npm/,pypi/,gem/) code changes; this is crawler-internal.https://claude.ai/code/session_011f9aeSt8zoQzfzrLCyqUHv
Generated by Claude Code