Run the project through uv #1

Merged
claude-bot merged 2 commits from build/uv into main 2026-10-28 11:52:49 +00:00
Collaborator

What

The project is now managed with uv instead of pip:

  • uv run ute2e … works in the checkout, uv run --project ~/dev/ute2edriver ute2e … works from an app's folder, and uv tool install puts it on PATH.
  • uv.lock is committed, with uv_build as the backend and Pillow as a required dependency (no more fallback without it).
  • CI installs uv 0.13.6 and runs the tests and a byte-compile with --locked.

Blast radius

Tier: trunk (the repo has no CLAUDE.md, so there is no Blast radius list and everything counts as trunk)
Trunk paths touched: all (no list)
Testing tier: maximum (dependencies, lockfile, CI) (also: standard for the Pillow import in phone.py and the new test; ship on sight for the README and examples)
Gate / rollback: revert this merge; the previous main is f689776.

Proof

  • Unit tests: uv run --locked python -m unittest discover -s tests gives 22 tests OK.
  • Fails without the change: with crop_image broken, tests.test_phone.Crop FAILED (failures=1).
  • CI preview: the CI steps run in data.forgejo.org/oci/node:20-bookworm installed uv 0.13.6, ran 22 tests OK and gave compileall=ok.
  • Targeted check, in the same image: adding a dependency to pyproject without relocking makes uv run --locked exit 1 with "hint: To update the lockfile, run uv lock".
  • CI on head 9632ff1: run 712 is green.
  • E2E on the phone (Volla, UT 24.04): uv run --project ~/dev/ute2edriver ute2e run passed every step of both example flows, modules.toml and search.toml. The shots were cropped to 1080×2292, and no screenshots were left on the phone.

Review

Reviewer: fresh-context code-review at high (review 288): 0 findings, 0 fixed, 0 declined, 0 deferred, 0 left open
Review-Confidence: 100/100. The high review of the final commit covered every changed file; the new test fails without the change, CI is green, and both flows passed on the phone.

Confidence by part

  • pyproject + uv.lock: high. uv lock --check is clean, and --locked is enforced in CI.
  • ci.yml: high. It is green on head, and its steps were run in the runner's image.
  • phone.py (Pillow is now required): high. The new Crop test covers it, and it was run on the phone.
  • README and examples: high. The documented commands were used for the phone runs.

🤖 Generated with Claude Code

## What The project is now managed with uv instead of pip: - `uv run ute2e …` works in the checkout, `uv run --project ~/dev/ute2edriver ute2e …` works from an app's folder, and `uv tool install` puts it on PATH. - uv.lock is committed, with uv_build as the backend and Pillow as a required dependency (no more fallback without it). - CI installs uv 0.13.6 and runs the tests and a byte-compile with `--locked`. ## Blast radius **Tier:** trunk (the repo has no CLAUDE.md, so there is no Blast radius list and everything counts as trunk) **Trunk paths touched:** all (no list) **Testing tier:** maximum (dependencies, lockfile, CI) (also: standard for the Pillow import in phone.py and the new test; ship on sight for the README and examples) **Gate / rollback:** revert this merge; the previous main is f689776. ## Proof - Unit tests: `uv run --locked python -m unittest discover -s tests` gives 22 tests OK. - Fails without the change: with `crop_image` broken, `tests.test_phone.Crop` FAILED (failures=1). - CI preview: the CI steps run in `data.forgejo.org/oci/node:20-bookworm` installed uv 0.13.6, ran 22 tests OK and gave compileall=ok. - Targeted check, in the same image: adding a dependency to pyproject without relocking makes `uv run --locked` exit 1 with "hint: To update the lockfile, run `uv lock`". - CI on head 9632ff1: run 712 is green. - E2E on the phone (Volla, UT 24.04): `uv run --project ~/dev/ute2edriver ute2e run` passed every step of both example flows, `modules.toml` and `search.toml`. The shots were cropped to 1080×2292, and no screenshots were left on the phone. ## Review **Reviewer:** fresh-context `code-review` at high (review 288): 0 findings, 0 fixed, 0 declined, 0 deferred, 0 left open **Review-Confidence:** 100/100. The high review of the final commit covered every changed file; the new test fails without the change, CI is green, and both flows passed on the phone. ## Confidence by part - pyproject + uv.lock: high. `uv lock --check` is clean, and `--locked` is enforced in CI. - ci.yml: high. It is green on head, and its steps were run in the runner's image. - phone.py (Pillow is now required): high. The new Crop test covers it, and it was run on the phone. - README and examples: high. The documented commands were used for the phone runs. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
uv_build backend and a committed uv.lock; Pillow becomes a plain
dependency, so shots are always cropped. README and the examples use
uv run / uv tool install, CI installs uv 0.13.6 and runs --locked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Test that crop_image cuts the status bar off the top
All checks were successful
ci / test (pull_request) Successful in 4s
9632ff1335
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-review left a comment

Review level: high (trunk, maximum tier). Commit 9632ff1335, range origin/main...HEAD.

Files: .forgejo/workflows/ci.yml, README.md, examples/utstudybible/modules.toml, examples/utstudybible/search.toml, pyproject.toml, src/ute2edriver/phone.py, tests/test_phone.py, uv.lock (skimmed); also read agent.py, cli.py, config.py, flow.py.

Findings: none. Checked:

  • uv.lock matches pyproject (uv lock --check resolves; the ute2edriver entry requires pillow>=10), so uv run --locked in CI passes. That covers the maximum-tier dependency check.
  • uv_build finds src/ute2edriver (it has init.py and the name matches); the ute2e = ute2edriver.cli:main entry point is unchanged.
  • agent.py imports only stdlib and evdev, nothing from the package, so the phone side stays standalone. The Pillow import is only in phone.py, on the PC side.
  • CI: node:20-bookworm has curl; uv is pinned to 0.13.6 and $GITHUB_PATH is honoured. The new Crop test covers the now-mandatory Pillow path.
  • README and example commands are consistent with uv run --project.
Review level: high (trunk, maximum tier). Commit 9632ff1335ba443d4475ca57cbfc50800de0c047, range origin/main...HEAD. Files: .forgejo/workflows/ci.yml, README.md, examples/utstudybible/modules.toml, examples/utstudybible/search.toml, pyproject.toml, src/ute2edriver/phone.py, tests/test_phone.py, uv.lock (skimmed); also read agent.py, cli.py, config.py, flow.py. Findings: none. Checked: - uv.lock matches pyproject (`uv lock --check` resolves; the ute2edriver entry requires pillow>=10), so `uv run --locked` in CI passes. That covers the maximum-tier dependency check. - uv_build finds src/ute2edriver (it has __init__.py and the name matches); the `ute2e = ute2edriver.cli:main` entry point is unchanged. - agent.py imports only stdlib and evdev, nothing from the package, so the phone side stays standalone. The Pillow import is only in phone.py, on the PC side. - CI: node:20-bookworm has curl; uv is pinned to 0.13.6 and $GITHUB_PATH is honoured. The new Crop test covers the now-mandatory Pillow path. - README and example commands are consistent with `uv run --project`.
claude-bot changed title from WIP: Run the project through uv to Run the project through uv 2026-10-28 11:52:05 +00:00
claude-review left a comment

Merge gate on head 9632ff1.

  1. Findings: review 288 (high) had 0 findings, so no high or medium is open.
  2. Commits after the last review round: none. Head is still 9632ff1.
  3. CI: run 712 (ci.yml, pull_request) is success, and the head status "ci / test" is success.
  4. Proof: the maximum tier is covered by the CI preview in the runner image plus the targeted check (an unlocked dependency change makes uv run --locked exit 1). The body also has unit tests, a fails-without-change check and phone E2E. No elevated, maximum or AI-behavior gate is left unrun.
    Approved.
Merge gate on head 9632ff1. 1. Findings: review 288 (high) had 0 findings, so no high or medium is open. 2. Commits after the last review round: none. Head is still 9632ff1. 3. CI: run 712 (ci.yml, pull_request) is success, and the head status "ci / test" is success. 4. Proof: the maximum tier is covered by the CI preview in the runner image plus the targeted check (an unlocked dependency change makes `uv run --locked` exit 1). The body also has unit tests, a fails-without-change check and phone E2E. No elevated, maximum or AI-behavior gate is left unrun. Approved.
claude-bot deleted branch build/uv 2026-10-28 11:52:49 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
schaefera/ute2edriver!1
No description provided.