Convert poetry to uv - #301
Draft
aedwardstx wants to merge 10 commits into
Draft
Conversation
Document the architectural design for migrating project packaging, dependency management, build backend, and CI/CD workflows to uv. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Replace [tool.poetry] configuration with PEP 621 [project], PEP 735 [dependency-groups], and PEP 517 build-system using uv_build. Remove poetry.lock and add uv.lock.
Replace snok/install-poetry with astral-sh/setup-uv@v5 across all workflows. Update prepare-release to use uv version with alpha/beta/rc bump types. Update deploy-pypi to use uv build and uv publish with UV_PUBLISH_TOKEN. Update renovate.json to manage dependencies under pep621 manager.
Replace references to poetry run with uv run in scripts and test docstrings.
Replace all poetry commands and setup instructions with uv across contributor guides, docs pages, and Claude Code skills.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The Poetry build shipped LICENSE via its own metadata handling, and MANIFEST.in declared `include LICENSE` for setuptools. Neither applies under uv_build, which does not glob license files by default, so the migrated build dropped LICENSE from both artifacts -- a regression against 3.6.2, whose PyPI wheel carries dist-info/LICENSE. Declare `license-files` explicitly so LICENSE lands in the sdist and in the wheel's dist-info, then remove MANIFEST.in now that it is inert setuptools-only configuration. Also drop pytest-runner, which has been unmaintained since 2019 and only existed for the `setup.py test` flow. Self-Review: true Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Three defects surfaced by review of the uv migration: uv defaults to `python-preference = managed` with automatic downloads, so `uv sync` ignores the interpreter that actions/setup-python puts on PATH and resolves its own. Verified locally: with PATH python3 at 3.12.13, uv selected a managed CPython 3.14.4, which silently collapses the 3.10-3.14 matrix into five identical runs. Setting UV_PYTHON to the matrix version restores per-leg fidelity (verified: UV_PYTHON=3.11 selects 3.11.15). `uv run` re-locks and re-syncs by default, so it can rewrite uv.lock even after `uv sync --frozen` -- including in the review job that is explicitly instructed not to modify files. UV_FROZEN makes a stale lockfile fail the job instead. Renovate's pep621 manager reports runtime dependencies with depType `project.dependencies`, not `dependencies`, so the rule holding runtime deps to `update-lockfile` matched nothing after the manager switch and the global `bump` strategy would have raised pydantic's lower bound. Self-Review: true Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CONTRIBUTING.md lost `poetry shell` in the migration without gaining a replacement, which left every subsequent bare `pytest`, `ruff`, `mypy`, and `scripts/build.py` invocation broken for anyone following the page. Prefix them with `uv run`, matching docs/dev/contributing.md and AGENTS.md. Document what the migration changed but did not explain: the lockfile workflow (`uv add` / `uv lock`, commit uv.lock) now that CI installs with `uv sync --frozen`, and the release bump semantics, since `uv version` refuses non-increasing bumps and so behaves differently from Poetry's single `prerelease` choice. Correct entries inside [Unreleased] that this branch invalidated -- the claude-review job no longer installs a poetry environment, and the prepare-release bump choices are now alpha/beta/rc. Released sections keep their poetry references as historical record. Delete the AI planning artifacts under docs/superpowers/; they sit inside docs_dir, so mkdocs would publish them to Read the Docs, and they are absent from the nav. Self-Review: true Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
aedwardstx
marked this pull request as draft
September 7, 2026 19:33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Migrates
hier_configdependency management, packaging, build backend, and CI workflows from Poetry touv.[project]and PEP 735[dependency-groups].uv_build(license-files = ["LICENSE"]specified explicitly to preserve distribution integrity).poetry.lockwithuv.lock.astral-sh/setup-uv@v5, nativeuv build/uv publish,UV_FROZEN: "1", and pinnedUV_PYTHON: ${{ matrix.python-version }}to maintain test matrix fidelity.matchManagers: ["pep621"],matchDepTypes: ["project.dependencies"]).uv runcommands.Self-Review Checklist
uv run ./scripts/build.py lint-and-testpasses locally (lint + 95% test coverage).CHANGELOG.mdhas an entry under## [Unreleased]referencing this issue/PR ((#NNN)).mkdocs build --strictpasses if docs were touched).AI-Assisted Contributions
Self-reviewed via
/self-reviewwith full test, lint, and packaging validation.